روبوتمقالات

برمجة الروبوتات باستخدام نظام تشغيل الروبوت ROS: مقدمة

في الأعوام القليلة السابقة تقدّم موضوع الروبوتات بشكل كبير و أصبح موضع اهتمام الكثير، فبالنظر إلى بنية الروبوتات نجد أنها بشكل عام تتكوّن من مجموعة  حساسات (sensors) و مشغلات (actuator) فمثلاً إذا أراد أي شخص تطوير روبوت ذو عجلتين فأول ما سيبدأ به هو تحريك الروبوت للأمام والخلف والدوران ومن ثم تفعيل الحساسات الضرورية للمهمة التي سيقوم بها الروبوت ولتجنب تكرار خطوات بناء الروبوت من الصفر لأي مطور تم إيجاد نظام ROS وهو  منصة مستخدمة لتطوير الروبوتات مهما اختلف نوعها بتعديل بسيط على الكود بدلاً من كتابة كود جديد، إضافة إلى أنه نظام مفتوح المصدر فيمكن الاستفادة من تطوير بعض الأشخاص للخوارزميات. ROS هو  نظام ولكنه ليس نظام تشغيل كنظام الـ windows وإنما يحتاج إلى نظام تشغيل ليعمل عليه  وتحديداً نظام  Ubuntu ذلك بسبب الدعم (الرسمي) الحالي له. لذا نُطلق على نظام الروبوتات هذا بــmeta-operating-system أي نظام تشغيل يعمل بوجود نظام آخر.إضافة إلى أن نظام ROS يقوم بتنظيم تبادل الرسائل والعمليات بين العقد هذا مشابه تماماً لوظائف أنظمة التشغيل. لهذا النظام الكثير من الإصدارات كما نرى في الشكل(1) وتكون الإصدارات مرتّبة حسب الحروف الأبجدية الإنكليزية.

Robot Operating Systemالشكل(1)

لقد تم سابقاً تغطية تجربة استخدام هذا النظام لبناء نظام روبوتات متعاونة Multi-agent Robots بواسطة فريق إيليت من مصر.

كيف يعمل نظام الـROS ؟

يبدأ النظام بالعمل بتشغيل عقدة رئيسيّة ROS Master هذه العقدة الرئيسة تسمح لبقيّة العقد بالتواصل والتخاطب مع بعضها البعض. إن كل مهمة أساسية  تعمل في ROS  تُعَد عقد (nodes) و تتواصل مع بعضها بواسطة رسائل(message) من المعلومات فتقوم أداة تدعى بالـ bag files بتسجيل هذه الرسائل. تكون كل عقدة من العقد مسؤولة عن مهمة معينة، تتواصل هذه العقد مع بعضها بواسطة مواضيع (topics)وهو المكان الذي يتم نشر رسائل المعلومات فيه. يُبيّن الشكل(2)مخطط يشرح آلية عمل الـ ROS يمكن أن يحتوي الروبوت على العديد من العقد مثال :عقدة لمعالجة الصورة مأخوذة من حساس الكاميرا، عقدة لحساب الـodmetry، عقدة لأخذ المعطيات التسلسليّة من الروبوت. إن الميّزة في استخدام العقد أنه في حال توقّفت أحد العقد لايؤثر هذا على عمل بقية النظام ويستمر في عمله كما أنه يمكن برمجة هذه العقد بأي لغة يدعمها النظام(C++,C,Python,Java) و هذه المرونة غير موجودة في أنظمة أخرى.

Robot Operating System Master nodeالشكل(2)

ما الذي يميز ROS عن بقية الأنظمة ؟

  1. إمكانية تخاطب العقد عبر الرسائل بين بعضها حتى لو كانت مكتوبة بلغات برمجية مختلفة  فمثلاً يمكن برمجة الروبوت للتحكم بالمستوى المنخفض(Low Level Control) (للتحكم بسرعة المحركات وأخذ قراءات المشفرات(encoders) )بلغة الـC  وبرمجة مستوى التحكم العالي (High Level Control)بلغة الـPython  كتطبيق خوارزمية Path Planning أو SLAM.
  2. إمكانية إكمال المهمات في حال توقف أحد العقد مما يُعطِي للنظام وثوقية أفضل.
  3. يوفر النظام العديد من أدوات التطوير البرمجية لتطوير الروبوتات ولعل أهم هذه الأدوات هي إمكانية تنفيذ العمل بأسلوب المحاكاة عن طريق تطبيق يُدعَى gazebo حيث يمتلك هذا التطبيق العديد من هياكل الروبوتات المشهورة إضافة إلى شريحة واسعة من الحساسات والمشغلات فيصبح بالإمكان اختبار الروبوت الخاص بك بطريقة المحاكاة قبل الانتقال إلى تطبيقه ليعمل في العالم الحقيقي.

ما هو سبب عدم الرغبة في استخدام ROS؟

يرى البعض صعوبات مما يجعلهم يحجمون عن استخدام هذا النظام من بعض هذه الصعوبات:

  1. صعوبة تعلم النظام خاصة من صفحات الـwiki ،المستخدمة في التوثيق الرسمي للمشروع، لذا تلجأ معظم الناس إلى تعلمه من الكتب التي تقوم بتغطية الأساسيات ومع ذلك هناك صعوبة بتعلمه.
  2. الحاجة إلى حاسوب:دائماً نحتاج عند تشغيل نظام ROS إلى حاسوب فلا يمكن استخدامه مع الروبوتات الصغيرة والروبوتات المايكروية، لكن من الممكن تشغيل النظام على حواسيب مصغرة مثل Raspberry Pi ولكن في حال استخدامها سنعاني من مشكلة التأخير الزمني(حسب تجربتي الشخصية).

