carsim与MPC工具箱联合仿真
- 写在前面的话
- 步骤
写在前面的话
《无人驾驶车辆模型预测控制》作为国内车辆领域使用MPC作为控制算法的先驱者,对后来的研究人员产生了极大的影响。此本专著已出版到了第二版,书中的代码极具参考意义。但是想要完全跑通书中的代码还要花费很大的心思,涉及到MATLALB版本,carsim版本,S-function的配置等诸多问题。所幸有很多小伙伴一直在交流代码心得。像我等不是专门研究MPC算法,只是将MPC作为实现某种功能的工具,为了MPC如何实现实属伤脑筋。所幸MATLAB提供了MPC工具箱,让我在等开发某项功能的时候不用在如何实现上费牛鼻子劲。
网上(b站)有官方的MPC工具箱使用教程,小伙伴们可以自行了解,但是MPC工具箱如何与carsim联合仿真还没有相关资料,笔者也是摸索了很长一段时间才将两者联合,想着分享一下心得,给后来的人提供一些参考与经验。
步骤
在这里,以实现车道保持为例,设计MPC控制器,参考模型与参数见合肥工业大学博士论文
《横向辅助驾驶及人机共驾控制策略的研究》,该论文第二章有关于MPC工具箱的设置,参数与设置什么的真实可用。
首先建立车路模型,如图直接选用论文中的模型
在这里要插一句,矩阵左上角为二自由度模型,Caf为轮胎侧偏刚度,因为前面有个2倍,如果没有的话,Cf代表前轴侧偏刚度,其数值为轮胎侧偏刚度的两倍,2前面有负号,所以轮胎侧偏刚度为正,如果没有的话,轮胎侧偏刚度为负。这里提个醒,因为很多文章中都有错误,具体解释可见喻凡《汽车系统动力学》,matlab中用的车路模型也是这个。
新建个m文件,将车路模型与车辆参数输入,建立状态空间方程,点运行。此模型将作为MPC中的plant(被控对象)。
打开MPC工具箱,按图示修改。先定义MPC结构,选择workspace工作区间里定义的状态空间模型,将采样时间改为0.01s,点击定义与输入。在这里图中的MPC相当于carsim,plant相当于MPC工具箱。carsim输出横向坐标与横摆角给MPC工具箱,MPC工具箱输出转角给carsim,这里认为所有信号都是可测的,carsim可以直接输出来。
为方便调试将视图改为左右视图
回到MPC designer,定义输入输出口,修改变量名称。
定义参考输入,大概意思就相当于你的车辆在运行的时候是什么状态,在这里希望横摆角为零,横坐标y在跟踪的时候和阶跃类似,具体选什么参考其实问题不是很大,对结果又有什么影响可以自己多试,一般都用0和阶跃作为参考。
在tuning 中设置预测视域和控制视域,一般为15,3左右,这里选择论文中的时域,具体情况具体分析,自己调看看有什么影响。
调节约束,这里约束对结果还是很有影响的,具体情况具体分析,自己多调方可,这里直接用论文中的,这里注意一下单位为弧度。
设置权重
最后再调节鲁棒性和快速性,自己调,看看有什么影响。
最后导出到工作区间
到此控制器设计大体完成,最后的效果不一定满意,约束什么的还要多调。
建立simulink模型,输入mpc1,这里不用加干扰
联合仿真,在这里可以先将carsim中的道路横坐标导入到matlab工作区间,再输入到信号发生器中作为参考信号,横摆角希望为0,注意单位换算一下。
例如下图,不论什么方法得给MPC工具箱一个参考的值。
到这里框架什么的都搭好了,就可以实现联合仿真了,包括MPC集成控制步骤也是如此,包括实现差动制动,你的预测模型要对,我做的是MPC集成控制,要是有需求的话再看看写。其实matlab18版有集成好的基于MPC的车道保持模块,如图,我用了一下效果挺好的,关键就是和carsim联合仿真,以后再说吧。(累死了)