Upgrade to Pro — share decks privately, control downloads, hide ads and more …

cie-inspector

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →

 cie-inspector

ROSConJP 2026のLTで発表した内容です。

Avatar for Takumi Okamoto

Takumi Okamoto

October 10, 2026

Other Decks in Technology

Transcript

  1. cie-inspector ビルドせず‧実⾏せず、ROS 2 の callback / CallbackGroup 構造を ソースコードから抽出する NO

    BUILD NO ROS NO RUN ROSConJP 2026 Lightning Talk / Takumi Okmaoto a.k.a @MrBearing2 2026/8/4-/5 つくばカピオ
  2. callback 単位でスケジューリングを設定できる時代 CallbackIsolatedExecutor (CIE) CallbackGroup ごとに専⽤の OS スレッドを割り当てる Executor(TIER IV

    / Autoware) Node cg_sensor thread 0 cg_control thread 1 default thread 2 Linux のスケジューリング属性を callback 単位で policy(SCHED_FIFO 等)‧priority‧CPU affinity を YAML 1枚で設定 設定を書くために必要な情報 どのノードに‧どんな callback があり‧どの CallbackGroup に属するか policy / priority / affinity を thread ごとに適⽤ 設定ファイルを書くには、CallbackGroup のトポロジ を事前に知る必要がある
  3. その情報、いまは「実⾏しないと」得られない CIE の prerun ツール 実機でアプリを本当に⾛らせて callback group ID を列挙

    ros2 node info 組込みターゲットでは それが重い 起動中のノードに問い合わせる(起動が前提) 設定を書きたいのは 実⾏の前 なのに、 トレース(CARET / ros2_tracing) 情報は 実⾏の後 にしか⼿に⼊らない 計測ビルド + 実⾛⾏が必要 「どう分離するか」を考える段階で、構造が⾒えない
  4. ソースだけで抽出する ― cie-inspector workspace src/ ソースツリー Phase 1 package.xml +

    CMake 軽量パース Python + tree-sitter Phase 2 tree-sitter で C++ を構⽂解析 uv Phase 3 roscope XML 統合 (remap 解決) JSON インベントリ / サマリ表 / CIE 設定スケルトン (YAML) tree-sitter だから launch 層は roscope に委譲 コンパイル不能‧ヘッダ⽋損でも解析できる(libclang 不使⽤‧ビルド環 境不要) roscope はノード起動境界まで、その内側を cie-inspector が担当(補 完関係)
  5. 出⼒: サマリから CIE 設定の下書きまで ① callback / CallbackGroup インベントリ ②

    CIE (cie_thread_configurator) 実形式のスケルトン $ uvx cie-inspector extract ~/ws/src --format table NODE GROUP TYPE MEM --------------- ------------- -------------- --demo_pkg/talker sensor_group_ MutuallyExcl. 1 worker_group_ Reentrant 1 default_group MutuallyExcl. 3 $ cie-inspector resolve ~/ws/src \ --roscope-xml resolved.launch.xml \ --format cie-yaml 値は⼊れない。 policy / priority / affinity は TODO のまま出⼒。 スケジューリングの判断は⼈間の仕事、 構造の列挙は機械の仕事。 callback_groups: # demo_pkg/talker sensor_group_ - id: /talker@Subscription(/lidar/scan) policy: TODO priority: TODO affinity: TODO - id: /talker@Timer(500000000) ...
  6. 実⾏する前に、構造は分かる $ uvx cie-inspector extract ~/ros2_ws/src --format table $ roscope

    resolve app.launch.py -o resolved.launch.xml $ uvx cie-inspector resolve ~/ros2_ws/src --roscope-xml resolved.launch.xml --format cie-yaml CIE 設定の下書きが数秒で unresolved が次の作業を⽰す roscope と2コマンドで連携 prerun の前にトポロジを把握 実機で確認すべき箇所だけが残る launch 層 + ノード内部で完結 URL : https://github.com/MrBearing/cie-inspector