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 编写自定义控制逻辑或信号转换
在 CarMaker 联合仿真中,接口信号通常以总线形式传递。建议使用 Bus Creator / Bus Selector 管理信号,避免大量散线导致模型难以维护。

三、信号处理:类型、采样与总线

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)进行层次化封装。常见做法包括:

  1. 接口子系统:封装 CarMaker 输入输出信号,统一命名与数据类型;
  2. 控制子系统:封装纵向、横向或路径跟踪控制器;
  3. 监控子系统:封装 Scope、To Workspace 与在线显示;
  4. 使能子系统:用 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 保持一致。

常见误区:只修改 Stop time 而忽略 Fixed-step size,导致 Simulink 内部以 0.01 s 推进,而 CarMaker 以 0.001 s 推进,接口信号出现明显延迟或跳变。务必在联合仿真前核对双方步长。

六、典型场景:从零搭建一个联合仿真接口模型

假设需要把 CarMaker 输出的车速与横摆角速度接入 Simulink,并输出一个目标方向盘转角。可按以下流程操作:

  1. 新建 Simulink 模型,命名为 CM_SL_Interface.slx;
  2. 从 Sources 中拖入 Constant 作为初始目标车速;
  3. 用 Bus Creator 将 CarMaker 的 vx、yawRate 组合为输入总线;
  4. 用 MATLAB Function 编写简单的横向控制逻辑;
  5. 用 Bus Selector 拆出 steeringAngle 输出给 CarMaker;
  6. 用 Scope 与 To Workspace 记录 vx、yawRate、steeringAngle;
  7. 在 Model Configuration Parameters 中设置 Fixed-step、ode4、0.001 s;
  8. 保存并运行,检查信号维度、类型与采样时间是否一致。

完成上述步骤后,模型即可作为 CarMaker 联合仿真的 Simulink 侧基础框架。后续只需替换或扩展控制算法,而不必反复调整接口与求解器配置。

七、复盘与检查清单

在联合仿真调试阶段,建议按以下清单逐项排查:

  • 求解器是否为 Fixed-step,步长是否与 CarMaker 一致;
  • 接口信号的数据类型、维度、单位是否统一;
  • 跨采样率信号是否经过 Rate Transition 或 Zero-Order Hold;
  • 子系统是否合理封装,Mask 参数是否可调;
  • Scope 与 To Workspace 是否覆盖关键信号;
  • 模型是否保存为与 CarMaker 工程匹配的版本与路径。
CarMaker 与 Simulink 联合仿真建模结构 接口层统一信号,控制层专注算法,配置层保证步长一致 CarMaker 车辆动力学 道路与环境模型 传感器物理模型 步长 0.001 s 接口适配层 Bus Creator / Selector 单位换算 · 类型转换 Rate Transition 统一采样与维度 Simulink 控制层 纵向 / 横向控制器 MATLAB Function PID · 状态机 · 限幅 子系统封装与 Mask vx, yawRate 控制输入 steeringAngle 执行器指令 模型配置与仿真参数 Fixed-step · ode4 · 0.001 s · Stop time 10 s · Data Import/Export · Code Generation 双方步长一致是联合仿真稳定的前提 信号处理 类型 · 维度 · 采样率 · 单位 Bus 总线管理接口信号 子系统组织 接口层 · 控制层 · 监控层 Mask 暴露可调参数 验证与记录 Scope · To Workspace 关键信号波形复盘

总体而言,Simulink 基础能力决定了 CarMaker 联合仿真工程的上限。建模环境提供操作入口,模块库提供功能积木,信号处理保证数据正确流动,子系统实现层次化组织,模型配置与仿真参数则确保双方时间基准一致。把这五部分打通,后续的联合仿真调试与工程化封装才有稳固基础。