LQR要點


新的“A”變成着了這樣:Ac = A - KB 

 

基於對象:狀態空間形式的系統

能量函數J:也稱之為目標函數

Q:半正定矩陣,對角陣(允許對角元素出現0)

R:正定矩陣,QR其實就是權重

下面這段話可能會加深對LQR的理解:

當x是一維的,J就變成

 

我們的目的是使能量函數J最小,那么Qx^2和Ru^2都要最小,則t趨近無窮時,x要趨近0,要保證Qx^2為一個最小定值那么Q要很大,Q越大x衰減速度也就越快;同理增大R,u就會變小,對系統的控制變弱,x衰減速度將會變慢

如何選取QR?

無一般規律可尋,一般取決設計者的經驗,在這提供幾個選擇的原則:

1 Q、R都是對稱矩陣,Q為正半定矩陣,R為正定矩陣

2 通常選取Q、R為對角矩陣,實際應用,通常將R值固定,通過改變Q的值來調制最優,當控制量只有一個,R就變成一個標量,一般取值1

為了更好的選取Q/R,我進行了一些嘗試,發現如下:

假設我們的狀態量是x1,x2,現在改變系數,觀察對x1的影響

關於Q與R的

1 同時Q=>kQ,R=>kr,對x1無影響;

2 單取Q=>kQ或R=>R/k,產生的影響相同;

3 增大Q,對x1的控制力加強;

關於Q內部的

1 增大x1的系數,對x1的控制力加強;

2 增大x2的系數,x1基本不變;

3 減小x2的系數,對x1控制力減弱,以至到達目標狀態的時間變長;(試驗中對x1的第一步控制較強,但之后控制力明顯減弱,可能是由於我給的初始量不太符合客觀現實)

 

計算反饋矩陣K的步驟

1 選擇QR矩陣

2 求解Riccati方程的P(P是公式推導過程中設的矩陣,目的就是方便求K,在這求出P就能求出K)

3 計算(在matlab中給定A,B,Q,R用lqr函數可直接計算出K)

(實際控制中我們無法調用lqr函數,求解K本質上屬於求解Riccati方程,詳見我的隨筆:Riccati方程迭代法求解)

u(k)=-K*x(k),u(k)控制完將會得到一個新的x(k+1),周而復始可不斷求出u

調節目標:將狀態調節到零,而不是系統誤差為零

下面有一個倒立擺控制器的例子

其狀態變量是[p p' Θ Θ‘],p是小車位移。Θ是倒立擺角度

 

A = [0 1 0 0  

     0 0 -1 0  

     0 0 0 1  

     0 0 9 0];

B = [0;0.1;0;-0.1];  

C = [0 0 1 0];   %觀測角度

D = 0;  

Q = [1 0 0 0  

        0 1 0 0  

        0 0 10 0  

        0 0 0 10   ];  

R = 0.1;  

%由上面這個系統,可以計算出K  

K = lqr(A,B,Q,R);  

Ac = A - B*K;

%對系統進行模擬  

x0 = [0.1;0;0.1;0]; %初始狀態  

t = 0:0.05:20;  

u = zeros(size(t));  

[y,x]=lsim(Ac,B,C,D,u,t,x0);   

plot(t,y); 

 

 

系統的控制效果與系統狀態空間的准確度、QR的選取有極大關系!!!

也可采用u(k+1) = -K_lqr * x(k)和x(k+1) = A * x(k) + B * u的方式嘗試跑自己的例子

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM