ROS 2ライフサイクルノードは、実行中のプロセスと利用可能なロボット機能を同一視するのではなく、機能的な準備状況を可視化します。マネージドステートマシンは、リソース設定、非アクティブ準備状況、アクティブ処理、端末障害を分離します。また、監督者が調整できる標準的な移行サービスも提供しています。
ライフサイクル状態はソフトウェアの証拠であり、物理的な安全状態ではありません。カメラはブラインド中でもアクティブにでき、非アクティブアクチュエーターノードは出力を明示的に妨害しない限りドライブを通電したままにできます。すべての移行には前提条件、タイムアウトの動作、ロボットの動作状態との接続が必要です。
このガイドを物理 AI安全層ガイド および ハードウェアインターフェースガイドros2_control併用してください。テスト失敗は通常の起動シーケンスと同様に意図的に移行します。
プロセスの健全性と機能的準備状態を分離する
プロセスが存在し、グラフの発見に答えても、キャリブレーションされたセンサーやデバイス通信、有効な構成が欠けている場合もあります。管理された状態はシステムにその区別を報告させます。オペレーターとスーパーバイザーは、プロセス、ライフサイクル、ハードウェア、アプリケーションの状態を一つの緑色のインジケーターに圧縮するのではなく、別々に表示すべきです。
未設定、非アクティブ、アクティブの各ノードが何を約束するかを定義してください。出版物、購読、サービス、デバイス出力、保持データを含めてください。消費者は、非アクティブな出版社が沈黙したかどうか、無効なマーカーを発行しているか、最後の値を保持しているかを知るべきです。

4つの主要状態を一貫して使う
ROS 2マネージドノード設計では、未設定、非アクティブ、アクティブ、ファイナライズドのプライマリ状態が定義され、設定、有効化、無効化、クリーンアップ、シャットダウン、エラー処理のための中間遷移状態があります。外部の管理職は通常、移行を要求し、その結果を観察します。
ROS 2マネージドノード設計は意図された意味論を記述します。実装は、通常の処理を継続しながら非アクティブで、失敗した遷移を隠しながら自らをライフサイクル準拠と称してはなりません。標準ステートマシンの周りに追加された動作を記録してください。
| 状態 | 資料 | 関数処理 | ロボットの要件 |
|---|---|---|---|
| 未構成 | ミニマル | いいえ | 出力が抑制される |
| 非稼働 | 準備 | 管理された作業は停止されました | 危険な指揮は禁止 |
| 現役 | 運用 | 有効化 | すべてのアクティベーションゲートは有効です |
| 最終決定 | 検査のため保留 | いいえ | 物理的な安全状態は維持されています |
| エラー処理 | 回復依存 | 制限付き | 有界フォルト応答 |
モーションを指示せずにリソースを設定する
構成はメモリの割り当て、管理されたパブリッシャーやサブスクリプションの作成、パラメータの読み込み、デバイスの開封、静的セットアップの検証などが可能です。長寿命の資源は、非アクティブ・アクティブ両方の状態で必要なときにここに置かれるべきです。準備が整えない場合、コールバックは失敗を返すべきです。
ドライブやセンサーを開けるだけで物理的な挙動が変わることもあります。設定前に、ライン、ブレーキ、ウォッチドッグ、初期コマンドを有効化してください。構成が部分的に成功した場合は、リトライ時に未知のデバイス状態を引き継がないように、各取得したリソースを解放または隔離します。
非アクティブを検証可能な運用条件にする
非アクティブとは、準備は整っているが通常の管理処理は行っていないことを意味します。検査、パラメータ変更、依存関係の調整に有用です。モーション生成ノードの場合、タイマー、パブリッシャー、ハードウェアパスが前のアクティブ期間からの危険な出力を継続送信できないか確認してください。
設定からエントリーをテストし、無効化します。コールバックが処理されない間にメッセージが蓄積される可能性があるため、キューや耐久性に注意してください。後からアクティベーションが始まる際は、アプリケーションの有効性制限を超えるデータを拒否し、バックログを最新のものとして消費するのを防ぎましょう。

