LeRobot documentation
جمع البيانات بمشاركة الإنسان
جمع البيانات بمشاركة الإنسان
تتيح لك عملية جمع البيانات مع تدخل الإنسان (HIL) تحسين سياسة مُدرَّبة من خلال نشرها على روبوت حقيقي بينما يراقب المشغّل البشري ويتدخل عند الحاجة. تُسجَّل بيانات التدخل (حركات الاسترداد والتصحيحات) جنبًا إلى جنب مع المقاطع المستقلة، مما ينتج عنه مجموعة بيانات تدريب أغنى تُعلّم السياسة كيفية التعامل مع حالات الفشل.
لماذا المشاركة البشرية في الحلقة؟
تدرّب الاستنساخ السلوكي القياسي السياسات على العروض الناجحة فقط. أثناء النشر، يمكن للأخطاء الصغيرة أن تتراكم وتدفع الروبوت إلى حالات لم تُرَ قط أثناء التدريب (انزياح التوزيع). يعالج جمع بيانات HIL هذه المشكلة من خلال:
- تشغيل السياسة المُدرَّبة على الروبوت الفعلي
- تدخل بشري عندما يكون الروبوت على وشك الفشل
- تسجيل تعافي الإنسان وتصحيحه كبيانات تدريب
- ضبط سياسة النموذج على مجموعة البيانات المدمجة
ينتج عن ذلك سياسة لا تعرف فقط كيفية أداء المهمة، بل أيضاً كيفية التعافي عندما تسوء الأمور.
كيف يعمل
خلال جلسة HIL، يتبع المشغّل البشري هذا الحلقة داخل كل حلقة:
- شاهد السياسة تعمل بشكل مستقل
- إيقاف مؤقت عند اقتراب الفشل، يحتفظ الروبوت بموضعه
- التحكم والتشغيل عن بُعد لإعادة الروبوت إلى حالة جيدة (الاسترداد)، ثم تصحيح السلوك
- إعادة التحكم إلى السياسة، تستأنف السياسة التنفيذ المستقل
- كرر الخطوات 2–4 عدة مرات حسب الحاجة خلال الحلقة
- إنهاء الحلقة عند اكتمال المهمة، ثم الحفظ والانتقال إلى الجولة التالية
بشكل افتراضي، تُسجَّل المقاطع التي يتحكم فيها الإنسان (الاسترداد والتصحيح) فقط، ويصبح كل تصحيح حلقة مستقلة. باستخدام --strategy.record_autonomous=true، تُسجَّل المقاطع المستقلة أيضاً: يمكن للسياسة والإنسان التبديل في التحكم عدة مرات، وتُلتقط التنفيذ المستقل والاسترداد والتصحيح في مسار متصل واحد. في كلا الوضعين، يستمر الروبوت من حالته الحالية بعد كل تسليم (لا يلزم إعادة تعيين لمجرد حدوث تدخّل). بعد الجمع، يُستخدم مجموعة البيانات المدمجة (التوضيحات الأصلية + بيانات HIL) لضبط السياسة بدقة.
يمكن تكرار هذه العملية بشكل متكرر: النشر، الجمع، الضبط الدقيق، التكرار. يستهدف كل جولة أوضاع فشل السياسة الحالية.
┌─────────────────────────────────────────────────────────────────────────┐
│ 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) │
└─────────────────────────────────────────────────────────────────────────┘متطلبات العتاد
متطلبات المشغّل عن بُعد
يتطلب وضع lerobot-rollout --strategy.type=dagger مشغّلين عن بُعد بمحركات نشطة يمكنهم:
- تفعيل/تعطيل العزم برمجياً
- الانتقال إلى المواقع المستهدفة (لمحاكاة حالة الروبوت عند الإيقاف المؤقت)
عندما تتوقف، تتحرك ذراع القائد لمطابقة الروبوت، مما يؤدي إلى انتقال التحكم بين السياسة والبشر دون قفزات. فستنتهي القفزات في التصحيحات المسجلة وستعلّم السياسة مسارات متقطعة.
مشغّلو عن بُعد متوافقون:
bi_openarm_mini- OpenArm المصغّر ذو اليدَينso100_leader/so101_leader- ذراع قائد SO100 / SO101bi_so_leader- أذرع القيادة الثنائية SO100 / SO101
تتضمن الأوامر المُقدَّمة افتراضيًا
bi_openarm_follower+bi_openarm_mini. تعمل إعدادات SO100 / SO101 بنفس الطريقة، على سبيل المثال--robot.type=so101_followerمع--teleop.type=so101_leader.
سكربت
استخدم lerobot-rollout مع --strategy.type=dagger لجمع بيانات HIL. اختر وحدة الاستدلال الخلفية باستخدام --inference.type=sync|rtc|remote:
| الوضع | علم | النماذج |
|---|---|---|
| قياسي (افتراضي) | (لا يلزم استخدام أي علم) | ACT، سياسة الانتشار |
| التقطيع في الوقت الفعلي (RTC) | --inference.type=rtc | Pi0, Pi0.5, SmolVLA |
| عن بُعد | --inference.type=remote | نقطة التفتيش التي يقدّمها lerobot-policy-server؛ راجع متطلبات النشر عن بُعد |
دليل خطوة بخطوة
الخطوة 1: تدريب سياسة أساسية
أولاً، درّب سياسة على مجموعة بياناتك التوضيحية. يدرّب هذا المثال ACT، والذي يعمل بالاستدلال القياسي في الخطوة 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الخطوة 2: جمع بيانات HIL
الاستدلال القياسي (ACT، سياسة الانتشار):
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عند استخدام --interpolation_multiplier=N، يتلقى الروبوت N أوامر مُستوفَزة لكل إجراء من إجراءات السياسة (تعمل وحدة التحكم بتردد fps × N هرتز) بينما تبقى استنتاج السياسة وتسجيل مجموعة البيانات عند --fps، مما يجعل مجموعة البيانات المسجلة متطابقة مع معدل الإطارات المُعلن عنها.
مع RTC للنماذج الكبيرة (Pi0، Pi0.5، SmolVLA):
بالنسبة إلى النماذج التي تتميز بزمن استدلال مرتفع، فعّل RTC لتنفيذ سلس. يتطلب ذلك سياسة أساسية من نوع VLA مثل Pi0 أو Pi0.5 أو SmolVLA بدلاً من سياسة ACT من الخطوة 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التحكم:
| المفتاح | إجراء |
|---|---|
Space | إيقاف السياسة مؤقتًا / استئناف السياسة |
Tab | بدء / إيقاف تصحيح (فقط أثناء الإيقاف المؤقت)؛ يتم تسجيل التصحيحات |
Enter | ادفع مجموعة البيانات إلى Hub (وضع التصحيحات فقط) |
ESC | إيقاف الجلسة |
يمكن استخدام دواسة قدم USB بدلاً من لوحة المفاتيح باستخدام --strategy.input_device=pedal. راجع Policy Deployment للاطلاع على جميع أعلام DAgger.
بروتوكول HIL:
- شاهد السياسة تعمل بشكل مستقل (التحكم عن بُعد خامل/حر)
- عندما تلاحظ فشلًا وشيكًا، اضغط على
Spaceلـ إيقاف مؤقت- إيقافات السياسة
- يتحرك المشغّل عن بُعد لمطابقة موضع الروبوت (تمكين العزم)
- لم يتم تسجيل أي إطارات أثناء الإيقاف المؤقت
- اضغط على
Tabللاستحواذ على التحكم- تم تعطيل عزم دوران المشغّل عن بُعد، حرّ الحركة
- الاسترداد: التحكم عن بُعد بالروبوت لإعادته إلى حالة جيدة
- التصحيح: تصحيح السلوك
- تُسجَّل جميع الحركات
- اضغط على
Tabمرة أخرى لإنهاء التصحيح، ثم اضغط علىSpaceلـ إعادة التحكم إلى السياسة- يعود Policy إلى التنفيذ المستقل من الحالة الحالية
- يمكنك التدخل مرة أخرى في أي وقت (كرر الخطوات 2–4)
- في الوضع الافتراضي، يُحفظ كل تصحيح كحلقة مستقلة. باستخدام
--strategy.record_autonomous=true، يتم تسجيل كل شيء وتقسيمه إلى حلقات تلقائيًا - اضغط
ESCلإيقاف الجلسة
إعداد دواسة القدم (Linux):
عند استخدام دواسة قدم عبر USB (PCsensor FootSwitch)، تأكد من الوصول إليها:
sudo setfacl -m u:$USER:rw /dev/input/by-id/usb-PCsensor_FootSwitch-event-kbdالخطوة 3: دمج مجموعات البيانات
lerobot-rollout يضيف طابعًا زمنيًا إلى اسم مجموعة البيانات، لذا تُحفظ مجموعة بيانات HIL من الخطوة 2 باسم your-username/rollout_hil_dataset_YYYYMMDD_HHMMSS. استخدم ذلك الاسم الكامل أدناه.
يحتوي مجموعة بيانات HIL على عمود إضافي intervention يحدد الإطارات التي يتحكم بها البشر، ولا يمكن دمج مجموعات البيانات إلا إذا كانت تملك نفس الميزات. احذف العمود أولاً، ثم ادمج بيانات HIL مع عروضك:
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']"يجب أن تستخدم كلا المجموعتين من البيانات أيضًا نفس الروبوت والكاميرات ومعدل الإطارات (fps). راجع استخدام أدوات مجموعات البيانات لمعرفة المزيد من خيارات الدمج.
الخطوة 4: ضبط السياسة
قم بضبط سياسة الخطوة 1 على مجموعة البيانات المدمجة:
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ثم انشر السياسة المُحسَّنة وكرر من الخطوة 2 لاستهداف أنماط فشلها المتبقية.
نصائح لجمع بيانات HIL بفعالية
متى يتدخل
تدخّل عندما ترى:
- روبوت على وشك ارتكاب خطأ لا يمكن التراجع عنه
- تردد الروبوت أو إظهار سلوك غير مؤكد
- روبوت ينحرف عن المسار المتوقع
الاسترداد: التشغيل عن بُعد للعودة إلى حالة جيدة
أثناء الاسترداد، قم بتشغيل الروبوت عن بُعد حتى يعود إلى حالة يكون فيها:
- الروبوت في تكوين مألوف ضمن نطاق التوزيع
- لا يزال من الممكن إكمال المهام الفرعية الحالية
- مسار التعافي بحد ذاته يُشكّل بيانات تدريبية مفيدة
جودة التصحيحات
أثناء التصحيح:
- توفير مسارات واثقة ونظيفة
- أكمل المهمة الفرعية الحالية بالكامل
- لا تُبالغ في التصحيح أو تُضف حركات غير ضرورية
الأعمال ذات الصلة
تعتمد طريقة جمع بيانات HIL هذه على أفكار مستمدة من التعلم التقليلي التفاعلي:
قدّم DAgger (روس وآخرون، 2011) الفكرة الأساسية: بدلاً من التدريب على عروض الخبراء فقط، استشر الخبير للحصول على تصحيحات للحالات التي يزورها المتعلم. يكسر هذا حلقة الأخطاء التراكمية في الاستنساخ السلوكي القياسي من خلال جمع البيانات على السياسة بشكل تكراري.
HG-DAgger (Kelly et al., 2019) جعل هذا الأمر عمليًا في مجال الروبوتات: حيث يراقب الخبير البشري الروبوت ويتدخل فقط عند الحاجة، بدلاً من تسمية كل حالة. والتحكم البوَّابي بين القيادة الذاتية والقيادة البشرية هو بالضبط حلقة الإيقاف → الاستيلاء → العودة إلى السياسة المستخدمة في السكربتات هنا.
RaC (Hu et al., 2025) يوسّع هذه الحلقة لتتوافق مع المهام طويلة المدى من خلال تفكيك التدخّلات صراحةً إلى استرداد (التشغيل عن بُعد للعودة إلى حالة جيدة) وتصحيح (إظهار السلوك الصحيح من تلك النقطة). هذا التفكيك هو البروتوكول الذي تتبعه استراتيجية DAgger في
lerobot-rollout.يطبّق π0.6/RECAP (من شركة Physical Intelligence، 2025) نفس حلقة الجمع والتدريب الدقيق التكرارية على نطاق واسع مع نماذج VLA، مما يُظهر أن حتى السياسات المُدرَّبة مسبقًا الكبيرة تستفيد بشكل كبير من التصحيحات البشرية المستهدفة لأوضاع فشلها الخاصة. يتم تدريب π0.6 باستخدام 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}
}