【MPC】模型预测控制 | 车辆优化控制策略研究与实践

news2024/9/21 23:41:01

写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。

🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒
若您觉得内容有价值,还请评论告知一声,以便更多人受益。
转载请注明出处,尊重原创,从我做起。

👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜
在这里,您将收获的不只是技术干货,还有思维的火花

📚 系列专栏:【运动控制】系列,带您深入浅出,领略控制之美。🖊
愿我的分享能为您带来启迪,如有不足,敬请指正,让我们共同学习,交流进步!

🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟
感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~

文章目录

  • 引言
  • 一、MPC基本原理
    • 1、MPC定义与相关概念
    • 2、MPC工作机理
    • 3、MPC与传统控制理论的区别
  • 二、MPC中的约束处理
    • 1、约束的重要性与类型
    • 2、 传统控制理论中的约束处理方法
    • 3、MPC在处理约束方面的优势
  • 四、MPC在实际案例中的应用
    • 1、赛车跑道优化控制问题
    • 2、传统优化方法的结果与局限性
    • 3、MPC在动态环境中的适应与优势展示
  • 五、结论
    • 1、MPC在车辆优化控制中的作用
    • 2、MPC的未来发展与应用前景
  • 参考资料


引言

  本篇文章主要研究基于模型预测控制的车辆优化控制。首先带大家了解 MPC 的基本原理,接着讨论 MPC 和传统的经典控制理论的区别,列举一个模型预测控制的实例。


一、MPC基本原理

1、MPC定义与相关概念

  首先来看一下什么是模型预测控制MPC,提到它就不得都不提到下面这些名字:

滚动时域控制 (Moving Horizon Control, MHC)
后退时域控制 (Receding Horizon Control, RHC)
动态矩阵控制 (Dynamic Matrix Control, DMC)
广义预测控制 (Generalize Predict Control, GPC)

  上面这些近年来被广泛讨论的反馈控制策略其实都属于 MPC,更准确地说是根据它的特点来叫这个名字,比如 Receding Horizon,有些是在 MPC 发展过程中不同时期的名字。
  所以说 MPC 更像是一个框架,使用了最优控制的思想。

2、MPC工作机理

  MPC工作机理如下:
在这里插入图片描述

  在每个采样时刻 k k k 获得当前测量信息,并且在线求解一个有限时域下的优化问题,将得到控制序列中的第一个值作用到被控对象。在下一个采样时刻重复上述这个过程,用新的测量值刷新优化问题并重新求解。

3、MPC与传统控制理论的区别

  这种在线地不断迭代求解优化问题来获得优化序列是 MPC 和通过离线方法求解反馈控制律,并且将得到的反馈控制率一直作用在系统上的传统控制方法的最主要区别。


二、MPC中的约束处理

  模型预测控制起源于工业界,是为了解决像 PID 这种不容易解决多变量、有约束的优化控制问题。

1、约束的重要性与类型

  那么为什么我们要引入约束呢?为什么约束在控制系统中如此重要?

因为实际的系统中存在着各种各样的约束:

  • 物理约束
    执行器的饱和约束是硬约束,比如电机有最大转速、舵机有最大转角,受限于机械结构。

  • 性能约束
    比如环境变量不能超过阈值

  • 安全约束
    当然,最为关键的是存在一些安全性约束,例如当某些温度、压力或浓度超过既定阈值时,情况将变得极为危险。

由此可见,这些约束在现实中的控制活动具有极其重要的实际意义。

2、 传统控制理论中的约束处理方法

  最优控制量往往非常接近约束边界

在经典的控制理论中,关于如何处理约束问题,有以下几种思路:

  • 一般而言,我们可以采用所谓的约束管理策略,例如在接近约束边界时,通过某种机制将系统限制在当前范围内。
  • 或者,我们可能会选择设定一个 参考点(Set Point),即将我们的目标值设置得远离控制操作的边界。然而,这种方法存在一定的局限性,这与我们在讨论PID控制中的积分项抗饱和策略有相似之处。
  • 另一种方法是通过子优化问题来解决这些约束。

  可以看出来,在传统的控制理论中,对于约束的处理并不够系统化,往往是在遇到具体问题时才寻求解决方案,缺乏一种系统性的处理方法。

