El directorio de conjuntos de datos públicos de AY-Robots mostrando conjuntos de datos de LeRobot grabados en brazos de clase SO-100
Conjuntos de datosOpen X-EmbodimentDROIDSO-100LeRobot

Uso de DROID, BridgeData V2 y Open X en un SO-100

AY-Robots ResearchAugust 23, 202618 min de lectura

DROID, BridgeData V2 y Open X-Embodiment se convierten en acciones de efector final 7-D en brazos de 6 y 7 GDL. Un SO-100 toma 6 posiciones de articulación. Qué se transfiere, qué no, qué hacer en su lugar.

La versión corta

  • Las compilaciones de LeRobot de los tres comparten una convención: una acción del efector final 7-D [x, y, z, roll, pitch, yaw, gripper] y un estado 8-D con una ranura de relleno. Un SO-100 toma seis posiciones articulares absolutas.
  • Ese vector 7-D es el artefacto del convertidor: el propio campo de acción RLDS de DROID es de 6 velocidades articulares más una posición del gripper, con la vista cartesiana en action_dict.
  • Cuatro relojes: DROID 15 fps, BridgeData V2 5 fps, el segmento google_robot 3 fps, una grabación SO-100 a 30 fps.
  • No puedes fusionarlos con tus propios datos. validate_all_metadata se activa en el primero de fps, robot_type o características que difieren, y los tres difieren.
  • Lo que se transfiere son pesos preentrenados, no episodios. Los datos de código abierto representan el 9.1 por ciento de la mezcla de preentrenamiento de pi0.
  • Su uso real más económico es un dispositivo de prueba: una muestra DROID de 2 GB y 100 episodios, conocida por ser buena, que prueba tu pipeline antes de grabar durante un fin de semana.

Hay un conjunto de datos público de un millón de trayectorias en un bucket de Google Cloud y un SO-100 en el escritorio que costó de 110 a 150 EUR en piezas. ¿Por qué el primero no puede enseñar al segundo? En parte sí puede, pero casi ninguna de la transferencia ocurre donde la gente espera, y la parte que parece más fácil no funciona en absoluto.

Lo que sigue: qué hay dentro de DROID, BridgeData V2 y Open X-Embodiment, dónde cada uno choca con un brazo de 5 GDL de bajo costo, y qué hacer en su lugar. Cada número a continuación proviene del artículo, la tarjeta del conjunto de datos o el archivo fuente al que pertenece.

Lo que realmente contienen los tres conjuntos de datos

DROIDBridgeData V2Open X-Embodiment
RobotFranka Panda, 7 DoF, Robotiq 2F-85WidowX 250, 6 DoF, equipo de ~4,000 USD22 implementaciones, 60 conjuntos de datos, 34 laboratorios
Escala76k trayectorias, 350 horas60,096 trayectoriasMás de 1M de trayectorias, 527 habilidades
Diversidad564 escenas, 84 tareas, 50 recolectores24 entornos, 13 habilidades160,266 tareas, 21 instituciones
Composicióntodo teleoperado50,365 teleoperadas, 9,731 programadaspor laboratorio de origen
Frecuencia de control15 Hz5 Hzvaría, 3 fps en adelante
Cámaras2 x ZED 2 exterior, 1 x ZED Mini de muñecahasta 4, la mayoría de los episodios solo la fijalo que haya usado el laboratorio
Descarga sin procesar1.7 TB RLDS, 8.7 TB estéreo sin procesarArchivos JPEGcubos TFDS por conjunto de datos
El punto de entrada es la conversión de LeRobot, no el cubo original

Pocas personas aún descargan 1.7 TB de TFRecords RLDS. La organización comunitaria IPEC-COMMUNITY ha republicado la mayor parte de Open X-Embodiment en formato de conjunto de datos LeRobot con video AV1, donde DROID ocupa 392 GB. Esa es la versión con la que trabajarás, y su meta/info.json es lo primero que debes leer.

DROID