كيف سأبدأ باستخدام ROS؟

كما ذكرنا آنفاً أن منصة الروبوتات هذه تعمل بوجود نظام آخر كـ Ubuntu  لأنه النظام المدعوم (بشكل رسمي) لذا في حالة رغبتنا باستخدامه علينا أولاً تنصيب الـ Ubuntu ومن ثم نحدّد الإصدار الذي نريد العمل عليه، سنستخدم في هذه المقالة إصدار الـkinetic. إن إصدار Kinetic يدعم Ubuntu 15.10 وUbuntu 16.04.

ماهي خطوات تنصيب نظام Ubuntu؟

لتنزيل نسخة من نظام الـ Ubuntu نتجه إلى الموقع الرسمي، نختار عادة الإصدار الذي بجانبه الرمزLTS(Long Term Support)أي نسخة ذات دعم طويل. نتبع الخطوات في الشكل(3) لتنزيل النظام.

الشكل(3)

لنتمكن من تنصيب نظام الـUbuntu  نقوم بحرق النظام الذي قمنا بتنصيبه بالخطوة 1 على فلاشة USB يكون حجمها على الأقل 2 جيغا. للقيام بهذه المهمة يلزمنا تنزيل برنامج Universal USB Installer، لننتقل لتظهر لنا النافذة المبينة في الشكل(4) في الخيار الأول نحدد الإصدار في حالتنا نختار نظام Ubuntu، بالخطوة الثانية نختار الملف الذي قمنا تحميله بالخطوة 1 ، بالخطوة الثالثة نختار الفلاشة التي نريد حرق النظام عليها.

الشكل(4)

بعد الانتهاء من الحرق نعيد إقلاع الحاسوب وعند أول بدء الإقلاع على الزر F12 ، ستظهر قائمة فنختار خيار الـ USBسيتم إقلاع النظام وظهور واجهة سطح المكتب للـ Ubuntu.

من الممكن استخدام هذا النظام إما بالواجهات الأساسية GUI أو من الممكن استخدام سطر الأوامرterminal (في حال رغبتك بالتعرف بعض التعليمات الأساسية في الـLinux راجع مقالة Arageek.

تنصيب نظام ROS

لتنصيب النظام علينا اتباع التعليمات الموجودة في صفحة الـwiki من التوثيق الرسمي للمشروع.

بعض الأوامر في نظام ROS

لفتح نافذة سطر أوامر جديدة نضغط (Ctrl + Alt + T)

roscore: كما ذكرنا في مبدأ العمل أنه للبدء في استخدام ROS علينا بداية بتشغيل عقدة رئيسية، يتم ذلك بكتابة التعليمة roscore.

Robot Operating System roscoreالشكل(5)

rostopic: تُعطِي معلومات عن مواضيع ROS بما في ذلك العقد التي تقوم بنشر المعلومات(publishers) ،العقد التي تقوم بمتابعة المعلومات (subscribers) ،معدل نشر الرسائل ورسائل ROS.

سنشرح فيما يلي مثال عن كيفية نشر معلومات وإمكانية استقبالها، فمثلاً نريد نشر كلمة “hello world” لنشر أي موضوع باستخدام ROS نستخدم التعليمة rostopic pubيليها اسم الموضوع الذي نريد نشره مسبوقاً بـ (/) لنفترض أننا نريد تسمية الموضوعhi  ثم نحدّد نوع الموضوع std_msgs/String ثم الكلمة التي نريد نشرها، تصبح التعليمة بالشكل:

Robot Operating System rostopicالشكل(6)

من الممكن رؤية المواضيع المنشورة بكتابة التعليمة rostopic list فيمكننا رؤية الموضوع hi.

Robot Operating System rostopicالشكل(7)

لرؤية خرج التعليمة السابقة المرسلة نفتح نافذة سطر أوامر جديدة نكتب:

Robot Operating System rostopicالشكل(8)

فنرى الرسالة“hello world” يمكننا إيقاف استقبال الرسائل بالضغط على  ( Ctrl + C ).

ملاحظة:يمكننا في أنظمة الـLinux الضغط على مفتاح Tab لإكمال التعليمات وعند الضغط على مفتاح Tab مرتين متتاليتين نحصل على قائمة بالتعليمات.

نهاية يمكننا القول أنه تم التعرف بشكل عام على نظام ROS  مع  مدخل بسيط إلى بعض التعليمات فيه وعن مبدأ إرسال رسائل واستقبالها من خلال سطر الأوامر.ستكون هذه المقالات عبارةً عن عرض للنقاط الأساسية للنظام ومن ثمة يمكن الانتقال إلى الموقعwiki.ros.org  لتغطية الثغرات المتبقيّة، لذا في المقالة القادمة سيتم شرح أساسيات نظام الـROS والأدوات الموجودة فيه واستخداماتها. في هذه الأثناء لا تنسَ الاطلاع أيضاً على المقال التقني المحاكي Gazebo في بيئة ROS: بناء ذراع روبوتي من الصفر.

هل تريد/ين رؤية جزء جديد يتناول البرمجة باستخدام نظام الروبوتات؟ شارك أفكارك واقتراحاتك في تعليق.

الجزء الثاني: الحزم Packages

المراجع

  1. A Gentle Introduction to ROS [Jason M. O’Kane]
  2. CS460 ROS Short Tutorials

Maisa jazba

مهندسة ميكاترونيك من جامعة حلب في سوريا تعمل كمحاضرة في جامعة حلب. ميسة تؤمن بأنه يجب إعطاء الشباب المعلومة العلمية الصحيحة وإفادتهم بالشكل العملي من خلال لمس العتاد والتفاعل معه والابتعاد عن فكرة أن كل شيء محاكاة.

مقالات ذات صلة

‫7 تعليقات

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *