自动驾驶控制算法-模型预测MPC

2023-05-16

本文记录一下MPC控制算法的学习过程和自己的理解,初步接触控制算法,理解肯定不是很完善,重在记录思考的过程。

背景

随着自动驾驶技术以及机器人控制技术的不断发展及逐渐火热,模型预测控制(MPC)算法作为一种先进的控制算法,其应用范围与领域得到了进一步拓展与延伸。目前提出的模型预测控制算法主要有基于非参数模型的模型算法控制(MAC)和动态矩阵控制(DMC),以及基于参数模型的广义预测控制(GPC)和广义预测几点配置控制(GPP)。【知乎拷的】主要是现在的自动驾驶会用到这个控制方法来做车的制动、油门、方向盘转角的控制,最近很火。

虽然模型预测控制算法的种类有多种,但始终离不开这三大要素:

  • 预测模型——对未来一段时间内的输出进行预测;
  • 滚动优化——滚动进行有限时域在线优化(最优控制);
  • 反馈校正——通过预测误差反馈,修正预测模型,提高预测精度

MPC控制算法

MPC的全称是模型预测控制(Model Predictive Control),简单来说就是利用一个现有模型来针对系统未来状态进行预测,同时决定应该采取什么样的动作能保证系统在接下来一段时间内的状态能与之前预测的相符合。

MPC如何工作?

请添加图片描述
图1

借B站视频的图说明一下过程。在车辆行驶的过程中,当上层给出了规划的路径(Reference Line),控制模块就需要控制车辆沿参考线走。从k时刻开始,MPC会预测接下来p时刻车的轨迹,使得车逼近目标轨迹。在到达k+1时刻时,MPC会再次预测接下来p时刻车的轨迹,再走一个时刻,再预测p时刻。不断的迭代,在不断的向前推进的时候不是没有目的的,而是通过最小化Cos Function,来知道逼近的过程。需要注意的是MPC会每个时刻预测接下来的p时刻,但是只会根据预测走一个时刻,在到达下一时刻会接着预测,这个也是在线优化需要较大性能的原因。

大概过程应该都清楚了。个人感觉和智能算法有类似的地方,有Function知道这前进的过程。下面就是,它咋做到如此🐮的呢?:

MPC如何实现它的优化思想(工作过程)?

通过模型来预测系统在某一未来时间段内的表现来进行优化控制。多用于数位控制,系统模型通过离散状态空间表达X(k+1) = AX(k) + Bu(k)
如下图所示,k之前的是过去时刻(已知),k之后是未来时刻(未知)

在这里插入图片描述

MPC一般分为3步:

  1. 估计/测量当前系统的状态,也就是首先获取当前输入u(k-1)对应的输出y(k)。
  2. 基于最优控制策略得到的控制器输出u(k),u(k+1)…,u(k+N-1)来进行最优化,对应的被控对象模型预测输出y(k+1),y(k+2)…y(k+N)
  3. 重要一步,在执行下一时刻控制时,只取u(k) 进行输入,然后回到step1进行滚动优化控制。

疑问:

控制器和被控对象是什么?

在这里插入图片描述
在自动驾驶中控制器就是MPC模型,系统就是无人车系统

这里的JCos_Function是什么意思?

上上图和下图的代价函数其实是一样的,E表示的是误差项,u表示的是输入项,矩阵相乘的形式方便运算。
在这里插入图片描述
举例来说,以两入两出系统为例,系统状态即为输出,参考值为0:
在这里插入图片描述

有了代价函数如何来做最优化呢?

最优化部分的数学推导,挺烦人的数学推导。有几种方法来做优化的,下面只是其中通过二次规划来做。

二次规划(Quadratic Programming)