El más estandarizado de los tres. Un equipo en todas partes: un Franka Panda con una pinza Robotiq 2F-85, dos cámaras estéreo ZED 2 ajustables y una ZED Mini de muñeca, teleoperado con controladores Meta Quest 2, grabado a través de Polymetis a 15 Hz tanto en el espacio de articulación como en el de efector final. Las etiquetas de idioma llegaron más tarde a través de tasq.ai, hasta tres por episodio.

  • 76k trayectorias, 350 horas, 564 escenas, 84 tareas, 50 recolectores en tres continentes.
  • El resultado principal es el co-entrenamiento, no el entrenamiento independiente: los lotes mezclados 50/50 con demostraciones en el dominio superan al siguiente mejor método en un 22 por ciento de éxito absoluto en la distribución, y un 17 por ciento fuera de ella.
  • IPEC-COMMUNITY/droid_lerobot: 92,233 episodios, 27,044,326 fotogramas, franka, 15 fps, codebase_version v2.0, tres transmisiones AV1 a 180x320, 392 GB.
  • Una muestra de depuración de 2 GB y 100 episodios se encuentra en gs://gresearch/robotics/droid_100. Empiece por ahí.

BridgeData V2

Lo más parecido a una configuración de aficionado: un brazo WidowX 250 de 6 GDL, 60,096 trayectorias en 24 entornos y 13 habilidades a 5 Hz. Nótese la composición: 50,365 demostraciones teleoperadas por expertos más 9,731 de una política de recogida y colocación (pick-and-place) aleatoria y programada, por lo que aproximadamente el 16 por ciento no es una demostración humana, lo cual es importante para aprendizaje por imitación la calidad. La descarga habitual, IPEC-COMMUNITY/bridge_orig_lerobot, informa de 53,192 episodios y 1,893,026 fotogramas a 5 fps, robot_type widowx: menos que los 60,096 del artículo, así que lea el recuento de meta/info.json en lugar de citar cualquiera de los dos.

Open X-Embodiment

No es un conjunto de datos en el mismo sentido: 60 conjuntos de datos de robots existentes de 34 laboratorios agrupados en una colección RLDS que cubre 22 implementaciones y más de un millón de trayectorias. BridgeData V2 se encuentra dentro como bridge_orig; la porción google_robot, fractal20220817_data, se convierte en 87.212 episodios a 3 fps.

La agrupación conlleva una advertencia que el artículo establece explícitamente. Para los experimentos RT-X, los autores convierten cada fuente en una acción de efector final de 7 GDL, pero no alinean los sistemas de coordenadas entre los conjuntos de datos, y permiten que los valores de acción sean posiciones o velocidades absolutas o relativas, según el esquema de control original de cada robot. Su conclusión: el mismo vector de acción puede inducir movimientos muy diferentes para distintos robots.

El listado del directorio de conjuntos de datos de AY-Robots que muestra conjuntos de datos públicos de LeRobot con recuentos de episodios y descripciones de tareas
El directorio público de conjuntos de datos en /directory: conjuntos de datos ya en formato LeRobot, que ya coinciden con un brazo compatible.

El desajuste, en cuatro partes

La falta de coincidencia de encarnación (embodiment mismatch) suele tratarse como un problema vago. Son cuatro, fallan de manera diferente, y dos no se pueden solucionar con scripts.

1. Grados de libertad

Un SO-100 tiene cinco articulaciones en el brazo más una pinza. Contado como motores, es un brazo de 6 GDL, y el artículo de SmolVLA lo llama así; contado como mecanismo de posicionamiento es de 5 GDL, y LeRobot lo llama así en su docstring de cinemática inversa, que describe la cinemática inversa de orientación suave en el SO-101 de 5 GDL donde la muñeca sigue la orientación solo parcialmente. Un Franka tiene siete articulaciones de posicionamiento. Esa brecha decide qué poses existen: un brazo de 5 GDL generalmente no puede alcanzar una posición y orientación arbitrarias a la vez, por lo que el solucionador devuelve lo más cercano que puede, un movimiento diferente al demostrado. Antecedentes: .

python
# src/lerobot/robots/so_follower/so_follower.py
motors = {
    "shoulder_pan":  Motor(1, "sts3215", norm_mode_body),
    "shoulder_lift": Motor(2, "sts3215", norm_mode_body),
    "elbow_flex":    Motor(3, "sts3215", norm_mode_body),
    "wrist_flex":    Motor(4, "sts3215", norm_mode_body),
    "wrist_roll":    Motor(5, "sts3215", norm_mode_body),
    "gripper":       Motor(6, "sts3215", MotorNormMode.RANGE_0_100),
}
# action keys are "<motor>.pos"; send_action sync_writes them to
# "Goal_Position"  ->  a 6-D ABSOLUTE JOINT POSITION command


