[Paper] Simulink 모델에서 이벤트 기반 및 타이머 기반 ROS 2 노드를 위한 병렬화된 코드 생성

발행: (2025년 12월 30일 오전 01:59 GMT+9)
8 min read
원문: arXiv

Source: arXiv - 2512.23605v1

Overview

이 논문은 Simulink 모델을 ROS 2 노드용으로 자동으로 병렬화된 C/C++ 코드로 생성하는 모델‑기반 개발(MBD) 프레임워크를 제시합니다. 모델을 event‑driven 또는 timer‑driven으로 분류함으로써, 저자들은 복잡한 자율‑주행 워크로드를 일반적인 수동 스레딩 문제 없이 안전하게 멀티‑코어에서 실행할 수 있게 합니다.

주요 기여

  • 통합 병렬화 전략 ROS 2‑호환 Simulink 모델을 위해, 이벤트‑기반 및 타이머‑기반 실행 패턴을 모두 처리합니다.
  • 자동 코드 생성 파이프라인 멀티‑코어 CPU를 목표로 실행 가능한 ROS 2 노드 소스 코드를 생성합니다.
  • 데이터 무결성 보장 정적 분석을 통해 적절한 뮤텍스와 락‑프리 구조를 삽입하여 교착 상태와 레이스 컨디션을 제거합니다.
  • 실증 검증 여러 벤치마크 모델에서 모든 병렬화 패턴에 걸쳐 일관된 실행‑시간 감소를 보여줍니다.

방법론

  1. Model Classification – 프레임워크는 Simulink 다이어그램을 검사하고 각 서브시스템을 다음 중 하나로 태그합니다:

    • Event‑driven (ROS 2 토픽, 서비스, 또는 액션에 의해 트리거됨) 또는
    • Timer‑driven (ROS 2 타이머에 의해 구동되는 주기적 콜백).
  2. Dependency Analysis – 정적 데이터 흐름 분석을 통해 모델의 계산 블록들에 대한 방향성 비순환 그래프(DAG)를 구축하고, 어떤 부분을 안전하게 병렬 실행할 수 있는지 식별합니다.

  3. Task Partitioning – DAG를 태스크로 나누어 각각 별도의 OS 스레드에 매핑합니다. 이벤트‑드리븐 섹션에서는 구독당 전용 콜백 스레드를 생성하고, 타이머‑드리븐 섹션에서는 동일한 주기를 공유하는 주기적 작업들을 그룹화합니다.

  4. Concurrency Safeguards – 도구는 감지된 공유 상태 패턴에 따라 자동으로 뮤텍스 또는 락‑프리 큐를 삽입하여 병렬 태스크가 서로의 데이터를 손상시키지 않도록 보장합니다.

  5. Code Generation – Simulink의 기존 Coder 백엔드를 활용하여 프레임워크는 ROS 2와 호환되는 C++ 코드를 생성합니다. 여기에는 노드 초기화, 구독/서비스 등록, 그리고 다중 스레드 실행을 위한 스캐폴딩이 포함됩니다.

  6. Deployment & Benchmarking – 생성된 노드는 Linux 기반 멀티코어 플랫폼(예: 8코어 ARM 프로세서)용으로 컴파일되고, 단일 스레드 기준선과 비교하여 측정됩니다.

결과 및 발견

벤치마크 모델기준 (단일 코어)병렬화 (멀티 코어)속도 향상
Lane‑keeping controller (event‑driven)12.4 ms6.1 ms2.0×
Adaptive cruise control (timer‑driven, 20 Hz)8.9 ms4.3 ms2.1×
Sensor fusion (mixed)15.7 ms7.2 ms2.2×

테스트된 모든 패턴은 최악 상황 실행 시간에서 ≈2배 감소를 보였으며, 자동 병렬화가 숨겨진 오버헤드를 도입하지 않음을 확인했습니다. 또한, 생성된 코드는 ROS 2의 통합 테스트를 데드락이나 데이터 레이스 없이 통과하여 정적 분석의 견고함을 입증했습니다.

실용적 함의

  • 더 빠른 프로토타이핑 – 엔지니어는 Simulink의 시각적 환경 내에서 작업하면서 스레드 풀을 직접 구현하지 않고도 생산 등급의 멀티코어 ROS 2 노드를 얻을 수 있습니다.
  • 확장 가능한 자율주행 차량 스택 – 실시간 인식, 계획 및 제어 모듈이 이제 최신 자동차 SoC의 모든 코어를 활용하여 엄격한 지연 예산을 충족할 수 있습니다.
  • 디버깅 노력 감소 – 뮤텍스 삽입을 자동으로 처리함으로써, 프레임워크는 재현하기 어려운 동시성 버그의 일반적인 원인을 제거합니다.
  • 이식성 – 생성된 C++ 코드는 ROS 2 API를 준수하여 기존 ROS 2 생태계(예: Nav2, Autoware)와의 통합이 간편합니다.

개발자는 생성된 노드를 기존 ROS 2 launch 파일에 연결하고, 간단한 파라미터를 통해 코어 수를 조정하여 즉시 성능 향상을 얻을 수 있습니다.

제한 사항 및 향후 작업

  • 정적 분석 범위 – 현재 의존성 분석은 결정론적 데이터 흐름을 가정합니다; 동적 그래프 변경(예: 런타임 구독 재구성)은 아직 지원되지 않습니다.
  • 메모리 오버헤드 – 자동 lock‑free 큐는 RAM 사용량을 증가시킬 수 있으며, 메모리 제한이 있는 마이크로컨트롤러에서는 문제가 될 수 있습니다.
  • 제한된 벤치마크 – 평가는 소수의 제어 지향 모델에 집중되어 있으며, 인식 파이프라인(예: 딥러닝 추론)에 대한 보다 광범위한 테스트는 계획 중입니다.
  • 향후 방향 – 이 프레임워크를 이기종 실행(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

관련 글

더 보기 »