ROS، اختصارًا لـ Robot Operating System أي «نظام تشغيل الروبوت»، هو مجموعة مجانية ومفتوحة المصدر من المكتبات البرمجية والأدوات المخصصة لبناء برمجيات الروبوتات. ورغم اسمه، فهو ليس نظام تشغيل مثل Windows أو Linux، بل يعمل فوق نظام تشغيل، غالبًا Ubuntu Linux، ويمنح البرامج الكثيرة داخل الروبوت طريقة موحدة لتبادل البيانات ومشاركة برامج التشغيل والاستفادة من عمل بعضها.

ولأن الاسم يثير كثيرًا من الالتباس، فمن المفيد أن نحدد بدقة ما يغطيه ROS. فهو بارع جدًا في تنظيم كل ما يجري داخل الروبوت الواحد: الماسح الليزري، والعجلات، والخريطة، ومخطِّط الحركة. لكن دوره أضعف بكثير حين يتعلق الأمر بالمبنى الذي يعمل فيه الروبوت، بأبوابه ومصاعده ومستشعراته، وبالأشخاص الذين يجب أن يعرفوا متى يحدث خلل ما. وتحديد أين ينتهي أحدهما ويبدأ الآخر مسألة عملية لكل من ينشر روبوتات خارج المختبر.

باختصار

  • ROS برمجيات وسيطة (middleware): نظام لتبادل الرسائل، ومجموعة من الاصطلاحات المتفق عليها، ومكتبة كبيرة من الحزم القابلة لإعادة الاستخدام، تعمل كلها فوق نظام تشغيل عادي.
  • داخل الروبوت، تنشر برامج صغيرة تُسمى العُقد (nodes) بياناتها في تدفقات مسماة تُعرف بالمواضيع (topics) وتشترك فيها، ولذلك يمكن أن يكتب أشخاص مختلفون برنامج تشغيل الليدار ومخطِّط الملاحة، ومع ذلك يعمل الاثنان معًا.
  • ROS 2 هو الجيل الحالي؛ فقد انتهى دعم ROS 1 في مايو 2025، لذا تبدأ المشاريع الجديدة بإصدار من ROS 2 ذي دعم طويل الأمد.
  • ينسق ROS أجزاء الروبوت، أما ربط الروبوت بأبواب الموقع ومستشعراته وإنذاراته فيحتاج إلى طبقة منفصلة فوقه.

ما هو نظام تشغيل الروبوت (ROS)؟

الروبوت خليط من العتاد تصنعه شركات مختلفة: ماسح ليزري من مورّد، ووحدات تشغيل المحركات من مورّد آخر، وكاميرات، ومستشعرات اصطدام، ولوحة لإدارة البطارية. ولكل قطعة واجهتها الخاصة. وقبل ROS، كان كل مختبر وكل شركة يكتب شيفرة الربط الخاصة به ليجعل هذه القطع تتواصل، ولم يكن ممكنًا إعادة استخدام إلا القليل منها في الروبوت التالي.

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

وتسمية «نظام التشغيل» هنا مجازية. فكما يتيح نظام التشغيل للتطبيقات ألا تهتم بنوع القرص أو بطاقة الشبكة في الحاسوب، يتيح ROS لبرمجيات الروبوت ألا تهتم بالعلامة التجارية للماسح المثبّت عليه، ما دام هناك برنامج تشغيل ينشر الرسالة القياسية.

انطلق ROS عام 2007 بأعمال أولية في جامعة ستانفورد، وتولّت تطويره شركة الروبوتات Willow Garage. وتتولى رعايته اليوم Open Robotics ومؤسسة Open Source Robotics Foundation، ويساهم فيه بالحزم مجتمع كبير من الشركات والجامعات. ومن أشهر هذه الحزم Nav2، وهي منظومة الملاحة للروبوتات المتنقلة، وMoveIt التي تخطط حركة الأذرع الروبوتية.