# openpi/src/openpi/policies/droid_policy.py
def make_droid_example() -> dict:
    return {
        "observation/exterior_image_1_left": np.random.randint(256, size=(224, 224, 3), dtype=np.uint8),
        "observation/wrist_image_left":      np.random.randint(256, size=(224, 224, 3), dtype=np.uint8),
        "observation/joint_position":        np.random.rand(7),   # seven Franka joints
        "observation/gripper_position":      np.random.rand(1),
        "prompt": "do something",
    }
# state = concat(joint_position, gripper_pos)  ->  8-D
Izquierda: Seguidor SO de LeRobot, de src/lerobot/robots/so_follower/so_follower.py. Derecha: Entrada de la política DROID de openpi. Seis contra ocho.

Así que un punto de control DROID prefabricado no es un atajo. Physical Intelligence distribuye pi05_droid en gs://openpi-assets/checkpoints/pi05_droid, y el mismo README que elogia su amplitud advierte que estos puntos de control expertos pueden no generalizarse a tu configuración. Su estado son ocho números de articulación de Franka y sus claves de imagen son exterior_image_1_left y wrist_image_left. Ninguna bandera convierte eso en un comando SO-100 de seis motores.

2. Lo que realmente dice el vector de acción

Más allá de la dimensionalidad. En las conversiones de LeRobot, los tres indican dónde debe ir el efector final, en el espacio cartesiano. Un SO-100 indica dónde deben ir seis servomotores. La conversión requiere un modelo cinemático y un solucionador, no una remodelación.

PropiedadOXE, DROID y Bridge en formato LeRobotSO-100 en LeRobot
Vector de acción7-D: x, y, z, balanceo, cabeceo, guiñada, pinza6-D: una posición objetivo por motor
Vector de estado8-D, con una ranura de relleno (google_robot usa un cuaternión)6-D, uno por motor
MarcoCartesiano, no alineado entre conjuntos de datosespacio articular, calibración por brazo
Absoluto o relativocualquiera, decidido por el laboratorio de origenposiciones objetivo absolutas
Unidadesnormalizadas por conjunto de datos, luego discretizadasgrados por defecto (use_degrees=True), de lo contrario -100 a 100
Fallo silenciosoun delta leído como un absolutoun brazo sin calibrar
El vector cartesiano 7D es la convención del conversor, no de DROID

El README de openx2lerobot documenta un estado unificado de 8 dimensiones y una acción de 7 dimensiones para cada conjunto de datos que convierte, de donde proviene el slot pad. El propio esquema RLDS de DROID difiere: su action de nivel superior es un vector de 7 elementos de 6 velocidades articulares más 1 posición del gripper, con cartesian_position, cartesian_velocity, joint_position y joint_velocity bajo action_dict. openpi lee la vista del espacio articular, la compilación de LeRobot le entrega la cartesiana. Ninguna de las dos son seis ángulos absolutos de servo.

LeRobot sí incluye la pieza que falta: el seguidor SO tiene un procesador de cinemática con pasos InverseKinematicsEEToJoints y ForwardKinematicsJointsToEE. Sus claves son ee.x, ee.y, ee.z más un vector de rotación ee.wx, ee.wy, ee.wz y ee.gripper_pos, por lo que incluso la codificación de orientación difiere del roll-pitch-yaw en los archivos. El paso IK toma un orientation_weight, por defecto 0.01, cuya docstring indica establecer 0.0 para IK solo de posición en brazos subactuados. Se puede construir el puente, pero la mitad de orientación de cada acción prestada permanece aproximada.

3. Frecuencia de control

DROID es de 15 Hz, BridgeData V2 de 5 Hz, el segmento google_robot de 3 fps; los autores de pi0 describen la parte de código abierto de su mezcla como control de baja frecuencia entre 2 y 10 Hz. DatasetRecordConfig de LeRobot por defecto tiene fps 30, episode_time_s 60, reset_time_s 60, num_episodes 50. Una entrenada con datos de 5 Hz aprendió que una acción cubre 200 ms. Si se reproduce a 30 Hz, el brazo se arrastra; si se remuestrea ingenuamente, se difumina el fotograma donde el gripper se cierra. También interactúa mal con : un fragmento de 100 pasos es de 20 segundos a 5 Hz, 3.3 a 30 Hz.

