车辆运动控制算法——MPC
MPC是模型預測控制算法,在車輛運動跟蹤軌跡的控制中發揮很大的優勢
基礎的不多說,下面記錄我對LQR/MPC/二次規劃問題的理解
我們從LQR來引出MPC
LQR的能量函數,目的是求函數J最小,即用最小的代價得到最好的控制效果,理論上只要系統是可控的,LQR就能求出較優的解
的解是 u= -K_lqr * x,這是一個線性解,用這個算法僅需要對能量函數求解一次,線下求解的u的表達式,線上不斷重復計算u即可
MPC算法和LQR的公式非常接近,其表達式是離散的,函數是有邊界的(算法中稱之為約束條件),現實生活中,求出的解必須要對其進行限制(那車速舉例,你不可能讓車子跑出500km/h,這就是約束條件)
要知道,系統接下來的狀態量x是根據系統當前控制量u得到的,因此需算出N+1的狀態
約束條件 :
為什么會存在多組狀態?
MPC的算法和LQR算法的計算量根本不是一個數量級的,因為每個時刻t=1,2,3……都需要重新求解一遍J,而MPC是根據當前狀態給出接下來的控制量和狀態量的序列(相比LQR僅算出一次u的表達式,MPC要計算N次,這里N指步長)
u(1),x..., u(2),x...,u(3)……u(N),然后選取第一個u(1)作為當前控制量,等到下一時刻,所有的控制量u和狀態量x的序列又重新計算,再次取新的u(1)作為現在時刻的控制量,或許有人會疑問,這樣不是浪費計算量么? 我們要搞清楚,MPC的原理,他是為了接下來的預測出來的控制量控制出來的假想出的狀態來判斷,來給出當前最優的控制量,和大多數控制算法只關注當前時刻的狀態是不同的。這也是為什么MPC是目前自動駕駛車輛運動控制算法的首選。
二次規劃問題
MPC的離散公式其實就是求關于x(i)和u(i)的函數的積分,假設該函數為f(x(i),u(i)),那么二次優化就是求出函數f的優化形式,由于f的計算涉及到大量矩陣,因此所選用的優化方法主要就是減少運算次數,縮短MPC的計算時間,以達到車輛高速運動時的快速響應。
Matlab為我們提供了一個函數quadprog(),其簡單調用形式為quadprog(H, f, A, b, Aeq, beq, lb, ub, x0, options)
H: 二次規劃中的二次項矩陣
f: 二次規劃中的一次項矩陣
Aeq: 線性不等約束的系數矩陣
beq: 線性不等約束的右端向量
lb/ub: 自變量下/上限(有些理想問題沒有上下限,可不做考慮)
x0: 熱啟動項
(我們認為狀態量不會突然變化,因此k+1時刻的最優解將會在k時刻最優解的附近,這個思路能夠節約大量時間,很抱歉之前寫成了初始狀態,具體怎么設置我們后續更新,初學者可先設為空或0)
options:解二次規劃問題的具體算法(quadprog之是提供了借口,解二次規劃問題需要options指定具體算法)
客官莫急,稍后會講怎么求得以上參數
二次規劃問題基本公式:
約束條件:
前面我們已經知道,二次規劃是關于x1和x2的函數,(x = [x1; x2])套用上面的基本公式就能得到quadprog函數的參數
現在是結合mpc的二次規劃問題,目的也是求出quadprog函數的參數:
這是一個離散系統:
能量函數(cost function):
我們看到了LQR的影子,但是這個P是什么呢?官方的解釋終于來了,LQR的條件是狀態k(此時是離散的)是趨近于無窮的,而MPC的預測步數N是有限的,為了保證系統的最終穩定性,P要盡量等于步長N到無窮時的狀態,讓它更貼近于LQR,但是P不可能完全等于LQR中的無窮狀態,(因此我們在這寫成了盡量等于),為了使MPC更像LQR,在quadprog函數加入上下邊界lb和ub,P與quadprog函數的上下限一起保證了MPC穩定性。
那么P怎么求得?我們后續更新o(^▽^)o
quadprog函數的參數一般有兩種求法——稀疏和稠密法,現在是稀疏法:
新的二次規劃問題:
(編輯/粘貼公式真的煩)
X是x的可行域,U是u的可行域
以上公式被簡化成這樣:
其中
事實上我們在不斷更新Beq中的第一項x(k+0)(即當前的狀態量),通過反饋把從系統中讀取的x(k)送到B處,不斷更新的u在作用于系統,將新得到的x(k+1)再更新到Beq,系統就可以這樣進行下去了
所有的Umin都是相同的,不會因時刻不同而變化,Umax也一樣
quadprog函數的lb/ub僅需要z_min和z_max,寫成這樣完全是因為很多算法需要這樣的形式,在quadprog內部也會將z_min/z_max轉換成這種形式。
MPC流程
調用quadprog函數得到的z就是控制量u和狀態量x的序列,我們取第一個u作為當前控制量,等到下一時刻如法炮制出新的u。
由此可見mpc的計算量有多大
后續更新中將會講到options參數中的優化算法
一個重要猜想:本文的矩陣設計實例依據倒擺系統,因此在Beq矩陣中,除了初始狀態X(0),其余的狀態我們都希望是零,而接下來我們要加以改進應用到車輛軌跡跟蹤上,因此我覺得Beq和Aeq需要調整。這個猜想后續需要驗證,到時驗證結果會更新在此!
總結
以上是生活随笔為你收集整理的车辆运动控制算法——MPC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 余承东:智能汽车就像十年前智能手机 很多
- 下一篇: 这一年,是责任与奋勉齐驱并进