【Matlab】建立最优控制LQR控制器模型
前言
之前做了有關(guān)于系統(tǒng)辨識(shí)以及配置極點(diǎn)來(lái)控制系統(tǒng)響應(yīng)的相關(guān)內(nèi)容,那些相當(dāng)于是打開了一個(gè)新世界的大門,在此基礎(chǔ)上,一直想學(xué)習(xí)一下最優(yōu)控制的相關(guān)內(nèi)容,并應(yīng)用在項(xiàng)目上,因此,學(xué)習(xí)了相當(dāng)長(zhǎng)的時(shí)間,然后搭建模型,不過越來(lái)越感到,我學(xué)習(xí)到的也只是控制世界的冰山一角,話不多說(shuō),開始記錄搭建模型的步驟。
傳遞函數(shù)轉(zhuǎn)化到狀態(tài)空間
首先,我可以辨識(shí)出系統(tǒng)的傳遞函數(shù),需要轉(zhuǎn)化成狀態(tài)方程,這里我稍微記錄了一下由傳遞函數(shù)轉(zhuǎn)換到狀態(tài)空間的步驟:
以上是隨便舉了一組數(shù)據(jù)手算的,之后使用Matlab驗(yàn)證,Matlab是有這種轉(zhuǎn)換函數(shù)可以直接調(diào)用的:
%*************************************************************************%%傳遞函數(shù)轉(zhuǎn)化為狀態(tài)方程 %**********************************************************************%num = [4,9,14,23]; den = [2,4,6,10]; sys = tf(num,den); %轉(zhuǎn)化為傳遞函數(shù)G[A,B,C,D]=tf2ss(num,den); %傳遞函數(shù)轉(zhuǎn)化為狀態(tài)空間可以看到,與我實(shí)際計(jì)算出來(lái)的是吻合的。當(dāng)然,如果能夠直接建立微分方程的模型,就不需要此步驟了。
建立觀測(cè)器
接下來(lái),需要建立狀態(tài)觀測(cè)器,因?yàn)閷?shí)際的狀態(tài)變量x,并不容易被測(cè)量,或者說(shuō),有時(shí)候由傳遞函數(shù)轉(zhuǎn)化到狀態(tài)空間之后,x代表的狀態(tài)是對(duì)應(yīng)不到實(shí)際的物理意義的,因此觀測(cè)器的設(shè)計(jì)還是很有必要,這里我參考學(xué)習(xí)了一些全階觀測(cè)器的設(shè)計(jì)過程,步驟如下:
1.建立狀態(tài)方程與估計(jì)方程:
2.求出狀態(tài)與估計(jì)狀態(tài)之差的通式
3.引入狀態(tài)誤差變量,求出其特征值,即可得出狀態(tài)觀測(cè)器L矩陣的元素值
例:
總體步驟:
求解全階觀測(cè)器L矩陣在Matlab也是直接有函數(shù)可以計(jì)算的,上述的手算過程只是為了來(lái)練習(xí)一下,了解觀測(cè)器的原理與步驟。程序如下:
%*************************************************************************%%計(jì)算全階觀測(cè)器矩陣L的參數(shù) %**********************************************************************%%輸入狀態(tài)方程矩陣 A = [0 1;-1 -0.5]; B = [0;1]; C = [1 0]; D = 0;%輸入觀測(cè)器期望極點(diǎn) 即特征值 V = [-1 -1];L = (acker(A',C',V))';L =1.5000-0.7500建立simulink仿真:
我在積分環(huán)節(jié)那里設(shè)置了初始值,就是為了讓實(shí)際狀態(tài)與估計(jì)狀態(tài)初始不一樣,這樣可以看到收斂效果,從上圖中可以看出估計(jì)值最終收斂,與實(shí)際狀態(tài)x重合。
求解控制律U
這里設(shè)控制律U = -K * X + e ,K即為空置率矩陣,X為狀態(tài)矩陣,e為目標(biāo)值與實(shí)際值的誤差(為了加入跟隨性能)
具體求解最優(yōu)控制率U的問題,設(shè)計(jì)泛函分析與極小值原理等等,這個(gè)我只是看了一部分書上的東西,在沒有自己琢磨好之前,還是先留著,以后自己驗(yàn)算完成再發(fā)。
因此我就省事了一下,直接用Matlab求解K矩陣。上面那個(gè)系統(tǒng)的參數(shù)有些簡(jiǎn)單,為了驗(yàn)證效果,我把傳遞函數(shù)取了一些奇怪的數(shù)字:
%*************************************************************************%%傳遞函數(shù)轉(zhuǎn)化為狀態(tài)方程 %**********************************************************************%num = [0 333.1 279.9 358.1]; den = [1 0.5404 0.05445 0]; sys = tf(num,den); %轉(zhuǎn)化為傳遞函數(shù)G[A,B,C,D]=tf2ss(num,den); %傳遞函數(shù)轉(zhuǎn)化為狀態(tài)空間A =-0.5404 -0.0544 01.0000 0 00 1.0000 0B =100C =333.1000 279.9000 358.1000D =0可以看到這個(gè)系統(tǒng)的矩陣略微復(fù)雜了一些,真實(shí)的系統(tǒng)參數(shù)應(yīng)該就是這樣比較難算的,這里還是得感謝Matlab這個(gè)工具,幫我省略了一大波計(jì)算過程,我可以直接得到觀測(cè)器矩陣L的值:
%根據(jù)觀測(cè)器的期望極點(diǎn)計(jì)算觀測(cè)器L矩陣 L = (acker(A',C',V))';L =0.96970.1769-0.9733以及得到控制律矩陣K的值:
%指定QR矩陣,計(jì)算控制率 Q = [100,0,0;0,1,0;0,0,1]; R = 0.2;K = lqr(A,B,Q,R); %輸出LQR控制器的K矩陣>> KK =22.2824 10.2930 2.2361畫出Simulink模型:
這里的控制器U的狀態(tài)輸入是使用估計(jì)狀態(tài) xhat,實(shí)際項(xiàng)目中也會(huì)是使用估計(jì)值。
在simulink設(shè)置中設(shè)置計(jì)算步長(zhǎng):
可以看到觀測(cè)器的收斂效果以及輸出量的跟隨效果。點(diǎn)個(gè)贊嘍!
總結(jié)
以上是生活随笔為你收集整理的【Matlab】建立最优控制LQR控制器模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python一帧一帧读取视频_如何使用o
- 下一篇: 网课脚本