4. Cámaras

BridgeData V2 aleatorizó dos poses de cámara cada 50 trayectorias, y su página de proyecto señala que la mayoría de los datos solo contienen la vista fija de todos modos. DROID utilizó soportes ajustables ZED 2 más una ZED Mini en la muñeca. Tienes dos cámaras web USB posicionadas a ojo. La pose de la cámara no es una variable molesta para un ; es gran parte de lo que el codificador visual se basó, y nada en el formato de archivo indica que las poses difieran.

La trampa que consume un día

Las piezas encajan lo suficientemente bien como para funcionar. El conjunto de datos se carga, el entrenamiento comienza, la pérdida disminuye, aparecen los puntos de control, no hay errores. Luego, la política no hace nada reconocible en el brazo y pasas un día buscando un error en tu script de entrenamiento. No hay ningún error: el modelo aprendió una distribución de acción cartesiana para un robot que no existe en tu habitación. Empieza en la pérdida disminuye, la política no hace nada, no en tus hiperparámetros.

¿Qué sucede cuando intentas fusionar los datos de todos modos?

El plan obvio es concatenar: unos pocos miles de episodios DROID más tus 50. LeRobot se niega, y la negativa nombra las tres cosas que difieren.

  1. 1
    Descarga la muestra de 100 episodios, no los 1.7 TB completos

    2 GB son suficientes para ver la estructura.

    bash
    pip install gsutil tensorflow tensorflow-datasets
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  2. 2
    Convierte RLDS al formato LeRobot

    openx2lerobot envuelve las transformaciones estándar de OXE y anota el tipo de robot y la frecuencia de control. El README lo incluye en convert.sh.

    bash
    git clone https://github.com/Tavish9/any4lerobot.git
    cd any4lerobot/openx2lerobot
    
    python openx_rlds.py \
        --raw-dir ~/tensorflow_datasets/droid_100/1.0.0 \
        --local-dir ~/lerobot_droid100 \
        --repo-id you/droid100_lerobot \
        --use-videos
  3. 3
    Lee meta/info.json antes que nada

    Este archivo decide si el resto de tu día funciona.

    bash
    python -c "import json;d=json.load(open('meta/info.json'));\
    print(d['codebase_version'], d['robot_type'], d['fps']);\
    print(d['features']['action']['shape'], d['features']['observation.state']['shape'])"
  4. 4
    Intenta la fusión y lee el error

    merge carga cada conjunto de datos, luego validate_all_metadata verifica los fps, robot_type y las características contra el primero de la lista, generando un error en la primera discrepancia.

    bash
    lerobot-edit-dataset \
        --new_repo_id you/mixed \
        --operation.type merge \
        --operation.repo_ids "['you/droid100_lerobot', 'you/my_so100_task']"
    
    # ValueError: Same fps is expected, but got fps=30 instead of 15.

Los valores de referencia provienen del conjunto de datos que listaste primero, por lo que el mensaje se queja de tus 30 fps en lugar de los 15 de DROID. Corrige los fps y te encontrarás con la verificación de robot_type; corrige eso y te encontrarás con la verificación de características, 7 contra 6 para la acción. Ningún ordenamiento funciona, y la misma protección se ejecuta en el momento de la grabación a través de sanity_check_dataset_robot_compatibility.

No codifiques robot_type para eludir la verificación

En la rama principal actual de LeRobot, so100_follower y so101_follower están registrados en una única SOFollowerRobotConfig compartida, por lo que la cadena de una grabación real no es necesariamente la que esperas. Léela de tu propio meta/info.json, y trata una verificación que tuviste que deshabilitar como una verificación que te estaba diciendo algo.

¿Qué se transfiere realmente?

Pesos, no episodios. Cada política generalista moderna absorbió parte de esto en el preentrenamiento, y cuando desde un lo heredas ya reconciliado por personas con la capacidad de cómputo para hacerlo correctamente. El artículo de pi0 es sincero sobre la proporción: el 9.1 por ciento de su mezcla de preentrenamiento, contada en pasos de tiempo, son datos de código abierto que incluyen OXE, Bridge v2 y DROID. Esa cifra es de pi0; la mezcla de cada proveedor difiere.

