ROS ببساطه – تعلم بيئة تطوير الروبوتات – الدرس الثانى

أهلا بكم في الدرس الثانى من مجموعة دروس ROS ببساطة – إذا لم تكن قرأت الدرس الأول فيمكنك الوصول إليه من خلال هذا الرابط

ينقسم هذا الدرس مقسم الى اربعة جزاء رئيسية وهي كالتالي:

  • الجزء الاول تهيئه نظام التشغيل
  • الجزء الثانى تثبيت ROS
  • الجزء الثالث شرح مفصل لROS
  • الجزء الرابع مثال بسيط باستخدام ROS

الجزء الاول تهيئه نظام التشغيل

ملحوطه: خلال الشرح سيتم استخدام اصدار Indigo فى ROS. فROS ايضا لديه اصدارات (Releases) مختلفه و يتم اصدار نسخه جديده كل 9 شهور تقريبا و يمتد الدعم لها حوالى سنه و نصف. و هناك بعض الاصدارات التى يمتد الدعم لها لحوالى 5 سنوات و هى اصدارات LTS: Long Term Support. و هم حتى الان اصدارين Indigo  Igloo و Kinetic Kame.

ترتيب اصدارات ROS من الاحدث للاقدم:

Kinetic Kame
Jade Turtle
Indigo Igloo

البقيه انتهى الدعم لهم
Hydro Medusa
Groovy Galapagos
Fuerte Turtle
Electric Emys
Diamondback
C Turtle
Box Turtle

