
Isaac Labを使ってUnitree G1のシミュレーション環境を構築する
はじめに
本記事では、Isaac Labをセットアップし、Unitree G1をシミュレーション上で起動するところまでを解説します。
Isaac Simのセットアップはこちら
unitree_sim_isaaclab とは
Unitree公式が公開しているIsaac Labベースのシミュレーション環境です。以下の特徴があります。
- G1/H1-2ロボットで、物を掴んで置く・ブロックを積む・歩きながら物を運ぶなど、複数の作業シナリオがすぐに使える状態で用意されている
- 実機と同じDDS通信プロトコルを採用しているため、シミュレータ用に書いたコードをそのまま実機に持っていける
- VRヘッドセットで人間がロボットを遠隔操作して動作データを収集し、それをシミュレータ上で再生・検証したり、照明やカメラ条件を変えて学習用データのバリエーションを自動生成する機能がある
- スクリプトでIsaac Sim・Isaac Labの環境を一括セットアップできる
今回試した環境
- Ubuntu 24.04 LTS(x86_64)
- Isaac Sim 5.1.0
- NVIDIA GeForce RTX 5090
環境構築
Minicondaのインストール
セットアップスクリプトはconda環境を前提としています。未インストールの場合は先にインストールします。
cd /tmp
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
インストール後、condaを初期化します。
conda init bash
source ~/.bashrc
condaのTerms of Service承認
初回利用時にToSの承認が必要です。
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
リポジトリのクローン
cd ~
git clone --recurse-submodules https://github.com/unitreerobotics/unitree_sim_isaaclab.git
cd unitree_sim_isaaclab
Python 3.11のconda環境を事前作成する
自動セットアップスクリプトが内部でconda環境を作成しますが、事前にPython 3.11の環境を作成しておくことを強くおすすめします。
Minicondaのデフォルト(base環境)はPython 3.13ですが、依存パッケージのteleimagerがPython 3.12未満を要求するため、Python 3.13環境ではインストールに失敗します。また、tensorboard等の依存関係解決が無限ループに陥る問題も発生します。
conda create -y -n unitree_sim_env python=3.11
conda activate unitree_sim_env
python --version # Python 3.11.x と表示されることを確認
自動セットアップの実行
cd ~/unitree_sim_isaaclab
bash auto_setup_env.sh 5.1 unitree_sim_env
このスクリプトは以下を自動で行います。
- Isaac Lab、CycloneDDS、unitree_sdk2_pythonリポジトリのクローン
- SSL証明書の生成(テレオペレーション用、対話入力が求められるのでEnterキーを押し続ければOK)
- アセットファイルのダウンロード
- CycloneDDSのビルド
- conda環境の作成、PyTorch・Isaac Sim・Isaac Lab・Unitree SDKのインストール
完了まで結構時間がかかります(記憶が曖昧ですが、15分以上はかかったかと)。
アセットのダウンロード(スクリプトで失敗した場合)
git-lfsが未インストールの場合、アセットダウンロードが失敗することがあります。(私はしました)
その場合は手動で実行してください。
git lfs install
. fetch_assets.sh
環境構築の確認
conda activate unitree_sim_env
python --version # Python 3.11.x
python -c "import isaaclab; print('Isaac Lab OK')"
python -c "import unitree_sdk2py; print('Unitree SDK OK')"
シミュレーションの起動
タスクの起動
conda activate unitree_sim_env
cd ~/unitree_sim_isaaclab
python sim_main.py --device cpu --enable_cameras --task Isaac-PickPlace-Cylinder-G129-Dex3-Joint --enable_dex3_dds --robot_type g129
各オプションの意味は以下の通りです。
使用したい構成に合わせて調整します。
| オプション | 説明 |
|---|---|
--task |
タスク名。使用するロボット構成とタスク内容を指定する |
--enable_dex3_dds |
Dex3ハンドのDDS通信を有効化する。手のモデルによって変える |
--robot_type g129 |
G1 29DoFモデルを使用する |
--enable_cameras |
カメラ映像を有効化する |
--device cpu |
デバイス指定 |
ハンドの種類とタスクの対応
今回私は手の操作をすることを目的に環境を構築したので、ハンド周りの設定も紹介します。
シミュレーション上のロボットにどのハンドを取り付けるかは--taskのタスク名で決まります。そして、外部のスクリプトからハンドを操作できるようにするには、対応するDDSフラグ(--enable_dex3_ddsなど)を付けて起動する必要があります。DDSフラグを付けないと、ハンドはシーン上に表示されますが外部から動かせません。
Dex3(3本指ハンド)のタスク:
| タスク名 | 内容 | DDSフラグ |
|---|---|---|
Isaac-PickPlace-Cylinder-G129-Dex3-Joint |
円柱を掴んで移動 | --enable_dex3_dds |
Isaac-PickPlace-RedBlock-G129-Dex3-Joint |
赤いブロックを掴んで移動 | --enable_dex3_dds |
Isaac-Stack-RgyBlock-G129-Dex3-Joint |
ブロックを積み上げる | --enable_dex3_dds |
Isaac-Move-Cylinder-G129-Dex3-Wholebody |
円柱を持って移動(全身制御) | --enable_dex3_dds |
Dex1(2本指グリッパー)のタスク:
タスク名のDex3をDex1に、DDSフラグを--enable_dex1_ddsに変更するだけで切り替わります。
| タスク名 | 内容 | DDSフラグ |
|---|---|---|
Isaac-PickPlace-Cylinder-G129-Dex1-Joint |
円柱を掴んで移動 | --enable_dex1_dds |
Isaac-PickPlace-RedBlock-G129-Dex1-Joint |
赤いブロックを掴んで移動 | --enable_dex1_dds |
Isaac-Stack-RgyBlock-G129-Dex1-Joint |
ブロックを積み上げる | --enable_dex1_dds |
Isaac-Move-Cylinder-G129-Dex1-Wholebody |
円柱を持って移動(全身制御) | --enable_dex1_dds |
python sim_main.py --device cpu --enable_cameras --task Isaac-PickPlace-Cylinder-G129-Dex1-Joint --enable_dex1_dds --robot_type g129
Inspire(5本指デクスタラスハンド)のタスク:
Inspire DFXはInspire Robots製の5本指ハンドで、G1およびH1-2に搭載可能です。タスク名にInspireを含むものを指定し、DDSフラグは--enable_inspire_ddsを使用します。
G1用:
| タスク名 | 内容 | DDSフラグ |
|---|---|---|
Isaac-PickPlace-Cylinder-G129-Inspire-Joint |
円柱を掴んで移動 | --enable_inspire_dds |
Isaac-PickPlace-RedBlock-G129-Inspire-Joint |
赤いブロックを掴んで移動 | --enable_inspire_dds |
Isaac-Stack-RgyBlock-G129-Inspire-Joint |
ブロックを積み上げる | --enable_inspire_dds |
Isaac-Move-Cylinder-G129-Inspire-Wholebody |
円柱を持って移動(全身制御) | --enable_inspire_dds |
python sim_main.py --device cpu --enable_cameras --task Isaac-PickPlace-Cylinder-G129-Inspire-Joint --enable_inspire_dds --robot_type g129
H1-2用:
| タスク名 | 内容 | DDSフラグ |
|---|---|---|
Isaac-PickPlace-Cylinder-H12-27dof-Inspire-Joint |
円柱を掴んで移動 | --enable_inspire_dds |
Isaac-PickPlace-RedBlock-H12-27dof-Inspire-Joint |
赤いブロックを掴んで移動 | --enable_inspire_dds |
Isaac-Stack-RgyBlock-H12-27dof-Inspire-Joint |
ブロックを積み上げる | --enable_inspire_dds |
python sim_main.py --device cpu --enable_cameras --task Isaac-PickPlace-Cylinder-H12-27dof-Inspire-Joint --enable_inspire_dds --robot_type h1_2
なお、タスク名にWholebodyが含まれるものは全身の移動制御が有効になるタスクです。send_commands_keyboard.pyでロボットの歩行を制御できます。
ビューの切り替え
起動後、ビューポート上部の「Perspective」をクリックすることでカメラを切り替えることができます。
起動成功
起動が成功するとこのような画面になります。
ポツンとしていて哀愁を感じます。

私がハマった失敗
Python 3.13では動かない
Minicondaのbase環境(Python 3.13)のままauto_setup_env.shを実行すると、conda環境が正しく作成されず、Python 3.13環境にパッケージがインストールされてしまいます。teleimagerがPython 3.12未満を要求するため最終的にエラーになり、tensorboard等の依存関係解決も無限ループに陥ります。
対策: 必ず事前にconda create -y -n unitree_sim_env python=3.11で環境を作成し、conda activateしてからスクリプトを実行してください。
conda環境の有効化忘れ
ターミナルを新しく開くたびにconda activate unitree_sim_envを実行する必要があります。プロンプトが(base)のままスクリプトを実行するとPython 3.13が使われ、cycloneddsのインポートエラーなどが発生します。
初回起動の「応答がありません」ダイアログ
初回はアセットコンパイルのためUIが一時的にフリーズし、ダイアログが連発します。すべて「応答を待つ」を選択してください。
まとめ
Isaac Lab + Unitree G1のシミュレーション環境を構築し、倉庫シーン内でG1が表示されるところまで確認しました。
次の記事では、DDSコマンドを使ってG1のDex3ハンドを実際に制御する方法を解説します。