Datos públicos entre encarnaciones en un proyecto SO-100
Ventajas
  • Priors visuales y de lenguaje: el codificador ha visto miles de cocinas y tazas y sabe a qué se refiere "el bloque rojo".
  • Un prior sobre la estructura de manipulación: acercar, cerrar, levantar, transportar, soltar, independiente de la encarnación incluso cuando los números no lo son.
  • Un conjunto de datos conocido y bueno para pruebas. Si tu trabajo no puede sobreajustar 100 episodios de DROID, el problema es tu configuración.
  • Puntos de referencia: en dominios de conjuntos de datos a pequeña escala, RT-1-X alcanzó una tasa de éxito media un 50 por ciento mayor que el método original o RT-1, y RT-2-X superó a RT-2 en aproximadamente 3x en habilidades emergentes.
Compensaciones
  • Sin supervisión de acción utilizable. Un objetivo cartesiano 7-D no es un comando de articulación 6-D.
  • Sin transferencia de pose de cámara, y nada en los datos indica que las poses difieran.
  • Sin transferencia de tiempo: fuentes de 3, 5 y 15 fps frente a un grabador de 30 fps.
  • Sin transferencia de pinza. Una Robotiq 2F-85 y una mordaza impresa en un STS3215 difieren en fuerza, carrera y dinámica.
  • La escala por sí sola no fue suficiente ni siquiera para sus autores: en los dominios de grandes conjuntos de datos, RT-1-X no superó a un RT-1 entrenado solo con ese conjunto de datos.
  • No hay reducción en la cantidad de episodios propios que necesitas.
Capa del modelo¿Se transfiere?Por qué
Codificador de visiónSí, fuertementeLos objetos y las escenas son independientes de la encarnación
Fundamentación del lenguajeLas instrucciones son texto, no geometría
Fusión transmodalMayormentePresta atención al objeto nombrado en la instrucción
Codificador de propiocepciónNoLa dimensión de entrada y la semántica de las articulaciones difieren
Cabezal de acciónNoEntrenado en un espacio cartesiano 7-D en el que no te encuentras
Estadísticas de normalizaciónNo, y peligrosoLas estadísticas externas desplazan cada comando

Esta es la razón por la que SmolVLA se comporta de manera diferente en un brazo de bajo costo. Su artículo selecciona 481 conjuntos de datos de la comunidad de Hugging Face, filtrados por tipo de encarnación, recuento de episodios, calidad de los datos y cobertura de fotogramas: 22.9K episodios, 10.6M fotogramas, evaluados en brazos reales SO-100 y SO-101. Pequeño y emparejado supera a grande y desemparejado. Compare en ACT contra SmolVLA.

Tres caminos que vale la pena tomar

Ruta A: ajuste fino desde un punto de control que ya absorbió los datos

La mayoría de la gente debería tomar este camino. Nunca toque DROID ni Open X-Embodiment: elija una política cuyo preentrenamiento ya haya absorbido datos de encarnación cruzada, grabe sus propios episodios, realice un ajuste fino.

PolíticaParámetrosEpisodios mínimosFormato del conjunto de datosNivel de GPUInferenciaPunto de control base
GR00T N1.7~3 B, ~40 M entrenados en ajuste fino50LeRobot v2.0 o v2.1A100 o H100 80 GB152 ms por pasonvidia/GR00T-N1.7-3B
GR00T N1.5~3 B50LeRobot v2.0 o v2.1A100 o H100 80 GB165 msnvidia/GR00T-N1.5-3B
Pi0.5~3 B, backbone PaliGemma50LeRobot v3.0A100 o H100 80 GB485 mslerobot/pi05_base
SmolVLA~450 M30LeRobot v3.0RTX 4090 o cualquier 24 GB245 mslerobot/smolvla_base
ACT~80 M50LeRobot v3.0RTX 4090 o cualquier 24 GB20 msninguno, desde cero

