メインコンテンツまでスキップ
ステージ 4 · 第19章 · 理論

19. ロボットのエンボディメントと GR00T システムアーキテクチャ

Seeed Physical AI Beginner's Course の第19章では、エンボディメントとは何か、 関節/状態/アクションの定義、カメラと言語のモダリティ、観測ウィンドウとアクション ウィンドウ、ファウンデーションモデルのファインチューニング、LeRobot スタック、そして GR00T における reBot Arm の位置付けについて説明します。

GR00T はクロスエンボディメントなファウンデーションモデルであり、複数のロボットデータセットで事前学習され、Embodiment Tags と Modality configuration を通じて異なるハードウェアを区別します。本章では、LeRobot + GR00T スタックの中で reBot Arm がどこに位置し、推論時に各コンポーネントがどのように連携するかを説明します。

GR00T overview

19.1 ロボットのエンボディメントとは?​

エンボディメント

19.1 ロボットのエンボディメントとは?

What is a robot embodiment

Embodiment は、ロボットの「物理的および制御上のアイデンティティ」を表し、次の内容を含みます:

  • 自由度(DoF)の数と関節の並び順
  • 関節リミット、ギア比、制御モード(位置/トルク)
  • カメラの数、取り付け位置、解像度
  • アクション空間の定義(関節空間 vs. エンドエフェクタのデカルト空間)
  • グリッパーの種類と開閉範囲

同じ GR00T ファウンデーションモデルであっても、SO-101 の 6 次元関節ベクトルを reBot Arm にそのまま適用することはできません。内部では、モデルは Category-Specific MLP(エンボディメントごとの射影層) を用いて、次元の異なる状態/アクションを共有潜在空間に写像し、そこから各エンボディメントのアクション次元へ写し戻します。

LeRobot / GR00T では、エンボディメントは embodiment_tag によって指定されます。公式の事前学習タグ(EmbodimentTag)には次のものがあります:

  • LIBERO_PANDA, DROID, SIMPLER_ENV_GOOGLE, UNITREE_G1, OXE_WIDOWX など
  • 新しいハードウェア: new_embodiment / NEW_EMBODIMENT(reBot Arm のファインチューニング時に使用)
警告

libero_sim という公式タグは存在しません。事前学習タグを reBot のデータに適用しないでください。

--policy.embodiment_tag=new_embodiment

これは GR00T に対して、「現在のデータは学習時に見たことのない新しいロボットから来ているので、ファインチューニングには new-embodiment の射影層を使用すること」と伝えます。

19.2 ロボットの関節・状態・アクションの定義​

状態とアクション

19.2 ロボットの関節・状態・アクションの定義

Robot joints, state, and action definitions

reBot Arm B601(6 軸 + グリッパー)を例にとります:

関節と状態​

状態(観測状態) はポリシーへの入力の 1 つであり、ロボットの現在の構成を表します:

observation.state = [q1, q2, q3, q4, q5, q6, gripper_pos]
└──────── 6 joint angles ─────┘ └ gripper ┘
  • 単位:関節角は通常ラジアン(rad)または度(deg)で表されますが、データセット内で一貫している必要があります。
  • 並び順:記録スクリプト、modality.json、推論クライアントと完全に一致していなければなりません。
  • meta/modality.json では、次のように分割できます:
    • state.single_arm -> インデックス 0-5
    • state.gripper -> インデックス 6

アクション​

アクションはポリシーの出力であり、ローレベルコントローラによって実行されます:

action = [target_q1, ..., target_q6, target_gripper]

GR00T N1.7 は、一度に H ステップ分のアクションチャンクを出力します(事前学習では action_horizon=40;LeRobot の groot はデフォルトで chunk_size=50)。本チュートリアルでは N1.7 に合わせて H=40 を使用します:

action_chunk.shape = (40, 7)   # 40 steps x 7 dimensions

制御ループは通常、チャンクから 1 行を取り出し、毎ステップまたは k ステップごとにモーターへ送信します。LeRobot の rollout では、n_action_steps によって 1 回の推論で実行するステップ数を制御します。

19.3 カメラモダリティ​

カメラ

19.3 カメラモダリティ

Camera modality

