تعرف على نظام تشغيل الروبوتات Robot Operating System


#1

الدرس الأول: المقدمة

ما هو ROS ؟

ROS هو بيئة عمل كامله مفتوحه المصدر لتطوير الروبوتات (Robotic Framework) . و ROS هو اختصارا ل Robot Operating System و لكن برغم هذه التسمية إلا انه ليس فعليا نظام تشغيل (Operating System OS) بل هو meta-operating system أو Framework يعمل على العديد من نظم التشغيل الأخرى مثل Linux و apple OS-X و غيرهم.

ما هي الRobotics Framework

هي عباره عن مجموعه من المكتبات التي يعاد استخدامها في أي روبوت بغض النظر عن اختلاف شكلها او التطبيق الذى تستخدم فيه. فهي توفر البنيه الأساسية التي يحتاجها مطوري الروبوتات للعمل. و لكن في المقابل فأن الFrameworks تزيد من تعقيد العمل بعض الشيء في البداية لكن بعد عبور هذه المرحلة فإنها تقلل وقت التطوير إلى اقصي حد ممكن. و في بعض المواقف سيكون عدم استخدامها كارثي بالنسبة لوقت التطوير و التعديل.

و تساعد هذه الframeworks في بناء الروبوتات سواء كانت سيتم التحكم فيها يدويا أو ستكون ذاتيه التحكم (autonomous) أو خليط من الاثنين معا.

اليك بعض التطبيقات و المشاريع لتوضيح الشرح اكثر:

Google autonomous car و هي سياره ذاتيه القيادة و لا تستعجب من إدراجها كروبوت ففي النهاية السيارات ذاتيه القيادة لديها نفس أجهزة الاستشعار (sensors) و البرامج الموجودة في الروبوتات الأخري

OTTO روبوت يساعد فى نقل البضائع فى المستودعات من شركه CLEARPATH robotics

Fanuc Industrial Arm و يتم استخدامها فى الصناعه

Nao Robot روبوتhumanoid من شركه Aldebaran Robotics (softbank Robotics now)

لماذا نحتاج إلى الRobotic Frameworks

من بعض الوظائف الأساسية التي تتطلبها جميع الروبوتات السابقة للعمل هي تحديد مكانها و شكل حركتها و تسجيل هذه البيانات (كما فى صوره الروبوت Nao).

في حاله وجود Framework موحد لكل هذه الروبوتات سيمكن إعادة استخدام المكتبات (libraries) المسئولة عن وصف الحركة في كل هذه الروبوتات بسهوله لكن إذا كان لكل روبوت نظام مختلف عن الأخر سيضطر بناء هذه الخاصية لكل روبوت على حده و بدلا من أن يستثمر المطورين وقتهم في بناء وظائف جديده للروبوتات سيضيع معظم وقتهم في بناء الوظائف الأساسية لكل روبوت من جديد.

ببساطه المطلوب هو إعادة استخدام المكتبات و الأكواد (code-reuse) و الأهم أن يتم ذلك بطريق سهله و سريعه أيضا. طبعا ستشترك هذه الروبوتات في خواص اكثر بكثير من ذلك , و لكن المثال للتوضيح فقط.

كما ان سبب اختياري لهذه الروبوتات بالتحديد لإعطائك صوره عن المدى الواسع من التطبيقات التي يستخدم فيها ROS

فمثلا شركه BMW تستخدم ROS لتطوير السيارات ذاتيه القيادة لديها و كما أن شركه AMAZOM تستخدم روبوتات لإدارة و تسريع مستودعاتها فهناك منافس يستخدم ROS مثل OTTO و مثال على استخدام الHumanoid robots لROS هو الروبوت Nao

و التطبيق الأخير هو استخدام ROS لجعل الIndustrial ِِِArms التي تستخدم في الصناعة اكثر ذكاءا بدلا من اعتمادها الحالي على التلقين و هذا مشروع كامل داخل ROS يسمي ROS-Industrial.

كما يوجد العديد من التطبيقات التي ربما شاهدتها و لم تعرف أنها تعتمد على ROS بالأساس.

ROS و الframeworks الأخري

ببساطه ROS هو اكثر الframeworks انتشارا الآن. و اغلب الframeworks الأخري التي كانت موجوده عند بداية تطوير ROS انقطع التطوير و الدعم عنها و أغلقت مشاريعها مثال على ذلك CARMEN و ORCOS و YARP و MOOS و Microsoft Developer Robotics Studio و البعض الأخر تم نقل بعض المكتبات منه إلى ROS مثل Player. و باستثناء عدد من الsimulators الموجودة الآن فلا يوجد منافس لROS يقوم بنفس وظيفته كامله الآن.

