Por qué un formato estándar es importante

El aprendizaje de robots ha sufrido históricamente porque cada laboratorio utiliza un formato de datos diferente, lo que hace imposible compartir conjuntos de datos, combinar datos de diferentes robots o usar políticas preentrenadas en diferentes sistemas. El formato de conjunto de datos LeRobot resuelve esto al definir un único esquema que funciona en todo el hardware compatible. Un conjunto de datos grabado en un SO-100 se puede usar para entrenar una política para un OpenArm sin ninguna conversión, siempre que las dimensiones del espacio de acción coincidan.

Entender el formato antes de grabar significa que no descubrirás un problema estructural en tus datos durante el entrenamiento. También facilita mucho la depuración: cuando el entrenamiento falla, el primer lugar donde mirar es el conjunto de datos.

Estructura del conjunto de datos: Parquet + MP4

Cada conjunto de datos LeRobot vive en un directorio con esta estructura:

mi_conjunto_de_datos/ # dataset metadata (robot type, fps, modalities) │ ├── tareas.jsonl # task description per episode │ └── estadísticas.tensores de seguridad # mean/std for normalization ├── datos/ # joint states + actions, one row per timestep │ ├── episodio_000001.parquet # camera feed, one file per episode │ └── ...

La división entre Parquet (para series temporales numéricas) y MP4 (para video) es deliberada. Parquet comprime estados y acciones de las articulaciones de manera eficiente y admite acceso aleatorio rápido por índice de episodio. MP4 utiliza códecs de video diseñados para secuencias de imágenes, lo que produce archivos de 10 a 30 veces más pequeños que almacenar imágenes en bruto como tensores.

Campos clave en cada episodio

campo Forma Descripción
observación.estado[T, D]Posiciones de las articulaciones (y opcionalmente velocidades) en cada instante de tiempo. D es el número de articulaciones (por ejemplo, 7 para SO-100: 6 articulaciones + 1 pinza).
acción[T, D]Posiciones de las articulaciones objetivo comandadas en cada instante de tiempo. Misma dimensionalidad que observation.state.
marca de tiempo[T]Tiempo en segundos desde el inicio del episodio, a 50Hz por defecto (0.02s por paso).
índice_de_episodioescalarÍndice entero de este episodio dentro del conjunto de datos. Utilizado por el cargador de datos para agrupar instantes de tiempo en episodios.
índice_de_frame[T]Número de fotograma dentro del episodio (0 a T-1). Coincide con el número de fotograma en el MP4 correspondiente.
next.done[T]Bandera booleana — Verdadero en el último instante de tiempo de un episodio. Se utiliza para señalar los límites de los episodios durante el entrenamiento.
índice_tareaescalarÍndice en tasks.jsonl. Permite conjuntos de datos de múltiples tareas donde diferentes episodios corresponden a diferentes instrucciones.
Campos de la cámara: Las imágenes de la cámara se almacenan como archivos MP4, no en Parquet. El Parquet contiene observation.images.cam_high como una referencia de ruta (índice de fotograma + índice de episodio) en lugar de datos de píxeles en bruto. El cargador de datos LeRobot maneja la decodificación y sincronización de manera transparente.

Cargar y visualizar un conjunto de datos existente

Cargar el lerobot-raw/aloha_sim_insertion_scripted conjunto de datos desde HuggingFace Hub y visualizar 3 episodios. Este conjunto de datos contiene demostraciones guionizadas de un robot bimanual insertando un pasador — un ejemplo claro de cómo se ve un conjunto de datos bien estructurado.

source ~/lerobot-env/bin/activate # Visualize 3 episodes from a public dataset python -m lerobot.scripts.visualize_dataset\ # Open the generated HTML in your browser # File path printed to terminal, e.g. ~/dataset-viz/index.html

El visualizador genera una página HTML con reproducción de video de cada episodio junto a gráficos de estado de articulaciones sincronizados. Busca:

  • Trayectorias de articulaciones suaves — picos agudos indican artefactos de grabación o choques del brazo
  • Longitud consistente del episodio — episodios que varían drásticamente en longitud (por ejemplo, 50 vs 400 fotogramas) a menudo indican que algunas demostraciones capturaron movimientos parciales o abortados
  • Cambios en el estado del agarre — la última dimensión de la articulación debería mostrar transiciones binarias claras (abrir → cerrar → abrir) para tareas de manipulación
# Inspect the dataset programmatically de lerobot.common.datasets.lerobot_dataset importar LeRobotDataset # Inspect a single frame marco = conjunto de datos [0]
Opcional — Conjuntos de datos de referencia

Explora la colección de conjuntos de datos SVRC

La biblioteca de conjuntos de datos SVRC incluye conjuntos de datos de aprendizaje de robots curados en formato LeRobot. Navega por ellos para entender cómo lucen las diferentes tareas y hardware antes de grabar el tuyo propio. Navegar conjuntos de datos →

Unidad 2 Completa Cuando...

Has visualizado con éxito 3 episodios de lerobot-raw/aloha_sim_insertion_scripted y la salida HTML se abre en tu navegador. Puedes identificar los campos observation.state, action y timestamp en un archivo Parquet cargado con Python. Entiendes la diferencia entre lo que se almacena en Parquet y MP4. Estás listo para grabar tu propio conjunto de datos en la Unidad 3.