MPC(模型预测控制)-Simulink仿真

这篇具有很好参考价值的文章主要介绍了MPC(模型预测控制)-Simulink仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、为什么使用MPC控制器?

  • ① MPC可以处理多输入耦合控制多输出的问题:

    mpc控制,算法,matlab,自动驾驶

  • ② MPC可以处理对于控制量有约束的问题

    比如,驾驶汽车的时候,汽车速度和转角都有上限

  • ③ MPC具有预测效果

    即MPC考虑的不是根据当前参考值进行控制,而是根据预测时间内的参考去预测当前的控制量,比如在小车转弯时,就避免了可能在过弯处急转弯。

mpc控制,算法,matlab,自动驾驶

MPC需要的算力高一些,因为MPC控制过程中,每个时间步都要求解一个相同形式不同参数的优化问题。

二、什么是MPC控制器?

mpc控制,算法,matlab,自动驾驶

  • 小车的数学模型:

mpc控制,算法,matlab,自动驾驶

item inputs outputs
Plant Model(被控对象的数学模型) 之后m个控制量 之后p个时间步的预测输出
  • 优化器:

mpc控制,算法,matlab,自动驾驶

item inputs outputs
优化器 (数学模型, 之后p个时间步的参考轨迹, 约束条件) 之后m个控制量

​ 优化器要考虑两点:

​ ① 预测轨迹与参考轨迹偏差最小

​ ②控制量不突变
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 CostFunctionJ=i=1pweek+i2+i=0p1wΔuΔuk+i2

尽管优化器输出的是之后 p 个时间步的控制量,但是在当前时间步, M P C 仅将这个最有序列的第一步应用到汽车上,忽略其余部分 {\color{Red} 尽管优化器输出的是之后p个时间步的控制量,但是在当前时间步,}\\ {\color{Red} MPC仅将这个最有序列的第一步应用到汽车上,忽略其余部分} 尽管优化器输出的是之后p个时间步的控制量,但是在当前时间步,MPC仅将这个最有序列的第一步应用到汽车上,忽略其余部分

三、MPC控制器的参数如何设置?

  • 参数既会影响控制器的性能,又会影响计算复杂度。

  • MPC主要的参数如下:

    • ① 采样时间
    • ② 预测范围、控制范围
    • ③ 约束
    • ④ 损失函数的权重
3.1 采样时间

采样时间过大,当干扰发生,控制器无法做出及时的反应。

采样时间过小,会导致过多的计算负载。

mpc控制,算法,matlab,自动驾驶

可以测量系统的阶跃响应,根据上升时间选择采样时间

3.2 预测范围、控制范围

我们应该选择一个涵盖系统重要动态的预测范围

预测范围过短,无法及时反映,可能会在弯道处急转弯

预测范围过长,之后的不可预测事件可能会白白浪费算力。

我们通常选择 20-30个样本覆盖系统的动态响应,如下图:

mpc控制,算法,matlab,自动驾驶

通常只有前几个时间步的控制对于预测影响较大(因为前几个要拽向ref轨迹,后面的维持稳定), 因此,选择大的控制范围只会白白增大计算复杂度

经验法则: 控制范围 = 10%~20% × 预测范围

3.3 约束条件

可以对 控制量、控制量变化率、状态量进行约束

约束分为硬约束和软约束,无法违反的(比如最大车速)叫硬约束

软约束可以违反,但我们不希望违反,可以把它设计到损失函数之中

建议将输出约束设置为软约束,并避免对控制量及其变化率设置硬约束,否则可能会出现无解的情况

3.4 权重

损失函数由多个部分组成,需要设置权重

比如最基本的,我们既希望预测轨迹接近参考轨迹,又希望控制量是平滑的。

四、自适应增益调度和非线性MPC

mpc控制,算法,matlab,自动驾驶

  • 线性系统 + 线性约束 + 时不变约束条件 => 可以使用线性时不变MPC控制器 => 凸优化问题

mpc控制,算法,matlab,自动驾驶

  • 但是如果系统是非线性的,就要使用自适应MPC、时间表MPC

    • 自适应MPC:具体思路是在非线性模型的各个工作点,建立多套线性模型

      自适应MPC的线性模型在不同工作点上结构,超参数相同,只是矩阵参数不同而已

mpc控制,算法,matlab,自动驾驶

  • 时间表MPC: 对于不同工作点,需要设置不同数量超参数(控制量数目、预测步长…)的模型
    mpc控制,算法,matlab,自动驾驶

如果是非线性的,那么优化问题就会变成多极值点的非凸优化问题,求解较复杂

