ROS 2 リアルタイム制御:締め切り、ジッター、ros2_control

リアルタイムロボット制御とは、指定された期限内に制限されたジッター付きで必要な計算とI/Oを完了させることを意味します。単に高い平均フレームレートを意味するわけではありません。時折数ミリ秒停止する1kHzループは、最悪のタイミングでプラントに合う遅いループよりも使いにくいことがあります。

ROS 2 リアルタイムシステムの一部となり得ますが、決定性はオペレーティングシステム、カーネル、スケジューリング、CPUおよび割り込みの配置、メモリ挙動、ドライバー、ミドルウェアパス、コントローラコード、ハードウェアインターフェースに依存します。非リアルタイムの知覚、ログ、サービスはクリティカルループ内で実行されるのではなく、境界付きインターフェースを通過すべきです。

このガイドをロボットの ジョイントネットワーク比較 および モーター・ドライバーアーキテクチャと組み合わせて活用してください。リアルタイムの主張では、最悪の信頼できる負荷と定義された故障応答下での測定が必要です。

締め切りと失敗の結果から始める

制御期間、許容開始ジッター、最悪実行時間、I/Oタイミング、データ年齢制限を定義します。次に、1回の遅延期限が何を意味するのかを定義します:制限されたコマンドを維持する、パフォーマンスを低下させる、コントローラーを停止するか、またはより安全な状態に入ること。答えは植物の速度や危険度によります。

ソフト、ファーム、ハードリアルタイムは、締め切りの遅延が有用性や受容性にどのように影響するかを表しています。それらはパフォーマンスバッジではありません。ほとんどの一般的なロボットコンピュータにはシステム固有の証拠が必要です。タイミング契約とコントローラー設定を保持し、後のソフトウェア変更で静かに無効にされないようにしましょう。

TurtleBot3バーガーが車載コンピュータセンサー、モーターコントローラー、配線を表示
1台のロボットは、より厳密な運動制御タスクと並行して知覚やネットワークを運用できますが、スケジューリングやデータ交換は明確に隔離する必要があります。出典: Kuscu0(Wikimedia Commons)。ライセンス: CC BY-SA 4.0

ハードウェアループは読み取り、更新、書き込みの後に続きます

ros2_controlコントローラーマネージャーのドキュメントでは、コントローラーとハードウェアインターフェースを管理するコンポーネントについて説明し、決定性について論じています。共通ループはハードウェアの状態を読み込み、コントローラを更新し、コマンドを設定されたレートで書き込みます。

物理的なサンプリングとコマンド適用が実際に行われるタイムスタンプ。ソフトウェア機能入力が必ずしもセンサーキャプチャ時間とは限りません。状態の年齢をコントローラーに記録し、ドライブのコマンド年齢を記録します。ループは古いネットワークデータを消費しながらも定期的に実行できます。

ループステージ締め切りの証拠隠れた遅延チェック
ハードウェア読み取りキャプチャ・トゥ・アリー可能時間デバイスまたはバスキュー物理的なタイムスタンプ
コントローラーのアップデート最悪の処刑時間割り当てまたはロックトレース持続時間
ハードウェア書き込みコマンド適用時間ネットワークのスケジューリングドライブタイムスタンプ
データ交換生産者と消費者の年齢コールバックバックログシーケンスカウンター
故障経路検出から安全状態へのサービスまたはライフサイクル作業注入ミス

スケジューリングポリシーにはCPUと割り込み設計が必要です

リアルタイムスレッドは適切な権限を持つ固定優先度のスケジューリングポリシーを使用できますが、優先度だけでは隔離にはなりません。CPUの親和性や割り込み処理はシステム全体を念頭に置いて割り当てます。低優先度のロックを待つ高優先度スレッドでも、期限を逃す可能性があります。

ネットワーク、ストレージ、GPU、カメラ、バックグラウンドサービスからの干渉を測定します。重要なカーネルや安全作業を飢えさせないようにしましょう。ドキュメントスケジューラ、優先度、アフィニティ、電源状態、ファームウェアなど、テスト機と展開機は同等です。

メモリ障害と割り当てはタイミングの尾部を生み出します

動的割り当て、ページフォールト、メモリの回収、無制限のコンテナ成長は変動遅延を引き起こすことがあります。バッファのプリアロケーション、適切な場所でのメモリロック、関連するコードやデータパスのウォーム、メッセージサイズの制限を管理します。証明された動作なしにタイトループ内でメモリを割り当てたり解放したりしないでください。

メモリ準備はキャッシュ競合やデバイスDMA干渉を解決しません。アプリケーション全体に負荷をかけ、テールレイテンシを点検してください。ループがアクティブな間、エラーパス、パラメータ変更、コントローラー遷移が予期せず割り当てられたりブロックされたりしないか確認してください。

ブロックI/Oとログ記録はループの外に置かれるべきです

ファイル書き込み、コンソール出力、同期サービス、DNS、動的ディスカバリー、一般的なコールバックの待ち時間は、特定の実装が境界を証明しない限り、ハードバウンド更新パス内で適切ではありません。リアルタイムセーフな仕組みを通じて、優先度の低い消費者にコンパクトな診断を送信します。

キュー長を制限し、新しいデータや古いデータをドロップするかを判断します。無制限ログはタイミングの問題をメモリの増加に移すことができます。診断が放棄された場合でもカウンターを保持し、証拠が破棄されたからといってシステムが健全に見えないようにしましょう。

5段階 ROS 2 リアルタイム制御ループ設計
カーネル、スケジューリング、コードパス、ドライバ、ハードウェアはすべて決定性に寄与しています。出典:Physical AI Lab。

リアルタイムセーフバッファはタイミング領域を分離します