ACT es el caso límite honesto: sin modelo base, por lo que ninguno de los datos públicos lo alcanza. No es automáticamente una desventaja, ya que a 20 ms por paso de acción es el único de los cinco que puede cerrar un bucle rápido, como la página de ACT se detalla. Elija por tarea usando los cinco comparados, GR00T N1.7 contra Pi0.5, y los 332 resultados de referencia en 85 modelos en la arena.

Ruta B: usar DROID como dispositivo de prueba

La muestra de 100 episodios es la mejor de 2 GB que descargará este mes, y no para entrenamiento. Es un conjunto de datos que sabe que es correcto. Ejecute su convertidor, cargador y un trabajo corto de GPU en él; cualquier cosa que falle es un error de infraestructura encontrado mientras era barato. NVIDIA hace lo mismo a escala: la tarjeta GR00T N1.7 enumera cuatro variantes post-entrenadas, para Bridge y Fractal en SimplerEnv, DROID y LIBERO.

Ruta C: graba tus propios datos, deliberadamente

Treinta a cincuenta suena poco al lado de 76,000 hasta que recuerdas que los tuyos son los únicos con tu brazo, tus cámaras y tu mesa. Con los valores predeterminados de LeRobot, 50 episodios equivalen a 100 minutos de tiempo real. Consulta , y .

La página del tutorial de grabación de AY-Robots que muestra los pasos para capturar un conjunto de datos de LeRobot a partir de una sesión de teleoperación
El tutorial de grabación en /learn/record-your-first-dataset: el paso que los datos públicos no pueden reemplazar.

Dos formas de pasar de datos públicos a una política funcional

All of this runs on your own machine plus a rented GPU. Knowing the manual path matters because when something breaks you will know which layer broke.

  1. 1
    Install LeRobot with the extras the scripts need

    The record and train entry points each declare their own extra.

    bash
    pip install 'lerobot[core_scripts]'   # lerobot-record
    pip install 'lerobot[training]'      # lerobot-train
    pip install gsutil tensorflow tensorflow-datasets
  2. 2
    Get a small, known-good slice

    100 DROID episodes, 2 GB.

    bash
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  3. 3
    Convert to LeRobot form

    Writes the unified 8-D state and 7-D action, annotating robot type and control frequency.

    bash
    python openx_rlds.py \
        --raw-dir ~/tensorflow_datasets/droid_100/1.0.0 \
        --local-dir ~/lerobot_droid100 \
        --repo-id you/droid100_lerobot \
        --use-videos
  4. 4
    Check the version against your trainer

    The converter README documents v3.0 output; the published IPEC-COMMUNITY datasets report v2.0. GR00T wants v2.0 or v2.1 and crashes on v3.0; Pi0.5, SmolVLA and ACT want v3.0. Mind the gap: the only conversion script on LeRobot main goes 2.1 to 3.0.

    bash
    python src/lerobot/scripts/convert_dataset_v21_to_v30.py \
        --repo-id=you/droid100_lerobot
  5. 5
    Record your own episodes

    Defaults: 30 fps, 60 s per episode, 60 s reset, 50 episodes. The teleoperator type is so100_leader.

    bash
    lerobot-record \
      --robot.type=so100_follower \
      --robot.port=/dev/ttyACM0 \
      --robot.cameras="{front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
      --teleop.type=so100_leader \
      --teleop.port=/dev/ttyACM1 \
      --dataset.repo_id=you/so100_pick_block \
      --dataset.num_episodes=50 \
      --dataset.single_task="Pick up the red block and put it in the bowl"
  6. 6
    Fine-tune on your data only

    Weights from public data, actions from your own. Do not mix the datasets.

    bash
    lerobot-train \
      --policy.path=lerobot/smolvla_base \
      --dataset.repo_id=you/so100_pick_block \
      --policy.device=cuda \
      --batch_size=4 \
      --steps=20000
Where the time actually goes

Not in training; the GPU job is hours. The conversion, the version mismatch and the moment you find your dataset is v2.0 and your trainer wants v3.0 are days. Read dataset rejected as v3 first.

La página de descarga del cliente de escritorio de AY-Robots, el cliente que registra conjuntos de datos en formato LeRobot desde una sesión de teleoperación
El cliente de escritorio en /download escribe conjuntos de datos de LeRobot directamente desde una sesión de teleoperación, evitando la conversión a RLDS.

Lo que cuesta cada ruta

