无人船 | 图解基于MPC控制的路径跟踪算法(以全驱动无人艇WAMV为例)
目录
- 1 模型预测控制原理
- 2 离散全驱动无人船动力学推导
- 3 全驱动无人艇MPC控制推导
- 4 跟踪效果分析
1 模型预测控制原理
模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,广泛应用于工程领域。它通过建立动态系统的数学模型,并基于当前状态进行预测,优化未来一段时间内的控制动作,以达到最优的控制效果。模型预测控制通过预测和优化方法,能够在系统动态变化和约束条件下,实现更高效、更灵活的控制,因此在工业应用中具有重要的实际价值。
形式化地,以下图阐述模型预测控制原理。不计较模型形式,以状态空间模型为例
{ x ( k + 1 ) = f ( x ( k ) , u ( k ) ) , x ( 0 ) = x 0 y ( k ) = h ( x ( k ) , u ( k ) ) \begin{cases} \boldsymbol{x}\left( k+1 \right) =\boldsymbol{f}\left( \boldsymbol{x}\left( k \right) ,\boldsymbol{u}\left( k \right) \right) ,\boldsymbol{x}\left( 0 \right) =\boldsymbol{x}_0\\ \boldsymbol{y}\left( k \right) =\boldsymbol{h}\left( \boldsymbol{x}\left( k \right) ,\boldsymbol{u}\left( k \right) \right)\\\end{cases} {x(k+1)=f(x(k),u(k)),x(0)=x0y(k)=h(x(k),u(k))
其中 x ( k ) ∈ R n \boldsymbol{x}\left( k \right) \in \mathbb{R} ^n x(k)∈Rn、 u ( k ) ∈ R l \boldsymbol{u}\left( k \right) \in \mathbb{R} ^l u(k)∈Rl、 y ( k ) ∈ R q \boldsymbol{y}\left( k \right) \in \mathbb{R} ^q y(k)∈Rq分别表示时刻 系统的状态、控制输入和输出向量。基于预测模型可以计算预测方程,根据预测方程可以求解系统起始于 y ( k ) \boldsymbol{y}\left( k \right) y(k)的未来一段时间内的输出序列
{ y p ( k + 1 ∣ k ) , y p ( k + 2 ∣ k ) , ⋯ , y ( k + p ∣ k ) } \left\{ \boldsymbol{y}_p\left( k+1|k \right) , \boldsymbol{y}_p\left( k+2|k \right) , \cdots , \boldsymbol{y}\left( k+p|k \right) \right\} {yp(k+1∣k),yp(k+2∣k),⋯,y(k+p∣k)}
其中 p p p称为预测时域

控制输入序列
U k = d e f { u ( k ∣ k ) , u ( k + 1 ∣ k ) , ⋯ , u ( k + p − 1 ∣ k ) } U_k\xlongequal{\mathrm{def}}\left\{ \boldsymbol{u}\left( k|k \right) , \boldsymbol{u}\left( k+1|k \right) , \cdots , \boldsymbol{u}\left( k+p-1|k \right) \right\} Ukdef{u(k∣k),u(k+1∣k),⋯,u(k+p−1∣k)}
是MPC需要求解的优化问题的独立变量。最常见的,我们希望系统实际输出 跟踪期望的参考输入
{ r ( k + 1 ) , r ( k + 2 ) , ⋯ , r ( k + p ) } \left\{ \boldsymbol{r}\left( k+1 \right) , \boldsymbol{r}\left( k+2 \right) , \cdots , \boldsymbol{r}\left( k+p \right) \right\} {r(k+1),r(k+2),⋯,r(k+p)}
同时满足实际问题的约束条件,例如控制约束和输出约束
{ u min ⩽ u ( k + i ) ⩽ u max , i ⩾ 0 y min ⩽ y ( k + i ) ⩽ y max , i ⩾ 0 \begin{cases} \boldsymbol{u}_{\min}\leqslant \boldsymbol{u}\left( k+i \right) \leqslant \boldsymbol{u}_{\max}, i\geqslant 0\\ \boldsymbol{y}_{\min}\leqslant \boldsymbol{y}\left( k+i \right) \leqslant \boldsymbol{y}_{\max}, i\geqslant 0\\\end{cases} {umin⩽u(k+i)⩽umax,i⩾0ymin⩽y(k+i)⩽ymax,i⩾0
根据这些指标设计优化目标函数 J = J ( y ( k ) , U k ) J=J\left( y\left( k \right) , U_k \right) J=J(y(k),Uk),其最优解可记为
U k ∗ = a r g min U k J ( y ( k ) , U k ) U_{k}^{*}=\mathrm{arg}\min _{U_k}J\left( y\left( k \right) ,U_k \right) Uk∗=argUkminJ(y(k),Uk)
将 k k k时刻优化解 U k ∗ U_{k}^{*} Uk∗的第一个分量实际作用于系统,并在 k + 1 k+1 k+1时刻以新得到的测量值 y ( k + 1 ) y(k+1) y(k+1)为初始条件重新预测系统未来输出并求解优化问题。随着当前时间向前推移,预测时域也向前滚动
2 离散全驱动无人船动力学推导
针对WAMV非线性动力学模型,首先将非线性问题线性化,得到系统线性误差状态方程。具体而言,选择状态量 x = [ l x y ψ u v r ] T \boldsymbol{x}=\left[ \begin{matrix}{l} x& y& \psi& u& v& r\\\end{matrix} \right] ^T x=[lxyψuvr]T和控制量 u = [ τ l τ m τ r ] T \boldsymbol{u}=\left[ \begin{matrix} \tau _l& \tau _m& \tau _r\\ \end{matrix} \right] ^T u=[τlτmτr]T,系统状态方程为 x ˙ = f ( x , u ) \boldsymbol{\dot{x}}=\boldsymbol{f}\left( \boldsymbol{x},\boldsymbol{u} \right) x˙=f(x,u),则令 f \boldsymbol{f} f在参考点 x r \boldsymbol{x}_r xr、 u r \boldsymbol{u}_r ur泰勒级数展开,忽略非线性项可得
x ˙ = f ( x r , u r ) + ∂ f ( x , u ) ∂ x ∣ x r , u r ( x − x r ) + ∂ f ( x , u ) ∂ u ∣ x r , u r ( u − u r ) \boldsymbol{\dot{x}}=\boldsymbol{f}\left( \boldsymbol{x}_r, \boldsymbol{u}_r \right) +\frac{\partial \boldsymbol{f}\left( \boldsymbol{x}, \boldsymbol{u} \right)}{\partial \boldsymbol{x}}\mid_{\boldsymbol{x}_r,\boldsymbol{u}_r}^{}\left( \boldsymbol{x}-\boldsymbol{x}_r \right) +\frac{\partial \boldsymbol{f}\left( \boldsymbol{x}, \boldsymbol{u} \right)}{\partial \boldsymbol{u}}\mid_{\boldsymbol{x}_r,\boldsymbol{u}_r}^{}\left( \boldsymbol{u}-\boldsymbol{u}_r \right) x˙=f(xr,ur)+∂x∂f(x,u)∣xr,ur(x−xr)+∂u∂f(x,u)∣xr,ur(u−ur)
其中雅克比矩阵
{ A = ∂ f ( x , u ) ∂ x ∣ x r , u r = [ 0 0 − u r sin ψ r − v r cos ψ r cos ψ r − sin ψ r 0 0 0 u r cos ψ r − v r sin ψ r sin ψ r cos ψ r 0 0 0 0 0 0 1 0 0 0 X u + 2 X ∣ u ∣ u ∣ u r ∣ m r r v r 0 0 0 − r r Y v / m − u r 0 0 0 0 0 N r / I z ] B = ∂ f ( x , u ) ∂ u ∣ x r , u r = [ 0 0 0 0 0 0 0 0 0 1 / m 0 1 / m 0 1 / m 0 − D / I z 0 D / I z ] \begin{cases} \boldsymbol{A}=\frac{\partial \boldsymbol{f}\left( \boldsymbol{x}, \boldsymbol{u} \right)}{\partial \boldsymbol{x}}\mid_{\boldsymbol{x}_r,\boldsymbol{u}_r}^{}=\left[ \begin{matrix} 0& 0& -u_r\sin \psi _r-v_r\cos \psi _r& \cos \psi _r& -\sin \psi _r& 0\\ 0& 0& u_r\cos \psi _r-v_r\sin \psi _r& \sin \psi _r& \cos \psi _r& 0\\ 0& 0& 0& 0& 0& 1\\ 0& 0& 0& \frac{X_u+2X_{\left| u \right|u}\left| u_r \right|}{m}& r_r& v_r\\ 0& 0& 0& -r_r& {{Y_v}/{m}}& -u_r\\ 0& 0& 0& 0& 0& {{N_r}/{I_z}}\\\end{matrix} \right]\\ \boldsymbol{B}=\frac{\partial \boldsymbol{f}\left( \boldsymbol{x}, \boldsymbol{u} \right)}{\partial \boldsymbol{u}}\mid_{\boldsymbol{x}_r,\boldsymbol{u}_r}^{}=\left[ \begin{matrix} 0& 0& 0\\ 0& 0& 0\\ 0& 0& 0\\ {{1}/{m}}& 0& {{1}/{m}}\\ 0& {{1}/{m}}& 0\\ {{-D}/{I_z}}& 0& {{D}/{I_z}}\\\end{matrix} \right]\\\end{cases} ⎩ ⎨ ⎧A=∂x∂f(x,u)∣xr,ur= 000000000000−ursinψr−vrcosψrurcosψr−vrsinψr0000cosψrsinψr0mXu+2X∣u∣u∣ur∣−rr0−sinψrcosψr0rrYv/m0001vr−urNr/Iz B=∂u∂f(x,u)∣xr,ur= 0001/m0−D/Iz00001/m00001/m0D/Iz
选择状态误差量 x ~ = [ l x − x r y − y r ψ − ψ r u − u r v − v r r − r r ] T \boldsymbol{\tilde{x}}=\left[ \begin{matrix}{l} x-x_r& y-y_r& \psi -\psi _r& u-u_r& v-v_r& r-r_r\\\end{matrix} \right] ^T x~=[lx−xry−yrψ−ψru−urv−vrr−rr]T得到线性误差状态方程 x ~ ˙ = A x ~ + B u + C \boldsymbol{\dot{\tilde{x}}}=\boldsymbol{A\tilde{x}}+\boldsymbol{Bu}+\boldsymbol{C} x~˙=Ax~+Bu+C,其中 C = B u r \boldsymbol{C}=\boldsymbol{Bu}_r C=Bur是常数矩阵。为了应用标准LQR过程,暂时忽略常数 C \boldsymbol{C} C,采用采样步长为 T T T的前向欧拉法离散化上述状态方程可得
x ~ ( k + 1 ) = ( T A + I ) x ~ ( k ) + T B u ( k ) \boldsymbol{\tilde{x}}\left( k+1 \right) =\left( T\boldsymbol{A}+\boldsymbol{I} \right) \boldsymbol{\tilde{x}}\left( k \right) +T\boldsymbol{Bu}\left( k \right) x~(k+1)=(TA+I)x~(k)+TBu(k)
3 全驱动无人艇MPC控制推导
基于模型进行系统未来动态的预测
{ x ~ ( k + m ) = A ~ m x ~ ( k ) + ∑ i = 0 m − 1 A ~ i B ~ Δ u ( k + m − 1 − i ) x ~ ( k + p ) = A ~ p x ~ ( k ) + ∑ i = p − m p − 1 A ~ i B ~ Δ u ( k + p − 1 − i ) \begin{cases} \boldsymbol{\tilde{x}}\left( k+m \right) =\boldsymbol{\tilde{A}}^m\boldsymbol{\tilde{x}}\left( k \right) +\sum_{i=0}^{m-1}{\boldsymbol{\tilde{A}}^i\boldsymbol{\tilde{B}}\varDelta \boldsymbol{u}\left( k+m-1-i \right)}\\ \boldsymbol{\tilde{x}}\left( k+p \right) =\boldsymbol{\tilde{A}}^p\boldsymbol{\tilde{x}}\left( k \right) +\sum_{i=p-m}^{p-1}{\boldsymbol{\tilde{A}}^i\boldsymbol{\tilde{B}}\varDelta \boldsymbol{u}\left( k+p-1-i \right)}\\\end{cases} {x~(k+m)=A~mx~(k)+∑i=0m−1A~iB~Δu(k+m−1−i)x~(k+p)=A~px~(k)+∑i=p−mp−1A~iB~Δu(k+p−1−i)
同理,可迭代计算系统输出
{ y ~ ( k + m ) = C ~ A ~ i x ~ ( k ) + ∑ i = 0 m − 1 C ~ A ~ i B ~ Δ u ( k + m − 1 − i ) y ~ ( k + p ) = C ~ A i x ~ ( k ) + ∑ i = p − m p − 1 C ~ A ~ i B ~ Δ u ( k + p − 1 − i ) \begin{cases} \boldsymbol{\tilde{y}}\left( k+m \right) =\boldsymbol{\tilde{C}\tilde{A}}^i\boldsymbol{\tilde{x}}\left( k \right) +\sum_{i=0}^{m-1}{\boldsymbol{\tilde{C}\tilde{A}}^i\boldsymbol{\tilde{B}}\varDelta \boldsymbol{u}\left( k+m-1-i \right)}\\ \boldsymbol{\tilde{y}}\left( k+p \right) =\boldsymbol{\tilde{C}A}^i\boldsymbol{\tilde{x}}\left( k \right) +\sum_{i=p-m}^{p-1}{\boldsymbol{\tilde{C}\tilde{A}}^i\boldsymbol{\tilde{B}}\varDelta \boldsymbol{u}\left( k+p-1-i \right)}\\\end{cases} {y~(k+m)=C~A~ix~(k)+∑i=0m−1C~A~iB~Δu(k+m−1−i)y~(k+p)=C~Aix~(k)+∑i=p−mp−1C~A~iB~Δu(k+p−1−i)
定义预测输出向量和控制输入向量为
Y p ( k ) = d e f [ y ~ ( k + 1 ) y ~ ( k + 2 ) ⋮ y ~ ( k + p ) ] p × 1 , Δ U m ( k ) = d e f [ Δ u ( k ) Δ u ( k + 1 ) ⋮ Δ u ( k + m − 1 ) ] m × 1 \boldsymbol{Y}_p\left( k \right) \xlongequal{\mathrm{def}}\left[ \begin{array}{c} \boldsymbol{\tilde{y}}\left( k+1 \right)\\ \boldsymbol{\tilde{y}}\left( k+2 \right)\\ \vdots\\ \boldsymbol{\tilde{y}}\left( k+p \right)\\\end{array} \right] _{p\times 1}, \varDelta \boldsymbol{U}_m\left( k \right) \xlongequal{\mathrm{def}}\left[ \begin{array}{c} \varDelta \boldsymbol{u}\left( k \right)\\ \varDelta \boldsymbol{u}\left( k+1 \right)\\ \vdots\\ \varDelta \boldsymbol{u}\left( k+m-1 \right)\\\end{array} \right] _{m\times 1} Yp(k)def y~(k+1)y~(k+2)⋮y~(k+p) p×1,ΔUm(k)def Δu(k)Δu(k+1)⋮Δu(k+m−1) m×1
则系统输出方程可表达为矩阵形式
Y p ( k ) = S x x ~ ( k ) + S u Δ U m ( k ) \boldsymbol{Y}_p\left( k \right) ={S} _x\boldsymbol{\tilde{x}}\left( k \right) +{S} _u\varDelta \boldsymbol{U}_m\left( k \right) Yp(k)=Sxx~(k)+SuΔUm(k)
基于预测方程定义开环优化目标函数
J = ( Y p − Y r ) T Q ~ ( Y p − Y r ) + Δ U m T R ~ Δ U m J=\left( \boldsymbol{Y}_p-\boldsymbol{Y}_r \right) ^T\boldsymbol{\tilde{Q}}\left( \boldsymbol{Y}_p-\boldsymbol{Y}_r \right) +\varDelta \boldsymbol{U}_{m}^{T}\boldsymbol{\tilde{R}}\varDelta \boldsymbol{U}_m J=(Yp−Yr)TQ~(Yp−Yr)+ΔUmTR~ΔUm
对于优化问题 Δ U m = a r g min Δ U m J ( Δ U m ) \varDelta \boldsymbol{U}_m=\mathrm{arg}\min _{\varDelta \boldsymbol{U}_m}J\left( \varDelta \boldsymbol{U}_m \right) ΔUm=argminΔUmJ(ΔUm)有
∂ J ∂ Δ U m = ∂ ∂ Δ U m [ 1 2 Δ U m T ( S u T Q ~ S u + R ~ ) Δ U m + ( S x x ~ − Y r ) T Q ~ S u Δ U m ] \frac{\partial J}{\partial \varDelta \boldsymbol{U}_m}=\frac{\partial}{\partial \varDelta \boldsymbol{U}_m}\left[ \frac{1}{2}\varDelta \boldsymbol{U}_{m}^{T}\left( {S} _{u}^{T}\boldsymbol{\tilde{Q}}{S} _u+\boldsymbol{\tilde{R}} \right) \varDelta \boldsymbol{U}_m+\left( {S} _x\boldsymbol{\tilde{x}}-\boldsymbol{Y}_r \right) ^T\boldsymbol{\tilde{Q}}{S} _u\varDelta \boldsymbol{U}_m \right] ∂ΔUm∂J=∂ΔUm∂[21ΔUmT(SuTQ~Su+R~)ΔUm+(Sxx~−Yr)TQ~SuΔUm]
对应转化为标准的二次规划问题
Δ U m = a r g min Δ U m ( 1 2 Δ U m T H Δ U m + g T Δ U m ) \varDelta \boldsymbol{U}_m=\mathrm{arg}\min _{\varDelta \boldsymbol{U}_m}\left( \frac{1}{2}\varDelta {\boldsymbol{U}_m}^T\boldsymbol{H}\varDelta \boldsymbol{U}_m+\boldsymbol{g}^T\varDelta \boldsymbol{U}_m \right) ΔUm=argΔUmmin(21ΔUmTHΔUm+gTΔUm)
进行求解
4 跟踪效果分析
定性测试结果:

🔥 更多精彩专栏:
- 《ROS从入门到精通》
- 《Pytorch深度学习实战》
- 《机器学习强基计划》
- 《运动规划实战精讲》
- …