非リアルタイムプランナーはコマンドや軌道をロックフリーまたは有界ハンドオフに公開でき、コントローラーはプロデューサーを待たずに最新の完全オブジェクトを読み取ることができます。状態は別の有界スナップショットを通って外側へ移動できます。所有権と生涯は明確でなければなりません。

コマンドシーケンス、タイムスタンプ、タイムアウトを検証します。もしプロデューサーがストールした場合、インナーループは古いトルクを永遠に繰り返してはいけません。パラメータの更新やモードスイッチも、部分的に更新された構成がアクチュエーターに届くことがないように、原子的または段階的な適用が必要です。

動作クリティカルループ?推奨パターン故障ポリシー
連合同状態を読んでくださいはいバウンデッドハードウェアインターフェース古くなったサンプルを検出する
制御法則の更新はい固定された仕事と記憶締め切りモニター
アクチュエーターコマンドを書きますはい有界インターフェースローカルタイムアウト
セーブログいいえワーカーへの境界キュードロップ・アンド・カウント
サービスまたはパラメータ作業いいえステージからスワップ無効な遷移を拒否する

DDS は役に立ちますが、モーター電流ループはデフォルトではありません

DDS および ROS 2 通信は設定可能なサービス品質や分散アプリケーションをサポートできますが、内部の電流ループはしばしばドライブや専用コントローラ内で動作します。ネットワークおよび実行者の経路は、厳しいジョイントコントロール期限内に置かれる前に測定されなければなりません。

タイミング証拠が合う場合には、オーケストレーション、軌道、状態、そして上位層には ROS 2 を活用しましょう。破壊的な過電流と迅速な保護は局所的に保ちましょう。ミドルウェアの選択は、ドライブレベルの決定論的制御やハードウェア安全回路の代替ではありません。

トレーシングは稀なスケジューリングやコールバック遅延を露呈します

ROS 2 ドキュメントには、実行分析のための トレースガイダン スが含まれています。計器コントローラーのサイクル、コールバック、I/O、デッドラインモニターは低負荷かつ特性評価の高いものです。トレースをドライブログやネットワークログと整合させます。

短期平均ではなく、長期的なヒストグラムや最大値を収集しましょう。CPU、ネットワーク、ストレージ、熱スロットリング、グラフィックス負荷を再現します。各テールの前にどのイベントが先行したかを特定しましょう。痕跡のない単一の最大値は修正が困難ですが、最大値を欠くパーセンタイルは危険な見逃しを隠すことがあります。

リアルタイムカーネルは一部のシステムでは必要ですが、十分ではありません

プリエンプティブ可能なリアルタイムカーネルはスケジューリング遅延を削減できますが、アプリケーションロック、ドライバー、ファームウェア、電源管理、そして無限のコードは残ります。逆に、控えめなプラントは慎重に測定された非RT構成で期限を守ることもあります。要件と証拠が決定します。

BIOS、CPUの電源状態、熱挙動、ドライバーのバージョンを検証してください。カーネル、ミドルウェア、コントローラー、ハードウェアのアップデート後に再テストしてください。本番イメージと展開設定は、タイミングレポートとともにバージョン設定されるべきです。

ストレステストにはミスと回復が含まれなければなりません

最大コントローラ数、フルネットワークトラフィック、センサーストリーム、ログ記録、そして現実的なアプリケーション負荷を実行しましょう。サーマルソーク、ストレージアクティビティ、エラー処理を追加しましょう。測定期間、実行時間、捕獲から制御までの年齢、コマンド適用年齢、連続失敗数。

サポートされている場合は、ステールステート、コントローラーエラー、ハードウェアタイムアウト、クロック変更を注入します。意図された非稼働モード、停止モード、または劣化モードを確認してください。リアルタイムループは、その故障挙動が制限されている場合にのみ運用的に有用です。

  • ピリオド、ジッター、データ時代の契約を書いてください。
  • 読み書き・更新・書き込みのパスを制限してください。
  • 記憶をプリアロケーションし、ブロック作業を外で行う。
  • フル稼働時のテールレイテンシをトレースします。
  • 古いデータや欠落したサイクルの挙動を定義し、テストします。

よくある質問

ROS 2自体がリアルタイムオペレーティングシステムなのでしょうか?

いいえ。 ROS 2、OS、スケジューリング、コード、ドライバー、ハードウェアが適切に設計・測定された際にリアルタイムシステムに参加できるミドルウェアやライブラリのことです。

DDSジョイントループを決定論的としますか?

自動的には。サービス品質はコミュニケーションの意味論に役立ちますが、エンドツーエンドの遅延、エグゼキューターのスケジューリング、ハードウェアの適用時間については依然として証拠が必要です。

高い制御周波数が常に良いのでしょうか?

いいえ。プラント、センサー、アクチュエーター、計算は十分な余裕を持ってそれを支えなければなりません。締め切りを逃す速いループは性能が悪くなることがあります。

Pythonはハードリアルタイムのモーターループを実行できますか?

典型的なPythonの実行には非決定性の原因があり、通常は最もタイトなループの外に置かれます。測定された要件とアーキテクチャが許す場合のみ使用してください。

まずどのタイミングを測定すべきでしょうか?

キャプチャからコマンドまでの全チェーンを測定し、周期、最悪実行、ジッター、状態年齢、コマンド-適用遅延、ミスサイクル回復などが含まれます。

リアルタイム制御境界注記

ROS 2 とリアルタイムカーネルだけでは決定性が保証されません。スケジューリング、メモリ、ドライバ、通信、コントローラコード、ハードウェアI/Oを最悪のケース負荷下で検証し、関連するすべての故障遷移を行います。