Ros
ROS 2 の監視→デバッグ→再デプロイをエージェントで閉ループにする
監視は決定的コード (token ゼロ)、LLM エージェントはイベント駆動で起きる。人間が rosbag を渡してフィードバックする工程を消す構成と token 消費の抑え方
要点: 「人間が bag を録ってエージェントに渡す」工程は、監視を決定的コードに任せてエージェントをイベント駆動で起こす構成で消せる。token 消費 = 発火回数 × 1 回の調査コストで、両方独立に絞れる。
閉ループの形
┌────────────────────────────────────────────┐
│ ロボット (ROS 2 stack) │
│ ├ watchdog ノード (不変条件・contract 監視) │──異常──┐
│ └ ros2 bag record --snapshot-mode (循環) │ │
└────────────────────────────────────────────┘ │
▲ ▼
再起動・param │ 通知 (MCP notification / hook)
│ ▼
┌────────────────────────────────────────────┐
│ エージェント (イベント駆動で起床) │
│ ①通知で起床 → ②MCP tool で調査 │
│ → ③コード修正 → ④ビルド → ⑤部分再起動 │
│ → ⑥smoke 確認 → 復帰 or 人間へ報告 │
└────────────────────────────────────────────┘- 監視 (常駐) はエージェントではなく決定的コード。検査内容は [[runtime-verification-layers]] の 4 層
- 異常検出と同時に snapshot サービスで直前 N 秒の bag + manifest を自動保存 ([[rosbag-manifest-launch-wrapper]])。エージェントが起きた時点で証拠が揃っている
- エージェントに必要な口: topic echo / node info / param dump・set / service call / TF lookup / bag record を MCP tool 化する。echo は必ず件数・バイト数・時間で cap する (context 破裂防止)
token 消費の抑え方
発火回数を絞る
- severity gate: WARN は UI に出すだけ。エージェントを起こすのは ERROR 以上
- debounce / dedup: 同一 finding の再発火を N 分抑制
- snapshot 保存はエージェント不要で完結させる (後でまとめて見られる)
1 回の調査コストを絞る
- watchdog 側で要約を作ってから渡す: 生 bag を渡さない。「finding 種別・直前 30 s の該当 topic 統計・関連数値の表」を JSON で渡すと初手から仮説に入れる
- 定型調査はスクリプト化: エージェントはスクリプト実行 + 数値読みだけ
- トリアージを安いモデルで: 「既知パターンか新規か」を小型モデルで判定し、新規だけ本調査に回す
例: 一晩の sim で findings 20 件 → dedup 5 件 → 既知 3 件は自動分類 → 新規 2 件だけ本調査。
カバレッジの限界
| 異常クラス | 検出 |
|---|---|
| 数値破綻・通信断・QoS 不整合 | 可 (不変条件) |
| 宣言違反・タイムアウト | 可 (contract) |
| 推定 vs 真値のズレ | 可 (sim 限定) |
| 挙動の回帰 | 可 (golden run) |
| 設計そのものの誤り | 不能 |
| 仕様の解釈違い | 不能 |
下 2 つは人間 (またはエージェントとの議論) の領分。閉ループが覆うのは「手を動かす系」のデバッグ。
実機への拡張
自動再デプロイは sim 限定にし、実機は承認制から始める (誤修正 → 自動再起動 → 暴走 の経路を塞ぐ)。基板レベルの観測は [[esp32-zenoh-can-probe]] で FW 無改修から始められる。
関連
- [[runtime-verification-layers]] — watchdog の検査 4 層
- [[rosbag-manifest-launch-wrapper]] — snapshot bag の再現性
- [[esp32-zenoh-can-probe]] — 基板レベルの観測をプローブで前倒し
最終更新: