isaac-mission-control-showcase について
isaac-mission-control-showcaseは、Nova Carterの小規模倉庫デモを実行する統合スキルです。実行時に解決する上流スキルを調整し、ローカルのIsaac Sim、Mission Controlのクラウドスタック、実行証跡を扱います。
主な機能
- 01起動前の依存関係とホスト状態の確認
- 02ローカルIsaac Simでのロボット表示
- 03スタック起動と決定的なルート実行
- 04実行マニフェストと受け入れ結果の記録
- 05実行記録にあるコンテナのみ停止
活用シーン
- 01Nova Carterの倉庫デモの起動
- 02決定的なルートミッションの実行と確認
- 03中断した実行の状態確認とリソース停止
MCP 対応
ISAAC_PYTHON_PORT上のisaac-sim-remote Pythonサーバーを介して、シミュレーション段階の操作を行います。このスキル自体がMCPサービスであるとは記載されていません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nvidia/ skills --skill isaac-mission-control-showcaseインストール後、Claude Code で/isaac-mission-control-showcaseを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BENCHMARK.mdskill-card.mdskill.oms.sigupstream-versions.lock.jsonassets/carter_warehouse_navigation.yamlconfig/skillspector-baseline.yamlevals/evals.jsonreferences/publishing-layout.mdtroubleshooting.mdworkflow.mdreferences/bring-up-cloud-stack/README.mdreferences/bring-up-cloud-stack/scripts/run.pyreferences/change-fleet-composition/README.mdreferences/change-fleet-composition/scripts/run.pyreferences/change-map/README.mdreferences/change-map/scripts/run.pyreferences/isaac-sim-installation/README.mdreferences/isaac-sim-remote/README.mdreferences/isaac-sim-remote/scripts/run.pyscripts/doctor.pyrestore_isaac_scene.pyrun_state.pyrun.shshowcase.pyshared/dependency_manifest.pytests/test_lifecycle.py詳細
Mission Control Showcase
デフォルトの小規模倉庫向け Nova Carter ショーケースには、同梱のランナーを使用します。
このランナーが統合を担い、実行時に解決する上流スキル 5 つを調整します。これらのスキルはベンダーとして同梱されません。初回実行の前に、python3 "$SKILL_DIR/scripts/doctor.py" dependencies --prepare を実行して、これらの依存関係を一度解決してください。
ホストのスワップ変更の安全性
ユーザーから、対象の操作、デバイスまたはファイルパス、サイズについて明示的な承認を得る前に、ホストのスワップを作成、サイズ変更、有効化、削除してはいけません。たとえば、「/swapfile に 8 GB のスワップファイルを作成してください」という依頼なら、3 つすべてが指定されています。ショーケースの実行、事前チェックの合格、メモリ不足の解消といった一般的な依頼は、スワップの変更を許可するものではありません。メモリの事前チェックに失敗した場合は、不足分を報告し、メモリを解放するか、より大容量のホストを使用するよう提案してください。ユーザーがその選択肢を希望する場合に限り、スワップ変更について具体的な承認を求めてください。承認前に、スワップを変更するコマンドを提示したり、変更を実行したりしてはいけません。スワップの変更は、ショーケースの終了後も有効なまま残ることがあります。
同梱リソースの場所を特定する
コマンドを実行する前に、スキルローダーから提供されたスキルの場所を使って、読み込まれたこの SKILL.md を含むディレクトリの絶対パスを SKILL_DIR に設定してください。各シェル呼び出しで、その値を維持してください。現在の作業ディレクトリから導き出したり、ソースリポジトリのレイアウトや固定のインストール先を前提にしたりしてはいけません。
このドキュメントと参照先にある scripts/、references/、shared/、assets/、config/、upstream-versions.lock.json など、すべての同梱パスは SKILL_DIR からの相対パスです。それらは当該ディレクトリ配下から読み込み、参照先に記載されたコマンド例に従う場合は、同梱スクリプトのパスの先頭に "$SKILL_DIR/" を付けてください。実行時の出力パスと、依存関係マニフェストで報告される上流スキルのパスは、それぞれ固有の場所を維持します。以下のコマンドは、どの作業ディレクトリからでも実行できます。
ランタイムの選択
このショーケースのランナーを通じて、ホストのディスプレイに GUI ウィンドウを表示し、ローカルインストールから Isaac Sim を起動してください。そのウィンドウでロボットを確認してください。各ステージの操作はすべて、ISAAC_PYTHON_PORT 上の isaac-sim-remote Python サーバーを通じて行ってください。このワークフローでは、WebRTC、ブラウザーのビューアー、コンテナー化された Isaac Sim は使用しません。
プリフライトの前に、既存の状態を読み取り専用で調べてください。インストール先のパスとバージョン、isaac-sim.sh とバンドルされた ROS 2 ブリッジライブラリの有無、ディスプレイが利用可能かどうか、Isaac Sim がすでに実行中かどうかを確認してください。Isaac Sim を起動またはインポートしたり、コンテナーを起動または停止したり、インストーラーを実行したり、ファイルを変更したりしないでください。
インストール済みのバージョン、倉庫の URI、Nova Carter のアセットとセンサーグラフ、レディネスプローブを、ひとつの互換性セットとして扱ってください。Isaac Sim が存在するだけでは、互換性の証明にはなりません。
次の選択ポリシーを適用してください。
-
ISAAC_SIM_DIRに 6.1.0 のインストールが存在する場合は、検出したバージョンを報告し、不要な確認を求めずに続行してください。 -
別のバージョンが検出され、ランチャー、ROS 2 ブリッジ、検証済みの倉庫 URI がすべて存在する場合は、確認を求めずに自動で使用し、その選択を報告してください。
Isaac Sim
<version>detected at<path>and is usable (launcher<ready/status>, ROS 2 bridge<ready/status>). Using this installation.通常のプリフライトとレディネスの条件を試行してください。不一致があれば、そのインストールを変更せずに停止して報告してください。
-
バージョンを特定できない場合、またはランチャー、ROS 2 ブリッジ、検証済みの倉庫 URI のいずれも確認できない場合に限り、プリフライトの前に確認を求めてください。安全性を検証したうえで自動的に選択できないため、ユーザーの入力が必要となるのはこの場合だけです。
Isaac Sim
<version>was detected at<path>. Launcher:<ready/status>. ROS 2 bridge:<ready/status>. Choose whether to use the detected version or select or install another version. -
Mission Control クラウドスタックと Nova Carter SIL には引き続き Docker が必要ですが、Isaac Sim 自体には必要ありません。
-
何もインストールされていない場合は、パスを推測せず、解決済みの
isaac-sim-installationスキルに引き継いでください。次のコマンドで解決してください。python3 "$SKILL_DIR/scripts/doctor.py" dependenciesスキルを検索したり、コピーを同梱したりしないでください。
ショーケースの復旧として、既存の Isaac Sim インストールをアップグレード、ダウングレード、上書き、削除、修復、再ラベル付け、更新、またはその他の方法で変更しないでください。すでに実行中の Isaac Sim を停止する前に、ユーザーから明示的な指示を得てください。
ユーザーから、別バージョンの Isaac Sim のインストール、アップグレード、ダウングレード、またはその他の方法での入手を求められた場合は、ショーケースのワークフローを停止し、解決済みの isaac-sim-installation スキルに引き継いでください。依存関係マニフェストで報告されたパスにある、そのスキルの実行時 SKILL.md を読み、ゲートを迂回せずにスキル独自の手順に従ってください。ここでインストール手順を再現したり、言い換えて説明したりしないでください。ランナーにはローカルのスタンドアロンインストールが必要なため、その方法をあらかじめ選択してください。インストール先のパスが報告された時点で停止し、Isaac Sim を起動しないでください。引き継ぎが完了し、ユーザーから続行の依頼があった場合に限り、ランタイムの選択を再開してください。このスキルで互換性チェックを実行するときは、--timeout-seconds に余裕のある値、たとえば 3600 を指定してください。初回実行ではシェーダーとアセットのキャッシュをまだ作成中であることが多く、デフォルトの 600 秒ではタイムアウトします。
デフォルトのワークフロー
-
会話内でユーザーが別のマップ、ロボットプラットフォーム、シミュレーター、ミッション目標をすでに指定しているか確認します。指定されていない場合は、確認せずに標準のデフォルトを使用します。プリフライトの前に、標準のデフォルトと決定論的なルートに記載された倉庫の URI、ロボット ID
carter01、順番どおりの 5 つすべてのウェイポイント座標、ルートのみのミッションタイプ、ミッションタイムアウト900秒をユーザーに正確に伝えます。デフォルトのデモコマンドbash "$SKILL_DIR/scripts/run.sh" --demoがシナリオのオーバーライドなしでこれらの値を使用することも伝えます。後続のプリフライトで実行がブロックされる場合でも、この説明は必須です。 -
ランタイムの選択を適用し、検出されたインストールは変更しません。ユーザーの選択またはインストールの引き継ぎを解決したら、読み取り専用のプリフライトを実行します。
bash "$SKILL_DIR/scripts/run.sh" --preflight -
明示的に許可されていない、実行中と報告されたコンテナはすべて、停止するか別の場所に移動するようユーザーに依頼します。無関係なワークロードは、
--ignore-container NAMEを繰り返し指定してコンテナ名で正確に許可できます。無視したコンテナも通常のポート競合チェックの対象です。既存の Isaac Sim を自動的に停止してはいけません。ISAAC_PYTHON_PORTが空いていることを必須とします。 -
スタックを起動し、ロボットをアイドル状態にします。
bash "$SKILL_DIR/scripts/run.sh" -
または、決定論的な閉ルートを実行し、完了を待ちます。
bash "$SKILL_DIR/scripts/run.sh" --demo -
ランナーが開く Isaac Sim ウィンドウでロボットを確認します。ランナーは Carter の起動前にステージを読み込むため、起動直後のロボットの動きも表示されます。
-
記録されたデモリソースのみを停止します。
bash "$SKILL_DIR/scripts/run.sh" --stop
各実行では、何かが起動する前に作業ディレクトリへ run-manifest.json が書き込まれ、その後も状態が遷移するたびに更新されます。そのため、実行が中断された場合でも、状況を説明し、対象を正確に停止できます。run-result.json は機械可読な受け入れ判定用アーティファクトです。中断された実行を含め、実行内容を確認するには次を実行します。
python3 "$SKILL_DIR/scripts/showcase.py" \
run-status --work-dir <dir>
停止処理は、実行時に記録されたコンテナのみを対象とし、繰り返し実行しても安全で、ログと証拠を保持します。動作の証拠は観測時に保存されるため、その後の静止状態のサンプルによって、確認済みの観測結果が覆されることはありません。受け入れ判定は、いずれの場合も厳格です。ミッションが COMPLETED であること、ロボットがオンラインで正常な IDLE 状態であること、動作が確認されていること、OOM がないこと、必須プロセスが正常であることが必要です。
ライフサイクル状態、復旧手順、動作の判定結果、Isaac Sim の終了処理、ホストメモリのポリシー、ROS 2 ブリッジ実行ファイルの確認については、references/troubleshooting.md を参照してください。
ランナーは ${TMPDIR:-/tmp} の下に新しいディレクトリを作成してそのパスを表示し、生成されたすべての Mission Control 設定、マップ、Isaac キャッシュ、ログ、状態をそこに書き込みます。呼び出し元の作業ディレクトリにランタイムファイルを作成してはいけません。Nova Carter コンテナの作成後に起動またはデモの実行が失敗した場合、ランナーはタイムスタンプ付きの完全な ROS 2 起動出力を $SHOWCASE_WORK_DIR/logs/nova-carter-ros2.log に保存します。Nova Carter を --stop で停止した後も、同じログを更新します。
構成モデル
2 つのレイヤーで構成されます。
同梱され、親パッケージが所有 — このパッケージ内のすべてのものです。references/、
shared/、scripts/、assets/、config/ が含まれます。references/ ツリーには、
このショーケース向けに作成された統合アダプターとルーティング契約が含まれています。
これらは上流スキルのコピーではありません。
実行時に解決 — ショーケースがオーケストレーションする 5 つのスキルです。これらは それぞれのリポジトリが所有し、このパッケージの外部にある固定チェックアウトから 読み込まれて呼び出されます。コピーされることはありません。
以下の表で、アダプターパスは対応するリファレンスディレクトリからの相対パスです。
| リファレンス | 対象 | アダプター |
|---|---|---|
references/bring-up-cloud-stack/ | bring-up-cloud-stack | scripts/run.py |
references/change-map/ | change-map | scripts/run.py |
references/change-fleet-composition/ | change-fleet-composition | scripts/run.py |
references/isaac-sim-remote/ | isaac-sim-remote | scripts/run.py |
references/isaac-sim-installation/ | isaac-sim-installation | 意図的に未設定 |
upstream-versions.lock.json は、依存関係を定義する唯一のファイルです。2 つの
公開 GitHub リポジトリ、固定された参照と不変のコミット、および各スキルに必要な
エントリーポイントとリソースが記載されています。
ホストごとに 1 回だけ解決してから、実行します。
python3 "$SKILL_DIR/scripts/doctor.py" dependencies --prepare \
--env-file "$HOME/.mission-control-showcase/state/showcase-deps.env"
scripts/doctor.py は両方のフェーズを実行します。dependencies は上流スキルを
解決してマニフェストを書き込み、host はこのマシンをチェックします。ホストフェーズには
解決済みのエントリーポイントが渡されるため、先に依存関係フェーズを成功させる必要が
あります。
ステージルーターについては references/workflow.md を読み、各ステージを使う前に
各リファレンスの README.md を読んでください。
上流スキルの使用
リファレンスには上流スキルの場所が記載され、上流スキルにはその動作が記載されています。
- マニフェストに
skills.<name>.skill_mdとして記録されたパスにある、実行時のSKILL.mdを読みます。このパッケージ内にその内容を再掲したものはありません。 - 確認、ライセンス、実行承認のゲートを含め、スキル独自のゲートに従います。
- リファレンスアダプターを通じてスキルを呼び出します。アダプターはスキル自身の ディレクトリから実行するため、相対リソースはその場所で解決されます。
- スキルを再実装したり、ベンダー化したり、マシン上で見つかった別のコピーに 差し替えたりしないでください。
bring-up-cloud-stack を --with-sim 付きで呼び出さないでください。これは Nova Carter SIL
ではなく、汎用の mission-simulator を起動します。このショーケースは Nova SIL、
Isaac Sim の起動と終了、シーンの復元、ドメイン間の準備状況、ミッションの送信、
完了の証跡を管理します。
依存関係がない場合
ランナーは読み取り専用の鮮度チェックを実行し、アダプターは永続化されたマニフェストを 使用します。通常の実行では、クローン、フェッチ、プル、インストール、更新は一切 行われません。
MISSION_CONTROL_SHOWCASE_REQUIRE_PREFLIGHT=1 を指定すると、準備完了状態のマニフェストを
読み込めないリファレンスは、検出処理にフォールバックせずに実行をブロックします。
アダプターは 3 で終了し、対象スキル、期待される内容、事前チェックコマンドを示す
BLOCKED [<component>]: … を出力します。スキルをベンダー化してブロッカーを回避
しないでください。
標準のデフォルト設定
デフォルトは次のとおりです。
- Isaac Sim:
ISAAC_SIM_DIR(デフォルトは~/isaacsim)にインストールされたローカル環境を、GUI ウィンドウで起動します。Isaac Sim 6.1.0 は、最後に正常動作が確認されたランタイムです。これはデフォルトであり、互換性の上限ではありません。 - Warehouse:
https://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/Isaac/6.1/Isaac/Environments/Simple_Warehouse/warehouse.usd。 - Nova Carter SIL:
nvcr.io/nvidia/isaac/nova_carter_sil:release-3.2。 - NVIDIA ドライバー R590 以降。
- ホストは 64 GB クラスで、起動前に少なくとも 48 GB の空きメモリと 4 GB の空きスワップ領域が必要です。
- Nova Carter SIL の使用量は、RAM 20 GB と最大 4 GB のスワップ領域に制限されます。
- ロボット ID:
carter01。 - Isaac Sim Python サーバーのポートは
8226。 - WebSocket MQTT のポートは
9001で、パッケージに含まれる Mission Control スタックと一致します。 - Isaac Sim と Carter SIL の両方で ROS ドメイン
77を使用し、通常のホストトランスポートを使います。分離されたドメインにより、無関係なドメイン 0 の DDS パーティシパントが Carter SIL のメモリを使い果たすのを防ぎながら、Isaac と SIL 間の検出を維持できます。
指定された Warehouse URI は Isaac Sim に渡され、ステージの読み込み後に検証されます。get_assets_root_path、ローカルキャッシュ、ソースのチェックアウト、またはファイルシステム検索を通じて Warehouse を検出してはいけません。
ランナーは Mission Control を設定してクラウドスタックを起動し、その後、クラウドの初期化中に Isaac Sim を起動してステージを復元します。Carter SIL は最後に起動するため、Isaac Sim のウィンドウにはロボットの初期動作が表示されます。
ユーザーが選択した標準外の Isaac バージョンがすでにインストールされている場合:
-
互換性のあるインストール環境と標準のアセット URI が指定されていることを確認します。
-
両方を明示的に渡します。
ISAAC_SIM_DIR=<resolved-install-path> \ WAREHOUSE_USD_URI=<resolved-uri> \ bash "$SKILL_DIR/scripts/run.sh" -
バージョン番号を置き換えて、将来の URI を推測してはいけません。ローカルインストールには検査可能なバージョンタグがないため、アセット契約は呼び出し元の責任です。
-
要求されたバージョンがすでにインストールされていない場合は、処理を停止して
isaac-sim-installationに引き継ぎます。このワークフロー内でインストールしてはいけません。
ロボット ID
carter01 はデフォルトにすぎません。次のいずれかで別の ID を設定します。
bash "$SKILL_DIR/scripts/run.sh" \
--robot-name my_robot --demo
または ROBOT_NAME=my_robot。
ランナーは同じ値を Mission Control のフリート設定、Mission Client の serial_number、MQTT ブリッジのクライアント名、準備状況のポーリング、ミッションの送信に適用します。ミッションペイロードだけを変更してはいけません。
決定論的なルート
デフォルトのリプレイは閉ルートです。
[
{"x": -5.1, "y": 1.4},
{"x": -2.625, "y": 1.2},
{"x": -0.2, "y": -2.075},
{"x": -2.625, "y": -5.35},
{"x": -5.1, "y": 1.4}
]
タイムアウト 900、ソルバー NVIDIA_CUOPT を指定し、ルートのみのミッションとして送信します。開始地点、終了地点、反復回数を追加してはいけません。
カスタム座標を使う場合は、まず --demo を指定せずにスタックを起動します。次に、WPG の nearest_nodes で要求された地点を最寄りのノードに合わせ、visualize_route で検証してから、ルーティング可能な地点だけを送信します。
準備完了の条件
ランナーは、次のすべてが確認されるまでミッションを送信してはいけません。
- 正規ステージがアクティブで、Isaac のタイムラインが再生中であること。
- ROS の
/clockが進んでいること。 - 稼働中の
/scanLaserScanがフレームfront_2d_lidarを使用し、シミュレーション時刻との差が 1 秒以内のタイムスタンプを持つこと。 - そのセンサーの正確なタイムスタンプで、TF により LiDAR フレームから
mapへの変換が解決できること。 map -> base_linkの変換が解決できること。- ロボットのポーズがアクティブなグローバルコストマップ内にあること。
- Nav2 のプランナー、コントローラー、ナビゲーターのライフサイクルノードがアクティブであること。
- Carter SIL で cgroup OOM イベントが記録されておらず、必要なマップ、自己位置推定、プランニング、制御、ナビゲーション、ミッションクライアントのプロセスが稼働し続けていること。
- Mission Control で、設定済みのロボットがオンライン、
IDLE、エラーなし、位置初期化済み、かつリセットポーズの近くとして報告されていること。
初回の正確な時刻での LiDAR TF 検索失敗は、時間制限のある起動時の状態として扱います。map への変換が解決されるまで新しいスキャンサンプルの取得を続けるか、最新の測定タイムスタンプを示して準備完了期限に失敗してください。これを最新 TF の検索に置き換えてはいけません。
失敗時は、失敗した観測と測定値を報告してください。測定値なしに、クロック、TF、コストマップ、または権限が原因だと断定してはいけません。
同梱の carter_warehouse_navigation.png と対応する YAML が、唯一のマップリソースです。ランタイムはこのペアを Mission Control の生成済み設定と Carter SIL の読み取り専用 /maps マウントにコピーします。Mission Control は同じ PNG とメタデータを使って、carter_warehouse_navigation.png の下に WPG リソースを生成します。ランナーは起動前にソース、Mission Control、Carter のハッシュを検証し、その後、アクティブな WPG マップの識別情報、Carter の起動オプション、コンテナーにマウントされたバイト列を検証します。ソースツリーの権限を再帰的に変更したり、サービス起動後に権限を修正したりしてはいけません。
モードとオーバーライド
--preflight:インストール、ディスプレイ、Docker、GPU、依存関係、ポート、イメージ、アセットを読み取り専用でチェックします。- フラグなし:クリーンに起動して準備完了の検証をすべて行い、ロボットをアイドル状態にします。
--demo/--replay:起動、準備完了の確認、円形ミッション、正規ミッションの完了、ポーズ移動の証拠取得を行います。--stop:最後に記録されたスタックを停止し、Isaac Sim プロセスに SIGTERM を送信します。コンテナー、イメージ、ボリューム、キャッシュ、ログは削除しません。--dry-run:ランタイムの状態を変更せずに、解決済みのコマンドを表示します。--work-dir PATH:呼び出し側が指定した新規または空のランタイムディレクトリを使用します。--no-pull:必要なイメージがすでにローカルにあることを要求します。--ignore-container NAME:プリフライトと起動中に、正確な名前で指定した実行中のコンテナーを 1 つ許可します。許可するコンテナーごとにこのオプションを繰り返してください。ポートの競合は引き続き失敗として扱われます。
サポートされている環境変数のオーバーライドは ISAAC_SIM_DIR、WAREHOUSE_USD_URI、NOVA_CARTER_IMAGE、NOVA_CARTER_MEMORY_LIMIT、NOVA_CARTER_MEMORY_SWAP_LIMIT、ROBOT_NAME、SHOWCASE_GPU_DEVICE、SHOWCASE_ROS_DOMAIN_ID、SHOWCASE_ROS_LOCALHOST_ONLY、ISAAC_PYTHON_PORT、SHOWCASE_WORK_DIR です。別のローカル ROS デプロイメントと競合しない限り、デフォルトの分離ドメインを維持してください。Isaac Sim と Carter SIL の両方に同じドメインと localhost の設定を適用してください。ホスト上の Isaac Sim ブリッジとホストネットワーク上の Carter SIL の間でプロセス間検出を確認せずに、localhost のみのトランスポートを有効にしてはいけません。
受け入れ条件
--demo の成功には、Mission Database が送信済みミッションを COMPLETED と報告すること、同じロボットがエラーなしで IDLE に戻ること、Mission Database のポーズによって移動が証明されることが必要です。ロボットの状態、ログ、表示中の Isaac Sim ウィンドウ、またはスクリーンショット 1 枚だけでは、完了の証明になりません。
自動復旧として docker compose down -v を実行したり、コンテナーを削除したり、Docker の状態をプルーニングしたり、実行ディレクトリを削除したりしてはいけません。