LeRobot documentation
Reachy 2
Reachy 2
Reachy 2 هو روبوت بشري مفتوح المصدر من تطوير Pollen Robotics، مصمَّم خصيصًا لتطوير الذكاء الاصطناعي التجسّدي والتطبيقات الواقعية. اطّلع على موقع Pollen Robotics، أو اطلع على وثائق Reachy 2 لمزيد من المعلومات حول المنصّة!
التحكم عن بُعد في Reachy 2
حاليًا، هناك طريقتان للتحكم عن بُعد في Reachy 2:
- توجيه عن بُعد عبر الواقع الافتراضي من Pollen Robotics (غير متضمن في LeRobot).
- التشغيل عن بُعد بين الروبوتات (استخدام Reachy 2 واحد للتحكم في آخر).
محاكاة Reachy 2
(لنظام لينكس فقط) يمكنك تشغيل Reachy 2 في محاكاة (Gazebo أو MuJoCo) باستخدام صورة Docker المُقدَّمة.
- قم بتثبيت Docker Engine.
- التشغيل (لـ MuJoCo):
docker run --rm -it \
--name reachy \
--privileged \
--network host \
--ipc host \
--device-cgroup-rule='c 189:* rwm' \
--group-add audio \
-e ROS_DOMAIN_ID="$ROS_DOMAIN_ID" \
-e DISPLAY="$DISPLAY" \
-e RCUTILS_CONSOLE_OUTPUT_FORMAT="[{severity}]: {message}" \
-e REACHY2_CORE_SERVICE_FAKE="${REACHY2_CORE_SERVICE_FAKE:-true}" \
-v /dev:/dev \
-v "$HOME/.reachy_config":/home/reachy/.reachy_config_override \
-v "$HOME/.reachy.log":/home/reachy/.ros/log \
-v /usr/lib/x86_64-linux-gnu:/opt/host-libs \
--entrypoint /package/launch.sh \
pollenrobotics/reachy2_core:1.7.5.9_deploy \
start_rviz:=true start_sdk_server:=true mujoco:=trueإذا كان تشغيل MuJoCo بطيئًا (تردد محاكاة منخفض)، أضف
-e LD_LIBRARY_PATH="/opt/host-libs:$LD_LIBRARY_PATH" \إلى الأمر السابق لتحسين الأداء:docker run --rm -it \ --name reachy \ --privileged \ --network host \ --ipc host \ --device-cgroup-rule='c 189:* rwm' \ --group-add audio \ -e ROS_DOMAIN_ID="$ROS_DOMAIN_ID" \ -e DISPLAY="$DISPLAY" \ -e RCUTILS_CONSOLE_OUTPUT_FORMAT="[{severity}]: {message}" \ -e REACHY2_CORE_SERVICE_FAKE="${REACHY2_CORE_SERVICE_FAKE:-true}" \ -e LD_LIBRARY_PATH="/opt/host-libs:$LD_LIBRARY_PATH" \ -v /dev:/dev \ -v "$HOME/.reachy_config":/home/reachy/.reachy_config_override \ -v "$HOME/.reachy.log":/home/reachy/.ros/log \ -v /usr/lib/x86_64-linux-gnu:/opt/host-libs \ --entrypoint /package/launch.sh \ pollenrobotics/reachy2_core:1.7.5.9_deploy \ start_rviz:=true start_sdk_server:=true mujoco:=true
الإعداد
المتطلبات
- على روبوتك، تأكد من أن صور الخدمة تلبّي الحد الأدنى من الإصدارات:
- reachy2-core >= 1.7.5.2
- webrtc >= 2.0.1.1
ثم، إذا كنت ترغب في استخدام التشغيل عن بُعد عبر الواقع الافتراضي:
- قم بتثبيت تطبيق التشغيل عن بُعد Reachy 2. استخدم الإصدار >=v1.2.0
نوصي باستخدام حاسوبين: أحدهما للتشغيل عن بُعد (يتطلب نظام Windows) والآخر للتسجيل باستخدام LeRobot.
تثبيت LeRobot
اتبع تعليمات التثبيت لتثبيت LeRobot.
قم بتثبيت LeRobot مع تبعيات Reachy 2:
pip install -e ".[reachy2]"الخطوة 1: التسجيل
الحصول على عنوان IP لجهاز Reachy 2
قبل بدء التشغيل عن بُعد وتسجيل البيانات، ابحث عن عنوان IP للروبوت. نوصي بشدة بتوصيل جميع الأجهزة (الحاسوب الشخصي والروبوت) عبر Ethernet.
تسجيل الإطلاق
استخدم أمر lerobot-record في LeRobot لإدارة جلسات التسجيل. لم يعد سير عمل pollen_data_acquisition_server الموثّق سابقًا هنا متاحًا.
عند استخدام تطبيق التشغيل عن بُعد عبر الواقع الافتراضي Reachy 2، اختر “جلسة قياسية”. يتحكم تطبيق الواقع الافتراضي في حركة الروبوت، بينما يتولى lerobot-record إدارة مجموعة البيانات وبدء الحلقات وإيقافها.
التسجيل باستخدام lerobot-record
يتم دعم Reachy 2 بالكامل من خلال ميزات التسجيل في LeRobot.
مثال: بدء تسجيل دون القاعدة المحمولة: أضف أولاً reachy2 و reachy2_teleoperator إلى الاستيرادات في سكربت التسجيل. ثم يمكنك استخدام الأمر التالي:
lerobot-record \
--robot.type=reachy2 \
--robot.ip_address=192.168.0.200 \
--robot.id=r2-0000 \
--robot.use_external_commands=true \
--robot.with_mobile_base=false \
--teleop.type=reachy2_teleoperator \
--teleop.ip_address=192.168.0.200 \
--teleop.with_mobile_base=false \
--robot.with_torso_camera=true \
--dataset.repo_id=pollen_robotics/record_test \
--dataset.single_task="Reachy 2 recording test" \
--dataset.num_episodes=1 \
--dataset.episode_time_s=5 \
--dataset.fps=15 \
--dataset.push_to_hub=true \
--dataset.private=true \
--dataset.streaming_encoding=true \
--dataset.encoder_threads=2 \
# --dataset.rgb_encoder.vcodec=auto \
--display_data=trueخيارات محددة
نظرة عامة على الإعداد الموسّع (مع تضمين جميع الخيارات):
lerobot-record \
--robot.type=reachy2 \
--robot.ip_address=192.168.0.200 \
--robot.use_external_commands=true \
--robot.with_mobile_base=true \
--robot.with_l_arm=true \
--robot.with_r_arm=true \
--robot.with_neck=true \
--robot.with_antennas=true \
--robot.with_left_teleop_camera=true \
--robot.with_right_teleop_camera=true \
--robot.with_torso_camera=false \
--robot.camera_width=640 \
--robot.camera_height=480 \
--robot.disable_torque_on_disconnect=false \
--robot.max_relative_target=5.0 \
--teleop.type=reachy2_teleoperator \
--teleop.ip_address=192.168.0.200 \
--teleop.use_present_position=false \
--teleop.with_mobile_base=false \
--teleop.with_l_arm=true \
--teleop.with_r_arm=true \
--teleop.with_neck=true \
--teleop.with_antennas=true \
--dataset.repo_id=pollen_robotics/record_test \
--dataset.single_task="Reachy 2 recording test" \
--dataset.num_episodes=1 \
--dataset.episode_time_s=5 \
--dataset.fps=15 \
--dataset.push_to_hub=true \
--dataset.private=true \
--dataset.streaming_encoding=true \
--dataset.encoder_threads=2 \
# --dataset.rgb_encoder.vcodec=auto \
--display_data=true--robot.use_external_commands
حدد ما إذا كانت LeRobot robot.send_action() ترسل أوامر إلى الروبوت. يجب تعيينها إلى false أثناء استخدام تطبيق التشغيل عن بُعد عبر الواقع الافتراضي، حيث يرسل التطبيق أوامرًا بالفعل.
--teleop.use_present_position
حدد ما إذا كان المشغّل عن بُعد يقرأ الهدف أو الموضع الحالي للروبوت. يجب ضبطه على true إذا تم استخدام Reachy 2 متوافق للتحكم في روبوت آخر.
استخدم الأجزاء ذات الصلة
من اختباراتنا الأولية، يمكن أن يؤدي تسجيل جميع المفاصل عندما تتحرك بعض المفاصل فقط إلى تقليل جودة النموذج مع بعض السياسات. لتجنب ذلك، يمكنك استبعاد أجزاء محددة من التسجيل وإعادة التشغيل باستخدام:
--robot.with_<part>=falseحيث يكون <part> أحد ما يلي: mobile_base، l_arm، r_arm",neck,antennas`.
يحدد ما إذا كان الجزء المقابل مسجلاً في الملاحظات. القيمة الافتراضية هي True إذا لم يتم تعيينه.
بشكل افتراضي، تُسجَّل جميع الأجزاء.
يتوفر نفس الآلية لكل جزء في reachy2_teleoperator أيضاً.
--teleop.with\_<part>
حيث يكون <part> أحد ما يلي: mobile_base، l_arm، r_arm",neck,antennas`.
حدد ما إذا كانت الأجزاء المقابلة مسجلة في الإجراءات. تكون القيمة صحيحة (True) إذا لم يتم ضبطها.
مهم: في الجلسة المحددة، يجب أن تتطابق الأجزاء المفعّلة على كلٍّ من الروبوت ومشغّل التحكم عن بُعد. على سبيل المثال، إذا كان الروبوت يعمل مع
--robot.with_mobile_base=false، فيجب على مشغّل التحكم عن بُعد تعطيل الجزء نفسه--teleoperator.with_mobile_base=false.
استخدم الكاميرات ذات الصلة
يمكنك القيام بنفس الشيء بالنسبة إلى الكاميرات. فعّل أو عطّل كل كاميرا باستخدام المعلمات الافتراضية عبر:
--robot.with_left_teleop_camera=<true|false> \
--robot.with_right_teleop_camera=<true|false> \
--robot.with_torso_camera=<true|false>بشكل افتراضي، لا يتم تسجيل أي كاميرا، حيث تُضبط جميع معاملات الكاميرا على false.
إذا رغبت في ذلك، يمكنك استخدام معاملات width وheight مخصصة لكاميرات Reachy 2 باستخدام الحجة --robot.camera_width & --robot.camera_height:
--robot.camera_width=1920 \ --robot.camera_height=1080
سيؤدي هذا إلى تغيير دقة جميع كاميرات الروبوت الثلاث الافتراضية (المُفعَّلة بواسطة حقائق bool المذكورة أعلاه).
إذا أردت، يمكنك إضافة كاميرات إضافية بخلاف الكاميرات الموجودة في الروبوت بالطريقة المعتادة باستخدام:
--robot.cameras="{ extra: {type: opencv, index_or_path: 42, width: 640, height: 480, fps: 30}}" \الخطوة 2: إعادة التشغيل
تأكد من أن الروبوت مُهيأ بنفس الأجزاء الموجودة في مجموعة البيانات:
lerobot-replay \
--robot.type=reachy2 \
--robot.ip_address=192.168.0.200 \
--robot.use_external_commands=false \
--robot.with_mobile_base=false \
--dataset.repo_id=pollen_robotics/record_test \
--dataset.episode=0الخطوة 3: التدريب
lerobot-train \
--dataset.repo_id=pollen_robotics/record_test \
--policy.type=act \
--output_dir=outputs/train/reachy2_test \
--job_name=reachy2 \
--policy.device=mps \
--trackio.enable=true \
--policy.repo_id=pollen_robotics/record_test_policyالخطوة 4: التقييم
lerobot-eval \
--robot.type=reachy2 \
--robot.ip_address=192.168.0.200 \
--dataset.repo_id=pollen_robotics/eval_record_test \
--dataset.single_task="Evaluate reachy2 policy" \
--dataset.num_episodes=10 \
--policy.path=outputs/train/reachy2_test/checkpoints/last/pretrained_modelالأقسام التي تم نقلها:
[ (اختياري لكن يُنصح به) تثبيت pollen_data_acquisition_server ]
[ الخيار 1: استخدام خادم Pollen لاكتساب البيانات (موصى به للتشغيل عن بُعد عبر الواقع الافتراضي) ]
[ الخيار 2: استخدام lerobot.record ]
Update on GitHub