3. Simulink基础
在 CarMaker 与 Simulink 联合仿真工程中,Simulink 承担的是控制策略建模、信号接口适配与仿真调度的核心角色。CarMaker 负责车辆动力学、道路环境与传感器物理模型的实时解算,Simulink 则负责把控制算法、驾驶员模型或测试激励接入其中。因此,掌握 Simulink 的建模环境、常用模块库、信号处理方式、子系统组织方法以及模型配置与仿真参数设置,是后续联合仿真能够顺利跑通的基础。
一、Simulink 建模环境与基本操作逻辑
Simulink 采用图形化框图建模方式,一个模型由若干模块(Block)、信号线(Signal Line)和求解器配置组成。打开 Simulink 后,常用入口包括:
- Library Browser:浏览 Simulink、Simscape、Stateflow 等模块库;
- Model Editor:搭建模型的主画布,支持拖拽、连线、注释与区域划分;
- Model Configuration Parameters:配置求解器、步长、数据类型、代码生成等;
- Simulation Data Inspector / Scope:观察仿真过程中的信号波形。
建模时建议遵循“先接口、后算法、再封装”的顺序:先确定输入输出端口与信号类型,再填充控制逻辑,最后用子系统封装并命名。这样在联合仿真中,CarMaker 的接口信号才能与 Simulink 模型稳定对接。
二、常用模块库与典型用途
Simulink 模块库数量庞大,但在 CarMaker 联合仿真中高频使用的模块相对集中。下表列出常用模块库及其典型用途:
| 模块库 | 典型模块 | 在联合仿真中的用途 |
|---|---|---|
| Sources | Constant、Step、Signal Builder、From Workspace | 提供测试激励、目标车速、方向盘转角等输入 |
| Sinks | Scope、To Workspace、Display | 记录仿真结果、观察控制量变化 |
| Continuous | Integrator、Transfer Fcn、State-Space | 实现车辆动力学简化模型或控制器连续环节 |
| Discrete | Unit Delay、Discrete PID、Zero-Order Hold | 实现离散控制器、采样保持与延迟补偿 |
| Math Operations | Gain、Sum、Product、Saturation | 信号缩放、误差计算、限幅保护 |
| Signal Routing | Mux、Demux、Bus Creator、Bus Selector | 组合或拆分 CarMaker 接口信号总线 |
| User-Defined Functions | MATLAB Function、Fcn | 编写自定义控制逻辑或信号转换 |
三、信号处理:类型、采样与总线
Simulink 中的信号不仅是“连线”,还携带数据类型、维度、采样时间和单位等信息。联合仿真中常见的信号处理问题包括:
- 数据类型不匹配:CarMaker 接口可能使用 double,而控制器内部使用 single,需用 Data Type Conversion 显式转换;
- 采样时间冲突:控制器为 10 ms 离散采样,而 CarMaker 以 1 ms 步长推进,需用 Rate Transition 或 Zero-Order Hold 处理跨速率信号;
- 信号维度不一致:标量与向量混用会导致维度报错,可用 Reshape 或 Mux/Demux 调整;
- 单位不统一:CarMaker 常用 m/s、rad,而控制策略可能使用 km/h、deg,需在接口层统一。
建议在模型顶层建立“接口适配层”,集中完成单位换算、类型转换和速率匹配,使核心控制算法保持干净、可复用。
四、子系统:层次化组织模型
当模型规模增大时,必须使用子系统(Subsystem)进行层次化封装。常见做法包括:
- 接口子系统:封装 CarMaker 输入输出信号,统一命名与数据类型;
- 控制子系统:封装纵向、横向或路径跟踪控制器;
- 监控子系统:封装 Scope、To Workspace 与在线显示;
- 使能子系统:用 Enable 或 Trigger 控制某部分在特定条件下执行。
封装后可通过Mask暴露关键参数,例如目标车速、PID 增益、采样周期等,便于在联合仿真中快速调整而不必进入子系统内部。
五、模型配置与仿真参数设置
模型配置直接决定仿真能否与 CarMaker 同步推进。关键设置包括:
Solver:
Type = Fixed-step
Solver = ode4 (Runge-Kutta)
Fixed-step size = 0.001 % 与 CarMaker 仿真步长一致
Simulation time:
Start time = 0.0
Stop time = 10.0
Data Import/Export:
Input = 从 CarMaker 接口读取
Output = 记录到 Workspace 或文件
Code Generation:
System target file = 与联合仿真接口匹配的 TLC
其中固定步长与步长大小最为关键。CarMaker 通常以固定步长实时推进,若 Simulink 使用变步长求解器,会导致双方时间基准不一致,出现信号抖动或仿真失败。因此联合仿真中一般强制使用 Fixed-step,并让步长与 CarMaker 保持一致。
六、典型场景:从零搭建一个联合仿真接口模型
假设需要把 CarMaker 输出的车速与横摆角速度接入 Simulink,并输出一个目标方向盘转角。可按以下流程操作:
- 新建 Simulink 模型,命名为
CM_SL_Interface.slx; - 从 Sources 中拖入 Constant 作为初始目标车速;
- 用 Bus Creator 将 CarMaker 的
vx、yawRate组合为输入总线; - 用 MATLAB Function 编写简单的横向控制逻辑;
- 用 Bus Selector 拆出
steeringAngle输出给 CarMaker; - 用 Scope 与 To Workspace 记录
vx、yawRate、steeringAngle; - 在 Model Configuration Parameters 中设置 Fixed-step、ode4、0.001 s;
- 保存并运行,检查信号维度、类型与采样时间是否一致。
完成上述步骤后,模型即可作为 CarMaker 联合仿真的 Simulink 侧基础框架。后续只需替换或扩展控制算法,而不必反复调整接口与求解器配置。
七、复盘与检查清单
在联合仿真调试阶段,建议按以下清单逐项排查:
- 求解器是否为 Fixed-step,步长是否与 CarMaker 一致;
- 接口信号的数据类型、维度、单位是否统一;
- 跨采样率信号是否经过 Rate Transition 或 Zero-Order Hold;
- 子系统是否合理封装,Mask 参数是否可调;
- Scope 与 To Workspace 是否覆盖关键信号;
- 模型是否保存为与 CarMaker 工程匹配的版本与路径。
总体而言,Simulink 基础能力决定了 CarMaker 联合仿真工程的上限。建模环境提供操作入口,模块库提供功能积木,信号处理保证数据正确流动,子系统实现层次化组织,模型配置与仿真参数则确保双方时间基准一致。把这五部分打通,后续的联合仿真调试与工程化封装才有稳固基础。