[论文] 基于 Simulink 模型的并行代码生成用于事件驱动和定时驱动的 ROS 2 节点
Source: arXiv - 2512.23605v1
Overview
本文提出了一种基于模型的开发(MBD)框架,能够自动从 Simulink 模型生成用于 ROS 2 节点的并行化 C/C++ 代码。通过将模型分类为 事件驱动 或 定时器驱动,作者实现了对复杂自动驾驶工作负载的安全多核执行,避免了通常的手动线程管理麻烦。
关键贡献
- 统一并行化策略,适用于 ROS 2 兼容的 Simulink 模型,处理事件驱动和计时器驱动的执行模式。
- 自动代码生成流水线,生成可直接运行的 ROS 2 节点源代码,面向多核 CPU。
- 数据完整性保证,通过静态分析插入适当的互斥锁和无锁结构,消除死锁和竞争条件。
- 实证验证,在多个基准模型上显示所有并行化模式下执行时间的一致性降低。
方法论
-
模型分类 – 框架检查 Simulink 图并将每个子系统标记为:
- 事件驱动(由 ROS 2 主题、服务或动作触发)或
- 定时驱动(由 ROS 2 定时器驱动的周期回调)。
-
依赖分析 – 静态数据流分析构建模型计算块的有向无环图(DAG),识别哪些部分可以安全并行运行。
-
任务划分 – 将 DAG 切分为映射到独立 OS 线程的 任务。对于事件驱动部分,框架为每个订阅创建专用回调线程;对于定时驱动部分,则将共享相同频率的周期任务分组。
-
并发安全保障 – 工具根据检测到的共享状态模式自动注入互斥锁或无锁队列,确保并行任务之间的数据不会相互破坏。
-
代码生成 – 使用 Simulink 现有的 Coder 后端,框架生成兼容 ROS 2 的 C++ 代码,完整包含节点初始化、订阅/服务注册以及多线程执行框架。
-
部署与基准测试 – 生成的节点在 Linux 多核平台(例如 8 核 ARM 处理器)上编译,并相对于单线程基线进行测量。
结果与发现
| 基准模型 | 基线(单核) | 并行化(多核) | 加速比 |
|---|---|---|---|
| 车道保持控制器(事件驱动) | 12.4 ms | 6.1 ms | 2.0× |
| 自适应巡航控制(定时器驱动,20 Hz) | 8.9 ms | 4.3 ms | 2.1× |
| 传感器融合(混合) | 15.7 ms | 7.2 ms | 2.2× |
所有测试的模式都表现出 ≈2× 的最坏情况执行时间降低,证明自动并行化不会引入隐藏的开销。此外,生成的代码通过了 ROS 2 的集成测试,未出现死锁或数据竞争,展示了静态分析的鲁棒性。
实际意义
- 更快的原型开发 – 工程师可以留在 Simulink 的可视化环境中,获得生产级的多核 ROS 2 节点,而无需手工编写线程池。
- 可扩展的自动驾驶堆栈 – 实时感知、规划和控制模块现在可以利用现代汽车 SoC 上的所有核心,满足严格的延迟预算。
- 降低调试工作量 – 通过自动处理互斥锁插入,框架消除了常见的难以复现的并发错误来源。
- 可移植性 – 生成的 C++ 代码遵循 ROS 2 API,便于与现有的 ROS 2 生态系统(如 Nav2、Autoware)集成。
开发者可以将生成的节点插入现有的 ROS 2 launch 文件,通过简单的参数来扩展核心数量,并立即获得性能提升。
限制与未来工作
- Static Analysis Scope – 当前的依赖分析假设数据流是确定性的;动态图的变化(例如运行时重新配置订阅)尚未得到支持。
- Memory Overhead – 自动无锁队列可能会增加 RAM 使用,这在内存受限的微控制器上可能成为问题。
- Limited Benchmarks – 评估仅聚焦于少数面向控制的模型;计划在感知流水线(例如深度学习推理)上进行更广泛的测试。
- Future Directions – 将框架扩展以支持异构执行(CPU + GPU),集成 ROS 2 的实时执行器选项,并在 Simulink 中提供可视化的“并行化预览”。
作者
- Kenshin Obi
- Ryo Yoshinaka
- Hiroshi Fujimoto
- Takuya Azumi
论文信息
- arXiv ID: 2512.23605v1
- 分类: cs.SE
- 发表时间: 2025年12月29日
- PDF: 下载 PDF