現在の前提条件を伴うゲート起動
活性化は短く決定論的であるべきで、ヘビー初期化は構成に含まれます。要請前に、監督者は必要なノード、有効なキャリブレーション、同期時間、電流センサーデータ、ハードウェアモードおよび適用される安全条件を検証する必要があります。各ゲートには所有者と有効期限が必要です。
アクティベーション成功とは、ノードが宣言されたサービスを達成できることを意味すべきであり、単に成功を返on_activateだけでなく。最初の有効なサンプル、確立されたデバイスモード、またはコントローラーの主張などの証拠を公開してください。証拠が最新になるまで下流の活性化をブロックしてください。
| 移行 | 前提条件 | タイムアウトのアクション | 証拠 |
|---|---|---|---|
| 構成 | パラメータと到達可能なデバイス | 帰還失敗 | 資源インベントリー |
| 起動 | 依存関係と有効なデータ | 非活動のまま | 最初の有効な出力 |
| 無効化 | 停止要請を受け入れます | 安全対応をエスカレートさせる | 出力抑制 |
| 清掃 | 解放可能な資源 | ここでエラー処理が登場します | 所有権の保持なし |
| 回復 | 故障原因の除去 | バウンドリトライ | 新鮮な準備状況確認 |
非活性化とクリーンアップの区別
無効化はアクティブのみの動作を逆転させ、準備済みノードを非アクティブに戻します。クリーンアップは設定済みのリソースを解放し、未設定に戻します。両方を一般的な停止操作として扱うと、再起動が遅くなり、所有権が曖昧になることがあります。
停止が求められた後、出力が停止するまでの時間を測定してください。ノードが応答しない場合、スーパーバイザーサービスコールだけが唯一の保護メカニズムにはなりません。独立したハードウェアまたはシステムレベルのタイムアウト処理は、必要な物理的応答を強制しなければなりません。
on_errorを有界の決定点として使います
エラー処理は既知の目的地に到達するか、回復失敗を認める程度の状態をクリーンアップするべきです。無条件の成功の後にコンセイトとアクティベートが続くと、無限の再起動ループが生まれ、故障したハードウェアが繰り返し活性化したりネットワークがフラッシュ化したりします。
一時的、持続的、そして完全性を脅かす故障を分類します。各クラスごとに再試回数、遅延、バックオフ、エスカレーションを設定しましょう。最初の故障と復旧の試みはログに保存してください。原因が解決した証拠がない場合は、人間またはより上位レベルのリセットを要求してください。
スーパーバイザーがノードの責任を置き換えずに調整できるようにします
ライフサイクルマネージャーは望ましい順序を把握し、トランジションを呼び出すことができますが、各ノードは正確な準備状況、安全なコールバック、ローカルリソースクリーンアップの責任を負い続けます。マネージャーが消えた場合、システムが明示的にその損失を監視しない限り、ノードは自動的に物理的に安全とはなりません。
スーパーバイザーの心拍、所有権選択、再始動の定義をしましょう。2人のマネージャーが相反する引き継ぎを出すのは避けましょう。管理通信が途絶えた場合は、リスク評価に基づいてノードが保持、非アクティブ化、または別のアプリケーション状態に入るかを選択します。
依存グラフからスタートアップを構築する
開始順は固定睡眠ではなく、準備度依存関係に従うべきです。時間同期はセンサーに先行することもあります。キャリブレーション済みのセンサーが状態推定に先行することもあります。有効な状態が計画に先行することもあります。制御起動前に、主張されたハードウェアおよびセーフモードが使用される場合があります。
各辺をタイムアウト付きの観測可能な条件として表現します。独立したブランチは並列化し、上流の約束が消えたら依存関係は逆順にロールバックします。ソースが無効になる間もアクティブのままのノードは、契約に従って劣化状態を公開するか無効化すべきです。
一時的、持続的および連鎖的な故障のテスト
遅延センサー、利用不可デバイス、無効パラメータ、例外、移行失敗、スーパーバイザーの死、すでにアクティブな依存関係の喪失を注入します。ライフサイクル状態、物理出力、診断識別、再試行制限、回復やエスカレーションまでの時間を確認します。
カスケードテストは重要です。なぜなら、あるノードの非アクティブ化が他のノードのコールバックをブロックしたり、コマンドをキューに残したりする可能性があるからです。CPUとネットワーク負荷を落とすリカバリーを実行してください。アイドルベンチで動作するシーケンスは、本来のコンピュータでは異なるタイムアウトが起こることがあります。
正常な遷移と失敗した遷移を均等に記録します
遷移リクエスト、リクエスター、前の状態、開始時間、完了時間、結果、理由、結果の物理モードをログに記録します。これらのイベントをハードウェアおよびアプリケーションログと1クロックで関連付けます。タイミングのない状態ラベルでは、遅延停止や部分的な再始動を説明できません。
遷移遅延と失敗頻度は追跡しますが、前提条件を弱めて成功率を最適化することはありません。最も重要な受理基準は、必要な証拠が欠如または古くなった場合にシステムがアクティブにならないことです。
バージョンAライフサイクルリカバリー契約
ノードのバージョン、パラメータ、依存関係グラフ、遷移ポリシー、タイムアウト、回復制限を一緒に保存します。デバイス、 QoS、エグゼキュータレイアウト、起動オーケストレーションの変更後にライフサイクルテストを再実行してください。これらは移行タイミングを変える可能性があります。
ROSサービス応答だけでなく、物理的な出力を含む受け入れチェックリストを使用してください。
- すべての一次状態における行動を定義してください。
- 現在の観察可能な証拠によるゲート起動。
- バウンドリトライと最初のフォルトを保持します。
- テストマネージャーの損失と連鎖的な依存関係について。
- すべての移行時の物理的な出力を測定してください。
よくある質問
ライフサイクルノードはロボットを自動的に安全にするのでしょうか?
いいえ。ソフトウェアの状態や遷移を露出させます。物理的安全には、ハードウェア、制御、適用措置を別々に必要とします。
非アクティブは停止したプロセスと同じですか?
いいえ。管理された機能処理が無効化されている間も、プロセスと設定されたリソースは存在し続けることができます。
すべての故障がクリーンアップと設定をトリガーすべきでしょうか?
いいえ。復旧は故障クラス、資源の整合性、そして原因が解決可能かどうかに依存します。
複数のノードをどのように活性化すべきでしょうか?
観測可能な依存ゲートを使い、固定遅延だけでなく、下流の機能よりも上流の準備状態を起動してください。
もしライフサイクルマネージャーが故障したらどうなりますか?
自動的には、アーキテクチャがマネージャーの喪失を監視し、保持、無効化、または安全な対応を定義しない限り、何も起こりません。
ライフサイクルおよび物理的安全境界
ライフサイクル状態は安全認証やハードウェア保証ではありません。遷移を測定されたデバイスの挙動と、ロボット用途に適した独立した安全対策と結びつけます。