3、MPC在处理约束方面的优势

相比之下,模型预测控制(MPC)在处理约束系统方面表现出极高的有效性:

  • 从设计的初始阶段就将约束纳入考虑之中。
  • 无需将参考点设置得过于远离,因为约束已经被充分考虑,可以将参考点设置得更接近实际操作范围。
  • 能够优化整个系统的性能。

四、MPC在实际案例中的应用

  接下来,让我们通过一个实际案例来探讨MPC的这些特点如何在现实世界中得到体现,或者它如何发挥其优势。

1、赛车跑道优化控制问题

  首先,我们来观察这张赛车跑道的示意图:
  因此,我们当前的目标,即成本目标,是在尽可能快的时间内完成,但同时也不能过快,以免超出赛道范围。因此需要在目标中加入一些约束条件:

  • 避免与其他车辆发生碰撞,这一点是最为重要的安全考虑,即确保不发生撞车事故。
  • 保持在赛道上,也就是说,不能超出可行驶区域,即赛道的规定范围。
  • 避免车辆打滑,因为一旦打滑,将失去对车辆的控制,这同样是非常危险的情况。
  • 考虑到加速度的约束,正如我之前提到的,油门的施加是有一定限制的,因此,车辆的最大加速度也是受限的。

2、传统优化方法的结果与局限性

  如果采用传统的优化方法,将会得到什么样的结果。

  现在来看看实际操作的结果。首先,当车辆处于某个特定位置时,即在时间步 k k k,也就是 k = 0 k= 0 k=0 的时刻,环境状况如下,因此需要求解一条能够在最短时间内完成且满足所有约束条件的轨迹规划。在这种情况下,可以计算出如下所示的轨迹:
在这里插入图片描述

  可以观察到,该轨迹确实是在尽可能地缩短整个过程,从而使车辆能够迅速到达目的地。然而,如果在行驶过程中遇到如下所示的情况,应该如何应对呢?

在这里插入图片描述

  由于在全局阶段,并未注意到附近还有一辆车辆即将移动到这个区域,车辆未能获取这一信息,因为它位于视野的盲区。因此,如果继续按照之前规划的轨迹行驶,那么很可能会与之发生碰撞。

3、MPC在动态环境中的适应与优势展示

为了应对这种情况,需要引入反馈机制。正如之前所讨论的模型预测控制(MPC)的核心过程那样,关键步骤如下:

  • 在每个采样时刻,根据当前的测量信息来更新规划轨迹,这些信息包括车辆自身位置以及周围环境状态。
  • 在线求解一个有限时间范围内的优化问题,并得到一个控制序列。
  • 将这个控制序列中的第一个元素,即当前时刻的控制输入 u k u_k uk,应用到控制系统中。

  假设在第一个采样时刻,即 k = 1 k = 1 k=1 时,对周围环境进行一次更新。因此,将根据当前的环境状况,执行新的控制序列中的第一个控制命令 u 1 u_1 u1 。然后会不断地重复这个过程,持续地规划并更新车辆的行驶轨迹。

在这里插入图片描述


五、结论

1、MPC在车辆优化控制中的作用

  模型预测控制(MPC)在车辆优化控制中有着很不错的效果。通过其独特的在线优化和反馈机制,MPC能够实时处理多变量、有约束的优化问题,确保车辆在安全、高效的前提下实现最佳控制。

  在赛车跑道优化控制问题中,MPC不仅能够快速规划车辆的行驶轨迹,还能够实时调整控制输入,以应对动态环境中的变化,如其他车辆的移动。这种实时调整的能力使得MPC在车辆控制中具有显著的优势。

