LeRobot documentation

RoboColosseum

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.7.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

RoboColosseum

RoboColosseumは、屋外にデプロイされた物理ロボット上で汎用ロボットポリシーを評価するための分散型リアルワールドベンチマークです。評価は標準化されたセットアップで実行されます: Unitree G1ヒューマノイド、両手YAM、DROIDセットアップのFrankaアーム、SO-101です。すべての評価実行結果(失敗を含む)は、LeRobot形式でHugging Face Hubに公開されます。

このページでは、LeRobotのポリシーを2つの評価トラック用に準備する方法と、RoboColosseumのロボットに接続する方法について説明します。ポリシーの評価を受けるには、RoboColosseumのウェブサイトから申請してください。

RoboColosseum benchmark overview

概要

プロパティ値
実装SO-101、Franka (DROID)、Bimanual YAM、Unitree G1
ファインチューニングトラック20タスク、各エンボディメントあたり5タスクです。すべてのポリシーは、タスクの同じ100件のデモでファインチューニングされ、その後25回試行します。
Open Track2つの匿名化されたポリシーが、同じシーンで同じ新しい指示に挑戦します。評価者はより良い実行を選択するか、引き分けと判定します。チェックポイントは固定されます。
評価RoboColosseumの物理ロボットについて

物理的なセットアップ

RoboColosseum robot platforms: Bimanual YAM, SO-101, Franka in the DROID configuration and Unitree G1

すべてのサイトは、エンボディメントに同じハードウェア構成を使用しています。図の左から右へ: Bimanual YAM、SO-101、DROID構成のFranka、Unitree G1です。カメラ名は、Fine-tune Trackデータセットのobservation.images.*キーです。

エンボディメントロボットカメラ
SO-101高さ調節可能なモバイルテーブル上のSO-101フォロワーアームfront: アーティキュレートアームに搭載された Intel RealSense D435; wrist: 手首カメラ
Franka (DROID)DROID構成のポータブル式スタンディングデスク上に設置された、Robotiq 2F-85グリップを備えたFranka Panda 7自由度アームleft_image、right_image: 調整可能な ZED 2 ステレオカメラ2台; wrist: ZED Mini 手首用ステレオカメラ
両手YAM高さ調整可能なモバイルテーブルに設置された、MolmoAct2 YAMキットの2つのYAMアームtop: ポールに設置した Intel RealSense D435; left, right: Intel RealSense D405 手首カメラ
Unitree G1Unitree G1ヒューマノイドとUnitree Dex-1並列グリップhead: ステレオヘッドカメラ; left_wrist、right_wrist: Intel RealSense D405 手首カメラ

SO-101およびBimanual YAMステーションには、RTX 5090 GPUを搭載したラップトップと700 Wのポータブル電源も備え付けられています。ポリシー推論は、そのラップトップ上でローカルに実行するか、サーバーホストのエンドポイント経由でリモートに実行できます。

利用可能なタスク

Fine-tune Trackには20のタスクがあり、各embodimentごとに5つあります。各タスクはHub上の個別のLeRobot v3.0 データセットであり、100エピソードで記録されています:

タスクエンボディメント指示
so101-cube-drawerSO-101青い立方体をテーブルから引き出しに移動し、引き出しを閉じてください。
so101-remove-screwdriverSO-101黒いドライバーを箱から取り出し、テーブルの上に置きます。
so101-stack-bowlsSO-101右にある白いプラスチック製のボウルを持ち上げ、左にある白いプラスチック製のボウルの上に重ねてください。
so101-stack-cubesSO-101青いキューブを赤いキューブの上に積み、次に白いキューブを青いキューブの上に積み上げます。
so101-upright-bottleSO-101倒れたジュースのボトルを拾い、テーブルの上に立ててください。
droid-close-laptopFranka (DROID)ラップトップを閉じる
droid-mug-on-coasterFranka (DROID)コースターの上のマグカップ
droid-open-drawerFranka (DROID)ドロワーを開く
droid-put-marker-penFranka (DROID)マーカーをペンホルダーに挿入します
droid-towel-in-basketFranka (DROID)バスケットの中のタオル
yam-cups両手YAMコップを積み上げてください。
yam-drawer両手YAMカップを引き出しに入れます。
yam-dustpan両手YAMテーブルをクリーンアップします。
yam-microwave両手YAM電子レンジを開けて、ボウルを取り出します。
yam-tray両手YAMテーブルをクリーンアップします。
g1-carry-boxUnitree G1キャリングボックス
g1-fold-towelUnitree G1タオルをたたむ
g1-hang-keysUnitree G1hang キー
g1-load-clothes-washing-machineUnitree G1洗濯機に衣類を投入
g1-plate-into-rackUnitree G1プレートからラックへ

