LeRobot documentation
RoboColosseum
RoboColosseum
RoboColosseum est un benchmark distribué du monde réel pour évaluer des politiques robotiques généralistes sur des robots physiques déployés en conditions réelles. Les évaluations s’effectuent sur des configurations standardisées : humanoïdes Unitree G1, YAM bimanuel, bras Franka dans la configuration DROID et SO-101. Chaque exécution d’évaluation, y compris les échecs, est publiée sur le Hugging Face Hub au format LeRobot.
Cette page explique comment préparer une politique LeRobot pour ses deux parcours d’évaluation et comment la connecter aux robots de RoboColosseum. Pour faire évaluer une politique, faites une demande sur le site web de RoboColosseum.
- Article : RoboColosseum: Evaluating Physical Intelligence at Scale In-The-Wild
- GitHub : RoboColosseum/RoboColosseum
- Site web du projet : robocolosseum.ai
- Classement : robocolosseum.ai/leaderboard
- Jeu de données : collection de jeux de données RoboColosseum

Aperçu
| Propriété | Valeur |
|---|---|
| Incarnations | SO-101, Franka (DROID), YAM bimanuel, Unitree G1 |
| Parcours de fine-tuning | 20 tâches, 5 par incarnation. Chaque politique est affinée sur les mêmes 100 démonstrations d'une tâche, puis effectue 25 tentatives. |
| Open Track | Deux politiques anonymisées tentent la même nouvelle instruction dans la même scène ; l'évaluateur choisit la meilleure exécution ou déclare un match nul. Le point de contrôle est figé. |
| Évaluation | Sur les robots physiques de RoboColosseum |
Configuration matérielle

