الدرس الثاني
انظر إلى بداية الدرس الثاني عن التطبيقات الروبوتية. الروبوتات تحدث ثورة في طريقة عمل الناس وتفاعلهم، مثل تنظيف المنزل أو استكشاف الفضاء أو العمليات الجراحية بدقة أكبر. لكن بناء الروبوتات يواجه تحديين: التكلفة والوقت. وهنا يأتي دور المحاكي وهو برنامج يسمح للمطورين بارختبار تصاميمهم في عالم افتراضي قبل بنائه مادياً. المحاكي يتيح اختبار قدرات الروبوت في ظروف جوية وتضاريس مختلفة وتفاعل مع البشر. انظر إلى الشكل 6.5 الذي يوضح محاكاة للأذرع الصناعية.
يقوم هذا الدرس على بناء مشروع عملي لتطبيق الروبوتات باستخدام أداة ويبوتس (Webots) للبيئة الافتراضية ولغة بايثون للبرمجة، بهدف محاكاة طائرة مسيرة تقلع وتطير عبر نقاط طريق محددة لاكتشاف الحدود البشرية بكاميرا تعتمد على مكتبة أوبن سي في (OpenCV). تعتمد الفكرة على استخدام إحداثيات ثلاثية الأبعاد ومحاور الدوران والانحدار والالتفاف والانعراج لتحديد موقع الطائرة، وتجميع قراءات المستشعرات مثل وحدة القياس بالقصور الذاتي (IMU) ونظام تحديد المواقع العالمي (GPS) والجيروسكوب لضبط سرعة أجهزة المروچات الأربعة عبر دوارات تولد قوة رفع ودفع. مثال سريع: إذا كانت الطائرة في إحداثيات معينة وتريد الانتقال لنقطة طريق جديدة، فإن الدالة تحسب الزاوية والمسافة وتقوم بتعديل سرعة المحركات عبر متغيرات التحكم لتوجيهها نحو الهدف بدقة.
الفكرة الأساسية
تقوم الفكرة على برمجة ومحاكاة طائرة مسيرة داخل عالم افتراضي باستخدام أداة ويبوتس ولغة بايثون، لتنفذ مهام مراقبة المنطقة واكتشاف الأجسام البشرية عبر تمريرها فوق نقاط طريق محددة مسبقا باستخدام الكاميرا والمستشعرات.
الشرح
يعتمد بناء المشروع على فهم إحداثيات الموقع ودورانه في الفضاء ثلاثي الأبعاد. يمثل المحور الأفق، والمحور الرأس، والمحور العمق. أما توجيهات الحركة فتتمثل في الانحدار (Pitch) الذي يجعل الجسم يميل للأعلى أو الأسفل، والالتفاف (Roll) الذي يجعله يميل جانبا، والانعراج (Yaw) الذي يجعله يلتف يمينا أو يسارا.
تجهز الطائرة المسيرة بمستشعرات (Sensors) تجمع البيانات البيئية، ومشغلات (Actuators) تحول الإشارات الكهربائية إلى حركة ميكانيكية. من أبرز هذه الأجهزة وحدة القياس بالقصور الذاتي (IMU) لقياس التسارع والسرعة الزاوية، ونظام تحديد المواقع العالمي (GPS) لمعرفة الموقع الجغرافي والارتفاع والسرعة، والجيروسكوب لقياس سرعة الدوران حول محور معين واكتشاف التغيرات الصغيرة لضمان الاستقرار، إضافة إلى كاميرا موجهة بزاوية معينة.
تتحكم أربعة محركات بدوران المروچات (Rotors)، حيث يدور اثنان في اتجاه عقارب الساعة والاثنان الآخران بعكس اتجاهها لتوليد قوة رفع (Lift) تمكن الطائرة من الإقلاع والمناورة والثبات، وتستخدم دالة setVelocity لضبط سرعة كل مروحة بناء على حسابات المدخلات وقيم المستشعرات وثوابت التحكم.
مثال محلول خطوة بخطوة
لتشغيل المحاكاة وبرمجة الطائرة للوصول إلى نقطة طريق محددة:
- افتح برنامج ويبوتس واضغط على File ثم Open World وابحث عن ملف drone_world.wbt في مجلد worlds ثم افتحه.
- افتح ملف النص البرمجي بلغة بايثون من File ثم Open Text File وحدد ملف drone_controller.py من مجلد controllers ثم مجلد drone_controller ثم افتحه.
- أدرج برنامج المتحكم في الطائرة المسيرة باختيار طراز Mavic 2 PRO من شجرة المشهد (Scene tree)، ثم حدد controller باسم mavic2pro_patrol من محرر الحقل (Field editor)، واضغط OK.
- اضغط على زر تشغيل المحاكاة بشكل فوري (Run the simulation in real-time) من شريط الأدوات (Toolbar).
- أثناء التشغيل، تبدأ الطائرة بالإقلاع وتتبع مسار النقاط عبر دالة move_to_target التي تحسب الموقع الحالي للطائرة وتقارنه بالإحداثيات المستهدفة، ثم تحسب زاوية الانعراج والانحدار وتعدل سرعة المحركات لتوجيه الطائرة نحو النقطة التالية بدقة.
أخطاء شائعة
- نسيان حفظ التعديلات في الملف البرمجي بالضغط على مفتاحي Ctrl + S قبل تشغيل المحاكاة.
- عدم تفعيل المستشعر أو المشغل باستخدام دالة enable قبل محاولة قراءة البيانات أو التحكم به.
- الخطأ في تحديد مسار مجلد controllers أو عدم ربط المتحكم الصحيح بالروبوت في شجرة المشهد.
- إدخال قيم خاطئة لثوابت التحكم قد تؤدي إلى فقدان الطائرة استقرارها أو عدم وصولها لنقطة الهدف بدقة.
سؤالان للتدريب مع الإجابة
السؤال الأول: ما الوظيفة التي تقوم بها دالة getDevice() في برمجة روبوت المحاكاة؟ الإجابة: تستخدم للحصول على قراءات جهاز معين مثل المستشعر أو المشغل من نموذج روبوت ويبوتس، وتأخذ معاملا نصيا يحدد اسم الجهاز المراد الوصول إليه.
السؤال الثاني: كيف تساهم أجهزة المروچات الأربعة في تحكم الطائرة المسيرة باتجاهها وقوة رفعها؟ الإجابة: تجهز الطائرة بأربعة دوارات يدور اثنان منها في اتجاه عقارب الساعة والاثنان الآخران بعكس اتجاهها لتوليد قوة رفع تسمح بالإقلاع والمناورة، وعند زيادة سرعة دوارين متقابلين على جانب واحد وتقليل سرعة الدارين الآخرين، تستطيع الطائرة الميل والحرك في اتجاه معين.