LeRobot documentation
Recopilación de datos con intervención humana
Recopilación de datos con intervención humana
La recopilación de datos con intervención humana (HIL) permite mejorar una política entrenada desplegándola en un robot real mientras un operador humano la supervisa e interviene cuando es necesario. Los datos de intervención (movimientos de recuperación y correcciones) se registran junto con los segmentos autónomos, lo que genera un conjunto de datos de entrenamiento más rico que enseña a la política cómo manejar los fallos.
¿Por qué Human-In-the-Loop?
El clonado de comportamiento estándar entrena políticas únicamente con demostraciones exitosas. Durante la implementación, pequeños errores pueden acumularse y llevar al robot a estados que nunca se observaron durante el entrenamiento (cambio de distribución). La recopilación de datos HIL aborda esto mediante:
- Ejecutar la política entrenada en el robot real
- Que un humano intervenga cuando el robot está a punto de fallar
- Registrar la recuperación y corrección del humano como datos de entrenamiento
- Ajuste fino de la política en el conjunto de datos combinado
Esto genera una política que no solo sabe cómo realizar la tarea, sino también cómo recuperarse cuando algo sale mal.
Cómo funciona
Durante una sesión de HIL, el operador humano sigue este bucle dentro de cada episodio:
- Ver la ejecución autónoma de la política
- Pausa cuando el fallo es inminente, el robot mantiene su posición
- Tomar el control y teleoperar el robot para devolverlo a un buen estado (recuperación), y luego corregir el comportamiento
- Devolver el control a la política, la política reanuda la ejecución autónoma
- Repite los pasos 2–4 tantas veces como sea necesario durante el episodio
- Termina el episodio cuando la tarea esté completa, guarda y pasa al siguiente rollout
Por defecto, solo se registran los segmentos controlados por el humano (recuperación y corrección), y cada corrección se convierte en su propio episodio. Con --strategy.record_autonomous=true, también se registran los segmentos autónomos: la política y el humano pueden alternar el control varias veces, y la ejecución autónoma, la recuperación y la corrección se capturan en una única trayectoria continua. En ambos modos, el robot continúa desde su estado actual después de cada transferencia de control (no se requiere un reinicio solo porque haya ocurrido una intervención). Después de la recopilación, el conjunto de datos combinado (demostraciones originales + datos HIL) se utiliza para ajustar la política.
Este proceso se puede repetir de forma iterativa: desplegar, recopilar, ajustar finamente, repetir. Cada ronda se centra en los modos de fallo de la política actual.
┌─────────────────────────────────────────────────────────────────────────┐
│ Policy v0 (trained on demos) │
│ ↓ │
│ HIL Collection (target current failure modes) → Fine-tune → Policy v1 │
│ ↓ │
│ HIL Collection (target new failure modes) → Fine-tune → Policy v2 │
│ ↓ │
│ ... (repeat until satisfactory performance) │
└─────────────────────────────────────────────────────────────────────────┘Requisitos de hardware
Requisitos del teleoperador
El modo lerobot-rollout --strategy.type=dagger requiere teleoperadores con motores activos que puedan:
- Activar/desactivar el torque programáticamente
- Mover a las posiciones objetivo (para reflejar el estado del robot al pausar)
Cuando se pausa, el brazo líder se mueve para coincidir con el robot, de modo que el control pasa entre la política y el humano sin saltos. Los saltos terminarían en las correcciones grabadas y enseñarían a la política trayectorias bruscas.
Teleoperadores compatibles:
bi_openarm_mini- OpenArm Mini bimanualso100_leader/so101_leader- Brazo líder SO100 / SO101bi_so_leader- Brazos líderes bimanuales SO100 / SO101
Los comandos proporcionados usan
bi_openarm_follower+bi_openarm_minipor defecto. Las configuraciones de SO100 / SO101 funcionan de la misma manera, por ejemplo,--robot.type=so101_followercon--teleop.type=so101_leader.
Script
Use lerobot-rollout con --strategy.type=dagger para la recopilación de datos HIL. Seleccione el backend de inferencia con --inference.type=sync|rtc|remote:
| Modo | Flag | Modelos |
|---|---|---|
| Estándar (predeterminado) | (no se necesita ninguna bandera) | ACT, Diffusion Policy |
| Segmentación en tiempo real (RTC) | --inference.type=rtc | Pi0, Pi0.5, SmolVLA |
| Remoto | --inference.type=remote | Checkpoint servido por lerobot-policy-server; consulte requisitos de despliegue remoto |
Guía paso a paso
Paso 1: Pre-entrenar una política base
Primero, entrena una política en tu conjunto de datos de demostración. Este ejemplo entrena ACT, que se ejecuta con inferencia estándar en el paso 2:
lerobot-train \
--dataset.repo_id=${HF_USER}/demo-dataset \
--policy.type=act \
--policy.repo_id=${HF_USER}/act_pretrain \
--output_dir=outputs/pretrain \
--batch_size=32 \
--steps=50000Paso 2: Recopilar datos de HIL
Inferencia estándar (ACT, Diffusion Policy):
lerobot-rollout --strategy.type=dagger \
--robot.type=bi_openarm_follower \
--robot.left_arm_config.port=can1 \
--robot.left_arm_config.side=left \
--robot.right_arm_config.port=can0 \
--robot.right_arm_config.side=right \
--robot.cameras='{left_wrist: {type: opencv, index_or_path: "/dev/video0", width: 1280, height: 720, fps: 30}, right_wrist: {type: opencv, index_or_path: "/dev/video4", width: 1280, height: 720, fps: 30}, base: {type: opencv, index_or_path: "/dev/video2", width: 640, height: 480, fps: 30}}' \
--teleop.type=bi_openarm_mini \
--teleop.left_arm_config.port=/dev/ttyACM0 \
--teleop.right_arm_config.port=/dev/ttyACM1 \
--policy.path=outputs/pretrain/checkpoints/last/pretrained_model \
--dataset.repo_id=${HF_USER}/rollout_hil_dataset \
--dataset.single_task="Fold the T-shirt properly" \
--dataset.fps=30 \
--strategy.num_episodes=50 \
--interpolation_multiplier=2Con --interpolation_multiplier=N, el robot recibe N comandos interpolados por acción de la política (el control se ejecuta a fps × N Hz), mientras que la inferencia de la política y la grabación del conjunto de datos se mantienen en --fps, de modo que el conjunto de datos grabado coincide con su FPS declarado.
Con RTC para modelos grandes (Pi0, Pi0.5, SmolVLA):
Para modelos con alta latencia de inferencia, active RTC para una ejecución fluida. Esto requiere una política base VLA como Pi0, Pi0.5 o SmolVLA en lugar de la política ACT de la etapa 1:
lerobot-rollout --strategy.type=dagger \
--inference.type=rtc \
--inference.rtc.execution_horizon=20 \
--inference.rtc.max_guidance_weight=5.0 \
--inference.rtc.prefix_attention_schedule=LINEAR \
--robot.type=bi_openarm_follower \
--robot.left_arm_config.port=can1 \
--robot.left_arm_config.side=left \
--robot.right_arm_config.port=can0 \
--robot.right_arm_config.side=right \
--robot.cameras='{left_wrist: {type: opencv, index_or_path: "/dev/video0", width: 1280, height: 720, fps: 30}, right_wrist: {type: opencv, index_or_path: "/dev/video4", width: 1280, height: 720, fps: 30}, base: {type: opencv, index_or_path: "/dev/video2", width: 640, height: 480, fps: 30}}' \
--teleop.type=bi_openarm_mini \
--teleop.left_arm_config.port=/dev/ttyACM0 \
--teleop.right_arm_config.port=/dev/ttyACM1 \
--policy.path=outputs/pretrain/checkpoints/last/pretrained_model \
--dataset.repo_id=${HF_USER}/rollout_hil_rtc_dataset \
--dataset.single_task="Fold the T-shirt properly" \
--dataset.fps=30 \
--strategy.num_episodes=50 \
--interpolation_multiplier=3Controles:
| Clave | Acción |
|---|---|
Space | Pausar la política / reanudar la política |
Tab | Iniciar / detener una corrección (solo mientras está en pausa); las correcciones se registran |
Enter | Subir el conjunto de datos al Hub (modo solo correcciones) |
ESC | Detener la sesión |
Se puede usar un pedal de pie USB en lugar del teclado con --strategy.input_device=pedal. Consulte Policy Deployment para ver todas las banderas de DAgger.
El protocolo HIL:
- Observa la ejecución autónoma de la política (teleop está inactivo/libre)
- Cuando veas un fallo inminente, pulsa
Spacepara pausar- Detención de la política
- El teleoperador se mueve para igualar la posición del robot (par activado)
- No se registraron fotogramas durante la pausa
- Pulsa
Tabpara tomar el control- Par del teleoperador desactivado, libre de movimiento
- Recuperación: Teleopere el robot para devolverlo a un buen estado
- Corrección: Corregir el comportamiento
- Todos los movimientos se registran
- Pulsa
Tabde nuevo para finalizar la corrección y luegoSpacepara devolver el control a la política- La política reanuda la ejecución autónoma desde el estado actual
- Puedes intervenir de nuevo en cualquier momento (repite los pasos 2–4)
- En el modo predeterminado, cada corrección se guarda como su propio episodio. Con
--strategy.record_autonomous=true, todo se registra y se divide en episodios automáticamente. - Pulsa
ESCpara detener la sesión
Configuración del pedal de pie (Linux):
Si se utiliza un pedal de pie USB (PCsensor FootSwitch), asegúrese de tener acceso:
sudo setfacl -m u:$USER:rw /dev/input/by-id/usb-PCsensor_FootSwitch-event-kbdPaso 3: Fusionar los conjuntos de datos
lerobot-rollout añade una marca de tiempo al nombre del conjunto de datos, por lo que el conjunto de datos HIL del paso 2 se guarda como your-username/rollout_hil_dataset_YYYYMMDD_HHMMSS. Utilice ese nombre completo a continuación.
El conjunto de datos HIL tiene una columna adicional intervention que marca los fotogramas controlados por humanos, y los conjuntos de datos solo pueden combinarse si tienen las mismas características. Elimina la columna primero y luego combina los datos de HIL con tus demostraciones:
lerobot-edit-dataset \
--repo_id ${HF_USER}/rollout_hil_dataset_YYYYMMDD_HHMMSS \
--new_repo_id ${HF_USER}/hil_dataset_no_intervention \
--operation.type remove_feature \
--operation.feature_names "['intervention']"
lerobot-edit-dataset \
--new_repo_id ${HF_USER}/demo_plus_hil \
--operation.type merge \
--operation.repo_ids "['${HF_USER}/demo-dataset', '${HF_USER}/hil_dataset_no_intervention']"Ambos conjuntos de datos también deben utilizar el mismo robot, cámaras y fps. Consulte Using Dataset Tools para más opciones de fusión.
Paso 4: Ajuste fino de la Policy
Ajusta finamente la política del paso 1 en el conjunto de datos fusionado:
lerobot-train \
--dataset.repo_id=${HF_USER}/demo_plus_hil \
--policy.path=outputs/pretrain/checkpoints/last/pretrained_model \
--policy.repo_id=${HF_USER}/act_hil_finetune \
--output_dir=outputs/hil_finetune \
--steps=20000Luego, despliega la política ajustada y repite desde el Paso 2 para abordar sus modos de fallo restantes.
Consejos para una recopilación efectiva de HIL
Cuándo intervenir
Interviene cuando vea:
- Robot a punto de cometer un error irreversible
- Robot dudando o mostrando un comportamiento incierto
- Robot desviándose de la trayectoria esperada
Recuperación: Teleoperar de vuelta a un buen estado
Durante la recuperación, teleopere el robot hasta un estado en el que:
- El robot se encuentra en una configuración familiar, dentro de la distribución
- La subtarea actual aún puede completarse
- La trayectoria de recuperación en sí misma es un dato de entrenamiento informativo
Calidad de las correcciones
Durante la corrección:
- Proporcionar trayectorias confiables y limpias
- Completa por completo la subtarea actual
- No sobrecompense ni añada movimientos innecesarios
Trabajo relacionado
Este enfoque de recopilación de datos HIL se basa en ideas del aprendizaje por imitación interactivo:
DAgger (Ross et al., 2011) introdujo la idea central: en lugar de entrenar únicamente con demostraciones de expertos, consultar al experto para obtener correcciones en los estados que visita el learner. Esto rompe el ciclo de error compuesto del clonado de comportamiento estándar al recopilar datos on-policy de forma iterativa.
HG-DAgger (Kelly et al., 2019) hizo esto práctico para la robótica: un experto humano supervisa al robot y solo interviene cuando es necesario, en lugar de etiquetar cada estado. La transición entre el control autónomo y el control humano es exactamente el bucle de pausa → toma de control → retorno a la política utilizado en los scripts de aquí.
RaC (Hu et al., 2025) escala este buque a tareas de largo horizonte mediante la descomposición explícita de las intervenciones en recuperación (teleoperar de vuelta a un buen estado) y corrección (demostrar el comportamiento correcto desde ahí). Esta descomposición es el protocolo seguido por la estrategia DAgger en
lerobot-rollout.π0.6/RECAP (Physical Intelligence, 2025) aplica el mismo bucle iterativo de recopilación y ajuste fino a gran escala con modelos VLA, demostrando que incluso las políticas preentrenadas de gran tamaño se benefician sustancialmente de correcciones humanas dirigidas a sus propios modos de fallo. π0.6 se entrena utilizando RECAP.
@article{ross2011dagger,
title={A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning},
author={Ross, Stéphane and Gordon, Geoffrey and Bagnell, Drew},
journal={Proceedings of the Fourteenth International Conference on Artificial Intelligence and Statistics},
year={2011}
}
@article{kelly2019hgdagger,
title={HG-DAgger: Interactive Imitation Learning with Human Experts},
author={Kelly, Michael and Sidrane, Chelsea and Driggs-Campbell, Katherine and Kochenderfer, Mykel J},
journal={arXiv preprint arXiv:1810.02890},
year={2019}
}
@article{hu2025rac,
title={RaC: Robot Learning for Long-Horizon Tasks by Scaling Recovery and Correction},
author={Hu, Zheyuan and Wu, Robyn and Enock, Naveen and Li, Jasmine and Kadakia, Riya and Erickson, Zackory and Kumar, Aviral},
journal={arXiv preprint arXiv:2509.07953},
year={2025}
}
@article{pi2025recap,
title={π0.6: a VLA That Learns From Experience},
author={Physical Intelligence},
year={2025}
}