LeRobot documentation
RoboColosseum
RoboColosseum
RoboColosseumは、屋外にデプロイされた物理ロボット上で汎用ロボットポリシーを評価するための分散型リアルワールドベンチマークです。評価は標準化されたセットアップで実行されます: Unitree G1ヒューマノイド、両手YAM、DROIDセットアップのFrankaアーム、SO-101です。すべての評価実行結果(失敗を含む)は、LeRobot形式でHugging Face Hubに公開されます。
このページでは、LeRobotのポリシーを2つの評価トラック用に準備する方法と、RoboColosseumのロボットに接続する方法について説明します。ポリシーの評価を受けるには、RoboColosseumのウェブサイトから申請してください。
- 論文: RoboColosseum: Evaluating Physical Intelligence at Scale In-The-Wild
- GitHub: RoboColosseum/RoboColosseum
- プロジェクトウェブサイト: robocolosseum.ai
- リーダーボード: robocolosseum.ai/leaderboard
- データセット: RoboColosseum Datasetsコレクション

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

すべてのサイトは、エンボディメントに同じハードウェア構成を使用しています。図の左から右へ: 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 G1 | Unitree 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-drawer | SO-101 | 青い立方体をテーブルから引き出しに移動し、引き出しを閉じてください。 |
so101-remove-screwdriver | SO-101 | 黒いドライバーを箱から取り出し、テーブルの上に置きます。 |
so101-stack-bowls | SO-101 | 右にある白いプラスチック製のボウルを持ち上げ、左にある白いプラスチック製のボウルの上に重ねてください。 |
so101-stack-cubes | SO-101 | 青いキューブを赤いキューブの上に積み、次に白いキューブを青いキューブの上に積み上げます。 |
so101-upright-bottle | SO-101 | 倒れたジュースのボトルを拾い、テーブルの上に立ててください。 |
droid-close-laptop | Franka (DROID) | ラップトップを閉じる |
droid-mug-on-coaster | Franka (DROID) | コースターの上のマグカップ |
droid-open-drawer | Franka (DROID) | ドロワーを開く |
droid-put-marker-pen | Franka (DROID) | マーカーをペンホルダーに挿入します |
droid-towel-in-basket | Franka (DROID) | バスケットの中のタオル |
yam-cups | 両手YAM | コップを積み上げてください。 |
yam-drawer | 両手YAM | カップを引き出しに入れます。 |
yam-dustpan | 両手YAM | テーブルをクリーンアップします。 |
yam-microwave | 両手YAM | 電子レンジを開けて、ボウルを取り出します。 |
yam-tray | 両手YAM | テーブルをクリーンアップします。 |
g1-carry-box | Unitree G1 | キャリングボックス |
g1-fold-towel | Unitree G1 | タオルをたたむ |
g1-hang-keys | Unitree G1 | hang キー |
g1-load-clothes-washing-machine | Unitree G1 | 洗濯機に衣類を投入 |
g1-plate-into-rack | Unitree 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.yamlurl: 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-101 | allenai/MolmoAct2-SO100_101-Dataset |
| Franka (DROID) | DROID |
| 両手YAM | allenai/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つの匿名化されたポリシーを確認し、より良い実行を選択するか、引き分けと判定します。評価は、そのロボットに関するすべての比較から推定され、不確実性とともに表示されます。