Chaque site utilise la même configuration matérielle pour une incarnation. De gauche à droite sur la figure : YAM bimanuel, SO-101, Franka dans la configuration DROID et Unitree G1. Les noms des caméras correspondent aux clés observation.images.* des jeux de données Fine-tune Track.
| Incarnation | Robot | Caméras |
|---|---|---|
| SO-101 | Bras suiveur SO-101 sur une table mobile à hauteur réglable | front : Intel RealSense D435 sur un bras articulé ; wrist : caméra de poignet |
| Franka (DROID) | Bras Franka Panda 7-DoF avec une pince Robotiq 2F-85 sur un bureau portable debout, dans la configuration DROID | left_image, right_image : deux caméras stéréo ZED 2 ajustables ; wrist : caméra stéréo ZED Mini de poignet |
| YAM bimanuel | Deux bras YAM du kit YAM MolmoAct2 sur une table mobile à hauteur réglable | top : Intel RealSense D435 sur un mât ; left, right : caméras Intel RealSense D405 de poignet |
| Unitree G1 | Humanoid Unitree G1 avec des pinces parallèles Unitree Dex-1 | head : caméra stéréo de tête ; left_wrist, right_wrist : caméras Intel RealSense D405 de poignet |
Les stations SO-101 et Bimanual YAM sont également équipées d'un ordinateur portable doté d'un GPU RTX 5090 et d'une station d'alimentation portable de 700 W. L'inférence de la politique s'exécute localement sur cet ordinateur portable ou à distance via un point de terminaison hébergé sur un serveur.
Tâches disponibles
La piste Fine-tune comporte 20 tâches, 5 par incarnation. Chaque tâche est un jeu de données LeRobot v3.0 distinct sur le Hub, enregistré avec 100 épisodes :
| Tâche | Incarnation | Instruction |
|---|---|---|
so101-cube-drawer | SO-101 | Placez le cube bleu sur la table dans le tiroir ouvert, puis fermez le tiroir. |
so101-remove-screwdriver | SO-101 | Prenez le tournevis noir de la boîte et placez-le sur la table. |
so101-stack-bowls | SO-101 | Prenez le bol en plastique blanc à droite et placez-le sur le bol en plastique blanc à gauche. |
so101-stack-cubes | SO-101 | Empilez le cube bleu sur le cube rouge, puis empilez le cube blanc sur le cube bleu. |
so101-upright-bottle | SO-101 | Ramassez la bouteille de jus tombée et placez-la debout sur la table. |
droid-close-laptop | Franka (DROID) | fermer le portable |
droid-mug-on-coaster | Franka (DROID) | tasse sur sous-tasse |
droid-open-drawer | Franka (DROID) | ouvrir le tiroir |
droid-put-marker-pen | Franka (DROID) | Placez le marqueur dans le porte-stylos |
droid-towel-in-basket | Franka (DROID) | serviette dans un panier |
yam-cups | YAM bimanuel | Empilez les gobelets. |
yam-drawer | YAM bimanuel | Mettez la tasse dans le tiroir. |
yam-dustpan | YAM bimanuel | Nettoyer le tableau. |
yam-microwave | YAM bimanuel | Ouvrez le micro-ondes et sortez le bol. |
yam-tray | YAM bimanuel | Nettoyer le tableau. |
g1-carry-box | Unitree G1 | boîte de transport |
g1-fold-towel | Unitree G1 | plier la serviette |
g1-hang-keys | Unitree G1 | clés de suspension |
g1-load-clothes-washing-machine | Unitree G1 | charger la machine à laver |
g1-plate-into-rack | Unitree G1 | plate into rack |
Les instructions Open Track sont rédigées par un évaluateur sur le champ.
Jeu de données
Téléchargez les 20 jeux de données de la Fine-tune Track dans ./data/RoboColosseum, un dossier par tâche. L’ensemble complet représente environ 35 Go : SO-101 1,4 Go, Franka 4,6 Go, Bimanual YAM 5,9 Go et Unitree G1 22,7 Go.
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}"
donePour télécharger uniquement certaines tâches, conservez uniquement ces noms dans la liste. Chaque dossier est un jeu de données LeRobot autonome. Chargez-en un en passant son dossier en tant que root :
from lerobot.datasets import LeRobotDataset
dataset = LeRobotDataset(
"RoboColosseum/so101-stack-bowls",
root="./data/RoboColosseum/so101-stack-bowls",
)Sans root, le jeu de données est téléchargé depuis le Hub lors de la première utilisation.
Installation
Installez le Policy Server sur la machine qui exécute votre modèle :
git clone https://github.com/RoboColosseum/robocolosseum-policy-server.git
cd robocolosseum-policy-server
uv sync --extra demoLes sites robot installent le Robot Client sur l’ordinateur connecté au robot, où <robot_type> est so101, franka ou 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.
Évaluation
Les évaluations sont exécutées sur les robots de RoboColosseum. Après que vous avez postulé, l'équipe RoboColosseum connecte votre politique de l'une des deux manières suivantes : vous hébergez un Policy Server sur votre propre machine d'inférence, ou vous leur transmettez un checkpoint qu'ils servent sur une machine située à côté du robot.
Les essais Open Track utilisent deux programmes :
| Composant | Fonctionne sur | Ce qu'il fait | Dépôt |
|---|---|---|---|
| Serveur de politique | Votre machine d'inférence | Reçoit les observations du robot, exécute votre modèle et renvoie les actions | robocolosseum-policy-server |
| Client robot | L'ordinateur du robot | Contrôle le robot, exécute les actions et enregistre l'essai | robocolosseum-client |
Servir votre politique
Dans le checkout du Policy Server, créez la configuration et définissez l'URL du Router et le jeton du Policy Server que vous recevez de l'équipe RoboColosseum :
cp configs/policy.yaml.example configs/policy.yamlurl: wss://router.example.com:8443
token: pol_replace_with_token_from_router_uiVérifiez la connexion sans envoyer d’actions. Lorsque le Router associe un Robot Client à votre serveur, l’instruction de tâche, l’état des articulations et de la pince ainsi que les images de la caméra sont affichés (les images s’ouvrent dans des fenêtres OpenCV, ce qui nécessite donc un affichage graphique) :
uv run --extra demo python examples/test_policy.py --no-enable-action
Puis connectez votre modèle avec le SDK du Policy Server. Enregistrez ceci sous le nom serve_policy.py à la racine du dépôt :
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) convertit l’observation (obs.instruction, obs.state.head_image, obs.state.left_image, obs.state.right_image, obs.state.joints, obs.state.gripper) en entrées de votre modèle et renvoie un tableau NumPy de forme (horizon, action_dim) dans l’espace d’actions convenu avec le Client. Par défaut, il s’agit de joint_position à 15 Hz, avec au plus 16 étapes par bloc. Démarrez le serveur et maintenez-le en cours d’exécution pendant que les évaluateurs utilisent votre politique :
uv run python serve_policy.py
Configurer un robot
Dans le processus de commande du Robot Client, créez la configuration et modifiez-la pour votre robot :
cp configs/robot.yaml.example configs/robot.yamlEnsuite, démarrez le Client :
.venv/bin/colosseum-robot configs/robot.yaml
Suivez les instructions pour saisir une consigne ou sélectionner une tâche, exécutez l'essai et soumettez l'évaluation. Chaque essai est enregistré et exporté au format LeRobot.
Code d'évaluation du suivi Fine-tune
Le code de fine-tuning et d'évaluation utilisé pour chaque incarnation dans la Fine-tune Track est public : SO-101, Franka (DROID), Bimanual YAM et Unitree G1.
Entraînement
Parcours de fine-tuning
Entraîner sur un jeu de données de tâche téléchargé avec --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-bowlsLa configuration exacte de la politique, le mappage des caméras, la représentation des actions et la recette d’entraînement dépendent de la politique adaptée. Si votre politique s’attend à des noms de caméras différents, mappez-les avec --rename_map.
Note : les lignes de base G0.5 et LingBot-VLA 2.0 ont été affinées avec leur code d'origine, GalaxeaVLA @ 89f2322 et lingbot-vla-v2 @ be969b8.
Open Track
L'Open Track évalue un point de contrôle figé sur des tâches réelles. Aucune formation n'est effectuée sur les données d'évaluation de l'Open Track de RoboColosseum.
Si votre politique ne prend pas encore en charge l’incarnation cible, adaptez-la d’abord sur des données robotiques publiques pour cette incarnation, puis figez le point de contrôle résultant avant l’évaluation. Jeux de données publics de démarrage recommandés :
| Incarnation cible | Données de bootstrap publiques |
|---|---|
| SO-100 / SO-101 | allenai/MolmoAct2-SO100_101-Dataset |
| Franka (DROID) | DROID |
| YAM bimanuel | allenai/MolmoAct2-BimanualYAM-Dataset |
allenai/MolmoAct2-SO100_101-Dataset répertorie les jeux de données LeRobot SO-100 et SO-101 utilisés pour entraîner MolmoAct2, avec des annotations linguistiques par épisode. Téléchargez la liste des dépôts sources avec :
hf download allenai/MolmoAct2-SO100_101-Dataset repo_list.json \ --repo-type dataset \ --local-dir ./data/molmoact2_so100_101
Chaque entrée de repo_list.json est un identifiant de jeu de données du Hub préfixé par lerobot: (par exemple lerobot:<user>/<dataset>). Sélectionnez les jeux de données SO-100 / SO-101 compatibles dans la liste et entraînez le modèle sur ceux-ci. Beaucoup d’entre eux utilisent le format LeRobot v2.1 : convertissez-les en v3.0 avant de les charger (voir Using LeRobotDataset).
DROID est publié au format RLDS. Convertissez-le en jeu de données LeRobot en suivant l’exemple DROID dans Porting Large Datasets, puis entraînez-vous sur le jeu de données converti avec lerobot-train.
Le jeu de données Bimanual YAM fonctionne directement avec 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_yamL'étape de bootstrap rend uniquement la politique compatible avec l'incarnation cible. Le point de contrôle soumis à la piste Open reste figé pendant l'évaluation.
Soumission au classement
Les scores sont publiés sur le classement RoboColosseum. Pour faire évaluer une politique, faites une demande sur le site web RoboColosseum. Le protocole pour chaque piste :
- Parcours de fine-tuning : chaque politique est fine-tunée sur les mêmes 100 démonstrations d'une tâche, puis effectue 25 tentatives. Les succès complets et les progrès par étapes sont rapportés.
- Open Track : les évaluateurs voient deux politiques anonymisées tenter la même instruction sur le même robot et la même scène, et choisissent la meilleure exécution ou déclarent un égalité. Les notes sont ajustées à partir de toutes les comparaisons sur ce robot et affichées avec leur incertitude.