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

article/2025/8/30 0:37:41

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*控制量个数)长的向量,且是控制增量

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

滚动优化

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


http://chatgpt.dhexx.cn/article/uFesybvA.shtml

相关文章

车辆检测和跟踪技术的研究与实现

一、引言 车辆的持续跟踪对于肇事车辆的追捕以及减少交通事故具有重要意义。随着计算机技术的快速发展,推动着视频图像的智能化应用。当前对于视频图像的研究热点之一,就包括运动目标跟踪。当前对于运动目标的研究主要集中在单个摄像头的跟踪&#xff0…

自动驾驶:车道线检测、车速检测、实时通行跟踪、基于视频的车辆跟踪及流量统计

日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) CNN:RCNN、SPPNet、Fast RCNN、Faster RCNN、YOLO V1 V2 V3、SSD、FCN、SegNet、U-Net、DeepLab V1 V2 V3、Mask RCNN 自动驾驶&…

yolo-车辆测距+前车碰撞预警(追尾预警)+车辆检测识别+车辆跟踪测速(原创算法-毕业设计)

目录 前言一、环境配置二、车辆检测、实时跟踪测速算法及代码解读1、主函数各参数含义2、算法实现3、核心代码4、效果展示 二、跟车距离测量算法及代码解读1、主函数各参数含义2、算法实现3、效果展示 三、前车碰撞预警(追尾预警)算法及代码解读1、算法实…

车辆跟踪技术概述zt

摘 要 基于视频的车辆检测器近年来在智能交通系统(ITS)中得到了越来越广泛的应用。本文介绍了近年来提出的一些主要的基于视频的车辆检测与跟踪技术,并对这些技术进行了分类。同时分析比较了各种方法的优缺点。最后,说明了这一领域仍然存在的问题和对可能…

车辆跟踪检测

这个是GUI的界面,我们分别对这个界面做介绍。 第一个窗口显示的是原始的视屏 第二个窗口是提取视屏的背景。 第三个窗口是汽车跟踪,将汽车跟踪效果显示。 第四个窗口是画线,将用户画线后的区域分为两个区间,通过检测区间后&…

【车辆行人检测和跟踪数据集及代码汇总】

车辆行人检测和跟踪数据集和代码汇总 1. 车辆检测和跟踪1.1 车辆检测数据集和训练权重1.2 车辆跟踪 2. 行人检测和跟踪2.1 行人检测数据集和训练权重2.2行人多目标跟踪 3. 车辆行人检测和跟踪3.1车辆行人检测数据集和训练权重3.2 车辆行人多目标跟踪 1. 车辆检测和跟踪 1.1 车…

自动驾驶路径跟踪控制——纯追踪控制

文章目录 1.自行车模型(汽车二自由度模型)注意点Point1Point2 2.纯追踪控制注意点Point1Point2Point3 3.相关代码参考文献声明 全局路径由一系列路径点构成,这些路径点只要包含 空间位置信息即可,也可以包含 姿态信息&#xff0…

超强实时跟踪系统首次开源!支持跨镜头、多类别、小目标跟踪!

在琳琅满目的视觉应用中,对车辆、行人、飞行器等快速移动的物体进行实时跟踪及分析,可以说是突破安防、自动驾驶、智慧城市等炙手可热行业的利器。 但要实现又快又准的持续跟踪,往往面临被检目标多、相互遮挡、图像扭曲变形、背景杂乱、视角差…

车辆路径跟踪算法及数学模型

一、纯追踪算法 基于当前车辆后轮中心位置,在参考路径上向Ld(自定义)的距离匹配一个瞄准点,假设车辆后轮中心点可以按照一定的转弯半径R行驶抵达该瞄准点,然后根据预瞄准距离Ld,转弯半径R,车辆…

五、车辆轨迹追踪的优化控制

5.1、车辆横向动力学模型 车辆动力学模型一般包括用于分析车辆平顺性的质量-弹簧-阻尼模型和分析车辆操纵稳定性的车辆-轮胎模型。两者研究的侧重点不同,平顺性分析的重点是车辆的悬架特性,而车辆的操纵稳定性分析的重点是车辆纵向和侧向力学特性。车辆…

PyCharm Professional 2016.1 破解 激活

接上一篇博文,尝试着激活一下 PyCharm Professional 2016.1, 居然也成功了。 方法同样来自 Rover12421 大神。 1.从官网下载 PyCharm Professional 2016.1 安装。 2.下载 破解补丁 并解压,记住路径 3.编辑 PyCharm 安装目录下 bin 文件夹中的…

Python:PyCharm 永久破解方法,真的超超超超超超超超超级简单!!!

准备工作: 1.破解包 >>>下载链接>>> 提取码:jjbf 2.注册码 .>>>获取地址>>> 第一步 进入PyCharm 的安装目录的bin文件夹下,把破解包放到该目录。 第二步 把bin 目录下的 pycharm.exe.vmoptions 和…

Pycharm Professional(专业版)完美破解,永久激活

PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Djang…

【pycharm】WiFi密码破解【简单易学】

文章目录 前言一、环境搭建准备好密码的字典包安装pywifi 二、破解源码三、实现结果总结 前言 今天断网,突然想借一下邻居的WiFi,居然破天荒的成功了,感觉也是很幸运吧,所以就来分享一下 一、环境搭建 准备好密码的字典包 假设…

linux下载安装pycharm专业版(含破解)

参考: https://blog.csdn.net/sinat_41029600/article/details/80594993 https://blog.csdn.net/c2366994582/article/details/79146370 下载 https://www.jetbrains.com/pycharm/download/#sectionlinux 安装 进入到pycharm下载目录,将软件移动到/o…

pycharm解密

第一题 Y3liZXJwZWFjZXtXZWxjb21lX3RvX25ld19Xb3JsZCF9 要求我们将上面这串东西用base64解密 我们在第一行调用base64,将上面那串字符赋值给a,再用 base64.b64decode(a).decode("utf-8") 对a进行解密,然后赋值给b,最…

Pycharm 2017.3.3永久破解

目录 一、文档编写的目的 二、破解步骤 2.1 下载ideaIU-2017.3.5.exe安装包 2.2 下载破解码 JetbrainsCrack-2.6.10-release-enc.jar 2.3 安装pycharm-professional-2017.3.3.exe 2.4 启动激活 一、文档编写的目的 PyCharm是一种Python IDE,带有一整套可以…

linux下安装和破解pycharm专业版

首先在官网下载pycharm专业版,网址:http://www.jetbrains.com/pycharm/download/#sectionlinux通过右键提取到此处,可以解压缩(.tar.gz格式相当于Windows下的.rar/.zip),或者通过命令行解压缩(先cd 到文件所…

Python的下载与Pycharm安装以及破解

python的安装 1.访问python官网https://www.python.org/,选择Downloads,选择Windows,然后点击Python 3.6.4; 2.打开下载好的安装包,勾选Add Python 3.6 to PATH ,然后选择默认路径或者其他路径安装。如果选择其他路…

pycharm for ubuntu的永久破解

结合自己走的流程,网上资料有些不全,自己没截图就借用下他们的,自己亲自操作了,没问题, 以上是我自己搭建好的环境; 下面介绍步骤: 1.下载安装python 网址:http://www.jetbrains…