RutaAlmacenamientoTiempo humanoCosto de GPUProbabilidad de que mueva tu brazo
DROID convertido solo392 GBdías de conversión4 to 12 USDmuy baja, espacio de acción incorrecto
DROID fusionado con tus episodiosambosblocked by validate_all_metadatan/aninguna, no se ejecuta
SmolVLA, 30 a 50 episodios propiosunos pocos GB100 min de grabación1 to 3 USDalta
GR00T N1.7, 50 episodios propiosunos pocos GB100 min de grabación4 to 12 USDalta
ACT desde cero, 50 episodios propiosunos pocos GB100 min de grabación1 to 3 USDalta, 20 ms de inferencia
Muestra de DROID como dispositivo de prueba2 GBuna tardeuna ejecución cortaalta, como validación

La asimetría es el punto clave: la ruta que toma prestados más datos es la más cara y la menos probable de mover tu brazo. Menos de dos horas de tu propia teleoperación superan un terabyte de una Franka ajena. ¿Aún no tienes un brazo? /live transmite un SO-100 físico sin necesidad de registrarse. Luego entrena tu primera política, y SmolVLA en SO-100 para la guía específica.

Un plan predeterminado razonable

Descarga la muestra DROID de 2 GB y úsala para probar tu pipeline. Ignora los otros 1.7 TB. Graba 50 episodios de una tarea con cámaras fijas. Ajusta SmolVLA primero, porque con un mínimo de 30 episodios en una tarjeta de 24 GB es lo más económico para iterar, luego prueba GR00T N1.7 con los mismos datos. Compara en tu tarea, no en un benchmark.

Graba conjuntos de datos que ya coincidan con tu brazo

El cliente de escritorio escribe conjuntos de datos en formato LeRobot directamente desde una sesión de teleoperación: brazo correcto, velocidad de fotogramas correcta, espacio de acción correcto. Sin conversión RLDS, sin remapeo.

Obtener el cliente de escritorio
¿Puedo entrenar una política en DROID y ejecutarla en mi SO-100?

No directamente. En la compilación de LeRobot, las acciones de DROID son comandos de efector final 7-D en una Franka Panda a 15 fps; en el RLDS sin procesar son 6 velocidades de articulación más una posición de pinza. Un SO-100 toma 6 posiciones de articulación absolutas. Necesitarías una capa de cinemática inversa, e incluso entonces una muñeca de 5 GDL no puede reproducir poses arbitrarias de 6 GDL.

¿Puedo mezclar episodios de DROID o Bridge con mis propios episodios de SO-100?

No. validate_all_metadata requiere fps, robot_type y esquema de características idénticos y genera un ValueError en la primera discrepancia. Los tres difieren: 15 o 5 fps frente a 30, franka o widowx frente a tu brazo, formas de acción de 7 frente a 6. Reescribir los metadatos para pasar la verificación no soluciona la semántica.

¿Es entonces Open X-Embodiment inútil para un brazo de bajo costo?

No, pero su valor te llega a través de pesos preentrenados, no de episodios. Los conjuntos de datos de código abierto, incluidos OXE, Bridge v2 y DROID, representan el 9.1 por ciento de la mezcla de preentrenamiento de pi0, y NVIDIA distribuye variantes de GR00T N1.7 post-entrenadas en Bridge, Fractal, DROID y LIBERO. Lo que no puedes hacer es añadir esos episodios a tu propia grabación.

¿Qué política se beneficia más de los datos públicos de cross-embodiment?

Pi0.5 y los modelos GR00T conllevan la mayor parte del preentrenamiento cross-embodiment, pero SmolVLA a menudo se comporta mejor en un brazo de bajo costo: su conjunto de preentrenamiento consta de 481 conjuntos de datos de la comunidad, 22.9K episodios y 10.6M fotogramas, evaluados en brazos reales SO-100 y SO-101. ACT es lo opuesto: sin modelo base, 20 ms por paso de acción.

¿Cuántos de mis propios episodios necesito realmente?

30 para SmolVLA, 50 para GR00T N1.7, GR00T N1.5, Pi0.5 y ACT. Con los valores predeterminados de LeRobot de 60 s por episodio y 60 s de reinicio, 50 episodios equivalen a 100 minutos de tiempo real. Los datos cross-embodiment prestados no reducen esos números.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started