LeRobot documentation
RoboColosseum
RoboColosseum
RoboColosseum es un benchmark distribuido del mundo real para evaluar políticas de robots de uso general en robots físicos desplegados en entornos no controlados. Las evaluaciones se ejecutan en configuraciones estandarizadas: humanoides Unitree G1, bimanual YAM, brazos Franka en la configuración DROID y SO-101. Cada ejecución de evaluación, incluidos los fallos, se publica en el Hugging Face Hub en formato LeRobot.
Esta página explica cómo preparar una política de LeRobot para sus dos vías de evaluación y cómo conectarla con los robots de RoboColosseum. Para que se evalúe una política, debe solicitarlo en el sitio web de RoboColosseum.
- Artículo: RoboColosseum: Evaluating Physical Intelligence at Scale In-The-Wild
- GitHub: RoboColosseum/RoboColosseum
- Sitio web del proyecto: robocolosseum.ai
- Clasificación: robocolosseum.ai/leaderboard
- Conjunto de datos: colección de conjuntos de datos de RoboColosseum

Resumen
| Propiedad | Valor |
|---|---|
| Embodiments | SO-101, Franka (DROID), YAM bimanual, Unitree G1 |
| Ruta de ajuste fino | 20 tareas, 5 por encarnación. Cada política se ajusta finamente con las mismas 100 demostraciones de una tarea y luego realiza 25 intentos. |
| Open Track | Dos políticas anonimizadas intentan la misma nueva instrucción en la misma escena; el evaluador elige la mejor ejecución o declara un empate. El punto de control queda congelado. |
| Evaluación | Sobre los robots físicos de RoboColosseum |
Configuración física

