MPC车辆轨迹跟踪----理论推导

MPC控制简介

众所周知,控制算法中,PID的应用占据了90%,而另外10%就是这次的主角MPC控制算法。
MPC控制算法全称模型预测控制,它相对比PID有着多输入,多输出以及更加平稳的特点。并且最重要的是,MPC可以针对非线性的系统进行控制
由于其平稳的和非线性问题有着较强处理能力的特点,其在自动驾驶领域异常流行。

MPC全称:模型预测控制

  1. 模型:即简单运动学模型,一般需要转化为线性的,离散的状态空间方程作为基本模型
  2. 预测:根据模型预测未来数个时间段内(离散的)的状态
  3. 控制:根据预测内容进行二次优化与处理,得出合适控制量。

简单流程(个人简单理解,若有误请指出)

返回前一时刻控制量
控制量
返回状态量
数学模型
预测未来状态
二次最优化计算
作用于系统

车辆运动学模型

在这里插入图片描述

公式为

x ′ = v ∗ cos ⁡ ( φ ) . y ′ = v ∗ sin ⁡ ( φ ) . x ′ = v ∗ tan ⁡ ( δ ) l . x'=v*\cos(φ).\\ y'=v*\sin(φ).\\ x'=\cfrac{v*\tan(\delta)}{l}. x=vcos(φ).y=vsin(φ).x=lvtan(δ).

由于MPC的模型需要、状态空间方程线性的离散的表达
因此第一步就是使其成为状态空间方程

完整的表示一个车的状态,我们需要用到他的坐标和角度也就是[x,y,φ]
车辆是一个二自由度模型。控制量分别是:后轮的速度v前轮的转角δ.

于此,可以确定
状 态 量 X = [ x y φ ] 状态量\Large X =\large \begin{bmatrix} x \\ y \\ φ \end{bmatrix} X=xyφ
控 制 量 U = [ v δ ] 控制量\Large U =\large \begin{bmatrix} v \\ δ \end{bmatrix} U=[vδ]
状 态 空 间 方 程 X ˙ = f ( X , U ) 状态空间方程\\ \Large \text{\.{X}}=\large f(\Large X,U) X˙=f(X,U)
后对状态空间方程进行一阶泰勒展开(线性化)
首先设置参考点(通常为规划好的路径中的参考点)
参 考 点 Xr ˙ = f ( X r , U r ) 参考点\Large \text{\.{Xr}}=\large f(\Large Xr,Ur) Xr˙=f(Xr,Ur)
泰 勒 展 开 : X ˙ = f ( X r , U r ) + δ f ( X , U ) δ X ∗ ( X − X r ) + δ f ( X , U ) δ U ∗ ( U − U r ) . 泰勒展开:\\ \Large \text{\.{X}}=\large f(\Large Xr,Ur) \large+ \cfrac{\large \delta f(\Large X,U)}{\large \delta \Large X}*\Large(X-Xr)\large + \cfrac{\large \delta f(\Large X,U)}{\large \delta \Large U}*\Large(U-Ur). X˙=f(Xr,Ur)+δXδf(X,U)(XXr)+δUδf(X,U)(UUr).
由于仍存在无法求得的f(Xr,Ur),因此我们转换策略,改为状态误差
泰 勒 展 开 : X ˜ ˙ = X ˙ − X ˙ r = δ f ( X , U ) δ X ∗ ( X − X r ) + δ f ( X , U ) δ U ∗ ( U − U r ) . 泰勒展开:\\ \Large \text{\.{\text{\~{X}}}}=\Large \text{\.X}-\text{\.Xr}=\large \cfrac{\large \delta f(\Large X,U)}{\large \delta \Large X}*\Large(X-Xr)\large + \cfrac{\large \delta f(\Large X,U)}{\large \delta \Large U}*\Large(U-Ur). X˜˙=X˙X˙r=δXδf(X,U)(XXr)+δUδf(X,U)(UUr).
X ˜ = X − X r U ˜ = U − U r \Large \text{\~{X}} = X - Xr\\ \Large \text{\~{U}} = U - Ur X˜=XXrU˜=UUr
如此便可以得到
δ f ( X , U ) δ X = A , δ f ( X , U ) δ U = B . \large \cfrac{\large \delta f(\Large X,U)}{\large \delta \Large X}=A , \cfrac{\large \delta f(\Large X,U)}{\large \delta \Large U}=B. δXδf(X,U)=AδUδf(X,U)=B.
X ˜ ˙ = A ∗ X ˜ + B ∗ U ˜ \Large \text{\.{\text{\~{X}}}} = A*\Large \text{\~{X}} +B*\Large \text{\~{U}} X˜˙=AX˜+BU˜
即线性化完毕
线性化完毕后,由于计算机程序是离散的,因此我们需要将其离散化
X ˜ ( k + 1 ) − X ˜ ( k ) T = A ∗ X ˜ ( k ) + B ∗ U ˜ ( k ) \cfrac{\large \Large \text{\~{X}} (k+1)-\text{\~{X}}(k)}{\large \Large T} = \Large A*\text{\~{X}} (k)+B*\Large \text{\~{U}}(k) TX˜(k+1)X˜(k)=AX˜(k)+BU˜(k)
为此可以转化为
X ˜ ( k + 1 ) = a ∗ X ˜ ( k ) + b ∗ U ˜ ( k ) \large \Large \text{\~{X}} (k+1)= \Large a*\text{\~{X}} (k)+b*\Large \text{\~{U}}(k) X˜(k+1)=aX˜(k)+bU˜(k)
又因为控制量是没有参考值的,所以在此使用误差是不合适的,因此可以将控制量转变为控制增量
转变过程则是根据已经离散化和线性化好的状态空间方程进行改变。
也就是说我们可以设计一个新的的空间状态方程,将之前整理好的状态空间方程输出的作为状态量,控制增量作为控制量,并进行推导
推导流程(图片来源,b站up:小黎的Ally,侵删)
在这里插入图片描述
最后一步的输出方程,含义为:
最终预测结果只输出[x,y,φ]等真正的状态量。

