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 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.

RoboColosseum benchmark overview

Resumen

PropiedadValor
EmbodimentsSO-101, Franka (DROID), YAM bimanual, Unitree G1
Ruta de ajuste fino20 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 TrackDos 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ónSobre los robots físicos de RoboColosseum

Configuración física

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

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ónRobotCámaras
SO-101Brazo seguidor SO-101 sobre una mesa móvil de altura ajustablefront: 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 DROIDleft_image, right_image: dos cámaras estéreo ZED 2 ajustables; wrist: cámara estéreo ZED Mini de muñeca
YAM bimanualDos brazos YAM del kit YAM de MolmoAct2 en una mesa móvil con altura ajustabletop: Intel RealSense D435 en un mástil; left, right: cámaras Intel RealSense D405 de muñeca
Unitree G1Humanoid Unitree G1 con pinzas paralelas Unitree Dex-1head: 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:

TareaEncarnaciónInstrucción
so101-cube-drawerSO-101Coloca el cubo azul de la mesa en el cajón abierto y luego cierra el cajón.
so101-remove-screwdriverSO-101Saca el destornillador negro de la caja y colócalo sobre la mesa.
so101-stack-bowlsSO-101Toma el cuenco de plástico blanco de la derecha y apílalos sobre el cuenco de plástico blanco de la izquierda.
so101-stack-cubesSO-101Apila el cubo azul sobre el cubo rojo y luego apila el cubo blanco sobre el cubo azul.
so101-upright-bottleSO-101Recoge la botella de jugo caída y colócala en posición vertical sobre la mesa.
droid-close-laptopFranka (DROID)cerrar el portátil
droid-mug-on-coasterFranka (DROID)taza sobre posavasos
droid-open-drawerFranka (DROID)abrir cajón
droid-put-marker-penFranka (DROID)Coloca el marcador en el soporte para bolígrafos
droid-towel-in-basketFranka (DROID)toalla en la cesta
yam-cupsYAM bimanualApila las copas.
yam-drawerYAM bimanualColoca la taza en el cajón.
yam-dustpanYAM bimanualLimpia la tabla.
yam-microwaveYAM bimanualAbre el microondas y saca el bol.
yam-trayYAM bimanualLimpia la tabla.
g1-carry-boxUnitree G1caja de transporte
g1-fold-towelUnitree G1doblar toalla
g1-hang-keysUnitree G1claves de colgante
g1-load-clothes-washing-machineUnitree G1cargar la lavadora
g1-plate-into-rackUnitree G1de 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}"
done

Para 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 demo

Los 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:

ComponenteSe ejecuta enQué haceRepositorio
Servidor de políticasTu máquina de inferenciaRecibe observaciones del robot, ejecuta tu modelo y devuelve accionesrobocolosseum-policy-server
Robot ClientLa computadora del robotControla el robot, ejecuta acciones y registra el ensayorobocolosseum-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.yaml
url: wss://router.example.com:8443
token: pol_replace_with_token_from_router_ui

Comprueba 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.yaml

Luego, 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-bowls

La 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 objetivoDatos de arranque públicos
SO-100 / SO-101allenai/MolmoAct2-SO100_101-Dataset
Franka (DROID)DROID
YAM bimanualallenai/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_yam

La 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.
Update on GitHub