GEAR-SONICでG1をVRテレオペ【環境構築・シミュレーション編】
NVIDIAのGR00T Whole Body Controlを使い、PICO VRヘッドセットでUnitree G1をテレオペレーションする手順をまとめます。本記事は環境構築・シミュレーション編です。実機デプロイは次回の実機編で扱います。
この記事でわかること
- 環境構築 — TensorRT・MuJoCoのセットアップとGEAR-SONICのビルド
- Sim2Simループ — シミュレータ上でポリシーの動作を確認する手順
- PICO VRテレオペ — VRヘッドセット+モーショントラッカーでシミュレータ上のG1を全身操作する方法
- Wi-Fiが操作品質を左右する — ジッターの原因はGPU負荷ではなくWi-Fi通信品質
システム構成
GR00T Whole Body Control(GR00T-WBC)の中核であるGEAR-SONICポリシーが、VRデバイスからの動作データをリアルタイムでロボットの全身制御指令に変換します。テレオペレーション時は以下の3プロセスが同時に動作します。
主に使うモードは2つです。POSEモードではオペレーターの全身動作がそのままロボットにミラーリングされます。PLANNERモードではジョイスティックで歩行・走行・しゃがみなどのロコモーションパターンを切り替えて移動します。
検証環境
| 項目 | 値 |
|---|---|
| GPU | GeForce RTX 5090 |
| OS | Ubuntu 22.04 |
| CUDA | 12.8 |
| TensorRT | 10.13 |
| Python | 3.10 |
インストール手順
前提条件
- Ubuntu 20.04 / 22.04 / 24.04
- CUDA Toolkit
- Python 3.8+
- Git LFS
- TensorRT 10.13(TARパッケージ、約10GB)
TensorRTはNVIDIA Developerポータルからダウンロードし、展開先のパスを環境変数に設定します。
export TensorRT_ROOT=$HOME/TensorRT
~/.bashrcにも追加しておきます。
リポジトリのクローン
git clone https://github.com/NVlabs/GR00T-WholeBodyControl.git
cd GR00T-WholeBodyControl
git lfs pull
git lfs pullでモデルファイルなどの大容量ファイルを取得します。これを忘れるとビルド時にエラーになります。
ネイティブビルド
cd gear_sonic_deploy
# システム依存パッケージのインストール
chmod +x scripts/install_deps.sh
./scripts/install_deps.sh
# 環境変数の設定
source scripts/setup_env.sh
# ビルド
just build
永続化する場合はシェルプロファイルに追加します。
echo "source $(pwd)/scripts/setup_env.sh" >> ~/.bashrc
MuJoCoシミュレータのインストール
bash install_scripts/install_mujoco_sim.sh
.venv_simという仮想環境が作成され、MuJoCo・Pinocchio・Unitree SDK2が含まれます。
MuJoCoでGEAR-SONICのSim2Simループを動かす
インストールが完了したら、まずシミュレータ上でGEAR-SONICポリシーの動作を確認します。
ターミナル1: MuJoCoシミュレータ
source .venv_sim/bin/activate
python gear_sonic/scripts/run_sim_loop.py
ターミナル2: デプロイメント
bash deploy.sh sim
操作手順
- ターミナル2で
]を押してポリシーを開始 - MuJoCoビューアをクリックし、
9でロボットを地面に配置 - ターミナル2に戻り、
Tでリファレンスモーションを実行 -
N/Pでモーションシーケンスを切り替え -
Rで現在のモーションをリスタート -
OでEmergency Stop
別ターミナルでpython visualize_motion.py --realtime_debug_url tcp://localhost:5557を実行すると、デプロイメント中のモーションをリアルタイムに可視化できます。
PICO VRテレオペレーションのセットアップ
必要なハードウェア
| 機材 | 数量 | 備考 |
|---|---|---|
| PICO 4 Ultra + Motion Tracker両足首セット | 1 | VRヘッドセット+モーショントラッカー2個のバンドル |
| PICOコントローラー | 2 | 左右各1(本体に同梱) |
| 高速Wi-Fiルーター | 1 | 低レイテンシのネットワークが必須 |
XRoboToolkitのインストール
PC側:
XR-Robotics GitHubの手順に従い、XRoboToolkit PC Serviceをインストールします。
オンボードデプロイ(G1のOrin上)の場合:
sudo dpkg -i gear_sonic_deploy/thirdparty/roboticsservice_1.0.0.0_arm64.deb
PICO側:
- Settings → Developer で開発者モードを有効化
- PICOブラウザで
XRoboToolkit-PICO-1.1.1.apkをダウンロード - ダウンロードからインストールを実行
- 「Unknown」ライブラリセクションにアプリが表示される
テレオペレーション用環境のインストール
bash install_scripts/install_pico.sh
.venv_teleop仮想環境が作成されます。
source .venv_teleop/bin/activate
VR全身テレオペレーションの実行
Ubuntu側の手順(3ターミナル構成)
すべてのターミナルで GR00T-WholeBodyControl/ ルートを起点とします。
ターミナル1: XRoboToolkitサービス + MuJoCoシミュレータ
# XRoboToolkitサービスを起動(PICO との通信に必要)
/opt/apps/roboticsservice/runService.sh
# MuJoCoシミュレータを起動
cd GR00T-WholeBodyControl/
source .venv_teleop/bin/activate
python gear_sonic/scripts/run_sim_loop.py
ターミナル2: C++デプロイメント
cd GR00T-WholeBodyControl/
source .venv/bin/activate
cd gear_sonic_deploy/
./deploy.sh --input-type zmq_manager sim
「Init done」が表示されるまで待機します。テレオペスクリプトを別マシンで実行する場合は--zmq-hostでIPを指定します。
ターミナル3: PICO Streamer
cd GR00T-WholeBodyControl/
source .venv_teleop/bin/activate
python gear_sonic/scripts/pico_manager_thread_server.py --manager \
--vis_vr3pt --vis_smpl
--vis_vr3ptと--vis_smplはビジュアライゼーションオプションです。ヘッドレス運用の場合は省略できます。
PICO側の手順
Ubuntu側の3ターミナルを起動したら、PICO側の準備に移ります。
- XRoboToolkitアプリを起動 — 「Unknown」ライブラリセクションからアプリを開く
- PCのIPアドレスを入力 — 「WORKING」ステータスが表示されることを確認
- トラッキング設定 — Head / Controllerトラッキングを有効化、Data/ControlをSend、Motion TrackerをFull bodyに設定
- モーショントラッカーのキャリブレーション — PICOの画面指示に従い、直立静止→下を向いてトラッカー検出の2段階で実施

