一、為什么使用MPC控制器?
-
① MPC可以處理多輸入耦合控制多輸出的問題:
-
② MPC可以處理對于控制量有約束的問題
比如,駕駛汽車的時候,汽車速度和轉(zhuǎn)角都有上限
-
③ MPC具有預(yù)測效果
即MPC考慮的不是根據(jù)當(dāng)前參考值進(jìn)行控制,而是根據(jù)預(yù)測時間內(nèi)的參考去預(yù)測當(dāng)前的控制量,比如在小車轉(zhuǎn)彎時,就避免了可能在過彎處急轉(zhuǎn)彎。
MPC需要的算力高一些,因為MPC控制過程中,每個時間步都要求解一個相同形式不同參數(shù)的優(yōu)化問題。
二、什么是MPC控制器?
- 小車的數(shù)學(xué)模型:
item | inputs | outputs |
---|---|---|
Plant Model(被控對象的數(shù)學(xué)模型) | 之后m個控制量 | 之后p個時間步的預(yù)測輸出 |
- 優(yōu)化器:
item | inputs | outputs |
---|---|---|
優(yōu)化器 | (數(shù)學(xué)模型, 之后p個時間步的參考軌跡, 約束條件) | 之后m個控制量 |
? 優(yōu)化器要考慮兩點(diǎn):
? ① 預(yù)測軌跡與參考軌跡偏差最小
? ②控制量不突變
C
o
s
t
F
u
n
c
t
i
o
n
?
J
=
∑
i
=
1
p
w
e
e
k
+
i
2
+
∑
i
=
0
p
?
1
w
Δ
u
Δ
u
k
+
i
2
Cost Function \doteq J = \sum_{i=1}^{p} w_e e_{k+i}^2 + \sum_{i=0}^{p-1} w_{\Delta u} {\Delta u_{k+i}}^2
CostFunction?J=i=1∑p?we?ek+i2?+i=0∑p?1?wΔu?Δuk+i?2
盡管優(yōu)化器輸出的是之后 p 個時間步的控制量,但是在當(dāng)前時間步, M P C 僅將這個最有序列的第一步應(yīng)用到汽車上,忽略其余部分 {\color{Red} 盡管優(yōu)化器輸出的是之后p個時間步的控制量,但是在當(dāng)前時間步,}\\ {\color{Red} MPC僅將這個最有序列的第一步應(yīng)用到汽車上,忽略其余部分} 盡管優(yōu)化器輸出的是之后p個時間步的控制量,但是在當(dāng)前時間步,MPC僅將這個最有序列的第一步應(yīng)用到汽車上,忽略其余部分
三、MPC控制器的參數(shù)如何設(shè)置?
-
參數(shù)既會影響控制器的性能,又會影響計算復(fù)雜度。
-
MPC主要的參數(shù)如下:
- ① 采樣時間
- ② 預(yù)測范圍、控制范圍
- ③ 約束
- ④ 損失函數(shù)的權(quán)重
3.1 采樣時間
采樣時間過大,當(dāng)干擾發(fā)生,控制器無法做出及時的反應(yīng)。
采樣時間過小,會導(dǎo)致過多的計算負(fù)載。
可以測量系統(tǒng)的階躍響應(yīng),根據(jù)上升時間選擇采樣時間
3.2 預(yù)測范圍、控制范圍
我們應(yīng)該選擇一個涵蓋系統(tǒng)重要動態(tài)的預(yù)測范圍
預(yù)測范圍過短,無法及時反映,可能會在彎道處急轉(zhuǎn)彎
預(yù)測范圍過長,之后的不可預(yù)測事件可能會白白浪費(fèi)算力。
我們通常選擇 20-30個樣本覆蓋系統(tǒng)的動態(tài)響應(yīng),如下圖:
通常只有前幾個時間步的控制對于預(yù)測影響較大(因為前幾個要拽向ref軌跡,后面的維持穩(wěn)定), 因此,選擇大的控制范圍只會白白增大計算復(fù)雜度
經(jīng)驗法則: 控制范圍 = 10%~20% × 預(yù)測范圍
3.3 約束條件
可以對 控制量、控制量變化率、狀態(tài)量進(jìn)行約束
約束分為硬約束和軟約束,無法違反的(比如最大車速)叫硬約束
軟約束可以違反,但我們不希望違反,可以把它設(shè)計到損失函數(shù)之中
建議將輸出約束設(shè)置為軟約束,并避免對控制量及其變化率設(shè)置硬約束,否則可能會出現(xiàn)無解的情況
3.4 權(quán)重
損失函數(shù)由多個部分組成,需要設(shè)置權(quán)重
比如最基本的,我們既希望預(yù)測軌跡接近參考軌跡,又希望控制量是平滑的。
四、自適應(yīng)增益調(diào)度和非線性MPC
- 線性系統(tǒng) + 線性約束 + 時不變約束條件 => 可以使用線性時不變MPC控制器 => 凸優(yōu)化問題
-
但是如果系統(tǒng)是非線性的,就要使用自適應(yīng)MPC、時間表MPC
-
自適應(yīng)MPC:具體思路是在非線性模型的各個工作點(diǎn),建立多套線性模型
? 自適應(yīng)MPC的線性模型在不同工作點(diǎn)上結(jié)構(gòu),超參數(shù)相同,只是矩陣參數(shù)不同而已
-
- 時間表MPC: 對于不同工作點(diǎn),需要設(shè)置不同數(shù)量超參數(shù)(控制量數(shù)目、預(yù)測步長…)的模型
如果是非線性的,那么優(yōu)化問題就會變成多極值點(diǎn)的非凸優(yōu)化問題,求解較復(fù)雜
五、Simulink仿真MPC控制器
item | value |
---|---|
輸出量(狀態(tài)量) | (橫向位置Y、偏航角\phi) |
控制量 | (前輪轉(zhuǎn)角delta) |
假定 V x 恒為 15 m / s , 使用線性化汽車模型 假定V_x恒為15m/s , 使用線性化汽車模型\\ 假定Vx?恒為15m/s,使用線性化汽車模型
模型下載地址: https://www.mathworks.com/matlabcentral/fileexchange/68992-designing-an-mpc-controller-with-simulink?s_eid=PSM_15028
(一定要記得路徑,matlab界面的路徑一定得是模型文件路徑。路徑不對的話,plant和reference的mask無法顯示正確,會顯示問號,同時直接運(yùn)行會報錯)
步驟: https://ww2.mathworks.cn/help/releases/R2017b/mpc/examples/autonomous-vehicle-steering-using-model-predictive-control.html
5.1 數(shù)學(xué)分析
下面依次介紹各個模塊:
-
① Plant: 車輛線性模型
右鍵Plant模塊,選擇Block Parameters:
變量 | 含義 |
---|---|
V x V_x Vx? | 小車平行于車身向前的速度 |
m m m | 小車總質(zhì)量 |
I z I_z Iz? | Yaw夾角轉(zhuǎn)動慣量(繞小車中心旋轉(zhuǎn)的轉(zhuǎn)動慣量) |
l f l_f lf? | 小車質(zhì)心到前輪的距離 |
l r l_r lr? | 小車質(zhì)心到前輪的距離 |
C α C_{\alpha} Cα? | 汽車轉(zhuǎn)角剛度((輪胎側(cè)偏角的單位增量所對應(yīng)的橫向力的增量) (N/rad) |
ψ \psi ψ | Yaw角 |
小車是自行車模型 ( b i c y c l e m o d e l w i t h t w o d e g r e e s o f f r e e d o m ) , 且 V x 恒為 15 m / s : {\color{Red} 小車是自行車模型(bicycle \quad model\quad with \quad two\quad degrees\quad of \quad freedom), 且V_x恒為15m/s:} 小車是自行車模型(bicyclemodelwithtwodegreesoffreedom),且Vx?恒為15m/s:
- reference: 小車的自行車模型
-
原理(1): 前輪運(yùn)動 = 前輪相對于車身運(yùn)動 + 車身相對于質(zhì)心運(yùn)動(旋轉(zhuǎn)) + 小車質(zhì)心相對于地面運(yùn)動
-
原理(2): Δ 輪胎受到垂直于車身的力 = C r ( 或者 C l ) Δ 輪胎轉(zhuǎn)角 \Delta 輪胎受到垂直于車身的力 = C_{r}(或者C_{l} ) \Delta 輪胎轉(zhuǎn)角 Δ輪胎受到垂直于車身的力=Cr?(或者Cl?)Δ輪胎轉(zhuǎn)角
(注意: 自行車模型代替小車模型時,四輪變?yōu)閮奢啠虼?span id="n5n3t3z" class="katex--display"> 自行車的 C f 應(yīng)該是小車的 2 C f 自行車的C_f應(yīng)該是 小車的2C_f 自行車的Cf?應(yīng)該是小車的2Cf?)
進(jìn)行動力學(xué)分析:
由于
ψ
較小,簡化為線性模型即
:
Y
˙
=
V
x
ψ
+
V
y
[
公式一
]
由于\psi較小,簡化為線性模型即: \dot{Y} = V_x \psi + V_y \quad [公式一]\\
由于ψ較小,簡化為線性模型即:Y˙=Vx?ψ+Vy?[公式一]
Δ
前輪相對于車身轉(zhuǎn)角
=
(
V
y
+
ψ
˙
l
f
V
x
)
Δ
后輪相對于車身轉(zhuǎn)角
=
(
?
V
y
?
ψ
˙
l
r
V
x
)
?
前輪受到垂直于車身的力
=
2
C
f
(
?
ψ
+
δ
+
Δ
前輪相對于車身轉(zhuǎn)角
)
后輪受到垂直于車身的力
=
2
C
r
(
?
ψ
+
Δ
后輪相對于車身轉(zhuǎn)角
)
?
根據(jù)
[
公式一
]
:
m
y
¨
=
?
m
V
x
ψ
˙
?
m
V
y
˙
m
V
y
˙
=
前輪受到垂直于車身的力
+
后輪受到垂直于車身的力
?
m
y
¨
=
?
m
V
x
ψ
˙
+
2
C
f
[
?
ψ
+
δ
?
V
y
+
ψ
˙
l
f
V
x
]
+
2
C
r
(
?
ψ
?
V
y
?
ψ
˙
l
r
V
x
)
將
[
公式一
]
代入到上式
:
y
¨
=
?
2
C
f
+
2
C
r
m
V
x
y
˙
?
(
V
x
+
2
C
f
l
f
?
2
C
r
l
r
m
V
x
)
ψ
˙
+
2
C
α
δ
m
[
公式二
]
\Delta 前輪相對于車身轉(zhuǎn)角 = (\frac{V_y + \dot{\psi}l_f}{V_x}) \\ \Delta 后輪相對于車身轉(zhuǎn)角 = (- \frac{V_y - \dot{\psi}l_r}{V_x}) \\ \Rightarrow \\ 前輪受到垂直于車身的力 = 2C_{f} (-\psi + \delta + \Delta 前輪相對于車身轉(zhuǎn)角) \\ 后輪受到垂直于車身的力 = 2C_{r} (-\psi + \Delta 后輪相對于車身轉(zhuǎn)角)\\ \Rightarrow \\ 根據(jù)[公式一]: \\ m \ddot{y} = -mV_x \dot{\psi} - m\dot{V_y}\\ m\dot{V_y}=前輪受到垂直于車身的力 + 后輪受到垂直于車身的力 \\ \Rightarrow m\ddot{y} = - m V_x \dot{\psi} + 2C_f[-\psi +\delta - \frac{V_y + \dot{\psi}l_f}{V_x}] +2 C_r (-\psi - \frac{V_y - \dot{\psi}l_r}{V_x}) \\ 將 [公式一]代入到上式: \\ {\color{Red}\ddot{y} = -\frac{2C_f+2C_r}{mV_x}\dot{y} -(V_x+\frac{2C_fl_f-2C_rl_r}{mV_x}) \dot{\psi} + \frac{2C_{\alpha} \delta}{m} \quad [公式二] }
Δ前輪相對于車身轉(zhuǎn)角=(Vx?Vy?+ψ˙?lf??)Δ后輪相對于車身轉(zhuǎn)角=(?Vx?Vy??ψ˙?lr??)?前輪受到垂直于車身的力=2Cf?(?ψ+δ+Δ前輪相對于車身轉(zhuǎn)角)后輪受到垂直于車身的力=2Cr?(?ψ+Δ后輪相對于車身轉(zhuǎn)角)?根據(jù)[公式一]:my¨?=?mVx?ψ˙??mVy?˙?mVy?˙?=前輪受到垂直于車身的力+后輪受到垂直于車身的力?my¨?=?mVx?ψ˙?+2Cf?[?ψ+δ?Vx?Vy?+ψ˙?lf??]+2Cr?(?ψ?Vx?Vy??ψ˙?lr??)將[公式一]代入到上式:y¨?=?mVx?2Cf?+2Cr??y˙??(Vx?+mVx?2Cf?lf??2Cr?lr??)ψ˙?+m2Cα?δ?[公式二]
求得小車模型的狀態(tài)空間表達(dá)式為
:
d
d
t
[
y
˙
ψ
ψ
˙
]
=
[
?
2
C
f
+
2
C
r
m
V
x
0
?
(
V
x
+
2
C
f
l
f
?
2
C
r
l
r
m
V
x
)
0
0
1
?
2
l
f
C
f
?
2
l
r
C
r
I
z
V
x
0
?
2
l
f
2
C
f
+
2
l
r
2
C
r
I
z
V
x
]
[
y
˙
ψ
ψ
˙
]
+
[
2
C
f
m
0
2
l
f
C
f
I
z
]
δ
求得小車模型的狀態(tài)空間表達(dá)式為: \qquad \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad \\ \fracn5n3t3z{dt} \begin{bmatrix} \dot{y} \\ \psi \\ \dot{\psi} \end{bmatrix} =\begin{bmatrix} -\frac{2C_f+2C_r}{mV_x} & 0 & -(V_x+\frac{2C_fl_f-2C_rl_r}{mV_x}) \\ 0 & 0 & 1\\ -\frac{2l_fC_f-2l_rC_r}{I_z V_x} & 0 & - \frac{2l_f^2C_f+2l_r^2C_r}{I_zV_x} \end{bmatrix} \begin{bmatrix} \dot{y} \\ \psi \\ \dot{\psi} \end{bmatrix} + \begin{bmatrix} 2 \frac{C_f}{m}\\ 0 \\ \frac{2l_fC_f}{I_z} \end{bmatrix} \delta
求得小車模型的狀態(tài)空間表達(dá)式為:dtd?
?y˙?ψψ˙??
?=
??mVx?2Cf?+2Cr??0?Iz?Vx?2lf?Cf??2lr?Cr???000??(Vx?+mVx?2Cf?lf??2Cr?lr??)1?Iz?Vx?2lf2?Cf?+2lr2?Cr???
?
?y˙?ψψ˙??
?+
?2mCf??0Iz?2lf?Cf???
?δ
正好就是Parameters中的A,B,C,D矩陣
5.2 實驗過程
導(dǎo)入矩陣和參考軌跡參數(shù),雙擊Params.mat即可:
需要更換參考軌跡的話,參考以下方法生成新的posRef和yawRef
打開APP->Driving Scenario designer->選擇道路和參考軌跡
開始仿真:文章來源:http://www.zghlxwxcb.cn/news/detail-824633.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-824633.html
到了這里,關(guān)于MPC(模型預(yù)測控制)-Simulink仿真的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!