Cada sitio utiliza la misma configuración de hardware para una encarnación. De izquierda a derecha en la figura: YAM bimanual, SO-101, Franka en la configuración DROID y Unitree G1. Los nombres de las cámaras son las claves observation.images.* en los conjuntos de datos de la pista Fine-tune.
| Encarnación | Robot | Cámaras |
|---|---|---|
| SO-101 | Brazo seguidor SO-101 sobre una mesa móvil de altura ajustable | front: Intel RealSense D435 en un brazo articulado; wrist: cámara de muñeca |
| Franka (DROID) | Brazo Franka Panda de 7 grados de libertad con una pinza Robotiq 2F-85 sobre una mesa de pie portátil, en la configuración DROID | left_image, right_image: dos cámaras estéreo ZED 2 ajustables; wrist: cámara estéreo ZED Mini de muñeca |
| YAM bimanual | Dos brazos YAM del kit YAM de MolmoAct2 en una mesa móvil con altura ajustable | top: Intel RealSense D435 en un mástil; left, right: cámaras Intel RealSense D405 de muñeca |
| Unitree G1 | Humanoid Unitree G1 con pinzas paralelas Unitree Dex-1 | head: cámara estéreo de cabeza; left_wrist, right_wrist: cámaras Intel RealSense D405 de muñeca |
Las estaciones SO-101 y Bimanual YAM también incluyen un portátil con una GPU RTX 5090 y una estación de energía portátil de 700 W. La inferencia de la política se ejecuta localmente en ese portátil o de forma remota a través de un punto final alojado en un servidor.
Tareas disponibles
La pista de Fine-tune tiene 20 tareas, 5 por encarnación. Cada tarea es un conjunto de datos LeRobot v3.0 separado en el Hub, grabado con 100 episodios:
| Tarea | Encarnación | Instrucción |
|---|---|---|
so101-cube-drawer | SO-101 | Coloca el cubo azul de la mesa en el cajón abierto y luego cierra el cajón. |
so101-remove-screwdriver | SO-101 | Saca el destornillador negro de la caja y colócalo sobre la mesa. |
so101-stack-bowls | SO-101 | Toma el cuenco de plástico blanco de la derecha y apílalos sobre el cuenco de plástico blanco de la izquierda. |
so101-stack-cubes | SO-101 | Apila el cubo azul sobre el cubo rojo y luego apila el cubo blanco sobre el cubo azul. |
so101-upright-bottle | SO-101 | Recoge la botella de jugo caída y colócala en posición vertical sobre la mesa. |
droid-close-laptop | Franka (DROID) | cerrar el portátil |
droid-mug-on-coaster | Franka (DROID) | taza sobre posavasos |
droid-open-drawer | Franka (DROID) | abrir cajón |
droid-put-marker-pen | Franka (DROID) | Coloca el marcador en el soporte para bolígrafos |
droid-towel-in-basket | Franka (DROID) | toalla en la cesta |
yam-cups | YAM bimanual | Apila las copas. |
yam-drawer | YAM bimanual | Coloca la taza en el cajón. |
yam-dustpan | YAM bimanual | Limpia la tabla. |
yam-microwave | YAM bimanual | Abre el microondas y saca el bol. |
yam-tray | YAM bimanual | Limpia la tabla. |
g1-carry-box | Unitree G1 | caja de transporte |
g1-fold-towel | Unitree G1 | doblar toalla |
g1-hang-keys | Unitree G1 | claves de colgante |
g1-load-clothes-washing-machine | Unitree G1 | cargar la lavadora |
g1-plate-into-rack | Unitree G1 | de la placa a la bandeja |
Las instrucciones de Open Track son escritas por un evaluador sobre la marcha.
Dataset
Descargue los 20 conjuntos de datos de la pista Fine-tune Track en ./data/RoboColosseum, una carpeta por tarea. El conjunto completo es de aproximadamente 35 GB: SO-101 1.4 GB, Franka 4.6 GB, Bimanual YAM 5.9 GB y 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}"
donePara descargar solo algunas tareas, mantenga únicamente esos nombres en la lista. Cada carpeta es un conjunto de datos de LeRobot autocontenido. Cargue uno pasando su carpeta como root:
from lerobot.datasets import LeRobotDataset
dataset = LeRobotDataset(
"RoboColosseum/so101-stack-bowls",
root="./data/RoboColosseum/so101-stack-bowls",
)Sin root, el conjunto de datos se descarga del Hub en el primer uso.
Instalación
Instale el Policy Server en la máquina que ejecuta su modelo:
git clone https://github.com/RoboColosseum/robocolosseum-policy-server.git
cd robocolosseum-policy-server
uv sync --extra demoLos sitios de robots instalan el Robot Client en la computadora conectada al robot, donde <robot_type> es so101, franka o 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.
Evaluación
Las evaluaciones se ejecutan en los robots de RoboColosseum. Después de que apliques, el equipo de RoboColosseum conecta tu política de una de dos maneras: tú alojas un Policy Server en tu propia máquina de inferencia, o les entregas un checkpoint que ellos sirven en una máquina junto al robot.
Las pruebas de Open Track utilizan dos programas:
| Componente | Se ejecuta en | Qué hace | Repositorio |
|---|---|---|---|
| Servidor de políticas | Tu máquina de inferencia | Recibe observaciones del robot, ejecuta tu modelo y devuelve acciones | robocolosseum-policy-server |
| Robot Client | La computadora del robot | Controla el robot, ejecuta acciones y registra el ensayo | robocolosseum-client |
Sirve tu política
En el checkout del Policy Server, cree la configuración y establezca la URL del Router y el token del Policy Server que reciba del equipo de RoboColosseum:
cp configs/policy.yaml.example configs/policy.yamlurl: wss://router.example.com:8443
token: pol_replace_with_token_from_router_uiComprueba la conexión sin enviar acciones. Cuando el Router asocia un Robot Client con tu servidor, se muestran la instrucción de la tarea, el estado de las articulaciones y la pinza y las imágenes de las cámaras (las imágenes se abren en ventanas de OpenCV, por lo que se necesita una pantalla gráfica):
uv run --extra demo python examples/test_policy.py --no-enable-action
Luego, conecta tu modelo con el SDK de Policy Server. Guarda esto como serve_policy.py en la raíz del repositorio:
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) convierte la observación (obs.instruction, obs.state.head_image, obs.state.left_image, obs.state.right_image, obs.state.joints, obs.state.gripper) en las entradas de tu modelo y devuelve un array de NumPy de forma (horizon, action_dim) en el espacio de acciones acordado con el Client. Por defecto, esto es joint_position a 15 Hz con un máximo de 16 pasos por chunk. Inicia el servidor y mantenlo en ejecución mientras los evaluadores usan tu policy:
uv run python serve_policy.py
Configurar un robot
En la pantalla de configuración del Robot Client, cree la configuración y edítela para su robot:
cp configs/robot.yaml.example configs/robot.yamlLuego, inicie el Client:
.venv/bin/colosseum-robot configs/robot.yaml
Siga las indicaciones para ingresar una instrucción o seleccionar una tarea, ejecute la prueba y envíe la evaluación. Cada prueba se registra y exporta en formato LeRobot.
Código de evaluación de seguimiento de Fine-tune
El código de ajuste fino y evaluación utilizado para cada encarnación en la pista de ajuste fino es público: SO-101, Franka (DROID), Bimanual YAM y Unitree G1.
Entrenamiento
Ruta de ajuste fino
Entrena en un conjunto de datos de tareas descargado con --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 configuración exacta de la política, el mapeo de cámaras, la representación de la acción y la receta de entrenamiento dependen de la política que se esté adaptando. Si su política espera nombres de cámara diferentes, mápelos con --rename_map.
Nota: las líneas base G0.5 y LingBot-VLA 2.0 se afinaron con su código original, GalaxeaVLA @ 89f2322 y lingbot-vla-v2 @ be969b8.
Open Track
The Open Track evalúa un checkpoint congelado en tareas del mundo real. No se realiza entrenamiento con los datos de evaluación de RoboColosseum Open Track.
Si su política aún no admite la encarnación objetivo, primero adáptela con datos públicos de robots para esa encarnación y, a continuación, congele el punto de control resultante antes de la evaluación. Conjuntos de datos públicos de arranque recomendados:
| Embodiment objetivo | Datos de arranque públicos |
|---|---|
| SO-100 / SO-101 | allenai/MolmoAct2-SO100_101-Dataset |
| Franka (DROID) | DROID |
| YAM bimanual | allenai/MolmoAct2-BimanualYAM-Dataset |
allenai/MolmoAct2-SO100_101-Dataset lista los conjuntos de datos LeRobot SO-100 y SO-101 utilizados para entrenar MolmoAct2, con anotaciones de lenguaje por episodio. Descarga la lista de repositorios de origen con:
hf download allenai/MolmoAct2-SO100_101-Dataset repo_list.json \ --repo-type dataset \ --local-dir ./data/molmoact2_so100_101
Cada entrada en repo_list.json es un ID de dataset del Hub con el prefijo lerobot: (por ejemplo, lerobot:<user>/<dataset>). Seleccione datasets compatibles con SO-100 / SO-101 de la lista y entrene con ellos. Muchos de ellos usan el formato v2.1 de LeRobot: conviértalos a v3.0 antes de cargarlos (consulte Using LeRobotDataset).
DROID se publica en el formato RLDS. Conviértalo en un conjunto de datos de LeRobot siguiendo el ejemplo de DROID en Porting Large Datasets y luego entrena con el conjunto de datos convertido usando lerobot-train.
El conjunto de datos Bimanual YAM funciona directamente con 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_yamLa etapa de bootstrap solo hace que la política sea compatible con la encarnación objetivo. El punto de control enviado a la Pista Abierta permanece congelado durante la evaluación.
Envío al ranking
Las puntuaciones se publican en el tablero de clasificación de RoboColosseum. Para que se evalúe una política, presenta una solicitud en el sitio web de RoboColosseum. El protocolo de cada categoría:
- Ruta de ajuste fino: cada política se ajusta finamente con las mismas 100 demostraciones de una tarea y luego realiza 25 intentos. Se reportan los éxitos totales y el progreso en hitos.
- Open Track: los evaluadores ven cómo dos políticas anónimas intentan la misma instrucción en el mismo robot y escena, y eligen la ejecución mejor o declaran un empate. Las calificaciones se ajustan a partir de todas las comparaciones en ese robot y se muestran con su incertidumbre.