LQR控制算法推导以及简单分析
首先,這篇文章是看了幾個大神的博客后,自己抄錄以及整理的內容,其中有些自己的想法,但是原理部分基本都是學習大神們的,在此先說明一下。
1 全狀態反饋控制系統
在介紹LQR之前,首先,先回顧一下現在控制理論中的基本的控制器 —————— 全狀態反饋控制,上圖
假設有一個線性系統用狀態向量表示:
{x˙=Ax+Buy=Cx+Du(1)\begin{cases} \dot{x} = Ax + Bu & \\ y = Cx + Du & \end{cases} \tag{1} {x˙=Ax+Buy=Cx+Du??(1)
其中,x(t)∈Rnx(t) \in R^nx(t)∈Rn,u(t)∈Rmu(t) \in R^mu(t)∈Rm,初始條件是x(0)x(0)x(0)。
在此,我們需要設計一個狀態反饋控制器
u=?Kx(2)u = -Kx \tag{2} u=?Kx(2)
使上述控制器能達到期望的穩定性能,將式(2)帶入系統狀態方程(1)中,有
x˙=(A?BK)x=Acx(3)\dot{x} = (A - BK)x = A_{c}x \tag{3} x˙=(A?BK)x=Ac?x(3)
設定系統中的各個狀態量都可知,式(1)所示的開環系統,傳遞函數的極點就是系統矩陣A的特征值。現在變換成了式(2)的閉環形式,通過配置反饋矩陣KKK,可以使得閉環系統達到所期望的系統狀態。(注意,這種控制器設計與矩陣C、D沒什么關系)
SO,來了一個新的問題,極點在什么樣的位置會使得系統的性能較好呢?并且,當系統變量很多的時候,就算設計極點已經達到了最優,矩陣K的計算如何計算呢?
因此,LQR提供了如下思路。
2 LQR
LQR的目標就是找到一組控制量u0,u1,...u_0,u_1,...u0?,u1?,...,使得同時有x0,x1,...x_0,x_1,...x0?,x1?,...足夠小(系統達到穩定狀態),u0,u1,...u_0,u_1,...u0?,u1?,...足夠小(控制量盡量小的變化),選取代價函數為
J=12∫0∞xTQx+uTRudt(4)J = {1 \over 2}\int_0^\infty {x^TQx + u^TRu} \space dt \tag{4} J=21?∫0∞?xTQx+uTRu?dt(4)
其中,Q、R就是需要設計的半正定矩陣和正定矩陣。
看上式(4)是不是線代中的二次型(線代真的是一門重要的學科,工程中大量都是線代的運算),而且還是那種只有平方項的二次型,這樣就成了最小二乘法的問題。代價函數JJJ需要達到最小值,那么在ttt趨近于無窮時,狀態向量x(t)x(t)x(t)肯定趨近于0,即是達到了系統穩態;同理,ttt趨近于無窮時,控制向量u(t)u(t)u(t)也會趨近于0,意味著,隨著時間的推移,需要對系統施加的控制量會越來越小,意味著使用最小的控制量使得系統達到了最終控制目標。
下面來聊聊Q、R值的選取,一般來說,選取Q、R矩陣的時候,為了方便觀察各個系統狀態量而選取對角陣,增加Q的一個值,意味著這個值作用的系統狀態量,將以更快的速度衰減到0,這時候,舉個栗子還是很必要的,比如,Q11Q_{11}Q11?選取較大的值,會讓x1x_1x1?很快的衰減到0;另外一方面,加大RRR的值,會使得對應的控制量減小,控制器執行更少的動作,意味著系統的狀態衰減將變慢。所以,Q、RQ、RQ、R的選取,要綜合看具體的實際應用場景來調節,俗話說,魚和熊掌不可兼得,這個矛盾就像做的軌跡跟蹤MPC中的設置不同的權重一樣,期望車輛后軸心cte值越小,那么到了轉彎處必須要很大幅度的剎車,以及打方向盤,速度以及yaw都會大幅度變化,而如果期望執行器動作越小,那么就無法保證cte的準確度一樣。
好了,上面介紹了一些參數的意義問題,下面重點就是公式的推導了,在不同大神那看到了不同的推導方式,下面就把自己比較欣賞的一種寫出來吧,雖說過程也很重要,但是工程嘛,只要結果對,效果好,選個自己看起來舒服的方式就好了,開始推導過程
J=12∫0∞xT(Q+KTRK)xdt(5)J = {1 \over 2}\int_0^\infty x^T(Q + K^TRK)x \space dt \tag{5} J=21?∫0∞?xT(Q+KTRK)x?dt(5)
ddt(xTPx)=?xT(Q+KTRK)x(6){d \over dt}(x^TPx) = - x^T(Q + K^TRK)x \tag{6} dtd?(xTPx)=?xT(Q+KTRK)x(6)
J=?12∫0∞ddtxT(P)x=12xT(0)Px(0)(7)J = -{1 \over 2}\int_0^\infty \fracze8trgl8bvbq{dt}x^T(P)x \space = {1 \over 2}x^T(0)Px(0) \tag{7} J=?21?∫0∞?dtd?xT(P)x?=21?xT(0)Px(0)(7)
式(7)的意思就是,t趨近于無窮時,系統狀態向量x(t)趨近于0,這樣就直接結算出了積分方程。
x˙TPx+xTPx˙+xTQx+xTKTRKx=0\dot{x}^{T}Px + x^{T}P\dot{x}+x^TQx+x^TK^TRKx = 0 x˙TPx+xTPx˙+xTQx+xTKTRKx=0
狀態變量x的微分用式(3)表示,
xTAcTPx+xTPAcx+xTQx+xTKTRKx=0x^{T}A^{T}_cPx+x^{T}PA_{c}x+x^TQx+x^TK^TRKx = 0 xTAcT?Px+xTPAc?x+xTQx+xTKTRKx=0
整理后,有
xT(AcTP+PAc+Q+KTRK)x=0(8)x^{T}(A^{T}_{c}P+PA_{c}+Q+K^{T}RK)x=0 \tag{8} xT(AcT?P+PAc?+Q+KTRK)x=0(8)
這樣,就又回到了二次型的問題,如果式(8)要有解,那么括號里面的部分必須等于0.
AcTP+PAc+Q+KTRK=0(9)A^{T}_{c}P+PA_{c}+Q+K^{T}RK = 0 \tag{9} AcT?P+PAc?+Q+KTRK=0(9)
把Ac=A?BKA_c = A-BKAc?=A?BK代入式(9)
(A?BK)TP+P(A?BK)+Q+KTRK=0(10)(A-BK)^{T}P+P(A-BK)+Q+K^{T}RK = 0 \tag{10} (A?BK)TP+P(A?BK)+Q+KTRK=0(10)
ATP+PA+Q+KTRK?KTBTP?PBK=0(11)A^{T}P+PA+Q+K^{T}RK-K^{T}B^{T}P-PBK=0 \tag{11} ATP+PA+Q+KTRK?KTBTP?PBK=0(11)
ATP+PA+Q+KTR(R?1BTP)?KTBTP?PB(R?1BTP)=0A^{T}P+PA+Q+K^{T}R(R^{-1}B^TP)-K^{T}B^{T}P-PB(R^{-1}B^TP)=0 ATP+PA+Q+KTR(R?1BTP)?KTBTP?PB(R?1BTP)=0
ATP+PA+Q?PBR?1BTP=0(12)A^{T}P+PA+Q-PBR^{-1}B^TP=0 \tag{12} ATP+PA+Q?PBR?1BTP=0(12)
式(12)中,A,B,Q,RA,B,Q,RA,B,Q,R都是已知量,那么通過式(12)可以求解出PPP,式(12)就是著名的Riccati方程。
總結
上面,從理論以及公式推導兩個方面,介紹了LQR,現在從頭看一下LQR的思路:
- 選擇參數矩陣Q,R
- 求解Riccati方程得到矩陣P
- 根據P計算K=R?1BTPK=R^{-1}B^{T}PK=R?1BTP
- 計算控制量u=?Kxu=-Kxu=?Kx
MPC與LQR比較
MPC和LQR兩種控制方式有很多的相似之處,但是也有很多不相同的地方,
- 首先,LQR的研究對象是現代控制理論中的狀態空間方程給出的線性系統,而MPC的研究對象可以是線性系統,也可以是非線性系統。不過現在很多的做法都是將非線性系統線性化,然后進行相關計算,具體要根據自己的工程情況來確定哪種方式比較好,比如之前做MPC的時候,線控車底層速度控制接口就是加速度,那就沒必要根據IMU再套嵌個一層PID。
- 其次,既然是優化問題,那就離不開目標函數的設計,LQR的目標函數在上面已經有描述,MPC的目標函數,多數都是多個優化目標乘以不同權重然后求和的方式。雖然方式不同,不過都是對達到控制目標的代價累計。
- 最后,工作時域上的不同,LQR的計算針對同一工作時域,在一個控制周期內,LQR只計算一次,并將此次計算出的最優解下發給控制器即可;而MPC是滾動優化的,計算未來一段時間內,每個采樣周期都會經過計算,得出一組控制序列,但是只將第一個控制值下發給控制器。
Reference:
總結
以上是生活随笔為你收集整理的LQR控制算法推导以及简单分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有什么软件能一帧一帧的播放视频吗?KMP
- 下一篇: Servlet工作原理