0. はじめに¶
この章で学ぶこと
このチュートリアルの対象読者・前提知識・ゴールと全体の流れを確認し、Isaac Sim の全体像と、以降の章で使う用語をつかみます。
- 所要時間: 10 分
- 前提: なし
- 対象バージョン: Isaac Sim 6.1.0
対象読者と前提知識¶
このチュートリアルは、次のような方を対象にしています。
- Python でプログラムを書ける
- ロボティクスやロボットシミュレータを使うのは初めて
次の知識は前提とします。
| 項目 | 目安 |
|---|---|
| Python | 関数・クラス・import が分かり、スクリプトを実行できる |
| Linux | ターミナルでファイル操作やコマンド実行ができる |
| Docker | docker run や docker compose up でコンテナを起動・停止したことがある |
ROS 2 や強化学習の知識は必要ありません。
このチュートリアルのゴール¶
最終的に、次のことができるようになるのがゴールです。
- Docker で Isaac Sim を起動し、ブラウザから画面を操作できる
- Python スクリプトからシーンを組み立て、シミュレーションを進められる
- 移動ロボット (Jetbot) を動かし、カメラや LiDAR のデータを取得できる
7 章では、これらを組み合わせて LiDAR で障害物を避けながらゴールへ向かう Jetbot を作ります。
Isaac Sim とは¶
Isaac Sim は、NVIDIA が提供するロボットシミュレータです。主に次のような特徴があります。
- 物理シミュレーション: NVIDIA PhysX による剛体・関節・車輪などの物理演算
- 写実的なレンダリング: RTX GPU によるレイトレーシングで、カメラ画像や LiDAR をリアルに再現できる
- USD ベースのシーン: シーンやロボットを USD 形式で扱う (3 章で解説します)
- Python API: GUI 操作だけでなく、Python からすべてを制御できる
ロボットのアルゴリズムを実機で試す前に検証したり、機械学習用の合成データを作ったりする用途で使われています。
Isaac Sim と関連するソフトウェア¶
Isaac Sim について調べると、Omniverse・Isaac Lab・Isaac ROS といった名前がよく一緒に出てきます。どれも NVIDIA のソフトウェアで名前が似ていますが、役割はそれぞれ違います。関係を図にすると次のようになります。
flowchart TB
subgraph PC["シミュレーションを動かす PC (RTX GPU)"]
lab["Isaac Lab<br/>ロボット学習のフレームワーク"]
sim["Isaac Sim<br/>ロボットシミュレータ"]
subgraph ov["NVIDIA Omniverse"]
kit["Omniverse Kit<br/>アプリケーションを作るための SDK"]
tech["OpenUSD・RTX レンダラ・PhysX など"]
end
lab -- "上に作られている" --> sim
sim -- "上に作られている" --> kit
kit --- tech
end
subgraph robot["ロボット (Jetson など)"]
isaacros["Isaac ROS<br/>GPU で高速化した ROS 2 パッケージ"]
end
sim <-- "ROS 2 のトピック<br/>(ROS 2 Bridge)" --> isaacros
| ソフトウェア | 役割 | このチュートリアルでの扱い |
|---|---|---|
| NVIDIA Omniverse | 3D アプリケーションを作るためのプラットフォーム。シーンの記述 (OpenUSD)、レンダリング (RTX)、物理演算 (PhysX) などの技術と、アプリケーションを作るための SDK (Omniverse Kit) からなる | Isaac Sim の土台として、USD (3 章) や拡張機能の仕組みに触れる |
| Isaac Sim | Omniverse の上に作られたロボットシミュレータ | 本編 (1〜7 章) で扱う |
| Isaac Lab | Isaac Sim の上に作られたロボット学習 (強化学習・模倣学習など) 用のフレームワーク | 付録 C で紹介する |
| Isaac ROS | GPU で高速化した ROS 2 のパッケージ群。Jetson などで動かし、実機のロボットのソフトウェアに組み込む | 扱わない |
Omniverse と Isaac Sim¶
Omniverse は、特定の用途のアプリケーションではなく、3D アプリケーションを作るための土台です。Isaac Sim はその上に作られたアプリケーションの 1 つで、Omniverse の技術をロボットのシミュレーション向けにまとめたものです。
Isaac Sim の機能は、Omniverse Kit の 拡張機能 (Extension) として作られています。このチュートリアルで使う isaacsim.core.experimental 系の API や、3 章で出てくる omni.usd.libs も、拡張機能として提供されています。シーンを USD で表すのも、Omniverse の上に作られているからです。
Isaac Lab と Isaac Sim¶
Isaac Lab は、Isaac Sim の上に作られたロボット学習用のフレームワークです。シミュレーションそのものは Isaac Sim が行い、Isaac Lab は多数の環境を並列に動かしたり、報酬を定義して方策を学習させたりする部分を受け持ちます。
Isaac Lab と組み合わせて使える Isaac Sim のバージョンは、Isaac Lab のバージョンごとに決まっています。このチュートリアルの Isaac Sim 6.1.0 に対応するバージョンは、付録 C を参照してください。
Isaac ROS と Isaac Sim¶
Isaac ROS は、名前に「Isaac」が付いていますが、シミュレータではありません。実機のロボット (Jetson など) で動かす ROS 2 のパッケージ群で、画像認識や自己位置推定などの処理を GPU で高速化します。Isaac Sim をインストールしても Isaac ROS は入りませんし、Isaac ROS を使うのに Isaac Sim は必須ではありません。
Isaac ROS と ROS 2 Bridge を混同しない
Isaac Sim には、シミュレータのセンサデータを ROS 2 のトピックとして配信する ROS 2 Bridge があります (付録 C)。これは Isaac Sim の機能の 1 つで、Isaac ROS とは別物です。
両者は ROS 2 のトピックを通じて組み合わせられます。Isaac Sim のカメラ画像を ROS 2 Bridge で配信し、それを Isaac ROS のパッケージで処理すると、実機のロボットがなくても Isaac ROS の処理をシミュレーションで試せます。
検証環境¶
このチュートリアルの手順とサンプルコードは、次の環境で動作を確認しています。
| 項目 | 内容 |
|---|---|
| OS | Ubuntu 24.04.3 LTS |
| CPU | Intel Core i7-9800X (8 コア / 16 スレッド) |
| メモリ | 32GB |
| GPU | NVIDIA GeForce RTX 2080 Ti (VRAM 11GB) |
| NVIDIA ドライバ | 595.99.02 |
| Docker | 28.3.3 (Compose v2.39.1) |
| NVIDIA Container Toolkit | 1.17.8 |
| Isaac Sim | 6.1.0 (nvcr.io/nvidia/isaac-sim:6.1.0) |
検証環境は公式の推奨要件を満たしていません
Isaac Sim 6.1.0 の公式の最小要件は RTX 4080 (VRAM 16GB) です。検証環境の RTX 2080 Ti はこれを下回っているため、このチュートリアルの範囲では動作しても、より重いシーンでは動かない可能性があります。これから GPU を用意する場合は、公式の要件 を満たすものを選んでください。
手元に NVIDIA GPU がない場合は、付録 A. クラウドで動かす を参照してください。
全体の流れ¶
| 章 | 内容 | 主に使うもの |
|---|---|---|
| 1. 環境構築 | Docker で Isaac Sim を起動し、ブラウザから接続する | Docker |
| 2. GUI の基本 | 物体を置き、物理シミュレーションを動かす | GUI |
| 3. USD の基礎 | シーンを表す USD の基本概念 | Python (USD) |
| 4. Python スタンドアロン入門 | Python スクリプトからシーンを作り、シミュレーションを進める | Python |
| 5. ロボットを動かす | Jetbot を差動二輪の制御で走らせる | Python |
| 6. センサ | カメラと LiDAR を取り付け、データを取得する | Python |
| 7. ミニプロジェクト | LiDAR で障害物を避けながらゴールへ向かう | Python |
前の章の内容を前提に進むので、順番に読むことをおすすめします。
このチュートリアルの読み方¶
サンプルコード¶
サンプルコードは GitHub リポジトリの examples/ にあります。最初にリポジトリを取得しておいてください。
表記¶
- GUI のメニューは英語表記のまま
Create > Mesh > Cubeのように書きます - 補足は次のような囲みで示します
ヒント
知っておくと便利なことです。
注意
つまずきやすい点や、注意が必要なことです。
用語集¶
以降の章で使う主な用語です。分からない用語が出てきたら、ここに戻って確認してください。
Isaac Sim と実行環境¶
| 用語 | 意味 |
|---|---|
| Isaac Sim | NVIDIA のロボットシミュレータ |
| Omniverse | NVIDIA の 3D アプリケーションのプラットフォーム。Isaac Sim はこの上に作られている (関連するソフトウェア) |
| Omniverse Kit | Omniverse のアプリケーションを作るための SDK。Isaac Sim の機能は Kit の 拡張機能 (Extension) として提供されている |
| Isaac Lab | Isaac Sim の上に作られたロボット学習用のフレームワーク (付録 C) |
| Isaac ROS | GPU で高速化した ROS 2 のパッケージ群。Isaac Sim とは別のソフトウェア (関連するソフトウェア) |
| NGC | NVIDIA GPU Cloud。Isaac Sim の Docker イメージ (nvcr.io/nvidia/isaac-sim) はここで配布されている |
| NVIDIA Container Toolkit | Docker コンテナから GPU を使えるようにするツール |
| ヘッドレス (headless) | 画面 (ウィンドウ) を表示せずに実行すること |
| ライブストリーミング | Isaac Sim をヘッドレスで動かし、画面を WebRTC で別のアプリやブラウザに送って表示する仕組み |
| Web ビューア | ライブストリーミングの画面をブラウザで表示するアプリ。このチュートリアルではポート 8210 で使う |
シーンと USD¶
| 用語 | 意味 |
|---|---|
| USD | Universal Scene Description。Pixar が開発した 3D シーンの記述形式 (3 章) |
| Stage | 1 つのシーン全体 (3 章) |
| Prim | Stage に置かれる要素。/World/Cube のようなパスで表す (3 章) |
| Attribute | Prim が持つ値 (大きさ、色、位置など) (3 章) |
| Xform | 子の Prim をまとめ、位置・回転・スケールを与える Prim (3 章) |
| ワールド座標系 | シーン全体の基準となる座標系。Isaac Sim では右手系で X 前・Y 左・Z 上 (3 章) |
| ローカル座標 | 親の Prim から見た位置や向き (3 章) |
| metersPerUnit | USD の Stage で 1 単位が何メートルかを表す値。Isaac Sim の標準は 1.0 (3 章) |
| 四元数 (クォータニオン) | 4 つの数で回転を表す方法。Isaac Sim の API では (w, x, y, z) の順 (3 章) |
| Reference | 別の USD ファイルを Prim として取り込む仕組み。アセットの読み込みに使う (3 章) |
| アセット | ロボットや環境などの、再利用できる USD ファイル |
シミュレーション¶
| 用語 | 意味 |
|---|---|
| 物理シミュレーション | 重力・衝突・関節などの物理法則を計算して、物体の動きを再現すること |
| PhysX | Isaac Sim が使っている NVIDIA の物理エンジン |
| ステップ (step) | シミュレーションの時間を 1 刻み進めること。1 ステップの時間幅を dt と呼ぶ |
| タイムライン | シミュレーションの再生・一時停止・停止を管理するもの。GUI の ▶ ボタンに対応する |
| コリジョン (collision) | 物体どうしの衝突判定。設定しないと物体がすり抜ける |
| スタンドアロンスクリプト | Python から Isaac Sim を起動し、シミュレーションを制御するスクリプト (4 章) |
ロボットとセンサ¶
| 用語 | 意味 |
|---|---|
| Jetbot | NVIDIA の小型の教育用移動ロボット。このチュートリアルの題材 |
| Articulation | 関節でつながったリンクの集まり。Isaac Sim ではロボットを Articulation として扱う (5 章) |
| 関節 (joint) | リンクどうしをつなぎ、回転や直動を可能にする部分 |
| 差動二輪 (differential drive) | 左右 2 つの車輪の速度差で進行方向を変える駆動方式。Jetbot はこの方式 (5 章) |
| LiDAR | レーザーで周囲の物体までの距離を測るセンサ (6 章) |
| RGB 画像 / Depth 画像 | カメラから得られる色の画像 / 各画素までの距離を表す画像 (6 章) |