لكن ما هي الميزة الأساسية التي تمتع بها ROS في مقابلهم؟

ROS لم يصمم ليكون هو الframework الأكبر الذي به اكبر عدد من المكتبات (بغض النظر انه الآن كذلك) و لكن صمم ليسهل إعادة استخدام المكتبات بين الروبوتات المختلفة بطريقه سهله. فROS ركز اكثر على توفير البنية الأساسية لتطوير الروبوتات و هو ما سيوضح اكثر لاحقا في شرح المزايا و طريقه عمله و كيف يمكن استخدامه على أي نظام تشغيل أو معالج (processor) باختلاف معماريتهم.

طريقه عمل و تصميم ROS جذب البعض لاستخدامه في بعض التطبيقات غير المتعلقة بالروبوتات

تاريخ ROS و بداية تطويره

بداية تطوير ROS كانت تحت اسم Switch-yard في Staford Artificial intelligence laboratory بعدها تحول التطوير الأساسي (البداية الفعلية لROS) إلىWillow Garage وبعدها تم تأسيس OSRF (Open Source Robotics Foundation) و هى المشرف على ROS حتى الآن و لديها مشاريع أخري مرتبطه بROS مثل Gazebo و هو Physical Simulator (سنتحدث عنه بالتفصيل لاحقا في دروس اخري)

لكن المساهمة في ROS لم تكن منهم فقط, فانROS مفتوح المصدر (open source) تحت رخصه BSD و بالتالي فان شريحه المطورين له و العاملين به كبيره جدا فيوجد مجموعات و شركات أخري تساهم في تطويره , أيضا ROS يستخدم رخصه BSD التي لا تشترط بان تكون الأعمال المشتقة مفتوحه المصدر و هذا يجعل ROS يستخدم في استخدامات مغلقه المصدر و تجاريه.

عمر ROS الآن 9 سنوات لمشاهده بعض ما حققه خلال هذه السنوات شاهد هذه الفيديوهات

ما هي البيئة التي يعمل عليها الROS؟

بيئة نظام التشغيل OS ؟

يعمل ROS على العديد من الOS و بالتحديد الUNIX-like OS و اشهرهم هم Linux وapple OSX ولكن الدعم الأساسي على نظام تشغيل Ubuntu و هي احدي توزيعات الLinux طبعا استخدام ROS مع توزيعات الLinux الأخري سهل جدا.

يمكن استخدام ROS مع اى انظمه تشغيل اخرى حيث توفر دعم في بعض النسخ منه لMicrosoft Windows و لكنه الدعم الآن قديم و نادر الاستخدام و لم يكن يوما بالكفاءه المطلوبة.

إذا كنت ما زلت تتعلم الROS فأنصحك باستخدام Ubuntu حتى لا تضيع وقتك في بناء الأكواد من المصدر (source code) بالإضافة إلى توافر الدعم بشكل اكبر على Ubuntu.

الHardware ؟

كما ذكرت يمكن لROS ان يعمل على اى UNIX-like OS فأي جهاز قادر على تشغيل Linux هو قادر على تشغيل ROS سواء كان laptop او بورده مدمجه مثل raspberry pi.

لا تنس نقطه القوه التي يعطيها Linux لROS هنا. فLinux قادر على العمل على شريحه كبيره جدا جدا من المعالجات باختلاف معماريتها و قدرتها و بالتالي ROS له نفس الصلاحية, فباستخدام Yocto Project يمكنك أن تجعل ROS يعمل على اى جهاز ليس له دعم بطريقه سهله, فاROS له دعم إلى حد كبير في Yocto Project خاصه في المكتبات و الحزم الرئيسية.

أهداف ROS الرئيسية و اهم نقط قوته

Code Reuse & ROS-agnostic Libraries

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

لغات البرمجة المدعومة

ROS مصمم بحيث لا يكون مرتبط أو متوقف على أي لغة برمجه معينه. يمكن ببساطه أضافية اى لغه جديده للعمل معه في أي وقت. اغلب الاكواد الآن مكتوبه ب ++C و python و لكن هناك العديد من اللغات المدعومة مثل Java و Ruby والعديد.

الحوسبة الموزعة distributed processing

