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