🕹️

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

操作手順

  1. ターミナル2で ] を押してポリシーを開始
  2. MuJoCoビューアをクリックし、9 でロボットを地面に配置
  3. ターミナル2に戻り、T でリファレンスモーションを実行
  4. N / P でモーションシーケンスを切り替え
  5. R で現在のモーションをリスタート
  6. 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側:

  1. Settings → Developer で開発者モードを有効化
  2. PICOブラウザでXRoboToolkit-PICO-1.1.1.apkをダウンロード
  3. ダウンロードからインストールを実行
  4. 「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側の準備に移ります。

  1. XRoboToolkitアプリを起動 — 「Unknown」ライブラリセクションからアプリを開く
  2. PCのIPアドレスを入力 — 「WORKING」ステータスが表示されることを確認
  3. トラッキング設定 — Head / Controllerトラッキングを有効化、Data/ControlをSend、Motion TrackerをFull bodyに設定
  4. モーショントラッカーのキャリブレーション — PICOの画面指示に従い、直立静止→下を向いてトラッカー検出の2段階で実施

PICOの接続設定からテレオペ操作までの流れ
PICO接続設定 → キャリブレーション → テレオペ操作の流れ

フルトラッキング開始シーケンス

PICO側の設定が完了したら、以下の手順でフルボディトラッキングを開始します。

  1. A+B+X+Y を同時押し — ポリシーが起動し、PLANNERモードに入る
  2. 腕をL字に構える — 上腕を体の横に下ろし、前腕を90°前方に曲げる(CALIB_FULLポーズ)
  3. A+X を同時押し — POSEモードに切り替わり、全身テレオペレーションが開始

POSEモードに切り替わると、オペレーターの全身動作がMuJoCoシミュレータ上のG1にリアルタイムで反映されます。

MuJoCoシミュレータ上でのフルボディトラッキング
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・ロボティクスのリサーチエンジニアリサーチサイエンティストを募集しています。ヒューマノイドの全身制御やその他の要素技術,社会実装にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集職種一覧からご応募をお願いします。皆さんのご応募をお待ちしています。

GMO AI&ロボティクス商事株式会社

Discussion