OMower مع ROS ، الخطوات الأولى

في البداية ، تم تصميم OMower لواجهة التحكم البسيطة في pfodApp و Modbus. الأول هو بروتوكول نصي رفيع المستوى يتم فيه إرسال أوامر التحكم والقوائم ، والثاني هو شيء مشهور ، ولكنه ليس مناسبًا جدًا في هذا التطبيق ، حيث يتطلب برنامج التحكم إجراء استطلاع مستمر لحالة جميع أجهزة الاستشعار المستخدمة "يدويًا". لذلك ، فقد تقرر التحول تدريجياً إلى نظام التشغيل ROS (نظام التشغيل Robot OS) ، وهو إطار يستخدم على نطاق واسع للتحكم في مختلف الروبوتات.





في الوقت الحالي ، يكون دعم ROS في المرحلة الأولية ، بما في ذلك فقط نقل المعلومات من أجهزة الاستشعار في شكل صفائف بسيطة (دون استخدام تنسيقات الرسائل المتخصصة التي تقدمها العديد من مكتبات ROS) ، وسجلات التصحيح وتدفق أوامر التحكم في تنسيق pfodApp / Modbus ، دون إمكانية حقا السيطرة على الروبوت مع أدوات ROS القياسية. أي لنقل الروبوت من مكانه أو تغيير أي إعداد داخلي للروبوت ، ستحتاج إلى إرسال أمر نصي بتنسيق pfodApp إليه. ولكن حتى في مثل هذا النموذج المقطوع - يمكنك بسهولة بث وتسجيل ما يحدث مع الروبوت ، وتصور تحركاته في أدوات ROS (rviz) القياسية ، بالإضافة إلى إضافة خدمات لوظائف إضافية. مثل ، على سبيل المثال ، فرصة الركوب في اتجاه القالب المرئي (checkerboard) الذي يوفره omower_seeker.py ، للوصول الدقيق إلى محطة وقوف السيارات.

تعرض الصورة تدفقات البيانات في الروبوت. يتم تنفيذ خدمات ROS الرئيسية على Orange PI Zero ، عالقة في فتحة خاصة على لوحة الروبوت (على جهاز اختبار يستخدم Raspberry PI3 لذلك ، متصلاً بطريقة مماثلة - عبر المنفذ التسلسلي). عبر الواجهة rosserial ، ينقل الروبوت الرسائل من المستشعرات (مثل / imu / direction أو / motors / PWM) ، وسجل تصحيح الأخطاء الخاص به في تنسيق النص وإخراج القوائم / الرسائل بتنسيق pfodApp أو Modbus إلى ROS kernel ، ويتلقى مجموعة من أوامر النص أو Modbus استفسارات. يأتي تكميلان إضافيان لـ Raspberry PI Zero مع تدفقات من الصور من الكاميرات ، ولكن كما هو مبين في الممارسة ، من المستحيل الحصول على التزامن الطبيعي لمعالجة الصور الاستريو مع هذا المخطط (الجودة مرئية في الصورة أدناه) ، وبالتالي سيتم استبدال كاميرا ستيريو عادية قريبًا.

ستتوسع درجة تكامل ROS في OMower تدريجياً ، حتى توفر الوصول الكامل إلى جميع المتغيرات الداخلية للروبوت والقدرة على إدارته من خلال أدوات ROS القياسية (مثل رسائل cmd_vel التي تحدد السرعة المطلوبة).



سأخبركم قليلاً عن الوحدة النمطية omower_seeker.py ، كمثال على استخدام ROS لإضافة وظائف إلى OMower. الغرض منه بسيط للغاية - السير في اتجاه رقعة الشطرنج ، وضبط مسارك في الوقت الفعلي. سيتم استخدام هذه الميزة لدفع جزازة إلى محطة وقوف السيارات ، حيث يمكن شحن بطارياتها بسرعة. عند تحليل الصورة من إحدى الكاميرات ، تقوم الوحدة النمطية بحساب زاويتين (زاوية انحراف اللوحة من مركز الكاميرا وزاوية دوران اللوحة نفسها بالنسبة إلى العمودي) وتنقلها كأمر نصي إلى وحدة الباحث الداخلية (omower-seeker.h / cpp في OMOW SDK).



في الخارج ، تبدو هذه مهمة بسيطة إلى حد ما ، ولكن في الحياة الواقعية هناك مشكلة خطيرة - سرعة معالجة الصور على جهاز كمبيوتر صغير مدمج في الروبوت. كما توضح الممارسة ، فإن سرعة البحث عن الأنماط في opencv في الصورة عند استخدام Orange PI و Raspberry Pi منخفضة الطاقة منخفضة للغاية وغير مستقرة ، حيث تتراوح من عشرات إلى مئات الميلي ثانية بدقة 640 × 480 ، والتي تتحول أثناء القيادة إلى انحرافات عن المسار اللازم ، حيث أن الروبوت ، حتى مع سرعته المنخفضة ، يتمكن من قلب زاوية كبيرة أو السفر مسافة كبيرة نسبيًا خلال هذا الوقت. في الواقع ، لهذا السبب تم اختيار رقعة الشطرنج مع الحد الأدنى من الخلايا ، حيث تستغرق القوالب الأخرى مزيدًا من الوقت.

للتعويض عن وقت البحث الطويل عن القالب المرئي ، يتم استخدام مخطط البوصلة - يقوم متحكم الروبوت الآلي بتخزين قيمه كل 100 مللي ثانية ، حيث يقوم بتخزين خمس عينات في النصف الثاني الأخير (يتم التخلص من التحليلات الأطول ، نظرًا لضعف ملاءمتها للتنقل الدقيق). يتم إعادة حساب الزوايا المحسوبة من omower_seeker.py (التي تنقل أيضًا وقت بحث القالب إلى المتحكم الدقيق) إلى زاوية الدوران الحقيقية باستخدام قيمة البوصلة المحفوظة ، والتي لا تزيد عن 100 مللي ثانية من وقت البحث ، وينتقل الروبوت على طول هذه الزاوية. يتيح لك ذلك الانتقال بدقة أو أقل في اتجاه رقعة الشطرنج بخط مستقيم. أو ، إذا كانت تدور قليلاً بالنسبة إلى عمودي - على طول قوس يصحح زاوية النهج بحيث يكون أقرب ما يمكن من محور القالب ، حيث أننا لا نحتاج إلى القيادة إلى اللوحة فحسب ، بل ندخل أيضًا في سكك التوجيه والاتصال بجهات اتصال الشحن.

يتم تنفيذ الخوارزمية الكاملة للوصول إلى المحطة على ثلاث مراحل. يتم تعيين نقطتين على حقل GPS - نقطة البداية (في مكان ما في منتصف منطقة العمل) ، والنقطة أمام المحطة ، وكذلك زاوية الدوران إلى المحطة. بعد أن يصل الروبوت من نقطة البداية إلى الثانية وينتقل إلى الزاوية المطلوبة نحو لوحة التحقق في المحطة ، تدخل وحدة الطالب في العمل ، وتعديل سرعة المحركات من خلال وحدة تحكم PID. إذا فشلت أي من الخطوات ، أو تجاوزت زوايا الانحراف القيم المحددة ، يلغي الروبوت السباق ويعود إلى نقطة البداية مرة أخرى.

الروابط والفيديو:

OMower SDK ، مكتبة ل Arduino IDE وتخطيط لوحة الدوائر
البرامج الثابتة الجاهزة باستخدام SDK التي تنفذ كل من pfodApp / Modbus والاتصال بـ ROS
حزمة omower_gateway ل ROS



Source: https://habr.com/ru/post/ar434952/


All Articles