2、MPC的未来发展与应用前景

  随着技术的不断进步和工业需求的日益增长,MPC在车辆优化控制领域的应用前景广阔。未来,MPC技术有望在以下几个方面得到进一步的发展和应用:

  1. 更复杂的环境适应性:随着自动驾驶技术的发展,MPC将能够更好地适应更复杂的城市交通环境和更动态的驾驶场景。
  2. 更高的计算效率:随着计算能力的提升,MPC算法将能够处理更复杂、更大数据量的优化问题,从而提高控制的精度和实时性。
  3. 多系统集成:MPC可以与其他控制策略和系统集成,如车辆动力学控制、能量管理、通信系统等,以实现车辆的全面优化控制。
  4. 个性化控制:通过收集和分析驾驶员的习惯和偏好,MPC可以实现个性化的车辆控制,提供更加舒适和安全的驾驶体验。
  5. 预测维护:通过预测车辆的性能衰退和潜在故障,MPC可以指导车辆维护和保养,减少意外停机时间,提高车辆的可靠性。

  综上所述,MPC作为一种先进的控制策略,不仅在车辆优化控制中发挥着重要作用,而且其未来的发展和应用前景十分广阔。随着技术的不断进步,MPC将在车辆控制领域发挥更大的作用,推动车辆技术的创新和发展。


参考资料

  自动驾驶控制与规划


后记:

🌟 感谢您耐心阅读这篇关于 模型预测控制 | 车辆优化控制策略研究与实践 的技术博客。 📚

🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢

🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀

🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡

🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CorelDRAW X4重磅发布更新!包含最新安装包下载

CorelDRAW X4是矢量图形制作工具软件,这个图形工具给设计师们提供了矢量动画、页面设计、网站制作、位图编辑和网页动画等多种功能。 X4版本的新特性有活动文本格式:仿效现有段落格式化、使文本能够贴齐格线框,或从边框缩排,从而获…

牛客JS题(四十四)根据包名,在指定空间中创建对象

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 地址引用assign 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><style>/* 填写样式 */</style></head><body><!--…

使用多种机器学习模型进行情感分析

使用 TF-IDF 与贝叶斯分类器进行情感分析是一个常见且有效的组合&#xff0c;特别是在文本分类任务中。贝叶斯分类器&#xff08;通常是朴素贝叶斯分类器&#xff09;等机器学习模型具有计算简单、效率高的优点&#xff0c;且在文本分类任务中表现良好。接下来&#xff0c;我将…

8.16作业

1.思维导图 2.在登录界面的登录取消按钮进行以下设置&#xff1a; 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断…

Solidworks二次开发:通过XYZ点的曲线

在SolidWorks中,通过XYZ点创建曲线是一种根据一组点的坐标生成三维曲线的方法。这种方法适用于需要根据特定点集设计曲线的情况,比如在建模复杂几何形状或执行逆向工程时。在SolidWorks中通过XYZ点创建曲线,操作步骤如下 打开SolidWorks并新建文件:启动SolidWorks软件,新建…

开放式耳机哪个品牌好用?盘点四款开放式蓝牙耳机排行榜前十名

作为网易云十级选手&#xff0c;测评过三十多款开放式耳机产品的开放式耳机测评专家来说&#xff0c;如果想要入手一款好用的开放式耳机的话&#xff0c;我会建议从三个方面来考虑&#xff0c;佩戴体验、音质效果和性能配置&#xff0c;了解这三个方面选购款好用的开放式耳机不…

Linux配置JDK8环境变量

目录 一、yum安装1.1 OpenJDK安装1.2 测试是否能够使用1.3 如何卸载JDK 二、手动安装2.1 下载2.2 上传到linux服务器路径2.3 解压2.4 配置环境变量2.5 测试是否能够使用 一、yum安装 1.1 OpenJDK安装 sudo yum install -y java-1.8.0-openjdk-devel1.2 测试是否能够使用 jav…

vue3+高德地图实现,创建和编辑多边形、圆形覆盖物(完整实现)

目录 一、绘制 1.形状选择 2.绘制图形 二、编辑 1.定义所需变量 2.获取需要编辑的覆盖物数据 fenceData并渲染 3.上述监听改动事件↓↓↓ 4.上述监听编辑结束事件 5.鼠标右击结束事件 初始化地图不再赘述,参考这篇文章 vue3中引入高德地图初始化,并添加、删除marke…

