Recolección de Datos

OpenArm está diseñado como una plataforma nativa de datos. Esta guía cubre todo, desde cablear cámaras hasta grabar episodios en formato LeRobot, con verificaciones de calidad en cada etapa.

Antes de Grabar

Conexiones de Hardware para Grabación

La recolección de datos requiere más hardware que el control básico del brazo. Esta sección cubre qué conectar y dónde antes de comenzar LeRobot.

📷

Cámara de muñeca

Monte una cámara web USB o Intel RealSense D435i en el flange del efector final. Conéctese a través de USB 3.0 para 30+ fps. Verifique: ls /dev/video*

📖

Cámara Superior / de Espacio de Trabajo

Cámara fija sobre el espacio de trabajo para una vista global. Monte a ~60 cm sobre la mesa, inclinada hacia abajo 30°. Segundo puerto USB 3.0.

🔌

Bus CAN (control del brazo)

Ya conectado desde la configuración. Verifique: ip link show can0La interfaz CAN debe estar activa antes de iniciar LeRobot.

👤

Dispositivo de teleoperación

3D SpaceMouse, un segundo OpenArm como brazo líder, o un gamepad. Líder-seguidor con dos OpenArms ofrece las demostraciones de mayor calidad.

Nota de sincronización de cámara: LeRobot marca todas las transmisiones a nivel de PC host. Para configuraciones de múltiples cámaras, use concentradores USB 3.0 (no concentradores USB 2.0) para minimizar la desviación de latencia entre los fotogramas de la cámara y las lecturas del estado de las juntas. Objetivo: < 5 ms de desviación entre transmisiones.

Flujo de Trabajo de Grabación

Flujo de trabajo de grabación paso a paso

Siga estos pasos para cada sesión de grabación. Cada paso se basa en el anterior; no omita pasos.

1

Verificación de seguridad previa a la sesión

Limpie el espacio de trabajo (radio de 1 m), verifique que el brazo alcance la posición de inicio libremente, pruebe el E-stop antes de grabar. Ver página de Seguridad.

2

Active la interfaz CAN y ROS2

sudo ip link set up can0
source /opt/ros/humble/setup.bash
source ~/openarm_ws/install/setup.bash
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=false can_interface:=can0
3

Casa el brazo

Ejecuta la rutina de homing para establecer la posición de referencia antes de cada sesión. El brazo debe alcanzar su posición de casa sin carga en el efector final.

python3 -m openarm_can.scripts.home --interface can0
4

Verifique las transmisiones de las cámaras

Verifica que todas las cámaras estén transmitiendo antes de iniciar LeRobot. Una cámara faltante corromperá silenciosamente tu conjunto de datos si LeRobot no lo informa.

# Quick camera check (press Q to exit)
python3 -c "
import cv2
for i in range(4):
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        print(f'Camera {i}: OK')
    cap.release()
"
5

Configure la escena de la tarea

Coloca los objetos en posiciones de inicio consistentes. La inicialización consistente de la escena es crítica para la generalización de políticas. Fotografía o marca la configuración inicial.

6

Inicia la grabación de LeRobot

source ~/.venvs/openarm/bin/activate
python -m lerobot.scripts.control_robot \
  --robot.type=openarm \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/openarm-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick up the red cube and place it in the bin" \
  --control.warmup_time_s=5 \
  --control.reset_time_s=10

LeRobot te avisará antes de cada episodio. Usa warmup_time_s para preparar tu posición de teleoperación antes de que comience la grabación.

7

Revise y reproduzca episodios

Después de grabar, reproduce episodios sospechosos antes de finalizar el conjunto de datos. Elimina episodios de mala calidad de inmediato.

python -m lerobot.scripts.visualize_dataset \
  --repo_id=your-username/openarm-pick-place-v1 \
  --episode_index=0
8

Empuje al HuggingFace Hub

huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
  --repo_id=your-username/openarm-pick-place-v1
Formato del conjunto de datos

Formato de conjunto de datos LeRobot

LeRobot almacena conjuntos de datos en el formato de conjunto de datos de HuggingFace utilizando archivos Parquet para datos tabulares y archivos MP4/PNG para flujos de imágenes. Cada episodio es una secuencia de observaciones y acciones con marcas de tiempo.

Estructura de directorios

your-username/openarm-pick-place-v1/
├── meta/
│   ├── info.json          # Dataset metadata, fps, shapes
│   ├── episodes.jsonl     # Per-episode metadata (task, length, outcome)
│   └── stats.json         # Min/max/mean/std for all fields
├── data/
│   └── chunk-000/
│       ├── episode_000000.parquet
│       ├── episode_000001.parquet
│       └── ...
└── videos/
    └── chunk-000/
        ├── observation.images.wrist_cam/
        │   ├── episode_000000.mp4
        │   └── ...
        └── observation.images.overhead_cam/
            └── ...

