دليل الإعداد
من إحضار حافلة CAN إلى الحلقة الأولى التي تم بثها عن بعد. يغطي Piper_sdk، وإطلاق ROS2، والتشغيل عن بعد لـ Meta Quest 3 VR.
يمكن إعداد الحافلة والمضيف
~15 دقيقةيتواصل AgileX Piper بشكل حصري CAN حافلة بسرعة 1 ميجابت في الثانية. أنت بحاجة إلى محول USB-to-CAN (على سبيل المثال، CANable، GS_USB) لعرض واجهة SwitchCAN على مضيف Linux الخاص بك.
إظهار واجهة CAN
قم بتوصيل محول USB إلى CAN، ثم قم بتشغيل:
# Set bitrate and bring up the CAN interface
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
# Verify the interface is active
ifconfig can0
piper_sdk يتضمن المستودع أ can_activate.sh المساعد. تشغيله على النحو التالي: bash can_activate.sh can0 1000000. هذا هو نفس البرنامج النصي الذي يستخدمه piper_ros.
can1, can2إلخ. استخدم ip link show لسرد جميع واجهات CAN وتمرير الاسم الصحيح إليها C_PiperInterface.
دعم نظام التشغيل
Ubuntu 18.04 و20.04 و22.04 هي الأنظمة الأساسية التي تم اختبارها رسميًا. مطلوب بايثون 3.6+.
قم بتثبيت Piper_sdk
~20 دقيقةال piper_sdk تتعامل مكتبة Python مع تأطير CAN وملاحظات الحالة المشتركة والتحكم في القابض. التثبيت من PyPI (مستحسن) أو من المصدر.
# Option A: Install from PyPI (recommended)
pip3 install piper_sdk
# Option B: Install from source
git clone https://github.com/agilexrobotics/piper_sdk.git
cd piper_sdk
pip install -e .
# Verify installation
python3 -c "import piper_sdk; print('piper_sdk OK')"
يتم تثبيت SDK تلقائيًا python-can باعتبارها تبعية لاتصالات حافلة CAN.
الاتصال والتمكين
ال C_PiperInterface الطبقة هي نقطة الدخول الرئيسية. بعد الاتصال، يجب تمكين الذراع قبل أن يقبل أوامر الحركة. EnableArm(7) تمكن جميع المفاصل الستة بالإضافة إلى القابض.
from piper_sdk import C_PiperInterface
# Initialize with the CAN interface name (default: "can0")
piper = C_PiperInterface("can0")
# Connect to the arm
piper.ConnectPort()
# Enable all joints (required before motion commands)
piper.EnableArm(7)
print("Piper connected and enabled.")
piper_sdk/demo/V2/. ابدأ بـ demo_joint_ctrl.py للتحقق من الحركة الأساسية قبل بناء حلقة التحكم الخاصة بك.
الحركة الأولى
~20 دقيقةمع توصيل الذراع وتمكينه، اقرأ حالة المفصل وأرسل أمر تحديد الموضع الأول.
قراءة الدولة المشتركة
import time
# Read joint angles in a polling loop
for _ in range(10):
joint_state = piper.GetArmJointMsgs()
print(joint_state)
time.sleep(0.1)
# Read end-effector pose
end_pose = piper.GetArmEndPoseMsgs()
print(end_pose)
إرسال أمر الموقف المشترك
# Move to a joint configuration (angles in degrees)
# Arguments: joint1, joint2, joint3, joint4, joint5, joint6
piper.MotionCtrl_2(
0, # joint 1
0, # joint 2
90, # joint 3
0, # joint 4
0, # joint 5
0 # joint 6
)
time.sleep(2) # wait for motion to complete
السيطرة على القابض
# Open gripper
piper.GripperCtrl(0, 1000)
# Close gripper (check your gripper's max value)
piper.GripperCtrl(70, 1000)
# Read gripper state
gripper_state = piper.GetArmGripperMsgs()
print(gripper_state)
piper.DisableArm(7) عند الانتهاء. يستجيب الذراع الممكّن فورًا لأي أمر، بما في ذلك الأوامر الخاطئة الناتجة عن الأخطاء أو الحزم المسقطة.
إعداد الذراع المزدوج (السيد والعبد).
بالنسبة للتكوينات اليدوية، قم بتوصيل جهازي Pipers على واجهات CAN المنفصلة:
piper_left = C_PiperInterface("can0")
piper_right = C_PiperInterface("can1")
piper_left.ConnectPort()
piper_right.ConnectPort()
piper_left.EnableArm(7)
piper_right.EnableArm(7)
print("Both arms connected.")
التكامل مع ROS2/MoveIt
~60 دقيقةال piper_ros توفر الحزمة برنامج تشغيل ROS Noetic كاملًا مع تخطيط حركة MoveIt ومحاكاة Gazebo. يلتف piper_sdk داخليًا ويكشف عن واجهات ROS القياسية.
تثبيت التبعيات
# Install required ROS packages
sudo apt-get install -y \
ros-noetic-moveit \
ros-noetic-ruckig \
ros-noetic-ompl
# Install Python CAN dependency
pip3 install python-can piper_sdk
يطلق
# Step 1: Activate CAN interface
bash can_activate.sh can0 1000000
# Step 2: Launch the Piper control node
roslaunch piper start_single_piper.launch
# For dual-arm:
roslaunch piper start_double_piper.launch
تخطيط MoveIt
# Launch MoveIt with RViz for interactive planning
roslaunch piper_moveit_config demo.launch
# Gazebo simulation (no physical arm required)
roslaunch piper piper_gazebo.launch
S-V1.6-3 تتطلب الإرث piper_description_old.urdf ملف. تستخدم البرامج الثابتة الأحدث المعيار piper_description.urdf. تحقق من ملصق إصدار البرنامج الثابت الموجود على قاعدة الذراع قبل تحميل نماذج ROS.
انظر صفحة المواصفات للحصول على جدول مواضيع وخدمات ROS الكامل.
ميتا كويست 3 VR عن بعد
~90 دقيقةيمكن التحكم في Piper في الوقت الفعلي باستخدام ميتا كويست 3 سماعة الرأس. تستخدم البنية UDP عبر شبكتك المحلية: يقوم Quest بتشغيل تطبيق Unity الذي يقوم بتدفق بيانات وضع اليد، ويقوم خادم Python على الكمبيوتر الشخصي الآلي بترجمة ذلك إلى أوامر Piper SDK.
بنيان
جانب التوحيد (VRHandPoseSender.cs, VRGripperController.cs, VRTeleoperationManager.cs) وطبقة UDP قابلة لإعادة الاستخدام بالكامل من إعدادات xArm - فقط وحدة التحكم في الروبوت هي التي تحتاج إلى التبديل.
خطوات الإعداد
-
ابدأ تشغيل واجهة CAN وقم بتمكين الذراع.
sudo ip link set can0 type can bitrate 1000000 sudo ip link set can0 up -
إنشاء أ
PiperControllerالتفافC_PiperInterface. استبدلXArmControllerفئة في مكدس العمليات عن بعد الحالي الخاص بك مع ملف جديدpiper_controller.py. ينفذconnect(),set_pose(x, y, z, roll, pitch, yaw),set_gripper(value)، وemergency_stop()باستخدام مكالمات Piper_sdk. -
قم بتشغيل خادم Python UDP على جهاز الكمبيوتر الآلي.
يستمع الخادم على منافذ UDP 8888/8889 ويعيد توجيه حزم وضع اليد المستلمة إلى Piper.python3 teleoperation_main.py --robot-type piper -
قم بتشغيل تطبيق Unity على Quest 3 واتصل بعنوان IP الخاص بالكمبيوتر.
يُعدِّل
positionOffset,rotationOffset، وscaleFactorفي Unity لتتناسب مع مساحة عمل Piper. تختلف هذه المعلمات عن xArm بسبب مظروف الوصول الأصغر لـ Piper.
scaleFactor في الوحدة لمنع الذراع من الوصول إلى حدود المفصل أثناء التشغيل عن بعد. ابدأ بمقياس متحفظ ثم قم بالزيادة تدريجيًا مع مراقبة زوايا المفصل.
جمع البيانات
مستمربمجرد أن تعمل عملية التشغيل عن بعد، استخدم منصة SVRC لتسجيل عروض التلاعب وتسميتها وتصديرها.
- قم بتسجيل الحلقات التي تم بثها عن بعد عبر خادم Python UDP أو مباشرة من خلاله
piper_rosتسجيل الحقيبة - تصدير في RLDS أو ليروبوت نموذج للتدريب على السياسات النهائية
- استخدم منصة SVRC لإدارة مجموعات البيانات، وإجراء فحوصات الجودة، وتدريب نماذج ACT أو سياسة الانتشار
piper.GetArmJointMsgs() و piper.GetArmEndPoseMsgs() عند ~ 50 هرتز في خيط الخلفية لالتقاط حالة المفصل والمستجيب النهائي المتزامنة أثناء التشغيل عن بعد.