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.
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 paso a paso
Siga estos pasos para cada sesión de grabación. Cada paso se basa en el anterior; no omita pasos.
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.
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
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
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()
"
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.
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.
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
Empuje al HuggingFace Hub
huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
--repo_id=your-username/openarm-pick-place-v1
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
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.
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.
-
1La 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.
-
2No hay fotogramas de cámara faltantes Verifica que cada episodio tenga el número esperado de fotogramas por flujo. Ejecuta
lerobot.scripts.visualize_dataseten 3–5 episodios para verificar la calidad del video. -
3Las posiciones de las juntas están dentro de límites seguros para comprobar
observation.statenunca 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. -
4La 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.
-
5La 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.
-
6El 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.
-
7Las estadísticas del conjunto de datos parecen razonables Controlar
meta/stats.jsondespué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. -
8La 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.
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.