كل برنامج في ROS يعمل في عمليه (Process) منفصله لها أو عدد من العمليات و يربط بينهم باستخدام بنيه اتصالاتROS الأساسية (ROS communication infrastructure). لا يهم إذا كانت هذه العمليات على نفس الجهاز أم لا. فاROS مصمم ليعمل على أي عدد من الأجهزة معا, يمكن أن يكون لديك أي عدد من الأجهزة تعمل بلينكس معا لايوجد مشكله في ذلك.و يتم ذلك بطريق سهله دون التأثير على باقي البرامج الموجودة على أي جهاز منهم.

Scaling

ROS قادر على تشغيل اى روبوت سواء كان معقد جدا أو بسيط جدا. حيث ان متطلبات تشغيل ROS تكبر أو تصغر حسب تطبيق الروبوت.

سهوله بناء الحزم (packages) في ROS

يعتمد ROS على مجموعه من الأدوات لتسهيل بناء و إدارة الحزم بداخله لتسهيل نقلها هي أيضا بين انظمه التشغيل و هي أدوات Cmake

سهوله استخدام أجهزة الاستشعار (Sensor)

يوفر ROS مجموعه كبيره جدا من الdrivers. تقريبا يوجد drivers لأي Sensor يمكن أن تفكر في استخدامه نتيجة لكبر شريحه المطورين. كما يوفر تكامل سهل للحصول على البيانات من الSensors المتصلة بالمتحكمات الدقيقة مثل Arduino و غيره.

Bag files

تعتبر ميزه قاتله في ROS فعليا. لقد ذكرت أن أي برنامج يعمل في ROS يعمل على هيئه عمليه أو عدد من العمليات المنفصلة و بالتالي أي Sensor يعمل فيROS له عمليه منفصلة, يتم التواصل بين هذه العمليات عن طريق رسائل Messages.

الbag files هي أداة تستطيع تسجيل الmessages فى ROS . و يمكن تسجيل كل الرسائل في النظام إذا رغبت, و هذا معناه انه يمكنك تسجيل كل القراءات التي تمت من أي sensor أو أي عمليات تمت عليها و أي خرج من أي عمليه و استخدام هذه التسجيلات قي اختبارات لاحقه و كل هذا كتابه بسطر واحد فقط في سطر أوامر لينكس (Linux cmd line). هذه الأداة توفر ساعات كبيره جدا من العمل لمطوري الروبوتات و تمكنك في بعض الأحيان من القيام بأعمال لن تقدر عليها بدونها.

سأعطي مثالا للتوضيح اكثر من ذلك. تخيل انك تريد بناء map (خريطة ثلاثيه الأبعاد لمكان ما) باستخدام طائره بدون طيار (drone) و لكن للقيام بذلك يجب ان يتوفر معالج سريع على الطائره. في حاله عدم توافر ذلك, و كنت تستخدم ROS يمكنك تسجيل كل البيانات من الكاميرات و الٍsensors الأخري مثلا ال IMU (سيشرح بالتفصيل لاحقا في دروس أخري) و بعد تسجيلها تعيد استخدام هذه البيانات لبناء الخريطة باستخدام الlaptop مثلا بدون إعادة استخدام الطائرة. هذا مجرد مثال و هناك drones قادره على ذلك

متطلبات العمل على ROS؟ من سيفيده تعلم ROS؟ ماذا ستتعلم من ROS؟

متطلبات العمل على ROS؟

سطر أوامر لينكس Linux command line

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

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

لغة برمجه واحده على الأقل

يفضل معرفه python لأنة سيتم استخدامها عامه في معظم الدروس هنا, و لكن إذا لم يكن لديك معرفه بأي لغه أخرى فلغه python سهل جدا تعلمها إذا كنت على معرفه بأي لغة أخرى.

ملحوظات أخرى مهمه هنا

تعلم ROS لن يفيد المهتمين بعلوم الروبوت فقط, ROS سيعرضك للكثير من مفاهيم الهندسة الإلكترونية و علوم الحاسب. كثير من مطوري ROS ليسوا من دارسي هندسة الميكاترونيكس أو الهندسة الميكانيكية.