و يوجد تزامن بين اصدارات ubuntu و اصدارات ROS. سواء كانت اصدارات LTS او لا. فمثلا اصدار Indigo LTS يعمل مع  (ubuntu 14.14 LTS (Trusty Tahr و اصدار kinetic Kame يعمل مع (ubuntu 16.04 LTS (Xenial Xerus. ستجد اصدارت LTS من ubuntu او ROS تعمل مع اصدارات ليست LTS من اى منهما. لكن دائما ستجد اصدارات LTS من ROS تعمل مع LTS من ubuntu.

صفحه تحميل Kinetic و بها الOS المدعومه و الsource installation – الاختيار الاحدث و الافضل

صفحه تحميل Indigo و بها الOS المدعومه و الsource installation

لا انصح باستخدام jade الان لانه انتهاء الدعم له اقترب من الانتهاء كما ان Kinetic احدث منه و تم اضافه دعم لكل الpackages له تقريبا.

ملحوظه اخرى: خلال هذه الدروس سيتم استخدام نظام ubuntu اذا كنت على معرفه باوامر لينكس و تعمل على توزيعه اخرى يمكنك استخدامها اذا شئت لكن سيزيد عليك الموضوع قليلا باضطرارك الى بناء كل الpackages من المصدر. فى كل الاحوال الموضوع بسيط. ستجد فى الروابط السابقه دروس للsource installation للمساعده على تثبيت ROS على بعض الانظمه الاخرى.

يمكنك ايضا استخدام Virtual Machine و ستجد نسخه لubuntu 14.04 و مثبت عليها Indigo فى صفحه تحميله (Nootrix built VM) . لم اجد نسخه بها Kinetic وقت كتابه هذا الشرح. و لكن تذكر استخدام VM لن يكون جيد اذا كان حجم التطبيق كبير (فى درس الSLAM باستخدام Kinect لا اعلم اذا كان استخدام VM سينجح او لا, طبعا هذا متوقف على امكانيات جهازك).

اذا كان لديك احدى اصدارات ubuntu و تريد معرفه اى من اصدارات ROS متوافر الدعم له من هنا. فمثلا اذا كنت تستخدم ubuntu xenial لن تجد دعم لIndigo و فى هذه الحاله يمكنك استخدام Kinetic Kame.

هذه الصفحه التى ذكر فيها الدعم تسمى REP, وهى عباره عن ملفات تفصل كل شيىء فى ROS (يمكن ان تعتبرها Standard), مثلا ستجد REP تحدد اى من نسخ OpenCV ستعمل مع اى نسخ من ROS و اخرى تقترح تسميه الTopics و وصف الframes بين انواع الروبوتات المختلفه (joints). ستجد قائمه بكل الREPs من هنا

ببساطه:

اذا كان لديك ubuntu Trusty ثبت Indigo

اذا كان لديك ubuntu Xenial ثبت Kinetic

اذا كان لديك اى توزيعه اخرى غير ubuntu ابحث اى من نسخ ROS يدعمها

اذا لم تجد اى دعم لتوزيعه linux لديك حمل Kinetic من مصدر

يمكنك ايضا تجربه linux باستخدام virtual machine و يمكنك استخدام نسخه جاهزه محمل بها ROS مسبقا كما ذكرت – المتاح لindigo

هناك دعم لOSX و لكن لا يوجد لدى معلومات عنه

لا تحاول استخدام ROS على windows, لن تجد من يساعدك 😀 استخدم virtual machine افضل لك

طبعا هذا الشرح سيتغير عند صدور اصدارات جديده من ROS (و هو ما لن يحدث الا بعد 7 شهور على الاقل من تاريخ هذه الشرح)

فى جميع الحالات الفرق بيع اصدارت ROS ليس كبير و لن تجد مشاكل خلال العمل بين الاصدارات المختلفه خاصه خلال هذه الدروس.

فى جميع الاحوال تصفح هذا الرابط لمعلومات اكثر

و لا تنسى ايضا فى النهايه ان ROS يعمل على اى جهاز  و اى اصدار و لكن هنا الموضوع لتسهيل استخدامه

 هذا الجزء لمن ليس لديه نظام تشغيل ubuntu او ليس لديه معرفه باوامر نظام linux

يمكنك الاستعانه باحدى المصادر الاتيه:

كتاب ubuntu ببساطه و هو كتاب شامل لكل المعلومات التى تريد معرفتها عن نظام ubuntu و عن نظام لينكس عموما, ليس المطلوب منك قراءه الكتاب كله بل قراءه الفصل الاول اذا لم يكن لديك اى معرفه بنظام لينكس و  تنفيذ عمليه تثبيت ubuntu من الفصول التاليه فى الكتاب. ثم اتبعه بكتاب سطر اوامر لينكس هنا ايضا ليس مطلوب منك انهاء الكتاب كله بل تعلم بعض الاساسيات لتستطيع العمل على ROS ثم تعلم باقى الاوامر بالتوازى مع عمل مشاريع, بهذه الطريقه لن تمل من العمل. , و لكن فى كل الاحوال يجب انها الفصول (1 2 3 4 11 14) قبل بدايه العمل على ROS.

موقع دكتور احمد العرباوى يشمل الموقع شرح لنظام لينكس من البدايه و يفضل استخدام الموقع هنا لانه مرتبط اكثر باستخدام لينكس فى الانظمه المدمجه كما ان الشرح هنا بواسطه فيديوهات و البعض يفضلها و يستوعبها بشكل اسرع.

ملحوظه: خلال الشرح يستخدم د/احمد العرباوى virtual machine (استخدام نظام ubuntu داخل windows) , يمكنك استخدامها خلال تعلم البدائيات لكن عند العمل على ROS لا يفضل استخدامها خاصه اذا كان المشروع كبير كما ذكرت.

الجزء الثانى: تثبيت ROS:

اثناء تنزيل ROS بغض النظر عن اى طريقه تستخدمها ستجد خيار من ثلاث:

Desktop-full : عند تحمليها ستجد كل ادوات ROS و RVIZ و هو  (visualizer خاص ب ROS) و ادوات rqt و  الsimulators, طبعا عند العمل على اللابتوب استخدام هذه الخيار

Desktop :عند تحمليها ستجد كل ادوات ROS و RVIZ و هو  (visualizer خاص ب ROS) و ادوات rqt فقط

ROS-Base: Bare Bones : لن تجد بها الا الادوات الرئيسيه فى ROS – لا يوجد بها اى ادوات رسوميه GUI, عند استخدام ROS على اى بورده مدمجه ستكون هى اختيارك.

ايضا خلال تنزيل ROS ستجد فى الجزء الخاص بEnvironment setup:

echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc

الامر الاول خاص باضافه هذا السطر “source /opt/ros/indigo/setup.bash” الى الملف .bashrc و هو ملف يتم تنفيذه عند بدأ اى bash فى نظام linux و لكل user له الملف الخاص به و يوجود فى الHOME Directory الخاص بكل user (لا تنسى ان الroot user له ملف مختلف). تنفيذ هذا الامر (source)  فى مجمله يكون لاضافه بعض الenvironment variable حتى يستطيع  ROS الوصول الى الpackages.

طبعا انت فى درس التنزيل تختار بين احد نوعى الshell اما bash او zsh ولكن الاغلب يستخدم bash.

سيتكرر تنفيذ هذا الامر بعد تنزيل كل packages لاضافه  امر الsource فى ملف .bashrc كالاتى:

echo "source PATH_TO_PACKAGE/devel/setup.bash" >> ~/.bashrc

فكل ما يفعله هذه الامر  هو اضافه هذا السطر “source PATH_TO_PACKAGE/devel/setup.bash” لملف .bashrc

هذا الامر غير مطلوب اذا تم تنزيل الpackage باستخدام الpackage manager ب (apt-get), سيتم شرح الموضوع بالتفصيل فى الدروس القادمه.

باقى المعلومات فى دروس  تحميل ROS على ROS Wiki واضحه ولا تحتاج اى شرح حتى اذا كنت مستخدم ضعيف لlinux

اكلم الان تنزيل ROS لمتابعه الدرس

الجزء الثالث شرح مفصل لROS

كما ذكرت فى الدرس السابق ROS يعمل على هيئه مجموعه من البرامج, كل برنامج منهم يسمى node و تتصل الnodes ببعضها عن طريق الmessages و يكون المكان الذى تنتقل عليه الmessages هو اما topic او service

الtopics تستخدمه فى حاله استخدام اكثر من node للنشر عليه (publish) و اكثر من node للقراءه (subscribe) – علاقه many to many

اما الservice ينشر عليها node واحده فقط و يقرا منها node واحده فقط – علاقه one to one

ROS nodes

ماذا عن طريقه تنظيم الاكواد المصدريه؟

يتم تنظيم الاكواد فى ROS على هيئه packages  (مثلها مثل باقى برامج لينكس) و كل package بها مجموعه من الnodes تعمل هذه الnodes معا لتأديه وظيفه معينه, و نادرا ما تجد package بها node واحده فقط (لا تنسى فلسفه ROS فى طريقه العمل و قليلا ما تجد من يكسر هذه القاعده) , و كتابه الاكواد بهذه الطريقه يسهل تطويرها من قبل اشخاص غير الكاتب الاصلى للكود.

ايضا اثناء كتابه الاكواد تجد الpackage بداخل workspace. يمكن ان يكون داخل الworkspace الواحده package واحده او اكثر. يستخدم ROS اداوت Cmake لبناء الاكواد (building), و يوفر ايضا مجموعه من ادوات الcmd line لتسهيل استخدامها اكثر. سبب استخدام ادوات Cmake فى ROS هو تسهيل بناء الpackages فى انظمه التشغيل المختلفه.

يوفر ROS مجموعه اداوت الcmd line ايضا للتعامل مع الnode و النظام عامه فى ROS, اهم هذه الادوات هى:

rosrun : تستخدم لبدء تشغيل node واحده فقط

roslaunch : تستخدم لبدء مجموعه من الnode (و يمكن ايضا ان تكون node واحده فقط) و لكن بparameters معينه, تقرا هذه الاداه ملفات بامتداد .launch , هذه الملفات عباره عن ملفات نصيه تكتب مثل ملفات XML , ببساطه هذه الملفات ستكون اكثر اداه تستخدمها لان عاده فى اى نظام يعمل بROS يكون هناك عدد كبيرمن الnodes (ليس هناك عدد محدد طبعا لكن اقل نظام حقيقى سيكون به على الاقل 10 nodes مثلا) , طبعا استخدام rosnode لكل node لتشغيلها سيكون عمل ساذج.

عادة يكون هناك command line arguments يتم اضافتها فى كل من هذه الادوات لتعديل بعض الparameters فى هذه الادوات, هذا يتوقف على الnode التى تريد ان تبدها بعض الnodes لن تحتاج الى اى parameters و لكن الاغلب سيحتاج.

طريقه العمل الطبيعيه ان تكتب كل تعديلاتك فى الlaunch file, استخدام الcmd line arguments يفترض ان يقتصر وقت التجربه بدلا من تعديله قبل كل تجربه.

rosnode : تستخدم للاستعلام عن الnodes التى تعمل

roscore : و هى الاداه الخاصه ببدا الnode الرئيسيه فى ROS الت تنظم العمل و الاتصال بباقى الnodes فى ROS

rostopic : تستخدم للاستعلام عن الtopics التى تعمل و تصفح متحوى الmessage المنقوله عليها

rosservice : تستخدم للاستعلام عن الservices التى تعمل و تصفح محتوى الmessage المنقوله عليها

rosparam : تستخدم لتعديل الparamerters قبل او اثناء وقت التشغيل (ملحوظه بعد الparameters التى تقرا فى البدايه لا تتاثر بتعديلها لاحقا)

rqt tools هى مجموعه من الادوات الرسوميه التى تساعدك على مرقبه نظام ROS عامه, مثل:

rqt_graph تعطى لك رسمه بكامل الnodes التى تعمل و من اى منهم متصل ببعض

rqt_graph_example

rqt_tf_tree تعطى لك رسم بكامل ال joint و علاقتها ببعضها فى الروبوت,

rqt_tf_tree_example

لا تعتمد على الادوات الرسوميه فقط لانك فى بعض الاوقات لن تجد الا الcommand line, مثلا فى حاله ان الجهاز الذى عليه نظام ROS جهاز اخر غير الذى تعمل عليه و هذه الجهاز ليس جزءا من نظام ROS

تشغيل ادوات rqt مثلها مثل اى node اخرى فى ROS يتم باستخدام rosnode

يمكنك القاء نظره سريعه على باقى الادوات من هنا

ستجد مجموعه من اداوت rqt من مصادر كثيره و ليس لها documentation على ROS WIKI

الجزء الرابع مثال بسيط باستخدام ROS

اول مثال ساشرح عليه هو مثال بسيط, عباره عن 2 nodes واحده ترسل رساله بها hello world و تطبعها و الاخرى عندما تسمع الرساله تقوم ايضا بطباعتها, لا تنسى ان الطباعه على الشاشه شيىء و عمل الnode الفعلى شيىء اخر, ستجد لاحقا nodes لا تطبع اى شيىء لكن هى فعليا تعمل, لمشاهده محتوى الMsgs بين الnodes تستخدم اداه rostopic او rosservice

اول ما يجب ان تقوم به فى ROS هو استخدام اداه roscore, كما ذكرت هى اول node تبداها فى النظام و تسمى الMaster node و هى التى تربط بين الnodes المختلفه فى النظام, اذا كان نظامك متعدد الاجهزه فالجهاز الذى تفتح عليه roscore يكون الMaster, تعدد الاجهزه فى النظام سيتم شرحه فى درس لاحق.

بعد كتابه الامر ستجد التالى:

$ roscore
… logging to /home/anasibrahim/.ros/log/e35b0036-7bae-11e6-a578-84a6c8953e86/roslaunch-anas-ubuntu-6707.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://anas-ubuntu:38907/
ros_comm version 1.11.20

SUMMARY
========

PARAMETERS
* /rosdistro: indigo
* /rosversion: 1.11.20

NODES

auto-starting new master
process[master]: started with pid [6719]
ROS_MASTER_URI=http://anas-ubuntu:11311/

setting /run_id to e35b0036-7bae-11e6-a578-84a6c8953e86
process[rosout-1]: started with pid [6732]
started core service [/rosout]

الان ستقوم تنزيل الpackage التى بها ال2 nodes

sudo apt-get install ros-indigo-rospy-tutorials

اسم الpackage الخاصه بROS تكون على هذا الشكل, الpackage السابقه اسمها rospy-tutorials و خاصه بindigo

اذا اردت تنزيلها ل Kinetic

sudo apt-get install ros-kinetic-rospy-tutorials

بحيث يكون تسميه الpackage بهذا التنسيق

sudo apt-get install ros-ROSDISTRONAME-PACKAGENAME

بعد تنزيل الpackage افتح terminal جديده

,و ابدا الnode talker

rosrun rospy_tutorials talker

ستجد الاتى بدا فى الطباعه

anasibrahim@anas-ubuntu:~$ rosrun rospy_tutorials talker
[INFO] [WallTime: 1473966171.474366] hello world 1473966171.47
[INFO] [WallTime: 1473966171.574669] hello world 1473966171.57
[INFO] [WallTime: 1473966171.674713] hello world 1473966171.67
[INFO] [WallTime: 1473966171.774709] hello world 1473966171.77
[INFO] [WallTime: 1473966171.874666] hello world 1473966171.87
[INFO] [WallTime: 1473966171.974694] hello world 1473966171.97
[INFO] [WallTime: 1473966172.074671] hello world 1473966172.07
[INFO] [WallTime: 1473966172.174669] hello world 1473966172.17

و هى محتوى الرساله التى ترسلها هذه الnode على الtopic المسمى /chatter

استخدام اداه rosrun يكون كالتالى

rosrun PACKAGE_NAME NODE_NAME

لترى الtopics المفتوحه استخدم الاداه rostopic كالتالى

$ rostopic list
/chatter
/rosout
/rosout_agg

ستجد الtopic المسمى chatter

يوجد مجموعه من الخيارات باداه rostopic مثل bw echo find hz info list pub type , سنستخدم بعضهم لاحقا

و الان ابدا الlistener node فى terminal جديده

$ rosrun rospy_tutorials listener
[INFO] [WallTime: 1473966609.469985] /listener_24055_1473966609134I heard hello world 1473966609.47
[INFO] [WallTime: 1473966609.570146] /listener_24055_1473966609134I heard hello world 1473966609.57
[INFO] [WallTime: 1473966609.669744] /listener_24055_1473966609134I heard hello world 1473966609.67
[INFO] [WallTime: 1473966609.769918] /listener_24055_1473966609134I heard hello world 1473966609.77
[INFO] [WallTime: 1473966609.869854] /listener_24055_1473966609134I heard hello world 1473966609.87
[INFO] [WallTime: 1473966609.970012] /listener_24055_1473966609134I heard hello world 1473966609.97
[INFO] [WallTime: 1473966610.069804] /listener_24055_1473966609134I heard hello world 1473966610.07

ستجد ان الرساله  hello world ارسلت لها

الnode التى تقرا من topic تسمى subscriber node و التى تنشر على topic تسمى publisher

جرب الخروج من الtalker node باستخدام CTRL+C , ستجد ان الرسائل توقفت فى الlistener node

يمكنك ايضا استخدام الاداه rostopic لرؤيه محتوى الMsg – طبعا ستستخدم هذه الاداه فى حاله الnodes التى لا تطبع اى شيىء –

$ rostopic echo /chatter
data: hello world 1473966831.67

data: hello world 1473966831.77

data: hello world 1473966831.87

data: hello world 1473966831.97

ستجد هنا محتوى الرساله بالتفصيل, فى هذه الحاله الMsg هنا بسيطه جدا و بها string فقط (باستثناء الheader الذى يوجد فى كل الMsgs), ستيم شرح الMsgs فى الدروس القادمه بتفصيل اكبر

جرب ايضا استخدام rqt tools,جرب اداه rqt_graph و هى اداه ترسم لك كل الnodes فى النظام و الtopics و ايهم subscriber او publisher

rosrun rqt_graph rqt_graph

او اختصارا الامر مباشره

rqt_graph

ستجد البرنامج التالى بدا

rqt_graph

و يوضح البرنامج ال2 nodes الذين بدأناهم (talker & Listener nodes) و الchatter topic

الان يفترض انك فهمت المفاهيم الرئيسيه فى  ROS مثل node و Msg و topic و كيف يعمل نظام ROS و استخدام ادوات rqt

الدروس القادمه ستتضمن تنزيل packages من مصدرها  و بنائها و توصيل بعد الsensors و Micrcontroller و شرح اعمق لادوات ROS المستخدمه فى هذه الدرس

ملحوظه مهمه جداااا : يمكن اثناء اى وقت اثناء التشغيل ان تغلق اى node و تبداها مره اخره, الا الmaster node اذا اغلقتها يجب اغلاق كل الnodes الاخرى و بدا النظام كله من جديد.

ايضا اذا كنت تستخدم الاداه roslaunch, فهى عند بداها تبحث عن الmaster node و اذا لم تعثر عليه تبدأه هى و بالتالى الterminal التى تفتح فيها اول launch file و لم تفتح الmaster node قبلها تكون هى الterminal التى تفتح بها الmaster node و لذلك اغلاق هذه الterminal يؤدى لعطل النظام

افضل حل تقوم به فى هذه الحاله هو فتح الmaster node بمفردها فى terminal ثم تبدا عملك بعد ذلك.

الاتصال بين الnodes فى ROS يكون عباره عن Peer-To-Peer اى ان الMsg التى ترسل بين الnodes لا تعبر عن طريق الmaster nodes (تذكر هذه الملحوظه جيدا جدا لانك ستحتاجها عن استخدام ROS على اكثر من جهاز) و لذلك ستجد ان اغلاق الmaster nodes لا يؤثر على عمل الnodes التى بدات بالفعل بل على الnodes الجديده التى ستبدأها و اتصالها بالnodes القديمه التى بدات قبل اغلاق الmaster node.

3 thoughts on “ROS ببساطه – تعلم بيئة تطوير الروبوتات – الدرس الثانى

اترك تعليقاً

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