3. 仿真环境搭建:MATLAB/Simulink环境配置、CarSim/TruckSim车辆模型导入、联合仿真接口配置
好,咱们直接进入正题。仿真环境搭建这事儿,说白了就是给底盘域控制器找个「练功房」。你算法写得再漂亮,没有靠谱的环境去验证,那都是纸上谈兵。我个人习惯把这一步拆成三个模块:MATLAB/Simulink 的配置、车辆模型的导入、以及联合仿真的接口打通。咱们一个一个来。
3.1 MATLAB/Simulink 环境配置
先说说 MATLAB 这边。很多新手一上来就装最新版,其实没必要。我建议你用 2021b 或 2022a 这两个版本,稳定,而且跟 CarSim/TruckSim 的兼容性最好。我在项目中遇到过用 2023b 死活连不上 CarSim 的情况,折腾了两天才发现是版本兼容问题。
安装完 MATLAB 后,有几个工具箱是必须装的:
- Simulink —— 这不用多说,核心平台
- Stateflow —— 做状态机用的,底盘域控制器里模式切换全靠它
- Vehicle Dynamics Blockset —— 虽然咱们用 CarSim 提供车辆模型,但这个工具箱里的接口模块很有用
- Simulink Coder —— 生成代码用的,后面做 HIL 测试会用到
装好之后,记得配一下环境变量。嗯,这里有个坑:
配置路径的方法很简单:在 MATLAB 命令行里输入 pathtool,然后把 CarSim 的安装目录下的 /bin 和 /lib 文件夹加进去。具体路径取决于你 CarSim 装在哪,一般是 C:\CarSim2021.0\bin 这种格式。
3.2 CarSim/TruckSim 车辆模型导入
接下来是车辆模型。CarSim 和 TruckSim 其实是一家人,操作逻辑完全一样。区别在于 CarSim 偏向乘用车,TruckSim 偏向商用车。咱们做底盘域控制器,两种车都会遇到。
导入模型之前,你得先搞清楚一件事:你要用 CarSim 自带的模型,还是自己建?
我个人建议,刚开始先用自带的。CarSim 里自带的「C-Class Hatchback」模型,参数标定得很准,拿来验证算法完全够用。等你把联合仿真的流程跑通了,再换成自己的模型参数。
导入步骤其实很简单:
- 打开 CarSim,点击「New Database」创建一个新数据库
- 在「Vehicle」选项卡里,选择「Import」
- 找到 CarSim 安装目录下的
/Vehicles文件夹,选一个 .simfile 文件 - 导入后,检查一下车辆参数:整车质量、轴距、轮距、轮胎模型这些
这里有个经验之谈:
如果你用的是 TruckSim,操作完全一样。只是车辆模型换成了卡车或客车,注意一下轴数——双轴和三轴的接口配置略有不同,后面联合仿真的时候要对应好。
3.3 联合仿真接口配置
好,重头戏来了。联合仿真接口配置,说白了就是让 MATLAB/Simulink 和 CarSim/TruckSim 能「说上话」。它们俩怎么通信?通过 S-Function。
CarSim 会生成一个 S-Function 模块,你把它拖到 Simulink 模型里,然后配置好输入输出信号就行。
具体步骤:
- 在 CarSim 里,点击「Send to Simulink」按钮
- CarSim 会自动打开 MATLAB,并生成一个 Simulink 模型模板
- 这个模板里已经包含了一个「CarSim S-Function」模块
- 双击这个模块,配置接口参数:
| 参数名称 | 说明 | 我的建议值 |
|---|---|---|
| Simulation Step Size | 仿真步长 | 0.001 s(1 ms) |
| Communication Interval | 通信间隔 | 1(每个步长都通信) |
| Output Variables | 输出给 Simulink 的信号 | 车速、横摆角速度、侧向加速度、四个轮速 |
| Input Variables | 从 Simulink 输入给 CarSim 的信号 | 方向盘转角、制动压力、驱动扭矩 |
配置好之后,你的 Simulink 模型大概长这样:
% 这是 Simulink 模型的结构示意(不是代码)
% 输入侧:你的底盘域控制器算法 → CarSim S-Function
% 输出侧:CarSim S-Function → 你的算法(反馈信号)
% 闭环:算法根据反馈计算控制量,再送给 CarSim
这里有个关键点:信号对齐。CarSim 输出的信号单位是国际单位制,但你的算法可能用的是别的单位。比如 CarSim 输出的横摆角速度是 rad/s,你的算法里可能用的是 deg/s。这个一定要转换好,不然控制效果会完全乱掉。
配置完接口后,先别急着跑复杂的工况。先做一个简单的验证:给一个恒定的方向盘转角,看看 CarSim 里的车辆是不是在转圈。如果车辆不动或者乱动,八成是接口信号没对上。
为什么会这样?因为 CarSim 的 S-Function 模块对信号顺序非常敏感。你定义的第1个输入信号是方向盘转角,那 Simulink 连到模块的第1根线就必须是方向盘转角。顺序错了,信号就串了。
嗯,这里再补充一个避坑指南:
最后,咱们用一张图来总结整个仿真环境的架构:
这张图把整个联合仿真的数据流讲清楚了。左边是咱们的算法,右边是车辆模型,中间通过 S-Function 交换数据。你想想看,这个架构其实跟实车上的 ECU 和 CAN 总线通信非常像——算法发指令,车辆反馈状态,形成一个闭环。
好了,环境搭建这块就说到这。配置好之后,记得跑一个简单的双移线工况验证一下。如果车辆能稳稳地沿着参考路径走,说明环境搭对了。如果车乱飘,别慌,回头检查一下接口配置和单位转换,八成是那里出了问题。
公众号:蓝海资料掘金营,微信deep3321