预测

根据模型所得得最终得状态空间和输出方程我们就可以对模型进行预测
也就是
ξ ( k + 1 ) = A ξ ( k ) + B Δ u ˜ ( k ) ξ ( k + 2 ) = A ξ ( k + 1 ) + B Δ u ˜ ( k + 1 ) ξ ( k + 3 ) = A ξ ( k + 2 ) + B Δ u ˜ ( k + 2 ) . . . ξ ( k + N c + 1 ) = A ξ ( k + N c ) + B Δ u ˜ ( k + N c ) . . . ξ ( k + N p + 1 ) = A ξ ( k + N p ) + B Δ u ˜ ( k + N p ) ξ(k+1) =Aξ(k)+BΔ\text{\~{u}}(k)\\ ξ(k+2) =Aξ(k+1)+BΔ\text{\~{u}}(k+1)\\ ξ(k+3) =Aξ(k+2)+BΔ\text{\~{u}}(k+2)\\ ...\\ ξ(k+Nc+1) =Aξ(k+Nc)+BΔ\text{\~{u}}(k+Nc)\\ ...\\ ξ(k+Np+1) =Aξ(k+Np)+BΔ\text{\~{u}}(k+Np)\\ ξ(k+1)=Aξ(k)+BΔu˜(k)ξ(k+2)=Aξ(k+1)+BΔu˜(k+1)ξ(k+3)=Aξ(k+2)+BΔu˜(k+2)...ξ(k+Nc+1)=Aξ(k+Nc)+BΔu˜(k+Nc)...ξ(k+Np+1)=Aξ(k+Np)+BΔu˜(k+Np)
这里
预测时域Np控制时域Nc

预测时域很好理解,简单来说就是程序中预测多少个时刻的状态

控制时域是我们可控制未来多少步。

第一个预测公式逐步代入到下方公式并将公式乘以C(转化为输出方程)

即为(暂且忽视红圈)

在这里插入图片描述
未来状态的输出量 = 当前的状态量 * 系数矩阵 + (从当前时刻到未来时刻的控制量
在上面的公式中有个问题,就是未来要预测几个矩阵?,未来预测到什么时候结束控制量的累加?

这两个问题就是对应了预测时域Np控制时域Nc
这个时域我们一般自定。

最后观看政个算式,可以将其变化为矩阵运算
在这里插入图片描述
红圈部分即为预测出的算式,这个Y就是最终预测的未来时刻的状态矩阵。

控制

根据我们预测方程,最终得出状态量与参考量的误差,因此需要输出的状态量(误差)绝对值最小,又因为Y是一个矩阵,所以我们就需要使该矩阵得平方最小。

J m i n = Y ′ ∗ Y Jmin=Y'*Y Jmin=YY
同时,我们有需要尽量平滑的抵达目标位置,如何平滑呐?也就是控制量(此处为控制增量)绝对值保持最小!
J m i n = Δ U ′ ∗ Δ U Jmin = ΔU'*ΔU Jmin=ΔUΔU

最后对快速抵达目标的目的和平滑的目的取一个权重。
J m i n = Y ′ Q Y + Δ U ′ R Δ U Jmin=Y'QY+ΔU'RΔU Jmin=YQY+ΔURΔU
Q大的化就代表更偏向快速到目标位置(但是会增大震荡),R大就代表到达目标位置更平稳(但是响应慢)。
其中国Q必须是行数和Y'相等列数和Y相等的N倍单位矩阵(N为自定大小)

MPC的控制总的来说是一次二次规划问题。
也就是说,他应该长这样。
在这里插入图片描述

但是我们这里面却有两个自变量。。。。。把预测中Y等号右边的算式带入整理,去掉常数项可得

在这里插入图片描述
这样,结果就成为了一个二次规划问题。

当然,还有ΔU和U的限制问题,需要自己根据自己车辆参数设计。

之后利用matlab的二次规划工具箱结算出ΔU矩阵。matlab quadprog函数使用.
注意:计算出的是一个(Nc*控制量个数)长的向量,且是控制增量

最后,我们只需将计算出的第一组控制增量加到目前的控制量中即可。

滚动优化

控制量作用于系统,并在下一刻得出系统状态在进行一次预测与二次优化即可。

  • 11
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值