4. 联合仿真原理

CarMaker 与 Simulink 的联合仿真,本质上是把“车辆与交通环境的高保真动力学求解”和“控制算法的模块化建模”放进同一个仿真时间轴里协同推进。CarMaker 负责车辆、道路、驾驶员、交通流与传感器环境,Simulink 负责控制器、执行器逻辑与信号处理。两者并不是简单地把数据互相拷贝,而是通过明确的接口协议、同步机制和步长协商,形成一个闭环系统。

理解联合仿真的关键,不是记住某个按钮在哪里,而是理解三件事:谁在推进时间、数据在什么时刻交换、交换的数据以什么类型和方向流动。

一、联合仿真的核心机制:主从协同与时间同步

在典型的 CarMaker + Simulink 联合仿真中,CarMaker 通常作为主仿真器(Master),Simulink 作为从仿真器(Slave)或协同仿真伙伴。CarMaker 维护全局仿真时间,按照自身求解步长推进车辆动力学和环境模型;在每个通信步点,它把 Simulink 所需的输入信号发送过去,Simulink 完成一个或多个控制步的计算后,把输出信号返回给 CarMaker。CarMaker 再把这些控制量施加到车辆模型上,进入下一个仿真步。

这种机制的核心是“通信步长”与“求解步长”的分离。CarMaker 的车辆动力学求解步长通常很小,例如 1 ms 甚至更小;而 Simulink 控制器的采样周期可能是 10 ms、20 ms 或 100 ms。联合仿真接口会在两者之间做时间对齐:Simulink 在通信步点读取输入,保持或计算输出,直到下一个通信步点。若控制器是离散的,Simulink 侧通常使用与控制器采样周期一致的固定步长求解器;若控制器包含连续环节,则需要选择能够处理零阶保持或采样保持的求解策略。

CarMaker 与 Simulink 联合仿真时间同步与数据交互 CarMaker(主仿真器) 车辆动力学 / 道路 / 驾驶员 交通环境 / 传感器模型 全局仿真时间推进 通信步点:t = k·T_comm Simulink(从仿真器) 控制器 / 状态机 / 算法 执行器逻辑 / 信号处理 固定步长求解器 控制步长:T_ctrl = n·T_comm 车辆状态、位置、速度、传感器目标 油门、制动、转向、挡位、控制模式 接口层:TCP/IP 或共享内存 同步握手 + 数据打包/解包

二、数据交互方式:信号映射与接口变量

联合仿真的数据交互不是“把整个 Simulink 模型丢给 CarMaker”,而是通过接口变量表建立一一对应的信号映射。CarMaker 侧定义了一组可读写的接口变量,例如车辆速度 Vehicle.v、横摆角速度 Vehicle.yawRate、方向盘转角 Driver.Steer、油门开度 Driver.Gas、制动压力 Driver.Brake 等。Simulink 侧则通过 CarMaker 提供的 S-Function 或 FMU 接口块,把这些变量映射到模型中的输入输出端口。

从数据流方向看,可以分为三类:

  • CarMaker → Simulink:车辆状态、环境信息、传感器目标列表、道路曲率、交通车位置等,作为控制器的反馈输入。
  • Simulink → CarMaker:控制指令,如油门、制动、转向、挡位、灯光、喇叭等,作为车辆模型的执行输入。
  • 双向同步信号:仿真时间、步长确认、通信握手、仿真结束标志等,用于保证两个求解器不会“各跑各的”。

在配置时,最常见的错误是信号单位不一致。例如 CarMaker 中速度可能是 km/h,而 Simulink 控制器按 m/s 设计;转向角可能是度,而控制器输出是弧度。接口变量表必须明确单位、偏移量、缩放因子和数据类型。若使用 FMU 接口,还需要注意 FMU 的输入输出变量名与 CarMaker 接口变量名严格匹配,否则会出现“仿真能启动但控制无效”的隐蔽问题。