MySQL(四)——常用函数

文章目录 函数字符串函数数值函数日期函数流程函数 函数 函数&#xff0c;是指一段可以直接被另一段程序调用的程序或代码。 MySQL中内置了许多函数&#xff0c;我们只需在合适的场景下调用它们即可&#xff0c;调用函数查询结果直接使用SELECT即可&#xff0c;并且可以嵌套使…

电子电气架构---主流主机厂电子电气架构华山论剑(上)

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

递归--数据结构--黑马

递归 总结一句话&#xff0c;上手直接多刷Leetcode&#xff0c;比看这个更有用。 定义 递归是一种解决计算问题的方法&#xff0c;其中解决方案取决于同一类问题的更小子集。 例如&#xff0c;单链表递归遍历的例子&#xff1a; void f(Node node) {if (node null) {retu…

class_2:数学运算和注释

1、运算符优先级 2、导入算数库 import matha -1 b -2 c 3 #一元二次方程 delta b ** 2 -4*a*c print((-b math.sqrt(delta))/(2*a)) print((-b - math.sqrt(delta))/(2*a)) 3、注释

KEEPALIVED高可用集群知识大全

目录 一、KEEPALIVED高可用集群简介 1、Keepalived 高可用集群的工作原理 2、Keepalived 高可用集群的作用 二、KEEPALIVED部署 1、网络配置 2、软件安装与启动 3、配置虚拟路由器 4、效果实现 三、启用keepalived日志功能 四、KEEPALIVED的几种工作模式 1、KEEPALI…

【多线程】初步认识Thread类及其应用

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 上篇文章我们简单介绍了什么是进程与线程&#xff0c;以及他们之间的区别与联系&#xff0c;实际应用中还是以多线程编程为主的&#xff0c;所以这篇文章就让我们更加深入地去剖…

深入理解Python range()函数与for循环的完美配合

文末赠免费精品编程资料~~ 今天我们要聊的是一个超级实用且基础的功能组合——range() 函数和 for 循环。无论你是刚开始学习Python&#xff0c;还是已经有点基础&#xff0c;这篇文章都将帮助你更深入地理解和掌握这两个工具。 1. 什么是 range()&#xff1f; range() 是Py…

YOLOV8网络结构|搞懂head

head里面的模块之前在backbone出现过的&#xff0c;有conv和c2f&#xff0c;还有concat是新的&#xff0c;就是用来做连接的&#xff0c;就是把几个通道的输出给连接起来&#xff0c;有C,H,W三个维度的&#xff0c;就看最后连接的参数&#xff0c;是按照哪个方向把他们加起来&a…

【C++从小白到大牛】布隆过滤器

布隆过滤器的提出 布隆过滤器概念 布隆过滤器的原理&#xff1a; 布隆过滤器的运作的总体过程&#xff1a; 布隆过滤器的插入 原码 布隆过滤器的查找 布隆过滤器删除 关于布隆过滤器的面试题&#xff1a; 1. 给两个文件&#xff0c;分别有100亿个query&#xff0c;我们…

EmguCV学习笔记 VB.Net 4.2 二值化

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 教程VB.net版本请访问&#xff1a;EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问&#xff1a;EmguCV学习笔记 C# 目录-CSD…

K8S资源之PVPVC

概念 类似于Docker的数据卷挂载&#xff0c;将Pod中重要的文件挂载到宿主机上&#xff0c;如果Pod发生崩溃等情况自愈时&#xff0c;保证之前存储的数据没有丢失。 如上图中&#xff0c;将各个Pod中的目录挂载到存储层&#xff0c;如果Pod宕机后自愈均从存储层获取之前的数据…

STM32——I2C和SPI波形分析

波形分析 I2C波形 //写命令 void OLED_WR_CMD(uint8_t cmd) { HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&cmd,1,0x100); } //写数据 void OLED_WR_DATA(uint8_t data) { HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&am…