本例参照龚建伟的《无人驾驶车辆模型预测控制》书中第四章节 1.carSIM软件介绍 carSIM是由美国MSC公司开发的车辆动力学仿真软件,它可以方便灵活地定义实验环境和试验过程,准确预测和仿真汽车的操纵稳定性、动力性、平顺性等,适用于轿车、轻型货车等车型的建模仿真。 2.仿真实例 所用软件和环境: (1)carSIM8.02 (2)正版MATLABR2019a (3)win10 先进行车辆模型的搭建: (1)运行carSIM8.02 (2)出现“select recent database”(“选择数据库”)对话框,如下图所示:
选择“continue with the selected database”,弹出如下图所示的对话框: 选择“select”即可打开carSIM主界面: carSIM主界面主要由3大部分组成:车辆参数及仿真工况的设置、数学模型求解与后处理。用户可以修改车辆参数,根据需要来设置仿真工况。 (3)点击“New”,新建一组dataset,如图所示,在两个文本框中分别输入“Example”和“MPCtest1”,点击“Set”完成新建 (4)选择主菜单的”Datasets"下拉菜单,会发现Example一栏多出“MPCtest” (5)点击下图中的下三角,选择相应的车型: (6)新建满足要求的仿真工况: 1.点击下图所示工况
即出现下图所示的界面: 2.新建仿真工况:点击上图中的“New”,在下图文本框中依次输入“MPC Example”和“newSplit Mu”,点击“Set”,完成新建。 3.根据要求设置仿真工况: 目标车速18km/h; 无制动; 档位控制选用闭环AT6档模式; 无转向; 路面选择为1km2摩擦系数为1.0的方形路面; 完成后的设置,如下图所示: 4.设置仿真时间 同样在设置仿真工况的主界面,在下图所示的文本框中输入“30” 5.选择前面新建的仿真工况点击“Home”图标,返回carSIM的主界面,选择前面新建的“Split Mu”工况。 6.设置仿真步长 在carSIM主界面中,点击下拉菜单“Tools”,选择“Preference",出现如下图所示的界面,将仿真步长设置为“0.001”。 (7)建立carSIM与simulink联合仿真的模型 1.点击下图所示的Models选项,选择“Models:Simulink"。 2.点击下图所示的选项,选择“[Link to New Dataset]"。 此时弹出下图所示对话框,在对话框中依次输入“Example”和“MPCtest1”,点击“Creat and Link”完成新建,如下图所示: 3.点击下图所示的“MPCtest1” 将会弹出下图所示界面: 选择相关路径。以我的路径为例: 浏览工作路径: E:\CarSim802_Prog\CarSim_Data simulink Model的路径: E:\CarSim802_Prog\CarSim_Data\Extensions\Simulink 在该目录下不要新建,复制一个现成的,重命名为:MPCtest.mdl,空的simulink模型是导不过去的 然后回到上图所示界面点击浏览找到MPCtest.mdl,如下图所示: 【注】这里有一个问题要注意,carSIM8.02是和MATLAB2011搭配的,高版本MATLAB要将下面的选项选上: 4.定义carSIM导入变量 点击下图所示的“Import Channels”,选择“I/O Channels:Import” 然后点击下图所示的“[Copy and Link Dataset]”;输入MPCtest1 input点击MPCtest1 input“图标,显示下图所示界面,按照下图所示界面进行设置 设置好以后返回点击“MPCtest1 output,按照下图进行相应设置: 需要注意的是:carSIM的导出变量(X0,Y0和Yaw)和simulink中MPC模型的输入量是相对应,carSIM的导出变量(Vx和Steer_SW)为观测量,所以这里的carSIM的导出变量应按照下图所示的顺序进行顺序选择: 点击“Home“回到carSIM主界面。点击send to simulink 图标,此时之前新建的MPCtest1.mal模型将被打开: 按照此图对原模型进行修改 完成上述设置后,carSIM通过外部接口将车辆模型发送至指定路径下的simulink仿真文件中,carSIM模块即以S函数的形式增加到simulink模型库中。
将simulink浏览窗口中的“S-Function”图标拖拽到MPCtest1.mdl中,显示新的S函数模块。双击该图标,弹出如下图所示的对话框,在“S-Function name”中输入MY_MPCController3 在模型中拖入延迟模块,目的是防止出现代数环 MY_MPCController3控制器模块的输出为车速和前轮转角,需对其转换成满足carSIM模块要求的导入变量:IMP_SPEED(质心车速[km/h]).IMP_STEER_l1(左前轮转角[°]),IMP_STEER_人(右前轮转角[°]),IMP_STEER_L2,IMP_STEER_R2。所以,在MY_MPCController3控制器模块的输出量与carSIM模块的导入变量之间加入了转换函数: 在simulink界面点击运行,运行处的结果如下图所示: 关于模型预测控制理论部分的内容以及公式推导部分的内容,可以观看B站天神的视频讲解,讲解的很到位也很详细,链接地址: https://space.bilibili.com/387233952/dynamic 也非常感谢天神将书上第四章MPCcontroller的代码修改过来了,才得以跑出和书中一样的路径。