فأي نظام تبنيه فى ROS سيشمل عملك على الاتى (ماذا ستتعلم من ROS؟)

  • العمل على sensors مختلفه

  • استخدام المتحكمات الدقيقه Micro-controllers و يمكن ان يتعددوا و يختلفوا في المشروع الواحد

  • ستتعامل مع بروتوكولات الاتصال المختلفة و أحيانا ستضطر للاختيار بين انسبها في حالات معينه

  • فهم طريقه عمل انظمه التشغيل خاصة لينكس

  • بناء الأكواد و المكتبات و الحزم من المصدر(source code) و يمكن أن تضطر لبناء نظام لينكس نفسه من المصدر

  • العمل على معماريات المعالجات المختلفة في المشروع الواحد

  • يمكن أن تستخدم عده لغات برمجه

  • استخدام الsoftware version control لإدارة الملفات المصدرية مثل Git و SVN

  • تقليل الاعتماد على بيئات التطوير IDE و الدخول في عمليه بناء الأكواد (compiling) يدويا بشكل اكبر

  • ستتعرض لبعض مفاهيم شبكات الحاسب

هذه المهارات الأساسية دون دخول في تفاصيل التطبيق المطلوب من الروبوت أصلا, فيمكن ان يضم

  • معالجه الصور الرقمية (image processing)

  • بناء الخرائط للبيئة المحيطة بالروبوت SLAM: Simultaneous Localization And Mapping

  • تمييز الأشياء object recognition

  • التعرف على الوجوه Face recognition

و غيره من التطبيقات المستخدمة فى الروبوتات

مهارات أخرى مهمه ستكتسبها على المستوى الشخصي, مثل؟

حل مشاكل الsystems الكبيرة (debugging) فى وقت قصير

بما أن أي System يعمل باستخدام ROS يكون به عدد كبير من الHW و الSW. فوجود أي مشكله تعنى وجود خطأ يجب تصحيحه في أي منهما. مثلا يمكن أن يكون الخطأ في إحدى التوصيلات أو خطأ في أي كود سواء كان في إحدى المتحكمات الدقيقة أو في نظام لينكس و أو مشاكل متعلقه بالذاكرة في أي منهما أو أي نوع أخر من المشاكل. في النهاية ستتعلم أيجاد أي مشكله في اقل وقت ممكن.

البحث الجيد قبل القيام باى عمل

ابحث ثم ابحث ثم ابحث قبل أن تبدأ العمل

أسوا ما يمكن أن تقوم به هو أن تعمل فتره طويله على برنامج لتكتشف انه موجود من البداية و مفتوح المصدر لكنك لم تبحث كفاية, ستتعرض لذلك الموقف كل مره تقوم بالبحث عن برنامج يؤدى وظيفه معينه في ROS و ستتعلم رغما عنك كيف تبحث جيدا قبل أن تبدأ في العمل.

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

متى يجب استخدام ROS؟ ما هي طريقة العمل النمطية في ROS؟

هل يمكن الاستغناء عن ROS تماما؟ متى؟

هل ROS له فائدة أصلا؟ – ستواجه من يتمسك بانه يمكن الاستغناء عن ROS و انه يفضل تطوير أكواده بنفسه و سيكون متمسك برأيه بعند عجيب. D: ماذا يكون ردك؟

إذا كنت قادر على استخدام متحكم دقيق Micro-controller لتطوير الروبوت بالكامل, فانت لن تحتاج إلى ROS. كل تطبيق على حسب حاجته و حسب تعقيده. مثلا اشهر روبوت يمكن القيام بعمله خلال التعلم هو line follower robot, إذا قررت استخدام ROS لتطوير تطبيق بسيط كهذا فستكون أضعت وقتك بدون داعى. و لكن ماذا لو كان لديك برنامج لمعالجة الصور الرقمية (image processing) فبالتأكيد انت تحتاج إلى مكتبه تساعدك على العمل مثل OpenCV و بما أن تطبيقك مرتبط بالروبوتات فاستخدامك لتكامل ROS مع OpenCV سيسهل الموضوع اكثر و اكثر و هنا طبعا استخدام ROS ضروري و تركه سيكون بمثابه عذاب.

التصميم النمطي لsystem يستخدم ROS:

في الأغلب إن أي نظام يكون به متحكم اكبر متصل بمتحكمات اصغر. هنا المتحكم الأكبر هو ROS حتي لو كان تواجد على اكثر من جهاز و المتحكمات الأصغر ستكون متحكمات دقيقه مثل Arduino. طريقه العمل هذه ستجنبك الكثير ضياع الوقت عند التطوير. و هذه طريقة عمل اغلب الأنظمة الكبيرة عموما.

نفترض كمثال لهذه الحالة انك كتبت كود للتحكم في سرعه مواتير مباشره من خلال raspberry pi GPIO متصله بالmotor driver, ففي حاله انك قررت استبدال الraspberry pi بأي بورده أخرى لسبب مثلا يتعلق بسرعه المعالج (لنفترض وجود برنامج image processing و كان ادائه بطىء على raspberry pi) , فأنك ستضطر إلى إعادة تعديل الكود ليتناسب مع مكتبه البودر الجديدة. لكن إذا اتبعت التصميم السابق فلن تضطر إلى تعديل أي أكواد, فالmotor driver سيكون متصل باردوينو و الاردوينو متصل بالمتحكم الاكبر أيا كان (raspberry pi هنا فى المثال), هنا سيتم كتابه كود زياده على المتحكم الأكبر لاستقبال البيانات من اردوينو و إدخالها في ROS و لكن عند تغيير الraspberry pi ببورده اخرى سيكون هذه الكود ثابت عليهم كلهم دون تغيير.ببساطه المتحكمات الدقيقة هي فقط المسئولة عن التحكم قي الهاردوير مباشره.

مقدمه بسيطه عن طريقه عمل ROS

خلال الشرح تم ذكر بعض مفاهيم ROS, ساعيد شرحها هى و باقى المفاهيم بسرعه, يكفى المعرفة السطحية بهذه المفاهيم الآن و الدخول في تفاصيل اكثر سيكون في الدروس القادمة.

Nodes: هي كل برنامج صغير يعمل داخلROS. مثال لوظيفه الnode يمكن ان تكون برنامج خاص بقراءة بيانات sensor معين أو التواصل مع متحكم دقيق micro-controller أو التحكم ف سرعه الروبوت خلال سيره ذاتيا (autonomous), يمكن أن تكون أي وظيفه. سبب اختيار ROS للعمل بهذه الطريقة لتسهيل التعديلات, فعند الرغبة إجراء تغيير في وظيفه الروبوت مثلا بدلا من أن تقوم بتعديل الاكواد كل مره يمكنك تشغيل الnode التي تريدها أن تعمل و تترك الباقي, ذلك يوفر وقت كبير.

كل node في ROS تعمل في عمليه (process) خاصه بها. إذا كان لديك علم بطريقه عمل أي نظام تشغيل فأن ROS يعمل بنفس الطريقة (لهذا سمى بهذا الاسم مع انه ليس OS حقيقي)

Messages: هي طريقه اتصال الNodes و تبادل البيانات بين بعضهم

Topics هي المكان الذي يتم نشر الmessages عليه, و يمكن أن ينشر عليها اكثر من Node أو يقرأ منها اكثر من Node في نفس الوقت.

Services مثل الTopic و لكن ينشر عليها node واحده فقط و يقرأ منها Node واحده فقط

Bag و يتم عليها تسجيل الmessages التي تريدها

ROS Master و هي الnode المسئولة عن تنظيم الاتصال بين الnodes

ملحوظه الاتصال بين الnodes يكون عباره عن peer-to-peer-network, أي بمجرد علم الnodes بمكان بعضهم يحدث بينهم اتصال مباشر بعيدا عن اتصال الMaster

rostools هى مجموعه أدوات من الcmd line يوفرها ROS للعمل عليه

الشرح بطريقه أعمق سيكون في الدروس القادمة

بعض الروبوتات التي تستخدم ROS:

لتصفح لتصفح قائمه كلمه بالروبوتات التى تستخدم ROS و لديها دعم ثابت له, ستجد في الصفحة دعم لUGV و UAV و ROS و سيارات و industrial ARMS

اهم روبوت يجب ذكره هنا هو الروبوتPR2, و هو الروبوت الذي بدا عليه تطويرROS في بداياته في willow garage, فيديو يوضح قدرات الروبوت.

الsensors الموجودة به (الخاصة بالرؤية):

  • Stereo camera
  • MS Kinect
  • laser scanner في قاعده الروبوتات
  • laser scanner متحرك اسفل الرأس
  • 2 camera واحده في كل ذراع

لتصفح كل المواصفات

معلومات عن الدروس

سيضم الدرس القادم تثبيت نظام Ubuntu و تثبيت ROS و ف النهاية شرح مفصل اكثر لطريق عمل ROS و مثال بسيط

بعدها سيتبعه عددا من المشاريع كلها تقوم بشرح نفس الأدوات, الاختلاف سيكون في الhardware المستخدم. المطلوب منك هو تطبيق درس واحد فقط على الأقل على حسب الsensors المستخدمة و المتوافر منها لديك

الhardware المطلوب في كل درس (اختار درس واحد فقط او المتوفر لديك)

– للمشروع الاول:

MS kinect سواء 360 او ONE , يمكنك شراء الsensor مستعمل فى حدود 700 جنيه مصرى او يمكنك شراء من AMAZON عن طريق شركه ادفعلى فى حدود من 600 الى 900 جنيه, لا تنسى شراء kinect adapter و هي وصله للباور و تحويله لUSB لان وصله الkinect مختلفه – غالبا ما يتم بيعها مع الkinect (الاسعار السابقه تتضمنها)

الأسعار متفاوته للنسختين, و الأسعار السابقة يمكن أن توجد للنسختين.

– للمشروع الثانى مطلوب:

  • arduino uno
  • DC Motor بها Magnetic Encoders
  • L298 Motor driver (يمكن استبدالها ببعض الTransistor – دائره بسيطه)

– للمشروع الثالث مطلوب:

  • any arduino board
  • servo Motor

الأحداث المتعلقة بROS؟

 ROSCON و هو مؤتمر يعقد كل سنه يعرض فيه المطورين الجديد الذي أضافوه

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

ROS Wiki و هى المكان الاساسى لتوثيق كل ROS Packages و يجب أن تكون دائما المرجع الأساسي لك لان تطوير ROS سريع جدا و تجد أن اغلب الكتب يتم تحديثها بصوره بطيئه. ملحوظه أخري أن بعض الpackages لا يتم توثيقها على ROS WIKI و لكن البحث على ROS answers يكون مفيد في هذه الحالة (لا تبحث أيضا في موضوعات قديمه لأنها لن تغطى الpackages الجديدة).

قناه OSRF على Vimeo و ينشر علىها تسجيلات من ROSCON

القناه تضم شرح مهم جدا لكثير من الpackages في ROS و في بعض الأحيان تضم معلومات لن تجدها موثقه إلا بها, يفضل متابعه شرح أي package قبل استخدامها لأول مره من هذه القناه بعد تصفح توثيقها على ROS Wiki

ROS Answers تقريبا أي مشكله ستواجهك ستجد حلها هناك

أين تتابع أخبار ROS؟

ROS Planet يتم نشر أخبار ROS و أخبار الحزم الجديدة التي تم إصدارها و طلبات العمل

Mailing Lists

مؤتمرات بحثيه متعلقه بالروبوتات IROS & ICRA

مشروع من عملى

الهدف من المشروع بناء روبوت ذاتي التحكم قادر على الوصول من مكانه إلى أي نقطه اطلب منه الوصول إليها (عن طريق برنامج RVIZ – برنامج يوضح قراءات الروبوت الحالية)

فيديوهات توضح عمل الروبوت

المصادر
مصادر لم يتم ذكرها:

aMoSeRo – a Mobile Sensor Robot

المصدر موقع آردوينو ببساطة


#2

الدرس الثانى

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

  • الجزء الاول تهيئه نظام التشغيل
  • الجزء الثانى تثبيت 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 على 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 لا يفضل استخدامها خاصه اذا كان المشروع كبير كما ذكرت.

The_Linux_Command_Line_arabic.pdf (3.2% u)

الجزء الثانى: تثبيت 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 على هيئه 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_tf_tree تعطى لك رسم بكامل ال joint و علاقتها ببعضها فى الروبوت,

لا تعتمد على الادوات الرسوميه فقط لانك فى بعض الاوقات لن تجد الا ال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

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

و يوضح البرنامج ال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.

المصدر موقع آردوينو ببساطة


(Ismail Omar) #3

السلام عليكم …لماذا نستخدم برنامج processing وماالفائده منه عندما نستخدمه مع برنامج arduino فيcnc …هل يوجد مرجع … بارك الله فيكم وانشالله في ميزان حسناتكم


#4

ما هو برنامج ال processing الذي تقصده؟؟


(Ismail Omar) #5

هذا الموقع Processing.org


#6

في الحقيقة ليس لدي فكرة عن هذا البرنامج


(Dahmane Hamid) #7

من فضلك ان استطعت اعطائي تفصيل تثبيت البرنامج ros عن طريق يوتيب وشكرا على المعلومات


#8

يمكنك الاطلاع على

هناك الكثير من الفيديوهات على اليوتيوب
يمكنك استخدام خاصية البحث
https://www.youtube.com/results?search_query=install+ros