GR00T は、視覚を主、言語を補助、状態を補完として利用します。カメラ構成は学習データと厳密に一致していなければなりません。

一般的なカメラレイアウト(reBot Arm)​

キー名(例)位置目的
frontブラケットに取り付けられた広視野カメラシーン全体、ターゲット物体の位置特定
side / wrist手首カメラ近接での狙い付け、遮蔽されたシーン

LeRobot のデータセットでは、動画は observation.images.<camera_name> として保存され、meta/modality.json の video フィールドで各カメラの解像度とインデックスが宣言されます。

注意事項​

  1. カメラのキー名、数、解像度は、学習と推論の間で同一でなければなりません。
  2. GR00T のバックボーンはネイティブなアスペクト比をサポートしますが、640x480 もしくはデータセットで合意した解像度に統一することを推奨します。
  3. ファインチューニング時には、ロバスト性向上のために dataset.image_transforms(明るさ・コントラストのジッタ)を有効にしてください。
  4. lerobot-find-cameras opencv を使ってローカルのカメラインデックスを確認します。

19.4 言語モダリティ​

言語

19.4 言語モダリティ

Language modality

GR00T パイプラインにおいて、言語は条件付け入力として機能し、画像トークンとともに VLM バックボーンへ入力されます。

データ側​

  • LeRobot: meta/tasks.jsonl またはエピソード単位のアノテーション
  • GR00T 拡張: meta/modality.json -> annotation フィールド

modality.json の例(reBot のデスクトップタスクでは human.task_description を使用):

{
"annotation": {
"human.task_description": {
"original_key": "task_index"
}
}
}

データが LIBERO / SimplerEnv 由来の場合は、代わりに human.action.task_description を使用します。キー名は第20章の完全な modality.json と一致していなければなりません。

推論側​

lerobot-rollout を実行する際は、--task で渡します:

--task="place the red cube on the blue tray"

この文字列はエンコードされ、現在の画像と状態とともにモデルへ入力されます。学習データと似た言語スタイルと文型を使用してください。

19.5 観測ウィンドウとアクションウィンドウ​

ウィンドウ

19.5 観測ウィンドウとアクションウィンドウ

Observation window and action window

VLA の推論は「1 フレームを見て 1 アクションを出力する」というものではなく、時間次元のサンプリング設計を伴います:

Time axis ─────────────────────────────────────────────►

Observation window: [t-k ... t-1, t] ← historical image frames (optional)
State: S_t
Language: L
Action prediction window: [A_t, A_{t+1}, ... A_{t+H-1}]
└── H = chunk_size / action_horizon
パラメータ典型値(N1.7)意味
chunk_size / action_horizon40(N1.7 に合わせる;LeRobot の groot ソースのデフォルトは 50;N1.5/N1.6 は 16)1 回の推論で予測されるアクションステップ数
n_action_steps8-401 回の推論で実際に実行されるステップ数。chunk_size 以下でなければならない
n_obs_steps1使用する過去の画像フレーム数

RTC(Real-Time Chunking): 推論時間が制御周期に近づく場合、LeRobot は RTC ポリシーをサポートしており、現在のチャンクを実行しながら非同期に次のチャンクを計算することで、一時停止を減らします。rollout では --inference.type=rtc を指定して有効化します。queue_threshold は、アクションキューに残っているステップ数がどれくらい少なくなったら新しい推論をトリガーするかを示し、2〜5 を推奨します。0 に設定すると毎回再推論となり、ジッタが増えがちです。

19.6 ファウンデーションモデルとファインチューニング​

モデル

19.6 ファウンデーションモデルとファインチューニング

Foundation model and fine-tuning

ファウンデーションモデル​

NVIDIA GR00T N1.7-3B は、大規模なマルチエンボディメントデータで事前学習されており、汎用的な視覚・言語・アクション能力を備えています。Hugging Face から入手できます:

nvidia/GR00T-N1.7-3B

LeRobot は GR00T サポートをインストールします:

pip install "lerobot[groot]"
# or from source:
pip install -e ".[groot]"

詳細については LeRobot インストールドキュメント を参照してください。

ファインチューニング​

