Recolección de Datos
El SO-101 es uno de los brazos de recolección de datos más comunes en la comunidad de LeRobot. Esta guía cubre todo, desde conexiones de hardware hasta grabación de episodios y envío de tu conjunto de datos a HuggingFace.
Configuración de hardware para grabación
La configuración de recolección de datos de SO-101 es más simple que la de los brazos CAN-bus: todo funciona a través de USB. Aquí está lo que debes conectar.
Cámara de espacio de trabajo
Webcam USB apuntando al espacio de trabajo desde arriba o desde un lado. Montar en una posición fija — no moverla entre episodios. Verificar: ls /dev/video*
Cámara de muñeca (opcional)
Pequeña cámara USB montada en el efector final. Añade vista en primera persona. Se requiere un segundo puerto USB. LeRobot soporta sincronización de múltiples cámaras.
Brazo seguidor (USB serie)
El brazo que ejecuta acciones. Conectar a través de un controlador de servo USB. Verificar puerto con ls /dev/ttyUSB*
Brazo líder (USB serie)
Un segundo SO-101 en modo de cumplimiento — muévelo con tu mano para guiar al seguidor. Conectar en un segundo puerto USB. Ofrece demostraciones de la más alta calidad.
Sin ROS, sin controladores de kernel: A diferencia de las configuraciones CAN-bus, la pila de recolección de datos SO-101 funciona completamente sobre USB serie. Puedes grabar en un MacBook o laptop con Windows — no se requiere Ubuntu.
Flujo de trabajo de grabación paso a paso
Verificar que la calibración esté actual
Ejecutar calibración antes de cada nueva sesión si el brazo fue desensamblado o movido. Ver Software → Calibración.
python -m lerobot.scripts.control_robot \
--robot.type=so101 --robot.port=/dev/ttyUSB0 \
--control.type=calibrate
Verifique las transmisiones de las cámaras
python -c "
import cv2
for i in range(4):
cap = cv2.VideoCapture(i)
if cap.isOpened():
print(f'Camera {i}: OK')
cap.release()
"
Mover el brazo a la posición de inicio
Colocar el brazo seguidor en la posición de inicio (totalmente extendido, efector final apuntando hacia adelante). Reiniciar el brazo líder a la misma posición antes de comenzar la teleoperación.
Configure la escena de la tarea
Colocar los objetos en sus posiciones iniciales consistentes. Marcar la mesa si es necesario — las condiciones iniciales consistentes son críticas para la generalización de políticas.
Inicia la grabación de LeRobot
python -m lerobot.scripts.control_robot \
--robot.type=so101 \
--robot.port=/dev/ttyUSB1 \
--robot.leader_arms.main.type=so101 \
--robot.leader_arms.main.port=/dev/ttyUSB0 \
--control.type=record \
--control.fps=30 \
--control.repo_id=your-username/so101-pick-place-v1 \
--control.num_episodes=50 \
--control.single_task="Pick the red block and place it in the bin" \
--control.warmup_time_s=3 \
--control.reset_time_s=8
LeRobot solicita antes de cada episodio. Durante el calentamiento puedes ajustar tu agarre en el brazo líder antes de que comience la grabación.
Revise y reproduzca episodios
python -m lerobot.scripts.visualize_dataset \
--repo_id=your-username/so101-pick-place-v1 \
--episode_index=0
Eliminar episodios de mala calidad inmediatamente. Verificar si hay cuadros de cámara perdidos, velocidades de articulación erráticas o ejecución incompleta de tareas.
Empuje al HuggingFace Hub
huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
--repo_id=your-username/so101-pick-place-v1
Formato de conjunto de datos SO-101
El SO-101 utiliza el formato estándar de conjunto de datos de LeRobot / HuggingFace — esquema idéntico al de OpenArm, Koch y otros brazos de LeRobot. Esto significa que tus conjuntos de datos son directamente compatibles con todo el ecosistema de entrenamiento de LeRobot.
Esquema de datos del episodio
Notas específicas del SO-101
El espacio de acción del SO-101 utiliza posiciones de las juntas en grados (unidades de servo Feetech), no en radianes. Al mezclar conjuntos de datos de SO-101 y OpenArm para entrenamiento multiplataforma, normaliza ambos a radianes primero utilizando las estadísticas en meta/stats.json.
Lista de verificación de calidad para los datos recopilados
Revisa esto después de cada sesión de grabación antes de subirlo al Hub.
-
1Las longitudes de los episodios son consistentes Los episodios de longitud atípica generalmente significan que el operador pausó, la pinza resbaló o la grabación fue interrumpida. Mantente dentro del ±30% de la longitud mediana.
-
2Sin picos de velocidad del servo Los servos STS3215 tienen un ancho de banda limitado — picos de velocidad repentinos en
observation.stateindican una caída en el bus serie. Elimina esos episodios. -
3Los fotogramas de la cámara están alineados con los datos de las juntas Verifica que las marcas de tiempo de la cámara y las marcas de tiempo de las juntas estén dentro de 20 ms entre sí. La latencia del USB serie puede causar deriva en grabaciones largas. Re-sincroniza las cámaras cada 100 episodios.
-
4El seguimiento del brazo líder fue suave Si el seguidor se retrasó notablemente durante la grabación (debido a la latencia del USB serie), las etiquetas de acción estarán desfasadas en el tiempo respecto a las observaciones. Reproduce para verificar.
-
5La escena de la tarea fue consistente al inicio de cada episodio Objetos en la misma posición y orientación. La menor repetibilidad del SO-101 (en comparación con los brazos CAN) hace que esto sea especialmente importante — la variación en las condiciones iniciales perjudica el entrenamiento de políticas.
-
6La apertura/cierre de la pinza está claramente registrada El estado de la pinza del SO-101 es la junta 6. Verifica que los eventos de agarre muestren una clara transición de posición de la junta (abierto → cerrado) en los datos, no una deriva gradual.
Entrenando una Política a partir de tu Conjunto de Datos
Una vez que tu conjunto de datos pase las verificaciones de calidad, entrena ACT o Diffusion Policy con LeRobot.
Entrenar ACT
python -m lerobot.scripts.train \
--policy.type=act \
--dataset.repo_id=your-username/so101-pick-place-v1 \
--policy.chunk_size=100 \
--training.num_epochs=5000 \
--output_dir=outputs/act-so101-pick-place
Entrenar Política de Difusión
python -m lerobot.scripts.train \
--policy.type=diffusion \
--dataset.repo_id=your-username/so101-pick-place-v1 \
--training.num_epochs=8000 \
--output_dir=outputs/diffusion-so101-pick-place
Conjuntos de datos comunitarios: El SO-101 tiene una de las colecciones de conjuntos de datos comunitarios más grandes en el ecosistema LeRobot. Antes de recopilar tus propios datos, verifica HuggingFace Hub para conjuntos de datos existentes de SO-101 — es posible que puedas ajustar finamente a partir de un conjunto de datos base existente y ahorrar tiempo de grabación.