三、实时性要求:不是所有联合仿真都需要实时

联合仿真的实时性要求取决于应用场景。离线仿真用于算法验证和参数标定,通常不要求硬实时,只要仿真时间推进正确、结果可复现即可。硬件在环(HIL)或驾驶员在环(DIL)场景则要求实时性,此时 CarMaker 和 Simulink 必须在每个通信步点内完成计算,不能出现超时。若 Simulink 侧计算量过大,导致单个控制步超过通信周期,就会出现“仿真时间落后于真实时间”的现象,表现为车辆响应迟滞、控制抖动甚至仿真崩溃。

应用场景 实时性要求 典型通信步长 接口类型 注意事项
离线算法验证 非实时 1~10 ms S-Function / FMU 结果可复现,允许慢于真实时间
快速控制原型 RCP 软实时 1~5 ms 共享内存 / TCP 需监控超时,避免控制周期抖动
硬件在环 HIL 硬实时 0.5~2 ms 实时以太网 / 反射内存 必须绑定 CPU 核,关闭无关中断
驾驶员在环 DIL 硬实时 1~5 ms 实时网络 + 视觉同步 视觉延迟与控制延迟需分别标定

四、接口类型与选型建议

CarMaker 与 Simulink 之间常见的接口方式包括:

  1. S-Function 接口:CarMaker 提供 Simulink S-Function 模块,直接在 Simulink 模型中调用 CarMaker 求解器。配置简单,适合离线仿真和快速验证。
  2. FMU/FMI 接口:把 CarMaker 模型导出为 FMU,Simulink 通过 FMI Kit 加载。跨工具链兼容性好,适合模型交换和联合仿真。
  3. 共享内存接口:两个进程通过共享内存交换数据,延迟低,适合实时性要求较高的场景,但配置复杂,需要处理同步与互斥。
  4. TCP/IP 接口:通过网络套接字通信,部署灵活,可跨机器运行,但网络延迟和抖动会影响实时性。
选型时优先考虑“仿真目的”而不是“接口先进程度”。离线标定用 S-Function 或 FMU 即可;HIL 场景再考虑共享内存或实时以太网。接口越复杂,排障成本越高。

五、典型误区与复盘

第一个常见误区是“通信步长越小越好”。通信步长过小会导致接口调用频率过高,CPU 负载上升,反而可能引发超时。正确做法是根据控制器采样周期和车辆动力学带宽折中,通常通信步长取控制周期的整数倍,且不超过 10 ms。

第二个误区是忽略初始化顺序。CarMaker 和 Simulink 在仿真开始前需要完成变量映射、内存分配和初始状态同步。若 Simulink 控制器在第一个通信步就输出非零控制量,而 CarMaker 尚未完成初始化,可能导致车辆“跳变”。建议在接口配置中设置初始输出保持,或让控制器前几个周期输出默认安全值。

第三个误区是只看仿真能跑通,不看数据一致性。联合仿真结束后,应检查关键信号的时间戳、单位、量纲和数值范围。例如方向盘转角在 CarMaker 中为 ±720°,而 Simulink 控制器输出为 ±1,若未做缩放,车辆会几乎不转向。复盘时建议保存接口变量日志,逐信号核对,而不是只观察动画是否正常。

# 典型接口变量映射示例(CarMaker 侧)
InterfaceVariable        Direction     Unit      Simulink Port
Vehicle.v                Output        m/s       In1
Vehicle.yawRate          Output        rad/s     In2
Driver.Steer             Input         deg       Out1
Driver.Gas               Input         %         Out2
Driver.Brake             Input         bar       Out3
Simulation.Time          Bidirectional  s        Sync

掌握联合仿真的原理,最终要落到“时间同步、信号映射、实时约束、接口选型”四个抓手上。只要这四件事在工程配置阶段被明确下来,CarMaker 与 Simulink 的协同就能从“能跑”走向“可信”。