كيف يعمل نظام تشغيل الروبوت ROS؟

أسهل طريقة لفهمه هي تتبع روبوت واحد. لنأخذ روبوت توصيل ينقل المستلزمات في ممر مستشفى.

  1. تقرأ عقدة برنامج التشغيل الماسح الليزري وتنشر كل عملية مسح في موضوع اسمه /scan، بمعدل يتراوح تقريبًا بين عشر مرات وأربعين مرة في الثانية حسب المستشعر.
  2. تشترك عقدة تحديد الموقع في /scan وفي بيانات دوران العجلات (odometry)، وتقارنها بخريطة مخزنة، ثم تنشر الموقع الذي يظن الروبوت أنه فيه.
  3. تتلقى منظومة الملاحة هدفًا، مثل «اذهب إلى الجناح 3»، وتخطط مسارًا يلتف حول العوائق الظاهرة في آخر مسح، ثم تنشر أوامر السرعة في موضوع اسمه /cmd_vel.
  4. تشترك عقدة التحكم في المحركات في /cmd_vel وتحوّل تلك الأوامر إلى سرعات للعجلات.

لا تستدعي أي عقدة من هذه العقد عقدة أخرى مباشرة. كل ما تتفق عليه هو أسماء المواضيع وأنواع الرسائل، ولذلك يمكنك استبدال الماسح الليزري بطراز آخر بمجرد استبدال عقدة برنامج تشغيل واحدة.

تناسب المواضيع التدفقات المستمرة، ولدى ROS نمطان آخران لمهام مختلفة. فالخدمة (service) طلب سريع يعقبه رد، مثل «احفظ الخريطة الحالية». أما الإجراء (action) فهدف يستغرق وقتًا طويلًا، مع تقارير عن التقدم وإمكانية الإلغاء، وهي الطريقة المعتادة لإرسال أمر مثل «توجّه إلى الجناح 3». وتضبط المعاملات (parameters) إعدادات العقد، بينما تشغّل ملفات الإطلاق (launch files) مجموعة كاملة من العقد بأمر واحد.

وهناك مكوّن آخر يؤدي عملًا كبيرًا بصمت: tf2، مكتبة التحويلات. فكل مستشعر مثبت في مكان ما على الروبوت، ولكل خريطة نقطة أصل خاصة بها. وتتابع tf2 العلاقة بين كل هذه الأطر الإحداثية مع مرور الوقت، فإذا رأت الكاميرا عائقًا على بعد 1.2 متر أمامها و30 سنتيمترًا إلى اليسار، استطاع المخطِّط تحويل ذلك إلى موقع على الخريطة دون أن تجري كل عقدة حساباتها الهندسية بنفسها.

وحول هذه النواة توجد الأدوات التي يستخدمها الناس يوميًا: RViz لعرض بيانات مستشعرات الروبوت وخططه بصورة ثلاثية الأبعاد، وrosbag لتسجيل المواضيع وإعادة تشغيلها، ومحاكي Gazebo لاختبار الروبوت في عالم افتراضي.

في ROS 2، تعمل طبقة تبادل الرسائل على DDS (Data Distribution Service)، وهو معيار صناعي للنشر والاشتراك. وتكتشف العقد بعضها على الشبكة دون الحاجة إلى عملية master المركزية التي كان ROS 1 يتطلبها، ويمكن لكل موضوع أن يحمل إعدادات لجودة الخدمة، مثل تحديد ما إذا كان يجب إعادة إرسال الرسائل المفقودة.

ROS 1 أم ROS 2: كيف تختار نظام تشغيل الروبوت المناسب؟

تعرف معظم الفرق التي تبدأ اليوم أنها ستستخدم ROS. ما يبقى عليها اختياره هو الجيل والإصدار، وما إذا كان ينبغي لبعض أجزاء الروبوت أن تعمل بشيء آخر.

