LeRobot documentation
Thu thập dữ liệu có sự tham gia của con người
Thu thập dữ liệu có sự tham gia của con người
Thu thập dữ liệu Human-In-the-Loop (HIL) cho phép bạn cải thiện một chính sách đã được huấn luyện bằng cách triển khai nó trên một robot thực trong khi một người vận hành giám sát và can thiệp khi cần thiết. Dữ liệu can thiệp (các chuyển động phục hồi và các điều chỉnh) được ghi lại cùng với các đoạn tự động, tạo ra một tập dữ liệu huấn luyện phong phú hơn, dạy cho chính sách cách xử lý các sự cố.
Tại sao cần Human-In-the-Loop?
Huấn luyện sao chép hành vi (behavioral cloning) tiêu chuẩn chỉ huấn luyện chính sách trên các bản demo thành công. Trong quá trình triển khai, những sai sót nhỏ có thể tích lũy và đẩy robot vào các trạng thái chưa từng xuất hiện trong giai đoạn huấn luyện (distribution shift). Thu thập dữ liệu HIL giải quyết vấn đề này bằng cách:
- Chạy chính sách đã được huấn luyện trên robot thực
- Có sự can thiệp của con người khi robot sắp gặp sự cố
- Ghi lại quá trình phục hồi và sửa lỗi của con người làm dữ liệu huấn luyện
- Chỉnh huấn luyện chính sách trên bộ dữ liệu kết hợp
Điều này tạo ra một chính sách không chỉ biết cách thực hiện tác vụ mà còn biết cách phục hồi khi có sự cố xảy ra.
Cách hoạt động
Trong một phiên HIL, người vận hành con người tuân theo vòng lặp này trong mỗi tập:
- Xem chính sách chạy tự động
- Tạm dừng khi sự cố sắp xảy ra, robot giữ nguyên vị trí
- Giữ quyền kiểm soát và điều khiển robot từ xa để đưa nó về trạng thái tốt (khôi phục), sau đó sửa chữa hành vi
- Trả quyền điều khiển cho chính sách, chính sách tiếp tục thực thi tự chủ
- Lặp lại các bước 2–4 nhiều lần nếu cần trong suốt episode
- Kết thúc tập khi nhiệm vụ hoàn tất, lưu lại và chuyển sang lượt rollout tiếp theo
Mặc định, chỉ các đoạn do con người kiểm soát (phục hồi và hiệu chỉnh) được ghi lại, và mỗi lần hiệu chỉnh trở thành một tập (episode) riêng biệt. Với --strategy.record_autonomous=true, các đoạn tự chủ cũng được ghi lại: chính sách (policy) và con người có thể luân phiên kiểm soát nhiều lần, và việc thực thi tự chủ, phục hồi và hiệu chỉnh được thu thập trong một quỹ đạo liên tục. Trong cả hai chế độ, robot tiếp tục từ trạng thái hiện tại sau mỗi lần chuyển giao (không cần đặt lại chỉ vì có sự can thiệp). Sau khi thu thập, bộ dữ liệu kết hợp (các minh chứng gốc + dữ liệu HIL) được sử dụng để tinh chỉnh chính sách.
Quy trình này có thể được lặp lại theo từng vòng: triển khai, thu thập, tinh chỉnh, lặp lại. Mỗi vòng nhắm vào các chế độ lỗi của chính sách hiện tại.
┌─────────────────────────────────────────────────────────────────────────┐
│ 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) │
└─────────────────────────────────────────────────────────────────────────┘Yêu cầu phần cứng
Yêu cầu đối với Teleoperator
Chế độ lerobot-rollout --strategy.type=dagger yêu cầu thiết bị điều khiển từ xa có động cơ hoạt động có thể:
- Bật/tắt mô-men xoắn bằng lập trình
- Di chuyển đến các vị trí đích (để phản ánh trạng thái của robot khi tạm dừng)
Khi bạn tạm dừng, cánh tay dẫn sẽ di chuyển để khớp với robot, nhờ đó quyền điều khiển được chuyển giao giữa chính sách và con người mà không có sự nhảy vọt. Những cú nhảy vọt sẽ bị ghi lại trong các bản sửa lỗi và khiến chính sách học được các quỹ đạo giật cục.
Teleoperators tương thích:
bi_openarm_mini- OpenArm Mini hai tayso100_leader/so101_leader- cánh tay leader SO100 / SO101bi_so_leader- Cánh tay leader bimanual SO100 / SO101
Các lệnh được cung cấp mặc định là
bi_openarm_follower+bi_openarm_mini. Các cấu hình SO100 / SO101 hoạt động theo cách tương tự, ví dụ--robot.type=so101_followervới--teleop.type=so101_leader.
Script
Sử dụng lerobot-rollout với --strategy.type=dagger để thu thập dữ liệu HIL. Chọn backend suy luận bằng --inference.type=sync|rtc|remote:
| Chế độ | Cờ | Mô hình |
|---|---|---|
| Tiêu chuẩn (mặc định) | (không cần cờ) | ACT, Diffusion Policy |
| Phân mảnh thời gian thực (RTC) | --inference.type=rtc | Pi0, Pi0.5, SmolVLA |
| Từ xa | --inference.type=remote | Checkpoint được cung cấp bởi lerobot-policy-server; xem yêu cầu triển khai từ xa |
Hướng dẫn từng bước
Bước 1: Tiền huấn luyện một Chính sách Cơ sở
Đầu tiên, huấn luyện một policy trên bộ dữ liệu demo của bạn. Ví dụ này huấn luyện ACT, chạy với suy luận tiêu chuẩn ở bước 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=50000Bước 2: Thu thập dữ liệu HIL
Suy luận tiêu chuẩn (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=2Với --interpolation_multiplier=N, robot nhận N lệnh nội suy cho mỗi hành động của policy (điều khiển chạy ở fps × N Hz) trong khi suy luận policy và ghi lại dataset vẫn ở --fps, do đó dataset được ghi lại khớp với FPS đã khai báo.
Với RTC cho các mô hình lớn (Pi0, Pi0.5, SmolVLA):
Đối với các mô hình có độ trễ suy luận cao, hãy bật RTC để thực thi mượt mà. Điều này cần một chính sách cơ sở VLA như Pi0, Pi0.5 hoặc SmolVLA thay vì chính sách ACT từ bước 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=3Điều khiển:
| Khóa | Hành động |
|---|---|
Space | Tạm dừng chính sách / tiếp tục chính sách |
Tab | Bắt đầu / dừng một bản sửa (chỉ khi đang tạm dừng); các bản sửa được ghi lại |
Enter | Đẩy bộ dữ liệu lên Hub (chế độ chỉ sửa lỗi) |
ESC | Dừng phiên |
Có thể sử dụng bàn đạp USB thay cho bàn phím với --strategy.input_device=pedal. Xem Policy Deployment để biết tất cả các cờ DAgger.
Giao thức HIL:
- Xem chính sách chạy tự động (teleop ở trạng thái nhàn rỗi/tự do)
- Khi nhận thấy sự cố sắp xảy ra, hãy nhấn
Spaceđể tạm dừng- Dừng chính sách
- Người vận hành từ xa di chuyển để khớp với vị trí của robot (bật mô-men xoắn)
- Không có khung nào được ghi lại trong khi tạm dừng
- Nhấn
Tabđể kiểm soát- Mô-men xoắn của người vận hành từ xa đã bị vô hiệu hóa, tự do di chuyển
- Khôi phục: Điều khiển robot từ xa để đưa nó về trạng thái tốt
- Sửa lỗi: Sửa hành vi
- Tất cả các chuyển động đều được ghi lại
- Nhấn
Tabmột lần nữa để kết thúc việc chỉnh sửa, sau đó nhấnSpaceđể trao lại quyền kiểm soát cho policy- Policy tiếp tục thực thi tự động từ trạng thái hiện tại
- Bạn có thể can thiệp lại bất cứ lúc nào (lặp lại các bước 2–4)
- Trong chế độ mặc định, mỗi lần hiệu chỉnh được lưu dưới dạng một episode riêng. Với
--strategy.record_autonomous=true, mọi thứ được ghi lại và tự động tách thành các episode - Nhấn
ESCđể dừng phiên
Cài đặt bàn đạp chân (Linux):
Nếu sử dụng bàn đạp chân USB (PCsensor FootSwitch), hãy đảm bảo quyền truy cập:
sudo setfacl -m u:$USER:rw /dev/input/by-id/usb-PCsensor_FootSwitch-event-kbdBước 3: Gộp các bộ dữ liệu
lerobot-rollout thêm dấu thời gian vào tên tập dữ liệu, do đó tập dữ liệu HIL từ bước 2 được lưu dưới dạng your-username/rollout_hil_dataset_YYYYMMDD_HHMMSS. Hãy sử dụng tên đầy đủ đó bên dưới.
Bộ dữ liệu HIL có thêm cột intervention để đánh dấu các khung hình do con người kiểm soát, và các bộ dữ liệu chỉ có thể được gộp khi chúng có cùng các đặc trưng. Hãy xóa cột này trước, sau đó gộp dữ liệu HIL với các bản demo của bạn:
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']"Cả hai bộ dữ liệu cũng phải sử dụng cùng một robot, camera và fps. Xem Sử dụng công cụ bộ dữ liệu để biết thêm các tùy chọn gộp.
Bước 4: Tinh chỉnh Policy
Tinh chỉnh chính sách từ bước 1 trên bộ dữ liệu đã gộp:
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=20000Sau đó, triển khai chính sách đã tinh chỉnh và lặp lại từ Bước 2 để nhắm vào các chế độ lỗi còn lại của nó.
Mẹo thu thập HIL hiệu quả
Khi nào cần can thiệp
Can thiệp khi bạn thấy:
- Robot sắp mắc phải sai lầm không thể đảo ngược
- Robot do dự hoặc thể hiện hành vi không chắc chắn
- Robot lệch khỏi quỹ đạo dự kiến
Khôi phục: Điều khiển từ xa để trở về trạng thái tốt
Trong quá trình phục hồi, điều khiển robot từ xa để đưa nó trở về trạng thái mà:
- Robot đang ở trong một cấu hình quen thuộc, thuộc phân phối
- Nhiệm vụ con hiện tại vẫn có thể được hoàn thành
- Chính quỹ đạo phục hồi là dữ liệu huấn luyện mang tính thông tin
Chất lượng của các bản sửa
Trong quá trình hiệu chỉnh:
- Cung cấp các quỹ đạo chắc chắn, sạch sẽ
- Hoàn thành đầy đủ nhiệm vụ con hiện tại
- Không chỉnh sửa quá mức hoặc thêm các chuyển động không cần thiết
Công trình liên quan
Cách tiếp cận thu thập dữ liệu HIL này được xây dựng dựa trên các ý tưởng từ học mô phỏng tương tác:
DAgger (Ross et al., 2011) đã đưa ra ý tưởng cốt lõi: thay vì chỉ huấn luyện trên các minh chứng của chuyên gia, hãy truy vấn chuyên gia để nhận các bản sửa lỗi trên các trạng thái mà người học đi qua. Điều này phá vỡ vòng lặp lỗi cộng dồn của việc mô phỏng hành vi chuẩn bằng cách thu thập dữ liệu on-policy một cách lặp lại.
HG-DAgger (Kelly et al., 2019) đã giúp điều này trở nên khả thi trong robotics: một chuyên gia con người giám sát robot và chỉ can thiệp khi cần thiết, thay vì gán nhãn cho mọi trạng thái. Cơ chế chuyển đổi giữa điều khiển tự chủ và điều khiển bởi con người chính là vòng lặp tạm dừng → tiếp quản → quay lại chính sách được sử dụng trong các script ở đây.
RaC (Hu et al., 2025) mở rộng vòng lặp này cho các tác vụ có tầm nhìn dài bằng cách phân tách rõ ràng các can thiệp thành recovery (điều khiển từ xa để quay lại trạng thái tốt) và correction (thực hiện hành vi đúng từ đó). Sự phân tách này chính là giao thức được áp dụng bởi chiến lược DAgger trong
lerobot-rollout.π0.6/RECAP (Physical Intelligence, 2025) áp dụng cùng một vòng lặp thu thập và tinh chỉnh lặp lại ở quy mô lớn với các mô hình VLA, cho thấy ngay cả các chính sách được tiền huấn luyện lớn cũng được hưởng lợi đáng kể từ các sửa lỗi có mục tiêu của con người trên các chế độ lỗi của chính chúng. π0.6 được huấn luyện bằng 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}
}