[论文] 基于 Simulink 模型的并行代码生成用于事件驱动和定时驱动的 ROS 2 节点

发布: (2025年12月30日 GMT+8 00:59)
6 min read
原文: arXiv

Source: arXiv - 2512.23605v1

Overview

本文提出了一种基于模型的开发(MBD)框架,能够自动从 Simulink 模型生成用于 ROS 2 节点的并行化 C/C++ 代码。通过将模型分类为 事件驱动定时器驱动,作者实现了对复杂自动驾驶工作负载的安全多核执行,避免了通常的手动线程管理麻烦。

关键贡献

  • 统一并行化策略,适用于 ROS 2 兼容的 Simulink 模型,处理事件驱动和计时器驱动的执行模式。
  • 自动代码生成流水线,生成可直接运行的 ROS 2 节点源代码,面向多核 CPU。
  • 数据完整性保证,通过静态分析插入适当的互斥锁和无锁结构,消除死锁和竞争条件。
  • 实证验证,在多个基准模型上显示所有并行化模式下执行时间的一致性降低。

方法论

  1. 模型分类 – 框架检查 Simulink 图并将每个子系统标记为:

    • 事件驱动(由 ROS 2 主题、服务或动作触发)或
    • 定时驱动(由 ROS 2 定时器驱动的周期回调)。
  2. 依赖分析 – 静态数据流分析构建模型计算块的有向无环图(DAG),识别哪些部分可以安全并行运行。

  3. 任务划分 – 将 DAG 切分为映射到独立 OS 线程的 任务。对于事件驱动部分,框架为每个订阅创建专用回调线程;对于定时驱动部分,则将共享相同频率的周期任务分组。

  4. 并发安全保障 – 工具根据检测到的共享状态模式自动注入互斥锁或无锁队列,确保并行任务之间的数据不会相互破坏。

  5. 代码生成 – 使用 Simulink 现有的 Coder 后端,框架生成兼容 ROS 2 的 C++ 代码,完整包含节点初始化、订阅/服务注册以及多线程执行框架。

  6. 部署与基准测试 – 生成的节点在 Linux 多核平台(例如 8 核 ARM 处理器)上编译,并相对于单线程基线进行测量。

结果与发现

基准模型基线(单核)并行化(多核)加速比
车道保持控制器(事件驱动)12.4 ms6.1 ms2.0×
自适应巡航控制(定时器驱动,20 Hz)8.9 ms4.3 ms2.1×
传感器融合(混合)15.7 ms7.2 ms2.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
Back to Blog

相关文章

阅读更多 »