دليل إعداد دامياو AGV
من فتح العلبة إلى القيادة من متصفحك. يغطي سلامة فتح العلبة، والشحن، والبرمجيات، والتشغيل عن بعد، والملاحة المستقلة، وتركيب الذراع.
فتح العلبة والتحقق من السلامة
فحص AGV وإعداد مساحة العمل
- قم بإزالة العبوة. قم بإزالة جميع الحشوات الرغوية وروابط الكابلات وقيود الشحن بعناية. افحص العجلات للتأكد من عدم وجود تلف أثناء الشحن - يجب أن تدور جميع العجلات الميكانيكية الأربعة بحرية باليد.
- فحص الموصلات. تأكد من تثبيت جميع موصلات الكابلات الموجودة على وحدة التحكم الرئيسية. أحيانًا يؤدي اهتزاز الشحن إلى فك موصلات JST أو Deans.
- تخليص مساحة العمل. قبل أي تشغيل، قم بإخلاء ما لا يقل عن 2 متر من المساحة المفتوحة في جميع الاتجاهات. يمكن لمركبة AGV أن تتسارع بسرعة، ويجب على المارة الوقوف في الخلف أثناء اختبارات الحركة الأولى.
- توقف اضطراري. حدد موقع مفتاح قطع الطاقة الرئيسي بالهيكل. تعرف على كيفية الوصول إليه قبل التشغيل. في الجلسة الأولى، احتفظ بيد واحدة بالقرب من القطع في جميع الأوقات.
- فحص السطح. تتطلب عجلات الميكانوم سطحًا صلبًا ومسطحًا (خرسانة أو أرضيات خشبية أو بلاط أملس) للحصول على أداء صحيح متعدد الاتجاهات. يقلل السجاد والأسطح غير المستوية من سلطة التحكم الجانبي بشكل كبير.
شحن البطارية وتشغيلها
اشحن مجموعة البطارية بالكامل قبل الاستخدام الأول
- قم بتوصيل الشاحن. حدد موقع منفذ شحن البطارية على هيكل AGV (عادةً موصل أسطواني كبير أو منفذ XT60). قم بتوصيل شاحن التوازن المرفق. قم بتوصيل الشاحن بمنفذ مؤرض 110/220 فولت.
- شحن كامل. اسمح للبطارية بالشحن بالكامل قبل الاستخدام الأول — عادةً ما بين 2 إلى 4 ساعات حسب الحالة الأولية. سيتحول مؤشر LED الخاص بالشاحن إلى اللون الأخضر (أو يتوقف عن الوميض) عند اكتماله. لا تترك دون مراقبة أثناء الشحن الأول.
- تحقق من جهد البطارية. بعد الشحن، يجب قراءة جهد البطارية عند المستوى الاسمي المشحون بالكامل (تحقق من ملصق حزمة البطارية). استخدم مقياسًا متعددًا أو الشاشة الموجودة على اللوحة إذا كانت مجهزة بذلك.
- السلطة على التسلسل. قم بتوصيل البطارية بوحدة التحكم الرئيسية. تبديل مفتاح الطاقة الرئيسي. يجب أن يتم تشغيل وحدة التحكم خلال 5 إلى 10 ثوانٍ، وستستقر مؤشرات LED. لا ترسل أوامر الحركة أثناء التمهيد.
البرمجيات ومكدس الملاحة ROS2
قم بتثبيت وكيل Python وحزم ROS2 الاختيارية على جهاز الكمبيوتر الخاص بك
ال dami_agent.py البرنامج النصي هو الجسر الأساسي بين منصة Fearless Platform وأجهزة AGV. يتطلب Python 3.8+ وحزمتين.
# Install dependencies pip install pyserial websockets # Confirm your USB-to-TTL adapter appears ls /dev/ttyUSB* # Linux # Add your user to the dialout group (Linux) if you get permission errors sudo usermod -aG dialout $USER # Log out and back in for group change to take effect
قم بتوصيل محول USB إلى TTL: قم بتوصيل المحول TX قم بتثبيته على وحدة التحكم الرئيسية AGV UART5_RX (دبوس PD2). قم بتوصيل GND إلى GND. لا تقم بتوصيل دبوس RX الخاص بالمحول أو 5 فولت بـ AGV.
لتكامل ROS2، قم بتثبيت حزمة التنقل:
# ROS2 Humble (Ubuntu 22.04) — adjust for your distro
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup ros-humble-slam-toolbox
python3 dami_agent.py --session RC-XXXX-XXXX --mock
يتخطى الوضع الوهمي عملية فتح المنفذ التسلسلي. يتم تشغيل جميع عمليات تحليل أوامر WebSocket وإعادة توجيه القياس عن بعد ومنطق أمان المهلة بشكل مماثل.
التشغيل عن بعد
قم بقيادة AGV من متصفحك عبر منصة Fearless Platform
- يفتح platform.roboticscenter.ai، وانتقل إلى قسم Teleop، وقم بإنشاء جلسة جديدة. انسخ معرف الجلسة (التنسيق:
RC-XXXX-XXXX). - قم بتشغيل الوكيل باستخدام المنفذ التسلسلي ومعرف الجلسة:
python3 dami_agent.py \ --session RC-XXXX-XXXX \ --serial-port /dev/ttyUSB0 \ --backend ws://localhost:8000
- يتصل الوكيل بالمنصة، ويسجل عقدة AGV باسم
device_type: "mobile_base"، وتبدأ حلقة التحكم عند 30 هرتز. - افتح عنوان URL للجلسة في متصفحك. استخدم عناصر التحكم الاتجاهية للإرسال
moveالأوامر. يستجيب AGV ضمن علامة حلقة تحكم واحدة (33 مللي ثانية عند 30 هرتز).
أنواع الأوامر التي يقبلها الوكيل:
# Move forward along X axis {"type": "move", "axis": "x", "dir": 1} # Move laterally right (Y axis) {"type": "move", "axis": "y", "dir": 1} # Rotate counter-clockwise (Z axis) {"type": "move", "axis": "z", "dir": -1} # Stop all motion immediately {"type": "stop"} # Goal-based delta movement {"type": "goal", "delta": {"x": 0.5, "y": 0.0, "yaw": 0.0}}
لضبط سرعة الحركة، استخدم --amp المعلمة (الافتراضي 660، النطاق الموصى به 500-760). القيم الأعلى تنتج حركة أسرع:
python3 dami_agent.py --session RC-XXXX-XXXX --serial-port /dev/ttyUSB0 --amp 500
إذا تحرك AGV في الاتجاه الخاطئ، استخدم --invert-x, --invert-y، أو --invert-z لقلب المحاور دون أي تغيير في البرامج الثابتة.
إعداد التنقل المستقل
قم بتكوين ROS2 nav2 وSLAM ومتابعة نقطة الطريق
بالنسبة للملاحة الذاتية، انشر بيانات قياس المسافة والمستشعر (من كاميرا LiDAR أو كاميرا العمق على AGV) إلى موضوعات ROS2، ثم استخدم nav2 لتخطيط المسار.
# Launch SLAM Toolbox for mapping ros2 launch slam_toolbox online_async_launch.py # In a second terminal — launch nav2 with the AGV base footprint ros2 launch nav2_bringup navigation_launch.py \ params_file:=/path/to/your/agv_nav2_params.yaml # Send a navigation goal via CLI ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose \ "{pose: {header: {frame_id: map}, pose: {position: {x: 1.0, y: 0.5}, orientation: {w: 1.0}}}}"
معلمات nav2 الرئيسية لضبط Damiao AGV:
- robot_radius — اضبط على نصف عرض AGV بالإضافة إلى هامش الأمان (عادةً 0.4–0.6 متر).
- max_vel_x / max_vel_y - تعيين على أساس الخاص بك
--ampالقيمة والسرعة القصوى المقاسة. ابدأ بشكل متحفظ (0.3 م/ث). - max_vel_theta - الحد الأقصى لسرعة الدوران. قياس مع بطيء
--amp 400الاختبار أولا. - com.holonomic — اضبط على
trueفي مخطط DWB المحلي لتمكين تخطيط الحركة الجانبية (مطلوب للعجلات الميكانيكية/الأومنية).
تركيب ذراع الروبوت
قم بتثبيت OpenArm أو DK1 على اللوحة العلوية وقم بتسجيل كليهما في جلسة منصة واحدة
تم تصميم اللوحة العلوية لـ Damiao AGV لقبول الشفاه القياسية لقاعدة ذراع الروبوت. تغطي هذه الخطوة التكامل الفعلي وإعداد الجلسة متعددة العقد لـ Fearless Platform.
التركيب الجسدي
- قم بإيقاف تشغيل AGV والذراع قبل أي عمل ميكانيكي.
- ضع لوحة قاعدة ذراع الروبوت فوق فتحات تثبيت اللوحة العلوية AGV. استخدم مسامير رأس المقبس M6 المتوفرة (أو M5 للأذرع الأخف وزنًا). تطبيق مركب قفل الخيط على جميع السحابات.
- قم بتوجيه طاقة الذراع وكابلات CAN/USB لأسفل من خلال قناة إدارة الكابلات في اللوحة العلوية إلى حجرة هيكل AGV. آمن برباطات الكابلات - اترك ما يكفي من الارتخاء لمساحة العمل الكاملة للذراع دون سحب.
- قم بتشغيل الذراع من بطارية منفصلة أو مصدر منظم في هيكل AGV. لا تشارك بطارية محرك AGV مع وحدة التحكم في الذراع دون العزل المناسب.
جلسة منصة متعددة العقد
قم بتشغيل كلا الوكلاء الذين يشيرون إلى نفس معرف الجلسة. يقومون بالتسجيل كعقد مستقلة ويسجل النظام كلا التدفقين بشكل متزامن:
# Terminal 1 — AGV agent python3 dami_agent.py \ --session RC-XXXX-XXXX \ --serial-port /dev/ttyUSB0 \ --node-id damiao-base # Terminal 2 — OpenArm agent (example) python3 openarm_agent.py \ --session RC-XXXX-XXXX \ --can-interface can0 \ --node-id openarm-right
في لوحة Fearless Platform teleop، تظهر كلا العقدتين. يمكن للمشغلين إرسال أوامر الحركة إلى AGV (المحور x/y/z) وتسليح الأوامر بشكل مستقل في نفس الجلسة. يلتقط تسجيل الحلقة القياس عن بعد لجميع العقد في أرشيف JSONL واحد - مسار المعالجة المحمول الكامل بما في ذلك السرعة الأساسية ومواضع مفصل الذراع، والتي تتم مزامنتها بواسطة الطابع الزمني.
يمكن تكوين الحافلات والمحرك
قم بتكوين ناقل CAN FD وقم بتعيين معرفات المحرك لأي مشغلات Damiao المثبتة على AGV
عندما يتم تركيب ذراع OpenArm أو DK1 على اللوحة العلوية لـ AGV، تتواصل محركات Damiao QDD الخاصة بها عبر ناقل CAN FD من الكمبيوتر الموجود على اللوحة. يغطي هذا القسم تشغيل الحافلة، وتعيين معرف المحرك، وأوامر التشغيل، وتشخيصات LED.
قم بتثبيت can-utils
# Install SocketCAN utilities (Ubuntu / Debian)
sudo apt update && sudo apt install -y can-utils
أظهر واجهة CAN FD
يعتبر CAN FD بمعدل 1 ميجابت/ثانية اسمية + 5 ميجابت/ثانية هو الوضع الموصى به لجميع عمليات النشر الجديدة:
# Bring interface down first if already up sudo ip link set can0 down # Configure CAN FD: 1M nominal baud, 5M data baud, FD mode enabled sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on # Bring interface up sudo ip link set can0 up # Verify — output should show "fd on" ip link show can0
إذا كان OpenArm PPA مثبتًا لديك، فسيقوم البرنامج النصي المساعد بتغليف هذه الأوامر:
# CAN FD single arm openarm-can-configure-socketcan can0 -fd -b 1000000 -d 5000000 # Classic CAN 2.0 (legacy / compatibility) openarm-can-configure-socketcan can0
مراقبة الحافلة
# Dump all CAN frames — verify connectivity before sending commands candump -x can0 # Dump with timestamps candump -td can0
تعيين معرف المحرك (J1 – J8)
يجب أن يحتوي كل محرك Damiao الموجود على ناقل CAN على زوج فريد من المعرفات: معرف جهاز الإرسال (المضيف → المحرك) ومعرف جهاز الاستقبال (المحرك → المضيف). يتم تكوين المعرفات باستخدام أداة تصحيح أخطاء Damiao Windows قبل تجميع الذراع. رسم الخرائط القياسية OpenArm:
| مشترك | نموذج المحرك | معرف TX (المضيف → المحرك) | معرف RX (المحرك → المضيف) |
|---|---|---|---|
| J1 — دوران القاعدة | ماركا-J4340p-2EC | 0x01 | 0x11 |
| J2 - خطوة الكتف | ماركا-J4340p-2EC | 0x02 | 0x12 |
| J3 - لفة الكتف | ماركا-J4340p-2EC | 0x03 | 0x13 |
| J4 - خطوة الكوع | DM-J4340-2EC | 0x04 | 0x14 |
| J5 - لفة الكوع | DM-J4340-2EC | 0x05 | 0x15 |
| J6 - خطوة المعصم | DM-J4340-2EC | 0x06 | 0x16 |
| J7 - لفة المعصم | DM-J4310-2EC V1.1 | 0x07 | 0x17 |
| J8 - القابض | DM-J4310-2EC V1.1 | 0x08 | 0x18 |
تكون المعرفات فريدة لكل ناقل CAN، وليس عالميًا. يستخدم الإعداد الثنائي (ذراعين) حافلة ثانية - can1 - بنفس نظام المعرف.
يمكن إرسال أوامر الاختبار
يستخدم cansend للتكليف على مستوى منخفض. يستبدل 001 بمعرف TX السداسي للمفصل المستهدف (على سبيل المثال، 002 ل J2).
## CAN FD commands (use when interface has "fd on") # Enable motor — motor holds position and accepts commands cansend can0 001##1FFFFFFFFFFFFFFFC # Disable motor — motor becomes free-wheeling cansend can0 001##1FFFFFFFFFFFFFFFD # Clear motor error — required before re-enabling after a fault cansend can0 001##1FFFFFFFFFFFFFFFB ## CAN 2.0 equivalents (use when interface is classic CAN, no fd on) cansend can0 001#FFFFFFFFFFFFFFFC # Enable cansend can0 001#FFFFFFFFFFFFFFFD # Disable cansend can0 001#FFFFFFFFFFFFFFFB # Clear error
##1 بناء جملة CAN FD عندما تم تكوين الواجهة باستخدام fd on، والمفردة # بناء الجملة الكلاسيكي لـ CAN 2.0. سيؤدي خلط أنواع الإطارات على نفس الناقل إلى حدوث أخطاء في الناقل.
مؤشرات حالة LED
يحتوي كل محرك من محركات Damiao على مصباح LED واحد يمكن رؤيته من خلال نافذة الهيكل:
| نمط الصمام | ولاية | الإجراء مطلوب |
|---|---|---|
| أخضر (ثابت) | المحرك ممكّن وجاهز | لا شيء - المحرك نشط ويقبل الأوامر |
| أحمر (ثابت) | المحرك معطل (يعمل بالطاقة، غير ممكّن) | أرسل أمر تمكين لتنشيط المحرك |
| أحمر (وامض) | خطأ المحرك / حالة الخطأ | أرسل أمر مسح الخطأ، وتحقق من السبب، ثم أعد التمكين |
أسباب الأخطاء الشائعة: التيار الزائد (تقليل المكاسب أو الحمل)، درجة الحرارة الزائدة (السماح بالتبريد)، خطأ في التشفير (إعادة تثبيت الكابلات)، انخفاض الجهد الكهربي (الإمداد أقل من ~ 18 فولت على نظام 24 فولت)، انقطاع ناقل CAN (التحقق من الإنهاء والأسلاك).
فلاش كتابة تحذيرات
--flash انتقل إلى ذاكرة الوصول العشوائي (RAM) فقط ولا تستهلك دورات الفلاش. تجنب البرامج النصية التي تعيد وميض معلمات المحرك بشكل متكرر.