LeRobot documentation

Thu thập dữ liệu có sự tham gia của con người

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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:

  1. Xem chính sách chạy tự động
  2. Tạm dừng khi sự cố sắp xảy ra, robot giữ nguyên vị trí
  3. 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
  4. 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ủ
  5. Lặp lại các bước 2–4 nhiều lần nếu cần trong suốt episode
  6. 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 tay
  • so100_leader / so101_leader - cánh tay leader SO100 / SO101
  • bi_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_follower vớ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=rtcPi0, Pi0.5, SmolVLA
Từ xa--inference.type=remoteCheckpoint đượ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=50000

Bướ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=2

Vớ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óaHành động
SpaceTạm dừng chính sách / tiếp tục chính sách
TabBắ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)
ESCDừ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:

  1. Xem chính sách chạy tự động (teleop ở trạng thái nhàn rỗi/tự do)
  2. 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
  3. 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
  4. Nhấn Tab một lần nữa để kết thúc việc chỉnh sửa, sau đó nhấn Space để 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)
  5. 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
  6. 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-kbd

Bướ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=20000

Sau đó, 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}
}
Update on GitHub