首页/文章/ 详情

基于MPC(模型预测控制)的预见性巡航—GT-SUITE 与 Python 联合仿真

10月前浏览464


概要

在随着车载控制器算力的持续提升以及高级驾驶辅助系统(ADAS)的广泛应用,多种先进的控制策略已逐步应用于量产车型的控制器中,比如MPC,ECMS等。MPC 由于其可预测、硬约束、可反馈、可协同、能在线等优点正在得到越来越广泛的应用。本文将以一个简单的基于坡度的预见性巡航为示例,介绍GT-SUITE与Python联合进行MPC的基本方法。


1简介

     随着汽车电子电气架构的不断演进,车载控制器的计算能力显著提升,为复杂控制算法在量产车型中的实际应用提供了坚实的硬件基础。与此同时,高级驾驶辅助系统(Advanced Driver Assistance Systems, ADAS)的快速普及和智能化趋势,推动了车辆控制系统从传统的反馈控制向更具前瞻性与优化能力的先进控制策略转型。在此背景下,模型预测控制(Model Predictive Control, MPC)、等效油耗最小策略(Equivalent Consumption Minimization Strategy, ECMS)等基于模型的优化控制方法,已逐步从学术研究走向工程实践,并在动力系统管理、能量分配、纵向车速控制等领域展现出卓越的性能潜力。

      其中,MPC 因其独特的技术优势而受到广泛关注。该方法通过在线求解有限时域内的优化问题,能够显式地处理系统的动态约束(如执行器饱和、加速度限制),并充分利用未来参考轨迹或环境信息(如前方道路坡度、交通信号灯状态)进行前瞻性决策。此外,MPC 具备天然的多变量协同控制能力,支持状态反馈校正以增强鲁棒性,且可通过滚动优化实现闭环最优控制。这些特性使其在提升车辆燃油经济性、驾驶舒适性与行驶安全性方面具有显著优势,尤其适用于具备预见性信息的节能控制场景。  
 
不同的最优控制方法  
预见性巡航控制(Preview Cruise Control)是 MPC 应用的一个典型范例。通过集成高精度地图或前方道路坡度信息,控制器可提前预知车辆即将行驶的地形变化,并据此优化油门与制动动作,在保证驾乘舒适性和车速跟踪精度的同时,最大限度地降低能耗。然而,实现 MPC 控制策略不仅需要精确的车辆动力学模型,还涉及复杂的数值优化求解过程,这对仿真平台与控制开发工具的协同能力提出了更高要求。  
 


Python中适合做 MPC 的库

Python 适合做 MPC 的快速原型开发,且 Python 与 GT 联合仿真速度快。常见的与MPC相关的Python库如下表所示,不同的库用于不同的阶段。本例采用 scipy.optimize 求解非线性MPC问题。该方法使用简洁,适合快速原型测试。但计算效率偏低。若要提高计算效率,可以将非线性MPC线性化后,转化为标准 QP 问题进行求解,计算效率将非常快,如 qpsolvers,osqp等。

   

预见性续航模型说明

模型如下图所示,以一个简单的电动乘用车为例。

   

   
   
基于距离的参考车速和坡度    

   
本例虽然简单,但展示了GT与Python 耦合进行MPC 预见性巡航的基本框架。用户可以容易地使用更高级的库(比如CasADi)进行改写,或者转化为标准QP 问题提高计算速度。本例所采用的代价函数如下:    
   
其中,状态变量选择位移、车速和累积能耗。预测模型中所用到的车辆动力学模型(状态方程)如下所示,并用Sigmoid 函数代替了分段函数。采用简单的欧拉前向离散。    
   
同时为了提高非线性MPC的收敛速度,采用Warm Start技术,即让每一次初始猜测的最优控制序列参考上一时间步的控制序列。    
   

Python 外部库的使用和 Debug 方法


4.1外部库的使用

用户可以直接使用GT自带的Python的IDE,但是考虑到使用的灵活性,使用外部库可以更好的管理各类项目。对于 Pycharm ,需要首先指向 Pycharm的系统解释器,不可直接指向Pycharm的虚拟环境(venv)。对于Spyder,可以直接指向其Conda创建的虚拟环境。在脚本中,将pycharm的虚拟环境的路径添加到系统路径中去(Spyder不需要该操作)


   
   


4.2Debug

在debug时,建议关闭Dashboard。避免当脚本有严重错误时,软件卡死。

   
使用Python内置的 pdb(Python Debugger)交互式源代码调试器。在想要的位置插入断点命令(对于Windows),GT 在调用该脚本时,会在此处暂停,用户可以已查看计算是否有误。    
Windows:pdb.Pdb(stdin=open("CON","r"),stdout=open("CON", "w")).set_trace()    
Linux:pdb.Pdb(stdin=open("/dev/tty","r"),stdout=open("/dev/tty", "w")).set_trace()    
   

模型运行时,自动在此处停止

   
在断点处可以查看已经执行的变量。如输入x1查看其值    
   

输入continue,模型将继续运行,至下一个断点处。Debug完成后,将脚本中的断点全部删除或注释掉即可。

   

GT 与 Python 联合仿真的关键设置

MPC的采样间隔为 0.1s,GT的整车动力学模型的时间步长为 0.01s。为了避免每次调用Python脚本就执行一次MPC优化计算,需要对MPC 所在控制回路进行单独时间步长设置,即 0.1s。

   


该 MPC 为单步MPC控制器,便于和GT进行信息交互。

   

6 计算结果

   
不同预测时域下的跟随结果    
   
不同车速偏差权重下的跟随结果    




来源:艾迪捷
System非线性汽车电子UGpython通信UM控制电气GT-SUITE
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-10-31
最近编辑:10月前
艾迪捷
MBD CAE解决方案专家
获赞 21粉丝 42文章 623课程 4
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