ROS 1 ROS 2
الحالة الإصدار الأخير Noetic، وانتهى دعمه في مايو 2025 قيد التطوير النشط، مع إصدار جديد كل مايو
تبادل الرسائل بروتوكول خاص مع عملية master مركزية DDS، دون نقطة فشل واحدة
الدعم طويل الأمد لا يوجد من الآن فصاعدًا إصدارات LTS مدعومة خمس سنوات، مثل Jazzy Jalisco حتى 2029
الأمان لا يوجد تأمين مدمج لنقل البيانات يضيف SROS2 التشفير والتحكم في الوصول
يناسب صيانة الروبوتات القائمة المشاريع والمنتجات الجديدة

وفي الواقع العملي، تحدد بضعة أسئلة هذا الاختيار:

  • برامج التشغيل. هل يوفر مورّد المستشعر أو الذراع لديك برنامج تشغيل لـROS 2؟ فغياب برنامج تشغيل واحد قد يكلف وقتًا أكثر من كل ما عداه مجتمعًا.
  • وتيرة الإصدارات. يصدر إصدار جديد من ROS 2 كل مايو. وتحصل إصدارات السنوات الزوجية على دعم لخمس سنوات، أما الإصدارات التي بينها فعلى نحو عام ونصف، لذلك تثبّت المنتجات عادةً إصدار LTS وتخطط مسبقًا للانتقال إلى الإصدار التالي.
  • العتاد الصغير. ينقل micro-ROS مفاهيم ROS 2 إلى المتحكمات الدقيقة، فتستطيع لوحة مستشعر الانضمام إلى مواضيع الروبوت مباشرة.
  • الأذرع الصناعية. تُبرمج أذرع صناعية كثيرة عبر وحدة التحكم الخاصة بالشركة المصنعة وبلغتها. وغالبًا ما يعمل ROS إلى جانب وحدة التحكم هذه بدلًا من أن يحل محلها، وهو مسار يعمل عليه اتحاد ROS-Industrial منذ سنوات.

وخطط للشبكة مبكرًا أيضًا. فـDDS يكتشف العقد تلقائيًا، وهذا مريح على طاولة الاختبار، لكنه يُحدث ضجيجًا كبيرًا على شبكة مؤسسية مشتركة تضم روبوتات كثيرة. وعادةً ما تفصل الفرق بين الروبوتات باستخدام معرّفات نطاقات DDS (domain IDs)، وتقصر الاكتشاف على أجهزة معروفة، وتفعّل SROS2 قبل أن يغادر الروبوت المختبر.

تبني بعض الشركات على ROS 2 وتضيف فوقه منظوماتها الخاصة، مثل حزم Isaac ROS من NVIDIA للإدراك المسرَّع بمعالجات الرسومات (GPU). وتحتفظ شركات أخرى بمنظومة برمجيات مملوكة لها ولا تكشف للخارج سوى واجهة. والمساران شائعان، لكن الثاني يكتسب أهمية حين يتعين على الروبوت العمل مع كل شيء آخر في الموقع.

كيف تربط نظام تشغيل الروبوت ROS بأجهزة إنترنت الأشياء؟

صُمم ROS لما يجري داخل الروبوت، أو لأسطول على شبكة واحدة. لكن في المبنى أو المصنع مجموعة ثانية من الأجهزة لا يستطيع الروبوت استشعارها: مستشعر تلامس على باب في الطرف الآخر من المستودع، ومستشعر تسرب في غرفة المعدات، وحالة باب مقاوم للحريق، وقراءة جودة الهواء في جناح بالمستشفى. وهذه الأجهزة تعمل عادةً ببروتوكولات LoRaWAN أو MQTT أو Modbus أو BACnet، لا بمواضيع ROS.