mpc控制,算法,matlab,自动驾驶

五、Simulink仿真MPC控制器

mpc控制,算法,matlab,自动驾驶

item value
输出量(状态量) (横向位置Y、偏航角\phi)
控制量 (前轮转角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无法显示正确,会显示问号,同时直接运行会报错)

步骤: https://ww2.mathworks.cn/help/releases/R2017b/mpc/examples/autonomous-vehicle-steering-using-model-predictive-control.html

5.1 数学分析

下面依次介绍各个模块:

  • ① Plant: 车辆线性模型

    右键Plant模块,选择Block Parameters:

mpc控制,算法,matlab,自动驾驶

变量 含义
V x V_x Vx 小车平行于车身向前的速度
m m m 小车总质量
I z I_z Iz Yaw夹角转动惯量(绕小车中心旋转的转动惯量)
l f l_f lf 小车质心到前轮的距离
l r l_r lr 小车质心到前轮的距离
C α C_{\alpha} Cα 汽车转角刚度((轮胎侧偏角的单位增量所对应的横向力的增量) (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: 小车的自行车模型

mpc控制,算法,matlab,自动驾驶

  • 原理(1): 前轮运动 = 前轮相对于车身运动 + 车身相对于质心运动(旋转) + 小车质心相对于地面运动

  • 原理(2): Δ 轮胎受到垂直于车身的力 = C r ( 或者 C l ) Δ 轮胎转角 \Delta 轮胎受到垂直于车身的力 = C_{r}(或者C_{l} ) \Delta 轮胎转角 Δ轮胎受到垂直于车身的力=Cr(或者Cl)Δ轮胎转角

    (注意: 自行车模型代替小车模型时,四轮变为两轮,因此 自行车的 C f 应该是小车的 2 C f 自行车的C_f应该是 小车的2C_f 自行车的Cf应该是小车的2Cf)

进行动力学分析:
由于 ψ 较小,简化为线性模型即 : Y ˙ = V x ψ + V y [ 公式一 ] 由于\psi较小,简化为线性模型即: \dot{Y} = V_x \psi + V_y \quad [公式一]\\ 由于ψ较小,简化为线性模型即:Y˙=Vxψ+Vy[公式一]
Δ 前轮相对于车身转角 = ( V y + ψ ˙ l f V x ) Δ 后轮相对于车身转角 = ( − V y − ψ ˙ l r V x ) ⇒ 前轮受到垂直于车身的力 = 2 C f ( − ψ + δ + Δ 前轮相对于车身转角 ) 后轮受到垂直于车身的力 = 2 C r ( − ψ + Δ 后轮相对于车身转角 ) ⇒ 根据 [ 公式一 ] : 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 前轮相对于车身转角 = (\frac{V_y + \dot{\psi}l_f}{V_x}) \\ \Delta 后轮相对于车身转角 = (- \frac{V_y - \dot{\psi}l_r}{V_x}) \\ \Rightarrow \\ 前轮受到垂直于车身的力 = 2C_{f} (-\psi + \delta + \Delta 前轮相对于车身转角) \\ 后轮受到垂直于车身的力 = 2C_{r} (-\psi + \Delta 后轮相对于车身转角)\\ \Rightarrow \\ 根据[公式一]: \\ 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 [公式二] } Δ前轮相对于车身转角=(VxVy+ψ˙lf)Δ后轮相对于车身转角=(VxVyψ˙lr)前轮受到垂直于车身的力=2Cf(ψ+δ+Δ前轮相对于车身转角)后轮受到垂直于车身的力=2Cr(ψ+Δ后轮相对于车身转角)根据[公式一]:my¨=mVxψ˙mVy˙mVy˙=前轮受到垂直于车身的力+后轮受到垂直于车身的力my¨=mVxψ˙+2Cf[ψ+δVxVy+ψ˙lf]+2Cr(ψVxVyψ˙lr)[公式一]代入到上式:y¨=mVx2Cf+2Cry˙(Vx+mVx2Cflf2Crlr)ψ˙+m2Cαδ[公式二]

求得小车模型的状态空间表达式为 : 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 ] δ 求得小车模型的状态空间表达式为: \qquad \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad \\ \frac{d}{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 求得小车模型的状态空间表达式为:dtd y˙ψψ˙ = mVx2Cf+2Cr0IzVx2lfCf2lrCr000(Vx+mVx2Cflf2Crlr)1IzVx2lf2Cf+2lr2Cr y˙ψψ˙ + 2mCf0Iz2lfCf δ
正好就是Parameters中的A,B,C,D矩阵

5.2 实验过程

导入矩阵和参考轨迹参数,双击Params.mat即可:

mpc控制,算法,matlab,自动驾驶

需要更换参考轨迹的话,参考以下方法生成新的posRef和yawRef

打开APP->Driving Scenario designer->选择道路和参考轨迹

mpc控制,算法,matlab,自动驾驶

开始仿真:

mpc控制,算法,matlab,自动驾驶文章来源地址https://www.toymoban.com/news/detail-824633.html

到了这里,关于MPC(模型预测控制)-Simulink仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【模型预测控制MPC】使用离散、连续、线性或非线性模型对预测控制进行建模(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文的

    2024年02月14日
    浏览(48)
  • 【无人机控制】基于模型预测控制MPC无人机实现轨迹跟踪附Matlab代码

     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab完整代码及仿真定制内容点击👇 智能优化算法       神经网络预测       雷达通信       无

    2024年04月28日
    浏览(37)
  • MATLAB - 利用非线性模型预测控制(Nonlinear MPC)来控制四旋翼飞行器

    本示例展示了如何利用非线性模型预测控制(MPC)为四旋翼飞行器设计一个跟踪轨迹的控制器。 四旋翼飞行器有四个向上的旋翼。从四旋翼飞行器的质量中心出发,旋翼呈等距离的正方形排列。四旋翼飞行器动力学数学模型采用欧拉-拉格朗日方程 [1]。 四旋翼飞行器的十二种

    2024年01月22日
    浏览(68)
  • 【轨迹跟踪】模型预测控制MPC无人机轨迹跟踪【含Matlab源码 3958期】

    获取代码方式1: 完整代码已上传我的资源:【轨迹跟踪】基于matlab模型预测控制MPC无人机轨迹跟踪【含Matlab源码 3958期】 点击上面蓝色字体,直接付费下载,即可。 获取代码方式2: 付费专栏Matlab物理应用(初级版) 备注: 点击上面蓝色字体 付费专栏Matlab物理应用(初级

    2024年02月21日
    浏览(47)
  • 模型预测控制(MPC)解析(一):模型

    1.1 预测控制的日常应用         模型预测控制的设计目标是计算未来控制变量u的轨迹,以优化未来的系统输出y。优化过程在一个有限的时间窗口进行,并且利用优化时间窗口开始时的系统信息进行优化。为了理解预测控制的基本思想,以一个日常工作为例来进行说明。

    2024年02月02日
    浏览(48)
  • mpc模型预测控制原理详解

    本文是对mpc模型预测控制学习的记录,主要参照了DR_CAN老师的视频进行学习。视频专栏链接:DR_CAN老师mpc视频专栏。在这篇博客中博主也针对DR_CAN老师的讲解做了详尽的笔记和代码实现。读者可以相结合地进行学习。 MPC算法主要包括以下三步: 估计/测量读取当前系统状态

    2023年04月14日
    浏览(46)
  • 【自动驾驶】模型预测控制(MPC)实现轨迹跟踪

    bilibili的DR_CAN讲解的MPC模型预测控制器 知乎上一个比较通俗易懂的解释 模型预测控制 轨迹跟踪模型预测控制(MPC)原理与python实现 DR_CAN笔记MPC MPC控制笔记 模型预测控制(MPC)的核心思想就是以优化方法求解最优控制器,其中优化方法大多时候采用二次规划(Quadratic Programmin

    2024年02月02日
    浏览(52)
  • 机器人模型预测控制MPC(model predictive control)

    当前控制动作是在每一个采样瞬间通过求解一个有限时域开环最优控制问题而获得。过程的当前状态作为最优控制问题的初始状态,解得的最优控制序列只实施第一个控制作用。这是它与那些使用预先计算控制律的算法的最大不同。本质上模型预测控制求解一个开环最优控制

    2024年02月07日
    浏览(47)
  • 控制四旋翼飞行器以进行多目标航点导航的MPC算法(Matlab代码实现)

      💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 目前研

    2024年02月08日
    浏览(48)
  • 一级倒立摆控制 —— MPC 控制器设计及 MATLAB 实现

    最优控制介绍 一级倒立摆控制 —— 系统建模(传递函数模型与状态空间方程表示) 一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现 一级倒立摆控制 —— 最优控制 线性二次型控制(LQR)及 MATLAB 实现 一级倒立摆控制 —— MPC 控制器设计及 MATLAB 实现 一级倒立摆控制 ——

    2024年02月03日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包