reBot Arm における典型的なワークフロー:

  1. LeRobot v2 データセットと meta/modality.json を準備する(第 20 章)。
  2. embodiment_tag=new_embodiment を指定する。
  3. lerobot-train --policy.type=groot で学習を開始する(第 21 章)。
  4. チェックポイントを Hugging Face Hub にプッシュするか、outputs/ にローカル保存する。

ファインチューニング中:

  • VLM バックボーン は Cosmos-Reason2-2B。デフォルトのファインチューニングでは多くの場合 LLM を凍結し、プロジェクタ + DiT ヘッドの学習に集中する(ピーク約 35 GB)。
  • DiT アクションヘッド と エンボディメント射影層 は reBot の状態/アクション次元に適応する。
  • データ量の推奨:タスクごとに少なくとも 50 回の成功デモ、マルチタスクの場合はさらに多く。
  • VRAM:ファインチューニングには 40 GB 以上。24 GB カードの場合は LoRA/PEFT を使用するか、推論のみにする。

ゼロショット vs. ファインチューニング​

手法説明
ゼロショットGR00T-N1.7-3B をそのまま使用する。タスクが事前学習済みエンボディメントと極めて類似している場合にのみ動作する可能性がある
ファインチューニングreBot Arm の推奨ルート。少量のデスクトップ操作データでも成功率を大きく向上できる

19.7 GR00T システムアーキテクチャ(LeRobot スタック)​

アーキテクチャ

19.7 GR00T システムアーキテクチャ(LeRobot スタック)

GR00T system architecture

LeRobot をベースとした reBot GR00T システムは、4 つのレイヤに分けることができます:

┌────────────────────────────────────────────────────────────┐
│ User / Application Layer │
│ Natural language task + start rollout / teach UI │
└────────────────────────────┬───────────────────────────────┘
│
┌────────────────────────────▼───────────────────────────────┐
│ Robot Control Client (LeRobot Rollout) │
│ - Capture camera images, read joint state │
│ - Send observation to policy, receive action chunk │
│ - Execute actions via reBot driver (serial/CAN) │
│ lerobot-rollout --policy.type=groot --robot.type=... │
└────────────────────────────┬───────────────────────────────┘
│ observation / action
┌────────────────────────────▼───────────────────────────────┐
│ Policy Inference (GR00T N1.7) │
│ ┌──────────────┐ ┌─────────────┐ ┌──────────────────┐ │
│ │ VLM Backbone │→ │ DiT Head │→ │ Embodiment MLP │ │
│ │ Cosmos-Reason2-2B │ │ Flow Match │ │ decode to 7-DoF │ │
│ └──────────────┘ └─────────────┘ └──────────────────┘ │
│ Can be in the same process as rollout, or split into a │
│ separate GPU inference service (advanced deployment) │
└────────────────────────────┬───────────────────────────────┘
│
┌────────────────────────────▼───────────────────────────────┐
│ Data and Training Layer (LeRobot Dataset v2) │
│ episodes / videos / meta/modality.json / tasks.jsonl │
│ lerobot-train / lerobot-record / lerobot-replay │
└────────────────────────────────────────────────────────────┘

内部モデルのデータフロー(簡略版)​

  1. 画像 -> VLM ビジュアルエンコーダ -> ビジュアルトークン
  2. 言語指示 -> テキストトークナイザ -> 言語トークン
  3. 状態 -> エンボディメントエンコーディング MLP -> 状態トークン
  4. マルチモーダルトークンの融合 -> DiT による反復的ノイズ除去 -> アクション潜在変数
  5. エンボディメントデコーディング MLP -> action_chunk (H x action_dim)

19.8 GR00T 推論サーバーとロボット制御クライアント​

デプロイ

19.8 GR00T 推論サーバーとロボット制御クライアント

GR00T inference server and robot control client

開発ボード上でシステムを動かす際には、重い計算処理 と リアルタイム制御 を分離するのが一般的です:

ロボット制御クライアント​

役割:

  • 一定の周波数(例:30 Hz)で reBot Arm の関節状態を読み取る
  • カメラから最新の画像を取得する
  • {images, state, task} を推論側に送信する
  • action_chunk を受信し、n_action_steps に従ってアクションをモータにステップダウンして送る
  • 安全リミットと非常停止(e-stop)を監視する

LeRobot では、これは reBot の robot.type、port、can_adapter、およびカメラ辞書 cameras で設定された lerobot-rollout に対応します。RS は can0 + socketcan を使用し、DM は /dev/ttyACM0 + damiao を使用します。

GR00T 推論サーバー(オプション)​

GPU がデスクトップマシンにあり、アームが現場にある場合、ポリシーをスタンドアロンのサービスとしてデプロイできます:

  • クライアントは観測 JSON / テンソルをネットワーク越しに送信する
  • サーバーは policy.path と base_model_path をロードし、アクションチャンクを返す
  • アーム側の計算負荷を軽減する

LeRobot はデフォルトでは推論とロールアウトを 同一プロセス内 で実行します(--device=cuda)。これは単一マシンでのデバッグに適しています。本番環境では、Isaac GR00T リポジトリのデプロイ例を参照し、推論を HTTP/gRPC サービスとしてラップしてください。コアのモデルインターフェースは LeRobot の groot ポリシーと一貫しています。

統合チェックリスト​

チェック項目説明
関節順序dataset = modality.json = rollout driver
角度単位rad と deg を混在させないこと
カメラキー名front、wrist などが学習時と一致していること
embodiment_tagファインチューニングと推論の両方で new_embodiment を使用する
base_model_path推論時には、通常 nvidia/GR00T-N1.7-3B を設定ベースとして引き続き必要
チャンクと RTCn_action_steps ≤ chunk_size;RTC キューしきい値 ≤ 5

19.9 GR00T における reBot Arm の位置づけ​

GR00T における reBot

19.9 GR00T における reBot Arm の位置づけ

The reBot Arm's position in GR00T
項目reBot Arm B601 推奨構成
embodiment_tagnew_embodiment
state キーsingle_arm (6) + gripper (1)
action キーstate と整合、7 次元
action タイプ関節空間 NON_EEF。LeRobot ではオプションで use_relative_actions=true(関節相対であり、Relative EEF ではない)
アクションウィンドウ学習時 chunk_size=40(N1.7 の action_horizon と整合)
カメラ少なくとも 1 ストリーム;front + wrist / side の併用を推奨
言語エピソードごとに 1 つのタスク記述;アノテーションには human.task_description を使用
制御インターフェース下表参照:RS は SocketCAN、DM は Damiao シリアルを使用

B601-RS と B601-DM のドライバの違い(LeRobot コマンドで変更するのはこの 3 つのみ):

バージョンrobot.typerobot.portrobot.can_adapter参考
B601-RSseeed_b601_rs_followercan0socketcanB601-RS LeRobot Wiki
B601-DMseeed_b601_dm_follower/dev/ttyACM0damiaoB601-DM LeRobot Wiki

どちらも 6 軸 + グリッパの 7 次元 state/action であり、テレオペ側は常に --teleop.type=rebot_arm_102_leader --teleop.port=/dev/ttyUSB0 を使用します。RS を使用する前に、次のように CAN を設定してください:sudo ip link set can0 type can bitrate 1000000 && sudo ip link set can0 up。

第 20 章では、既存の模倣学習データを上記フォーマットに整理する手順をステップバイステップで説明します。第 21 章では、これを基に lerobot-train ファインチューニングを完了します。

19.10 章のまとめ​

まとめ

19.10 章のまとめ

  • エンボディメント はロボットの物理的および制御インターフェースを定義します。reBot Arm は new_embodiment として GR00T に参加します(LIBERO_PANDA や DROID のような事前学習タグは使用しないでください)。
  • State / Action は、データセット、モダリティ設定、および推論クライアント間で厳密に一貫していなければなりません。
  • ビジョンと言語 は VLA の 2 つの条件モダリティであり、reBot のアノテーションでは human.task_description を使用します。
  • アクションウィンドウ: N1.7 の action_horizon=40 は RTC と合わせて、リアルタイム性能を決定します。
  • モデルバリアント: B601-RS(SocketCAN)と B601-DM(Damiao シリアル)は、type / port / can_adapter のみが異なります。
  • LeRobot はデータ、トレーニング、およびロールアウトのための統一ツールチェーンを提供し、GR00T は事前学習済み VLA 機能を提供します。
  • 次の章では実践に入り、reBot VLA データセットの準備を行います。
Loading Comments...