وهناك جسور معروفة. فـrosbridge يعرض مواضيع ROS بصيغة JSON عبر WebSockets، وتنقل حزم مجتمعية مواضيع مختارة من وسطاء MQTT وإليها، وينسق Open-RMF، أي Open Robotics Middleware Framework، بين أساطيل روبوتات متعددة تتشارك بنية تحتية مثل الأبواب والمصاعد. هذه الحلول تعالج النقل. أما تحديد أي حدث من أي مستشعر يجب أن يرسل أي روبوت وإلى أين، واختبار هذا المنطق قبل تشغيله في موقع حقيقي، فمهمة منفصلة.

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

وطبقة القرار هذه هي ما يضيفه نظام تشغيل للذكاء الاصطناعي المادي فوق ROS، وهي الطبقة التي نبني Kilo ليؤدي دورها. فإذا كان تكامل الروبوت يتيح بضعة أوامر عبر MQTT، مثل «اذهب إلى نقطة المسار» أو «عُد إلى محطة الشحن»، يمكنك حفظها في Kilo وجعل قاعدة ترسل أحدها عندما يبلّغ مستشعر في مكان آخر من الموقع عن حدث، بينما يواصل ROS إدارة الملاحة على متن الروبوت. ويظهر كل أمر ترسله بهذه الطريقة في سجله بإحدى الحالات: Pending أو Delivered أو Confirmed أو Soft warning أو Failed.

ولأن هذه الأوامر تحرك آلة حقيقية، فإنك تجرّب القاعدة أولًا: تتتبع تنفيذها خطوة بخطوة في مصحح الأخطاء في Kilo، وتحاكي استجابة الروبوت، فترى كيف يجري كل مسار قبل نشر أي شيء.

أسئلة شائعة حول نظام تشغيل الروبوت ROS

هل نظام تشغيل الروبوت ROS مجاني؟

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

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

مكتبتا العميل الرسميتان هما C++ (rclcpp) وPython (rclpy)، وكثيرًا ما يجمع الروبوت الواحد بينهما. وتوجد مكتبات مجتمعية للغة Rust وJava ولغات أخرى، وتُعرَّف أنواع الرسائل في ملفات واجهة بسيطة تولّد الشيفرة لكل لغة.

هل يمكن تشغيل نظام تشغيل الروبوت ROS على Windows؟

يدرج ROS 2 نظام Windows ضمن منصاته المدعومة إلى جانب Ubuntu Linux، وينشر كل إصدار مستويات دعم المنصات بدقة في وثيقة تُسمى REP 2000. لكن معظم الدروس التعليمية وبرامج التشغيل والروبوتات العاملة في الإنتاج لا تزال تستخدم Ubuntu، لذا يبقى Linux المسار الأسهل.

هل ROS 2 نظام تشغيل روبوت يعمل في الزمن الحقيقي؟

ليس بمفرده. صُمم ROS 2 بحيث يمكن استخدامه في أنظمة الزمن الحقيقي، لكن ذلك يتطلب أيضًا نواة تعمل في الزمن الحقيقي، مثل Linux مع رقعة PREEMPT_RT، وضبطًا دقيقًا للذاكرة والخيوط، وعتادًا يحافظ على دقة توقيته. وإطار ros2_control هو الطريقة المعتادة لتشغيل حلقات تحكم محكمة التوقيت للأذرع والعجلات داخل ROS 2.

إذا كان لديك روبوت يعمل بـROS 2، فهو مدخل مختصر للتعرف على جانب الموقع. استخدم أحد الجسور المجتمعية لنشر ثلاثة من مواضيعه عبر MQTT، مثل مستوى البطارية وحالة المهمة والموقع، وسجّل الروبوت جهازًا واحدًا في Kilo، واعرض القيم الثلاث في رسوم بيانية على لوحة معلومات. ثم أضف قاعدة تنبهك عندما تنخفض البطارية تحت 20% بينما لا تزال مهمة قيد التنفيذ. هذا جهاز واحد وقاعدة واحدة، أي أقل بكثير من حدود الخطة المجانية، ولا يتغير شيء في الروبوت سوى الجسر.