روبوتمقالات

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

استعرضنا في المقالين السابقين ماهو نظام الـROS إضافة لمكوناته وقد تعرفنا أنه أحد ميزات النظام هي إمكانية فصل كل مهمة من مهام الروبوت إلى عقدة حتى لا يتم إيقاف كافة مهام الروبوت عن العمل في حال تواجد خطأ أو توقف أحد أجزاء الكود ولكن لا بدّ لهذه العقد من التواصل مع بعضها البعض وإرسال معلومات فيما بينها لإجراء تكامل في عمل الروبوت. يتم التواصل بين العقد بواسطة الـTopics وهذا ما سنتطرق إليه في هذا المقال.

 

ما هي الـ Topics؟

 

يمكننا تشبيه الـTopics كقناة تنتقل عبرها المعلومات من عقدة إلى عقدة أخرى، كما يمكننا نشر المعلومات و قراءتها عبر هذا الموضوع. كما استعرضنا في الدرس السابق، حيث قمنا بإرسال رسالة عبر rostopic وتم استقبالها من قبل قارئ(subscriber).

يتوفر في ROS حزمة package مخصصّة لفهم الأدوات وتعلّم النظام بشكل أكثر بساطة تُدعَى بـturtlesim.

بداية نشغل العقدة الرئيسية في ROS عبر التعليمة:

roscore

لاستعراض قائمة بالمواضيع الموجودة في النظام:
rostopic list

ولاستعراض قائمة بالعقد المفعلة:
rosnode list

توفّر Turtlesim محاكي بسيط لتعليم مفاهيم الـROS الأساسية، ولتشغيل المحاكي:
rosrun turtlesim turrlesim_node

حيث:

  • rosrun:تسمح بإجراء تنفيذ لعقدة ما.
  • Turtlesim:اسم الـpackage.
  • turtlesim_node:اسم العقدة التي سنقوم بتنفيذها.

عند تنفيذ التعليمة السابقة نلاحظ انبثاق النافذة التالية:

لنستعرض من جديد قائمة العقد المفعلة وقائمة المواضيع، لنرى هل طرأ أي تغيير عليها؟

نجد المواضيع التالية: /turtle1/cmd_vel،/turtle1/color_sensor،/turtle/pose جديدة!، بالإضافة إلى وجود عقدة جديدة في قائمة العقد تدعى turtlesim. من أين أتت هذه المواضيع؟ أتت من المحاكي turtlesim التي قمنا بتشغيله.

ولكن ماذا إذا أردنا معرفة معلومات عن هذه العقدة؟ بكل بساطة عن طريق التعليمة:

rosnode info /turtlesim

نلاحظ بأنها تقوم بإجراء نشر لموضوعين: Color_sensor & pose وأن هناك قارئ يدعى cmd_vel وهو يمثل السرعة المطلوبة. ولكن ماهو الـ cmd_vel؟ لمعرفة معلومات أكثر عنه نكتب:

rostopic info /turtle1/cmd_vel

أول خيار هو type حيث يمثّل الـ geometry_msgs اسم الحزمة(package) والتي تحوي مجموعة من أنواع الرسائل ومنها Twist فهو يمثل نوع الرسائل التي تُرسَل إلى الروبوت ليقوم بالحركة وهو متواجد داخل الحزمة geometry_msgs ولا يوجد أي ناشر لهذا الموضوع.  للتعرّف على مضمون رسالة الـTwist نكتب :

rosmsg show geometry_msgs/Twist

فنرى أنها مكونة من شعاعين:السرعة الخطية والسرعة الزاوية على المحاور x وy وz. إضافة إلى أن لهذا الموضوع قارئ وحيد وهو الـturtlesim .

كما يمكننا أيضا رؤية مضمون رسالة الموضوع الثاني عن طريق:

rosmsg show turtlesim/Pose

فنرى أنها تحوي على الإحداثيات x,y إضافة إلى الاتجاه theta و السرعة الخطية والسرعة الزاوية.

لنقم الآن بتحريك الروبوت، ولكن كيف ذلك!! وذلك بإجراء تفعيل للعقدة المسؤولة عن تحريك الروبوت بواسطة لوحة المفاتيح وتُدعَى هذه العقدة بـ turtle_teleop_key حيث تسمح بإرسال أوامر السرعة إلى الروبوت عبر الموضوع cmd_vel.

rosrun turtlesim turtle_teleop_key

يتم التحكم بالسلحفاة عن طريق الأسهم في لوحة التحكم. للتأكد من أن العقدة turtle_teleop_key ترسل أوامر السرعة عبر الموضوع cmd_vel نضع التعليمة:

rostopic info /turtle1/cmd_vel

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

نذهب الآن لنافذة الـturtle_teleop_key  ونحرّك أسهم لوحة المفاتيح ونرى بأن الروبوت بدأ بالحركة.ومن الممكن أيضاً رؤية قيم السرعة التي يتحرك بها الروبوت :

rostopic echo /turtle1/cmd_vel

هذا يعني أن السلحفاة تتحرك إلى الأمام بسرعة خطية قدرها. 2m/sec ومن الممكن أيضاً رؤية موضع الروبوت وذلك:

rostopic echo /turtle1/Pose

وهناك طريقة أخرى لإرسال قيم السرعة إلى الروبوت بواسطة نافذة سطر الأوامر :
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist

  • rostopic pub:تعليمة الإرسال.
  • /turtle1/cmd_vel:اسم الموضوع.
  • geometry_msgs/Twist: نوع الرسالة التي سيتم إرسالها.

تتمة التعليمة هي قيمة الرسالة المراد إرسالها للعقدة المحددة بالنوع المحدّد.

ملاحظة: نستطيع عرض كل العقد والمواضيع الفعالة على النظام بشكل مخطط باستخدام rqt_graph:

rosrun rqt_graph rqt_graph

يمكننا ملاحظة أن العقدتين teleop_turtle و turtlesim متصلتين مع بعضهما البعض بواسطة موضوع يُدعَى turtle1/cmd_vel/.

في النهاية وكتلخيص لقد تعرّفنا على أحد الطرق التي يمكن للعقد أن تتواصل عن طريقها وهي الـtopics حيث يمكننا بواسطتها إرسال معلومات للروبوت وأخذ معلومات عن طريق الحساسات الموجود عليه.ولكن ليست هذه الطريقة الوحيدة للتواصل بين العقد وإنما هناك طريقتين أخرتين سنتعرّف عليها في المقالات اللاحقة. يمكنك أيضاً في هذه الأثناء الاطلاع على كيفية بناء يد روبوتية من الصفر باستخدام ROS.

 

المراجع

 

http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics

Maisa jazba

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

اترك تعليقاً

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

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.

زر الذهاب إلى الأعلى