Open Trackの指示は、評価者がその場で作成します。

データセット

Fine-tune Track の全 20 のデータセットを、タスクごとに 1 つのフォルダとして ./data/RoboColosseum にダウンロードします。セット全体は約 35 GB です: SO-101 が 1.4 GB、Franka が 4.6 GB、Bimanual YAM が 5.9 GB、Unitree G1 が 22.7 GB です。

for task in so101-cube-drawer so101-remove-screwdriver so101-stack-bowls so101-stack-cubes so101-upright-bottle \
            droid-close-laptop droid-mug-on-coaster droid-open-drawer droid-put-marker-pen droid-towel-in-basket \
            yam-cups yam-drawer yam-dustpan yam-microwave yam-tray \
            g1-carry-box g1-fold-towel g1-hang-keys g1-load-clothes-washing-machine g1-plate-into-rack; do
  hf download "RoboColosseum/${task}" --repo-type dataset --local-dir "./data/RoboColosseum/${task}"
done

一部のタスクのみをダウンロードする場合は、リストにそのタスク名のみを残してください。各フォルダは自己完結型のLeRobotデータセットです。フォルダをrootとして渡すことで、1つずつ読み込むことができます。

from lerobot.datasets import LeRobotDataset

dataset = LeRobotDataset(
    "RoboColosseum/so101-stack-bowls",
    root="./data/RoboColosseum/so101-stack-bowls",
)

rootを指定しない場合、データセットは初回使用時にHubからダウンロードされます。

インストール

モデルを実行するマシンに Policy Server をインストールします:

git clone https://github.com/RoboColosseum/robocolosseum-policy-server.git
cd robocolosseum-policy-server
uv sync --extra demo

ロボットサイトでは、ロボットに接続されたコンピュータに Robot Client をインストールします。<robot_type> は so101、franka、または yam です:

git clone https://github.com/RoboColosseum/robocolosseum-client.git
cd robocolosseum-client
uv sync --extra <robot_type>
Both need Python 3.10 or newer and [uv](https://docs.astral.sh/uv/). The Robot Client also needs FFmpeg to export recordings. On SO-101, the Robot Client drives the arm with LeRobot's `so101_follower` driver, which needs Python 3.12: follow the Client's [SO-101 guide](https://github.com/RoboColosseum/robocolosseum-client/blob/main/docs/so101.md) instead.

評価

評価はRoboColosseumのロボット上で実行されます。申請後、RoboColosseumチームは以下の2つの方法のいずれかで、あなたのポリシーを接続します。1つは、ご自身の推論マシン上でPolicy Serverをホストする方法です。もう1つは、チェックポイントを渡して、ロボット隣接のマシンで彼らがサーブする方法です。

Open Trackのトライアルでは、2つのプログラムを使用します:

コンポーネント動作環境機能リポジトリ
Policy Server推論マシンロボットの観測値を受け取り、モデルを実行してアクションを返しますrobocolosseum-policy-server
ロボットクライアントロボットのコンピュータロボットを制御し、アクションを実行して、試行を記録しますrobocolosseum-client

ポリシーをサーブする

Policy Serverのチェックアウトで設定を作成し、RoboColosseumチームから受け取ったRouter URLとPolicy Serverトークンを設定します:

cp configs/policy.yaml.example configs/policy.yaml
url: wss://router.example.com:8443
token: pol_replace_with_token_from_router_ui

アクションを送信せずに接続を確認します。RouterがRobot Clientをサーバーにマッチングすると、タスク指示、関節およびグリップの状態、カメラ画像が表示されます(画像はOpenCVウィンドウで開かれるため、グラフィカルディスプレイが必要です):

uv run --extra demo python examples/test_policy.py --no-enable-action

次に、Policy Server SDK を使用してモデルを接続します。このコードをリポジトリのルートにserve_policy.pyとして保存してください。

from colosseum_policy_server import ColosseumPolicySDK
from your_policy import load_model  # Replace with your own model loader.


def main():
    model = load_model()

    with ColosseumPolicySDK.from_yaml("configs/policy.yaml") as sdk:
        print("Connected to Router. Waiting for observations...", flush=True)
        while True:
            obs = sdk.get_obs()
            actions = model.infer(obs)
            sdk.send_action(actions, observation=obs)


if __name__ == "__main__":
    main()

model.infer(obs) は、観測値(obs.instruction、obs.state.head_image、obs.state.left_image、obs.state.right_image、obs.state.joints、obs.state.gripper)をモデルの入力に変換し、Client と合意したアクション空間で、形状が (horizon, action_dim) の NumPy 配列を返します。デフォルトでは、joint_position が 15 Hz で、1 チャンクあたり最大 16 ステップです。サーバーを起動し、評価者がポリシーを使用している間、実行を維持してください。

uv run python serve_policy.py

ロボットのセットアップ

Robot Client のチェックアウトで、設定を作成し、ロボットに合わせて編集します:

cp configs/robot.yaml.example configs/robot.yaml

次に、Client を開始します:

.venv/bin/colosseum-robot configs/robot.yaml

プロンプトに従って指示を入力するかタスクを選択し、トライアルを実行して評価を提出します。各トライアルは記録され、LeRobot形式でエクスポートされます。

Fine-tune Trackの評価コード

Fine-tune Trackの各エンボディメントに使用されたファインチューニングおよび評価コードは公開されています: SO-101、Franka (DROID)、Bimanual YAM、Unitree G1。

トレーニング

ファインチューニングトラック

--dataset.root を使用して、ダウンロードしたタスクのデータセットで学習します:

lerobot-train \
  --dataset.repo_id=RoboColosseum/so101-stack-bowls \
  --dataset.root=./data/RoboColosseum/so101-stack-bowls \
  --policy.type=<policy_type> \
  --policy.repo_id=${HF_USER}/<policy_type>_robocolosseum_so101-stack-bowls \
  --output_dir=./outputs/<policy_type>_robocolosseum_so101-stack-bowls

正確なポリシー設定、カメラのマッピング、アクションの表現、および学習レシピは、適応させるポリシーによって異なります。ポリシーが異なるカメラ名を期待している場合は、--rename_mapでそれらをマッピングしてください。

注: G0.5 と LingBot-VLA 2.0 のベースラインは、それぞれ元のコードである GalaxeaVLA @ 89f2322 および lingbot-vla-v2 @ be969b8 を使用してファインチューニングされました。

Open Track

Open Trackでは、実際のタスクに対してフリーズされたチェックポイントを評価します。RoboColosseum Open Trackの評価データに対してトレーニングは行われません。

ポリシーが対象のエンボディメントに対応していない場合、まずそのエンボディメント向けの公開ロボットデータで適応させ、評価前に結果のチェックポイントを固定してください。推奨される公開ブートストラップデータセット:

ターゲットエンボディメントパブリックブートストラップデータ
SO-100 / SO-101allenai/MolmoAct2-SO100_101-Dataset
Franka (DROID)DROID
両手YAMallenai/MolmoAct2-BimanualYAM-Dataset

allenai/MolmoAct2-SO100_101-Datasetには、MolmoAct2の学習に使用されたSO-100およびSO-101のLeRobotデータセットが、エピソードごとの言語アノテーション付きでリストされています。ソースリポジトリのリストは、次のコマンドでダウンロードできます。

hf download allenai/MolmoAct2-SO100_101-Dataset repo_list.json \
  --repo-type dataset \
  --local-dir ./data/molmoact2_so100_101

repo_list.json の各エントリは、lerobot: がプレフィックスとして付与された Hub データセット ID です(例: lerobot:<user>/<dataset>)。リストから SO-100 / SO-101 互換のデータセットを選択し、それらで学習を行ってください。多くのデータセットは LeRobot v2.1 形式を使用しています。読み込む前に v3.0 形式へ変換してください(LeRobotDataset の使用を参照)。

DROIDはRLDS形式で公開されています。大規模データセットの移植のDROIDの例に従ってLeRobotデータセットに変換し、変換後のデータセットでlerobot-trainを使って学習してください。

Bimanual YAM データセットは、lerobot-train で直接使用できます:

lerobot-train \
  --dataset.repo_id=allenai/MolmoAct2-BimanualYAM-Dataset \
  --policy.type=<policy_type> \
  --policy.repo_id=${HF_USER}/<policy_type>_bimanual_yam \
  --output_dir=./outputs/<policy_type>_bimanual_yam

ブートストラップ段階では、ポリシーをターゲットのエンボディメントに適合させるだけです。Open Trackに提出されたチェックポイントは、評価中ずっと凍結された状態のままです。

リーダーボードへの提出

スコアはRoboColosseumリーダーボードに公開されます。ポリシーの評価を受けるには、RoboColosseumのウェブサイトで申請してください。各トラックのプロトコルは以下の通りです:

  • Fine-tune Track: すべてのポリシーは、タスクの同じ100件のデモデータでファインチューニングされ、その後25回の試行を行います。完全な成功とマイルストーンでの進捗が報告されます。
  • オープントラック: 評価者は、同じロボットとシーンで同じ指示に対して試行する2つの匿名化されたポリシーを確認し、より良い実行を選択するか、引き分けと判定します。評価は、そのロボットに関するすべての比較から推定され、不確実性とともに表示されます。
Update on GitHub