Esquema de datos del episodio

Campos en cada archivo Parquet de episodio
observación.estado float32[8] Posiciones de las articulaciones en radianes (8 DOF)
observation.velocity float32[8] Velocidades de las articulaciones en rad/s
observation.effort float32[8] Torques de las articulaciones en Nm
observation.images.* ruta de video Referencia al marco en el archivo de video MP4
acción float32[8] Posiciones de las articulaciones objetivo del dispositivo de teleoperación
marca de tiempo float64 Marca de tiempo Unix en segundos
índice_de_frame int64 Número de fotograma dentro del episodio
índice_de_episodio int64 Número de episodio dentro del conjunto de datos
next.done bool Verdadero en el último fotograma de un episodio
índice_tarea int64 Índice en la tabla de búsqueda de descripciones de tareas

Episodios de fallo como datos

OpenArm está diseñado para registrar de manera segura los intentos fallidos, no solo los éxitos. Las trayectorias de fallo —deslizamiento, agarre incorrecto, colisión, intentos de recuperación— son datos de primera clase críticos para la generalización robusta de políticas. No elimines episodios de fallo automáticamente. En su lugar, anótalos con el success campo en los metadatos del episodio y deja que el marco de entrenamiento decida si usarlos.

Aseguramiento de Calidad

Lista de verificación de calidad para los datos recopilados

Revisa esta lista de verificación después de cada sesión de grabación y antes de subir a la Hub. Los datos de mala calidad perjudican el rendimiento de la política más que un bajo conteo de episodios.

  • 1
    La duración del episodio es consistente Todos los episodios para la misma tarea deben estar dentro del ±30% de la longitud mediana. Los valores atípicos suelen indicar que el operador se detuvo, falló un agarre o que la grabación fue interrumpida.
  • 2
    No hay fotogramas de cámara faltantes Verifica que cada episodio tenga el número esperado de fotogramas por flujo. Ejecuta lerobot.scripts.visualize_dataset en 3–5 episodios para verificar la calidad del video.
  • 3
    Las posiciones de las juntas están dentro de límites seguros para comprobar observation.state nunca excede los límites de las juntas en especificaciones. Picos de alta velocidad indican una caída de CAN o un fallo de control — elimina esos episodios.
  • 4
    La escena de la tarea fue reiniciada entre episodios Cada episodio debe comenzar con el objeto en la misma posición inicial. Si omitiste un reinicio, la política aprenderá de condiciones iniciales inconsistentes y generalizará mal.
  • 5
    La cobertura de la cámara es completa La cámara de la muñeca siempre debe mostrar el efector final y el objeto que se está manipulando. La cámara aérea debe mostrar todo el espacio de trabajo. Reajusta los soportes si el objeto sale del marco a mitad del episodio.
  • 6
    El estilo de demostración es consistente Todos los operadores deben usar el mismo camino de enfoque y estilo de agarre. Las estrategias mixtas confunden el entrenamiento de políticas. Usa un solo operador por versión de tarea, o etiqueta los episodios por operador.
  • 7
    Las estadísticas del conjunto de datos parecen razonables Controlar meta/stats.json después de grabar. Verifica que la media de la acción esté cerca de cero (no atascada en los límites de las juntas), y que la desviación estándar de la acción sea lo suficientemente grande como para mostrar variación entre episodios.
  • 8
    La tasa de éxito está documentada Registra la tasa de éxito humana durante la recolección. Una tasa de éxito del 60-70% es típica para tareas ricas en contacto. Una tasa de éxito más baja puede indicar que la tarea es demasiado difícil; una más alta puede significar que la tarea es demasiado fácil para proporcionar una señal de entrenamiento útil.
Siguiente Paso

Entrenando una Política a partir de tu Conjunto de Datos

Una vez que tu conjunto de datos pase la lista de verificación de calidad, puedes entrenar ACT o Política de Difusión directamente con LeRobot.

Entrenar ACT

python -m lerobot.scripts.train \
  --policy.type=act \
  --dataset.repo_id=your-username/openarm-pick-place-v1 \
  --policy.chunk_size=100 \
  --training.num_epochs=5000 \
  --output_dir=outputs/act-pick-place

Entrenar Política de Difusión

python -m lerobot.scripts.train \
  --policy.type=diffusion \
  --dataset.repo_id=your-username/openarm-pick-place-v1 \
  --training.num_epochs=8000 \
  --output_dir=outputs/diffusion-pick-place

Profundice más: Lea el completo Visión general del Pipeline de Recolección de Datos en la Biblioteca de Robótica para un tratamiento exhaustivo de la estructura del episodio, versionado del conjunto de datos, alineación sim-a-real y composición de conjuntos de datos multi-tarea.

¿Conjunto de datos listo? Comienza el entrenamiento.

Sube tu conjunto de datos a HuggingFace y comienza a entrenar ACT o Política de Difusión.