دليل إعداد OpenArm 101
اتبع هذا المسار بدءًا من فتح العلبة وحتى أول حركة مدربة على الذكاء الاصطناعي. يستغرق حوالي 4-5 ساعات في المجموع.
فتح العلبة والتحقق من السلامة
⏱ ~30 دقيقةقبل أن تبدأ
- تأكد من أن لديك مساحة عمل واضحة تبلغ 1 م × 1 م على سطح ثابت
- احصل على جهاز كمبيوتر محمول مزود بنظام Ubuntu 22.04 جاهز (يعمل VM، ويفضل أن يكون أصليًا)
- حافظ على قوة الذراع عن أثناء الفحص البدني أدناه
في الصندوق
قائمة التفتيش
- جميع المفاصل الثمانية تدور بحرية (بدون طحن أو مقاومة)
- توجيه الكابل سليم على طول جسم الذراع
- موصل الطاقة غير تالف
- التوقف في حالات الطوارئ يمكن الوصول إليه وعملي
- لا تصل أبدًا إلى مساحة العمل أثناء تشغيل الذراع
- قم دائمًا بإيقاف التشغيل قبل ضبط الكابلات أو إجراء تغييرات على الأجهزة
- أبقِ الأطفال والحيوانات الأليفة بعيدًا أثناء التشغيل
- قم بتثبيت القاعدة على سطح ثابت قبل التشغيل لأول مرة
بيئة البرمجيات وتكوين CAN
⏱ ~60 دقيقةمتطلبات النظام
- Ubuntu 22.04 LTS (مستحسن) أو 20.04
- بايثون 3.10+
- ROS2 متواضع
- محول USB-CAN (CANable أو متوافق - يجب أن يدعم CAN FD لمعدل بيانات كامل يبلغ 5 ميجابت/ثانية)
الخطوة 2 أ - تكوين معرف المحرك
قبل إعداد أي برنامج، يجب تعيين معرف CAN لكل محرك من محركات Damiao. هذه خطوة لمرة واحدة يتم إجراؤها على نظام التشغيل Windows باستخدام Damiao USB CAN Debugger.
استخدم الجدول أدناه كتخصيص معرف أساسي لكل مفصل (J1 – J8):
| مشترك | معرف الارسال | معرف المتلقي |
|---|---|---|
| J1 | 0x01 | 0x11 |
| J2 | 0x02 | 0x12 |
| J3 | 0x03 | 0x13 |
| J4 | 0x04 | 0x14 |
| J5 | 0x05 | 0x15 |
| J6 | 0x06 | 0x16 |
| J7 | 0x07 | 0x17 |
| J8 | 0x08 | 0x18 |
الخطوة 2 ب – تثبيت حزم OpenArm
على جهاز Ubuntu الخاص بك، قم بتثبيت جميع الحزم المطلوبة من OpenArm PPA الرسمي:
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:openarm/main
sudo apt update
sudo apt install -y \
can-utils \
iproute2 \
libeigen3-dev \
libopenarm-can-dev \
liborocos-kdl-dev \
liburdfdom-dev \
liburdfdom-headers-dev \
libyaml-cpp-dev \
openarm-can-utils
الخطوة 2ج - إعداد واجهة CAN (CAN FD)
تدعم محركات OpenArm كلاً من CAN 2.0 وCAN FD. يوصى باستخدام CAN FD — يقوم بتشغيل مرحلة البيانات بسرعة 5 ميجابت/ثانية ويدعم حمولات تصل إلى 64 بايت، وهي مطلوبة لعرض النطاق الترددي الكامل لمحرك Damiao.
| وضع | الباود الاسمي | باود البيانات | الحمولة |
|---|---|---|---|
| يمكن 2.0 | 1 ميجابت/ثانية | — | 8 بايت |
| يمكن فد | 1 ميجابت/ثانية | 5 ميجابت/ثانية | ما يصل إلى 64 بايت |
موصى به - استخدم مساعد OpenArm:
# CAN FD, 1M nominal / 5M data (recommended for single arm)
openarm-can-configure-socketcan can0 -fd -b 1000000 -d 5000000
# CAN 2.0 fallback (1M baud, no FD)
openarm-can-configure-socketcan can0
# 4-arm bimanual setup (can0–can3)
openarm-can-configure-socketcan-4-arms -fd
# Verify the interface is UP
ip link show can0
أوامر ارتباط IP اليدوية (في حالة عدم استخدام المساعد):
# CAN 2.0
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
# CAN FD — 1M nominal / 5M data
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on
sudo ip link set can0 up
can0. يستخدم الإعداد ثنائي can0 (الزعيم الأيمن) + can1 (الزعيم الأيسر) + can2 (التابع الصحيح) + can3 (تابع اليسار).
الخطوة 2 د - أوامر التحكم في المحركات وتصحيح الأخطاء
استخدم هذه cansend أوامر لتصحيح الأخطاء ذات المستوى المنخفض. راقب الحافلة أولاً قبل إرسال أي أوامر:
# Monitor all CAN frames
candump -x can0
# Change motor baudrate (replace 1 with target motor CAN ID)
openarm-can-change-baudrate --baudrate 5000000 --canid 1 --socketcan can0
# Persist across power cycles (max ~10,000 flash writes per motor — use sparingly)
openarm-can-change-baudrate --baudrate 5000000 --canid 1 --socketcan can0 --flash
يمكن 2.0 التحكم في المحركات - يستبدل 001 مع معرف جهاز الإرسال الخاص بالمفصل المستهدف من الجدول أعلاه:
# Clear motor error
cansend can0 001#FFFFFFFFFFFFFFFB
# Enable motor
cansend can0 001#FFFFFFFFFFFFFFFC
# Disable motor
cansend can0 001#FFFFFFFFFFFFFFFD
يمكن FD التحكم في المحركات - لاحظ الاضافي #1 بعد ## (علم BRS):
# Clear motor error
cansend can0 001##1FFFFFFFFFFFFFFFB
# Enable motor
cansend can0 001##1FFFFFFFFFFFFFFFC
# Disable motor
cansend can0 001##1FFFFFFFFFFFFFFFD
--flash يستمر العلم في تغيير معدل الباود - يدعم كل محرك ما يصل إلى 10000 دورة كتابة فلاش كحد أقصى.
حالة LED للمحرك
يحتوي كل محرك من محركات Damiao على مؤشر LED يشير إلى الحالة الحالية. استخدم هذا كفحص صحي سريع بعد التشغيل:
| نمط الصمام | معنى |
|---|---|
| أخضر (ثابت) | المحرك ممكّن وجاهز |
| أحمر (ثابت) | المحرك معطل |
| أحمر (وامض) | حالة خطأ المحرك — أرسل أمر Clear Error قبل إعادة التمكين |
الخطوة 2 هـ - تثبيت حزم ROS2
sudo apt install ros-humble-ros2-control ros-humble-ros2-controllers
git clone https://github.com/enactic/openarm_ros2
cd openarm_ros2 && colcon build
تثبيت بايثون SDK
pip install roboticscenter
python -c "import roboticscenter; print('SDK ready')"
الحركة الأولى
⏱ ~30 دقيقةابدأ بالأجهزة المزيفة (آمنة — بدون حركة جسدية)
تحقق دائمًا من المحاكاة قبل تحريك الذراع الحقيقية. قم بتشغيل ملف الإطلاق باستخدام use_fake_hardware:=true - لا حاجة إلى اتصال CAN:
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=true
ros2 run openarm_ros2 test_trajectory
افتح RViz للتحقق من تحرك الذراع المحاكى خلال مسار الاختبار بشكل صحيح. يجب أن تتحرك جميع المفاصل الثمانية بسلاسة.
قم بالتبديل إلى الأجهزة الحقيقية
بمجرد أن تبدو المحاكاة صحيحة، قم بتوصيل محول CAN وقم بتشغيل الذراع:
ros2 launch openarm_ros2 openarm.launch.py
إرسال أمر الحركة الأولى (الموضع الرئيسي)
ros2 action send_goal /joint_trajectory_controller/follow_joint_trajectory \
control_msgs/action/FollowJointTrajectory "{...}"
المعايرة والتوجيه
⏱ ~45 دقيقةيجب أن تتطابق مواضع الصفر المشتركة مع الواقع المادي للتحكم الدقيق. تتسبب الوصلات التي تمت معايرتها بشكل خاطئ في فشل السياسة – لا تتخطى هذه الخطوة.
إجراء صاروخ موجه
- قم بالتشغيل والذراع في وضع آمن معروف (ممتد تقريبًا، بعيدًا عن العوائق)
- تشغيل البرنامج النصي صاروخ موجه:
ros2 run openarm_ros2 homing - سيطالبك البرنامج النصي بتوجيه كل مفصل يدويًا إلى نقطة توقفه الصلبة - تحرك ببطء
- تأكد من حفظ موضع الصفر لكل مفصل عند المطالبة بذلك
التحقق من المعايرة
ros2 topic echo /joint_states # check all positions read near zero
التشغيل عن بعد
⏱ ~60 دقيقةاختر جهاز المشغل الخاص بك
يد ووجي
الأفضل لمهام البراعة والتلاعب الدقيق
وحدة تحكم الواقع الافتراضي
Meta Quest / Steam VR — جيد للمهام المكانية
لوحة المفاتيح / لوحة الألعاب
للاختبار الأساسي وتحديد المواقع الخشنة
قم بتوصيل جهاز المشغل
ros2 launch openarm_ros2 teleop.launch.py operator:=wuji_hand
تحقق من الكمون
زمن الوصول المستهدف من طرف إلى طرف أقل من 50 مللي ثانية. قم بإجراء اختبار زمن الوصول وتحقق مما يلي:
ros2 run openarm_ros2 latency_check
جمع البيانات
⏱ مستمراختر تنسيق البيانات
- ليروبوت (موصى به) - مصمم خصيصًا للتعلم بالتقليد والتدريب النموذجي
- RLDS - متوافق مع Open-X-Embodiment ومجموعات البيانات عبر الروبوتات
ابدأ التسجيل
ros2 launch openarm_ros2 record.launch.py \
output_format:=lerobot \
task_name:=pick_and_place \
episode_id:=0
يتم حفظ كل حلقة كملف مستقل به حالات مشتركة وإطارات الكاميرا وتسميات الأحداث. قم بتشغيل حلقات متعددة، ثم استخدم منصة SVRC للمراجعة والتصفية.
قائمة التحقق من جودة الحلقة
- تتم مزامنة خلاصات الكاميرا (الطوابع الزمنية خلال 5 مللي ثانية)
- الحالات المشتركة المسجلة عند ≥50 هرتز
- تتطابق تسميات الإجراءات مع السلوك الموضح
- يتم وضع علامة على الحلقات الفاشلة للاستبعاد، ولا يتم حذفها
is_failure:=true - يمكن للمنصة استخدامها للتعلم المتباين أو التصفية.
تدريب ونشر نموذج الذكاء الاصطناعي
⏱ مستمرالنماذج الموصى بها لـ OpenArm
- ACT (محول تقطيع العمل) - الأفضل للاختيار والمكان. يتنبأ بأجزاء العمل من ملاحظات الكاميرا.
- سياسة الانتشار - الأفضل للمهام الغنية بالاتصال. يولد مسارات سلسة عن طريق تقليل الضوضاء.
- OpenVLA - الأفضل للمهام المشروطة باللغة. يجمع بين فهم لغة الرؤية وإجراءات الروبوت.
قم بضبط ACT على بياناتك
pip install lerobot
python train.py --config act_openarm --data-path ./recordings/
عادةً ما يستغرق التدريب على وحدة معالجة الرسومات (RTX 3090 أو أفضل) للمستهلك من 2 إلى 4 ساعات لعدد 50 حلقة. استخدم --resume العلم للمتابعة من نقطة تفتيش.
نشر على الحافة
ros2 launch openarm_ros2 inference.launch.py \
model_path:=./checkpoints/best.pt
تقرأ عقدة الاستدلال إطارات الكاميرا، وتقوم بتشغيل النموذج، وتنشر أوامر مشتركة بتردد التحكم. زمن الوصول للاستدلال المستهدف أقل من 20 مللي ثانية للتحكم في الوقت الفعلي.
لقد أكملت مسار الإعداد الكامل!
تتم معايرة OpenArm الخاص بك وتشغيله عن بعد وجمع البيانات وتشغيل الذكاء الاصطناعي. شارك ما قمت ببنائه مع المجتمع.