ロボットの長期運用では、型が一致しているだけで安全に接続できるとは限りません。
先に結論
ロボットを長期間保守するには、インターフェースをデータ型だけでなく、データの意味、単位、座標系、時刻、品質、通信条件、モデル入出力、変更手順まで含む契約として管理します。センサー、認識、計画、制御の各境界で契約を分け、互換性を層別に判定することが基本です。
実装では、バージョン付きスキーマ、旧版と新版の並行運用、変換アダプター、契約テスト、実データのリプレイを組み合わせます。コンパイルが成功しても、単位や座標系の変更、QoSの不一致、モデル前処理の差、制御系の遅延増加までは検出できません。
なぜ互換性管理が難しいのか
Physical AIの処理系は、センサー、通信ミドルウェア、推論モデル、計画器、制御器、アクチュエーターが連鎖しています。一つの変更が複数チームと実行環境に波及するため、「フィールドが同じ型か」だけでは判断できません。
数値型が同じでも、単位がメートルからミリメートルに変われば値の意味は変わります。座標フレームが変われば、受信側は同じ数値を別の位置として解釈します。計測時刻と受信時刻の混同、欠測値と有効性フラグの扱いの違いも、型互換でありながら機能を壊す要因です。
管理すべき契約
ROS 2にはmsg、srv、actionがあり、定義から複数言語向けの型と関連コードが生成されます。ただし通信の可否は型だけでなくQoSにも依存します。reliability、durability、history、depth、deadline、lifespanなどの設定がPublisherとSubscriberの間で互換しなければ、通信が成立しない場合があります。
DDS-XTypesは、型の拡張性、メンバーの識別、型の割り当て可能性などを扱います。しかし、実際の利用可能範囲は、ROS 2の型サポート、RMW実装、DDSミドルウェア、設定に依存します。仕様上可能な拡張を、そのまま対象環境へ適用できるとは限りません。
データ契約には、少なくとも次を記録します。
- フィールド名、型、必須性、既定値
- 単位、値の範囲、精度
- 座標系、フレーム名、軸の向き、回転表現
- 計測時刻、生成時刻、受信時刻など時刻の意味
- 共分散、有効性、欠測、品質の表現
- QoS、許容遅延、deadlineなどの通信条件
- モデルの入力・出力テンソルの型、形状、前処理、後処理
- 変更理由、サポート期間、廃止予定日
単位や座標の規約にはREP-103 、モバイルロボットのフレーム関係にはREP-105 を参照できます。
推論モデルもインターフェースである
モデルファイルのバージョンだけでは不十分です。ONNXでは、モデル形式のIRバージョン、演算子セットのバージョン、演算子仕様の変更を区別しています。入力テンソルの形状・型に加え、前処理、量子化、キャリブレーション、後処理も契約として記録します。
テンソル形状や演算子セットが互換でも、前処理や学習データの変更による認識精度、さらに制御性能の維持までは仕様書から保証できません。モデル形式の互換性と、モデルを利用した機能の性能維持は別に検証します。
flowchart LR S["センサー"] --> SC["センサー契約\n意味・単位\n座標系・時刻\n品質・バージョン"] SC --> M["ROS 2 msg / srv / action\n型・必須性・既定値"] M --> QC["通信契約\nQoS・転送条件\n遅延・deadline・lifespan"] QC --> I["認識モデル\n入力・出力テンソル\n形状・型・前処理・後処理"] I --> PC["計画・制御契約\nコマンド・制約\n許容遅延・欠測・ジッター"] PC --> A["アクチュエーター"] A --> F["フィードバック\n計測値・時刻・品質"] F -. "契約テスト・リプレイ・影響追跡" .-> SC B1["各境界で管理する項目\nスキーマ\n座標系\n時刻\n品質\nバージョン"] -. "境界横断の契約" .-> M B1 -. "境界横断の契約" .-> I B1 -. "境界横断の契約" .-> PC
センサーの意味・単位からROS 2の型、QoSと転送、モデル入出力、計画・制御コマンド、アクチュエーターのフィードバックまでを連続した契約として捉えます。各境界にスキーマ、座標系、時刻、品質、バージョンを置くと、変更箇所と影響範囲を追跡しやすくなります。
変更の種類と対応
| 変更対象 | 主なリスク | 推奨する対応 |
|---|---|---|
| フィールド追加 | 受信側が新しい値を扱えない | 既定値、受信側検証、並行運用 |
| フィールド削除 | 旧クライアントが値を要求する | 旧版維持、廃止日と移行手順の告知 |
| 型変更 | 直列化や計算結果が変わる | 新スキーマまたは変換アダプター |
| 単位・座標系変更 | 型互換でも意味が変わる | 明示的な変換、別フィールドや別トピック |
| QoS変更 | PublisherとSubscriberが接続できない | QoS組み合わせテスト、段階移行 |
| モデル変更 | IR、演算子、形状、前処理が不一致 | モデル契約、ゴールデンデータ比較 |
| 制御条件変更 | 遅延、欠測、制約が挙動に影響 | 性能・安全限界テスト |
形式ごとに規則は異なります。Protobufでは、既存フィールドの番号を変更・再利用せず、削除したフィールドの番号や名前を予約することが推奨されています。これはProtobuf固有の規則であり、ROS 2のmsg定義やDDS-XTypesにそのまま適用できるとは限りません。
バージョニングと段階移行
公開APIにはSemantic Versioningを使えます。後方互換性を壊す変更はメジャー、互換性を保つ機能追加はマイナー、互換性を保つ修正はパッチとして扱います。ただし、SemVerだけでROS 2のQoS、DDSの型割り当て、モデル精度の変化まで表現できるわけではありません。スキーマ、モデル、通信設定、ROS 2ディストリビューションなどのバージョンを分けて記録します。
互換性マトリクスには、旧版と新版の対応、許容される変更、並行運用期間、アダプターの有無、サポート対象、廃止予定日、移行手順、オーナー、テスト責任者を登録します。
非互換変更では、旧版を即時置換しません。バージョン付きトピックやサービス、変換アダプター、デュアルパブリッシュで移行期間を設けます。ただし併存はCPU、帯域、メモリ、遅延を増やす可能性があるため、対象ロボットでの測定が必要です。
リリース前の検証ゲート
- スキーマ差分を検査し、フィールド、型、単位、座標系を確認する
- ROS 2のコード生成とコンパイルを行う
- PublisherとSubscriberのQoS組み合わせを検証する
- 記録した実データを旧版・新版でリプレイする
- モデル入出力をゴールデンデータと比較する
- 遅延、deadline、欠測、ジッターを対象環境で確認する
- 制御系の安全限界、段階展開、ロールバック条件を確認する
ROS 2には単体テスト、統合テスト、CIへの組み込みに関する仕組みがあります。また、rosbag2でトピックデータを記録・再生できます。リプレイは回帰検証に利用できますが、それだけで契約や安全性が保証されるわけではありません。
制御系の許容遅延、deadline、ジッター、欠測率は、ロボットの安全要求と制御設計に依存します。一般仕様から一意に決めず、対象システムの要求として定義してください。
採用判断の基準
単一チームの短期試作では、単純なスキーマと基本テストから始める選択肢もあります。一方、複数チームが異なる周期でセンサー、認識、計画、制御を更新する場合や、実機を長期間運用する場合は、契約の正本、オーナー、サポート期間、移行手順を登録するガバナンスが必要です。
判断基準は「変更できるか」ではなく、「変更後も意味、通信、モデル、制御の各層で影響を説明できるか」です。対象のROS 2ディストリビューション、RMW実装、DDSミドルウェア、コード生成器の組み合わせで、実際の受け入れ可否も検証します。
まとめ
長期保守に強いロボットシステムは、型の一致だけを互換性とみなしません。単位、座標系、時刻、品質、QoS、モデル形式、前処理、制御条件を契約化し、形式ごとにバージョニング規則を分けて管理します。非互換変更にはアダプターや並行運用を使い、スキーマ検査、通信テスト、リプレイ、モデル比較、安全限界テストをリリースゲートに組み込みます。
参考情報
- ROS 2 Interfaces
- ROS 2 Quality of Service settings
- DDS-XTypes 1.3
- ROS REP-103 、REP-105
- Protocol Buffers: Updating a Message Type
- Semantic Versioning 2.0.0
- ONNX Versioning
- ROS 2 Testing
- rosbag2による記録と再生
互換性を仕様と検証の両面で管理することが、変更を止めない保守につながります。
AI利用に関する注記
本サイトの記事は、複数のAIエージェントによる調査・執筆・レビューを経て公開しています。正確性と品質の向上に努めていますが、内容については必ず一次情報をご確認ください。