对于二次规划来说,一般形式是这样的:
在这里插入图片描述
前面是二次型的,后面是线性的。如果Q写成对角矩阵的形式(对角矩阵除对角元素完全是0,对角元素可以看作权重系数),那前面部分可以认为是求解最小二乘问题。(学过最小二乘,立个Flag下次写篇最小二乘复习一下

对于二次规划的求解,可以通过MATLAB或Python完成。所以对于模型预测控制来说,需要将我们的模型化成上述一般形式,并进行求解计算。

将MPC模型化成二次规划形式
首先给出模型,以及在k时刻的预测控制量u(k),即输入,以及对应的预测状态量x(k)N为预测区间(Predictive Horizon)。
在这里插入图片描述

假设条件及代价函数(假设Q、R为对角阵)
在这里插入图片描述
上述代价函数的输入包括当前时刻的xu,而对比我们上面给出的二次规划中的一般形式(只有一个输入z)还不太一样,因此对上述代价函数进行改造。设系统在k时刻的初始状态为 X(k)(已知)。

在这里插入图片描述

在这里插入图片描述

将 X(k)(上面绿色)公式代入代价函数J中,可得:
在这里插入图片描述

这时的代价函数形式与上面给出的二次规划的形式就是一样的了,其中 是初始的测量值,不影响做最优化的部分。

以上就是通过完整的数学推导建立最优化的数学模型,有了这个模型之后,我们就可以利用该模型对这个系统进行优化以及模型预测控制设计。
对于一个状态空间模型来说,它的维度可以表示如下:
在这里插入图片描述

例如,给出一个二阶的单输入例子:
在这里插入图片描述

对于上一篇文章中涉及到的一些变量,它们的维度分别为:

在这里插入图片描述
在这里插入图片描述

假设A、B矩阵以及预测区间分别为:
在这里插入图片描述

带入到上面的公式中:
在这里插入图片描述
在这里插入图片描述

上次课我们总结了,对于代价函数J,可以转换成下面这种形式,只包括已知的k时刻的状态量x(k)以及输入向量U(k):

在这里插入图片描述

参考链接

https://blog.csdn.net/zxxxxxxy/article/details/103700436
https://www.zhihu.com/people/xcalan9595/posts

下次学习Apollo在无人驾驶的MPC和PID控制。===>👏🏻👏🏻👏🏻

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动驾驶控制算法-模型预测MPC 的相关文章

  • mpc模型预测控制原理详解

    mpc模型预测控制原理详解 前言mpc算法步骤mpc算法推导 前言 本文是对mpc模型预测控制学习的记录 xff0c 主要参照了DR CAN老师的视频进行学习 视频专栏链接 xff1a DR CAN老师mpc视频专栏 在这篇博客中博主也针对
  • Apollo代码学习(七)—MPC与LQR比较 (百度Apollo中用到了PID、MPC和LQR三种控制器)

    摘自 xff1a https blog csdn net u013914471 article details 84324754 Apollo代码学习 七 MPC与LQR比较 follow轻尘 2018 11 29 17 32 56 179
  • 我已经多次看到说LQR和MPC相似

    https zhuanlan zhihu com p 139145957 https blog csdn net sinat 16643223 article details 109707776
  • MPC,PID,LQR,DDP算法

    算法原理 xff1a
  • 自动驾驶控制算法-模型预测MPC

    本文记录一下MPC控制算法的学习过程和自己的理解 xff0c 初步接触控制算法 xff0c 理解肯定不是很完善 xff0c 重在记录思考的过程 背景 随着自动驾驶技术以及机器人控制技术的不断发展及逐渐火热 xff0c 模型预测控制 MPC
  • PID/LQR/MPC自行总结使用

    PID LQR MPC自行总结使用 自学控制相关知识 xff0c 已经一年多了 xff0c 现在回头看看还是有很多模糊不明确的地方 xff0c 准备借此机会进行总结一下 xff0c 第一次写博客 xff0c 如果错误和不合理之处 xff0c
  • 模型预测控制(Model predictive control,MPC)

    模型预测控制 MPC 是一种先进的过程控制方法 xff0c 用于在满足一组约束条件的同时控制过程 自 1980 年代以来 xff0c 它一直在化工厂和炼油厂的加工工业中使用 近年来 xff0c 它还被用于电力系统平衡模型 1 和电力电子学中
  • MPC控制笔记(一)

    转自 我的博客 笔记参考1 xff1a Understanding Model Predictive Control Youtube 带自动生成字幕 笔记参考2 xff1a Understanding Model Predictive Co
  • MPC控制笔记(一)

    转自 我的博客 笔记参考1 xff1a Understanding Model Predictive Control Youtube 带自动生成字幕 笔记参考2 xff1a Understanding Model Predictive Co
  • MPC(模型预测控制)控制小车沿轨迹移动——C++实现

    任务说明 要求如下图所示 xff0c 给定一条轨迹 xff0c 要求控制小车沿这条轨迹移动 xff0c 同时可以适用于系统带有延时的情况 注意 xff0c 本篇文章只给出部分C 43 43 代码参考 主要流程 首先用运动学自行车模型 xff
  • PID与MPC控制方法

    记录udacity 无人驾驶工程师课程中控制部分 MPC代码和实践链接https github com udacity CarND MPC Quizzes 本文按照对udacity课程的理解和翻译而来 1 PID P xff1a Propo
  • MPC与LQR的详细对比分析

    从以下几个方面进行阐述 xff1a 一 xff0c 研究对象 xff1a 是否线性 二 xff0c 状态方程 xff1a 离散化 三 xff0c 目标函数 xff1a 误差和控制量的极小值 四 xff0c 工作时域 xff1a 预测时域 x
  • MPC模型预测控制

    这篇主要讲一下模型预测控制 xff0c 如果对PID控制了解的同学 xff0c 那效果更好 如果不了解PID控制 xff0c 还是熟悉下比较好 模型预测控制 xff0c 顾名思义 xff0c 基于模型 xff0c 预测未来 xff0c 进行
  • MPC自学资料总结

    1 书籍 xff1a 无人驾驶车辆模型预测控制 2 视频 xff1a https ww2 mathworks cn videos understanding model predictive control part 1 why use m
  • Apollo代码学习(七)—MPC与LQR比较

    Apollo代码学习 MPC与LQR比较 前言研究对象状态方程工作时域目标函数求解方法 前言 Apollo中用到了PID MPC和LQR三种控制器 xff0c 其中 xff0c MPC和LQR控制器在状态方程的形式 状态变量的形式 目标函数
  • 【教程】使用 Captum 解释 GNN 模型预测

    转载请注明出处 xff1a 小锋学长生活大爆炸 xfxuezhang cn Colab Notebook 安装必须的库 xff1a Install required packages import os import torch os en
  • Apollo代码学习(六)—模型预测控制(MPC)

    Apollo代码学习 模型预测控制 前言 模型预测控制 预测模型 线性化 单车模型 滚动优化 反馈矫正 总结 前言 非专业选手 此篇博文内容基于书本和网络资源整理 可能理解的较为狭隘 起点较低 就事论事 如发现有纰漏 请指正 非常感谢 查看
  • 一种基于遗传算法与神经网络算法(GA-BP)的新冠肺炎模型预测-含Matlab代码

    目录 一 引言 二 新冠肺炎模型构建 三 遗传算法反向传播 GA BP 神经网络设计 3 1 GA BP 神经网络构建 3 2 BP神经网络训练 3 3 基于遗传算法的新冠感染人数峰值预测 四 结论 五 Matlab代码获取 一 引言 针对
  • 控制范围和预测范围

    我已经回顾了模型预测控制的参考书目和 Gekko 编程结构 尽管我了解它的编程方式及其目的 例如 我想了解 Gekko 如何根据 Seborg 中的相关内容来管理控制范围和预测范围之间的差异 我看不出代码有什么区别 下面是一个用于说明的 M
  • 在 GEKKO 中使用非线性模型预测控制实现横向控制器

    我正在尝试为由横向动态模型定义的自动驾驶车辆实现横向控制器 好吧 我的问题是 CV 没有达到 SP 设置的所需参考点或目标点 我正在使用以下运动方程和目标函数 我正在使用半经验公式 pacejka 来计算 Fyf Fyr 提供的轮胎力 这里

随机推荐

  • 商务统计_13 使用excel拟合曲趋势线

    趋势线拟合 xff1a 选中两列数据 xff0c 汇制带平滑曲线的散点图选中图中曲线 xff0c 右键 增加趋势线在右边的趋势线格式中 xff0c 将 显示公式 amp 显示R平方值 打勾选择合适的趋势线 xff0c 指数 xff0c 线性
  • 解决k8s无法安装flannel

    手动创建 kube flannel yml文件 span class token punctuation span root 64 k8smaster span class token punctuation span span class
  • 树莓派 VNC Viewer 远程桌面配置教程 及 显示 cannot currently show the desktop 的解决方法

    树莓派 VNC Viewer 远程桌面配置教程 在此之前你需要能够登录树莓派 xff0c 使用命令窗口对树莓派进行操控 下面的操作使用的是ssh对树莓派进行控制 启用VNC服务 打开终端 xff0c 进入配置界面 span class to
  • 分享几个找论文参考文献的网站

    1 库问搜索 打造免费开源文献资源共享平台 http www koovin com 2 论文驿站 免费中文文献库 xff0c 顶级论文数据库 xff0c 每天同步更新 https www lunwenyizhan com 3 中国知网 ht
  • 解决ubuntu全屏后分辨率低的问题

    Ubuntu 设置屏幕分辨率显示Unknown display 无法设置分辨率 解决方法 方法一 xff1a xff08 临时性 xff0c 重启会失效 xff09 使用xrandr命令调节分辨率 xff0c 带 号的为当前分辨率 xff0
  • ubuntu18.04安装WINEHQ时出现的问题:E: 文件 list 第 x 行的记录格式有误 /etc/apt/sources.list (Component) E: 无法读取源列表。

    ubuntu18 04安装WINEHQ时出现的问题 xff1a E 文件 list 第 x 行的记录格式有误 etc apt sources list Component E 无法读取源列表 详细安装过程可以参考 xff08 官网 xff0
  • Hexo系列——(一) Hexo的安装与使用

    目录 前言一 安装Node js和Git1 安装node js和npm xff0c npm是node js的包管理工具2 更新npm的镜像源 3 全局安装n管理器 用于管理node js 4 安装最新的node js xff08 stabl
  • 协方差和协方差矩阵的定义和理解

    先复习一下这个 xff1a 均值 标准差 方差 为什么需要协方差 xff1f 上面几个统计量看似已经描述的差不多了 xff0c 但我们应该注意到 xff0c 标准差和方差一般是用来描述一维数据的 xff0c 但现实生活我们常常遇到含有多维数
  • dockerfile 中运行 apt-get update 报错 returned a non-zero code: 100

    在 docker 中运行 apt get update 报错 returned a non zero code 100 出现问题 xff1a 在构建 docker 执行 Dockerfile 中的 RUN apt get update 时报
  • Opencv 实现简单UDP局域网实时摄像头传输 (一)

    做项目需要用到网络编程及摄像头捕捉 xff0c 经过简单学习完成一个简单的视频发送 发送端 sender cpp include 34 stdafx h 34 include 34 WinSock2 h 34 include lt open
  • 使用3D地面站(AcmeGCS)的编队飞行

    使用3D地面站 xff08 AcmeGCS xff09 的编队飞行 无人机编队飞行的方法有很多种 xff0c 本文演示一种使用PX4 43 3D地面站 AcmeGCS 43 ROS的多机控制方法 PX4提供了非常好的软件仿真环境 xff0c
  • PX4-1-开源飞控项目

    分享完工具系列 xff0c 我们开始PX4飞控技术的分享 xff0c 写分享相对于自己写笔记要难很多 xff0c 在整理自己笔记的过程中也重新思考很多问题 飞控技术的分享系列更多分享的是思路和框架 对于PX4这种大型开源项目 xff0c 源
  • PX4-3-uORB

    uORB Micro Object Request Broker 微对象请求代理器 是PX4中非常重要且关键的一个模块 xff0c 用于各个模块之间的数据交互 实际上uORB是一套跨 进程 的IPC通讯模块 在PX4中 xff0c 所有的功
  • PX4-5-SPI-IIC设备驱动

    在之前的分享中 xff0c 我们聊了PX4的通信框架和任务调度框架 xff0c 现在我们讲一下PX4的设备驱动 PX4支持很多种设备 xff0c 根据通信方式的不同大致分为 xff1a SPI IIC设备 串口设备 IO设备 CAN设备 这
  • PX4-6-串口设备驱动

    上一篇我们讲了PX4的SPI IIC设备驱动 xff0c 现在讲一下PX4的串口设备 PX4的串口设备驱动框架比SPI IIC设备简单不少 xff0c 使用了两种底层实现方式 xff1a 一种是系统自带的标准字符设备接口 xff0c 一种是
  • Uav开发杂记-4-无人机开发的C-C++

    无人机的软件开发主要使用C C 43 43 开发 xff0c APM和PX4的应用层开发更多的使用C 43 43 开发 作为叠代完善了非常多年的比较大型的开源飞控项目 xff0c 其代码框架对于刚开始接触的新手而言是比较复杂的 一些同学私信
  • AcmeIot-3-在嵌入式设备中运行ROS2

    ROS2是作为第二代ROS xff0c 对ROS1进行了重大的优化 xff0c 主要的特点有 xff1a 实现跨平台运行 xff0c 可以运行在Linux windows Mac RTOS xff0c 甚至没有操作系统的裸机 实现真正的分布
  • PX4-12-飞行任务框架

    飞行任务指的是PX4的modules flight mode manager组件 xff0c 用于控制指令平滑 PX4的FlightTask框架设计还是比较有趣的 xff0c 不论从软件架构还是控制算法方面 xff0c 都是值得好好学习的代
  • AcmeROS-2-ROS2架构

    在前面的分享中 xff0c 我们讲了 在嵌入式设备中运行ROS2 AcmeIot 3 在嵌入式设备中运行ROS2 PX4中的ROS2桥接应用 PX4 16 ROS2Bridge 在AcmeGCS中支持ROS2 AcmeGCS 18 支持RO
  • 自动驾驶控制算法-模型预测MPC

    本文记录一下MPC控制算法的学习过程和自己的理解 xff0c 初步接触控制算法 xff0c 理解肯定不是很完善 xff0c 重在记录思考的过程 背景 随着自动驾驶技术以及机器人控制技术的不断发展及逐渐火热 xff0c 模型预测控制 MPC