PICO接続設定 → キャリブレーション → テレオペ操作の流れ
フルトラッキング開始シーケンス
PICO側の設定が完了したら、以下の手順でフルボディトラッキングを開始します。
- A+B+X+Y を同時押し — ポリシーが起動し、PLANNERモードに入る
- 腕をL字に構える — 上腕を体の横に下ろし、前腕を90°前方に曲げる(CALIB_FULLポーズ)
- A+X を同時押し — POSEモードに切り替わり、全身テレオペレーションが開始
POSEモードに切り替わると、オペレーターの全身動作がMuJoCoシミュレータ上のG1にリアルタイムで反映されます。

POSEモードでのフルボディトラッキング
コントローラー操作
| 操作 | ボタン | 機能 |
|---|---|---|
| 開始/停止 | A+B+X+Y | ポリシーの起動 / Emergency Stop |
| POSEモード切替 | A+X | PLANNER ↔ POSE |
| 上半身固定切替 | B+Y | POSE ↔ PLANNER_FROZEN_UPPER |
| グリップ制御 | トリガー(各手) | ハンドの把持操作 |
PLANNERモードでは左スティックで移動、右スティックで旋回、A+B / X+Yでロコモーションパターン(歩行・走行・しゃがみ・匍匐前進など)を切り替えます。
トラブルシューティング
TensorRTバージョン不一致
推論結果がおかしい(ロボットが意図しない動きをする)場合、まずTensorRTのバージョンを確認してください。x86_64では10.13、Jetsonでは10.7が必須です。
git lfs pullの忘れ
error: large file not found が出たら git lfs pull && just build を実行してください。
モーショントラッカーのトラッキングロス
装着の緩み、バッテリー残量、タイトフィット服装の着用、照明条件(暗すぎるとビジュアルトラッキングが失敗)を確認してください。
ロボットの動きがもっさりする・ジッターする
原因はGPU負荷ではなくWi-Fiの通信品質でした。社内Wi-Fi(5 GHz帯)での実測値は以下の通りです。
| 項目 | 値 |
|---|---|
| リンク速度 | 260 Mbit/s |
| 実効スループット | 60〜70 Mbps |
| ゲートウェイ遅延 | avg 3.6 ms |
レイテンシ自体は低いものの、他端末との帯域共有でジッターが発生しました。PICO・PC間で専用の5 GHz Wi-Fiアクセスポイントを用意することを推奨します。
まとめ
GR00T-WBCの環境構築から、MuJoCoシミュレータ上でのPICO VRテレオペレーションまでを一通り動かしました。セットアップ自体は公式READMEに沿えばスムーズですが、実際に操作してみると操作品質を左右するのはGPU性能ではなくWi-Fi通信品質でした。専用の5 GHz Wi-Fiアクセスポイントと、足首トラッカー用のタイトフィット服装が安定動作の前提条件です。
次回の実機編では、Unitree G1へのデプロイ手順・安全対策・実機固有のトラブルシューティングを扱います。
採用についてのお知らせ
GMOインターネットグループ株式会社 グループ研究開発本部 AI研究開発室では,フィジカルAI・ロボティクスのリサーチエンジニア・リサーチサイエンティストを募集しています。ヒューマノイドの全身制御やその他の要素技術,社会実装にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集職種一覧からご応募をお願いします。皆さんのご応募をお待ちしています。
Discussion