Contents
يحتوي ROS على ثلاثة مستويات من المفاهيم: مستوى نظام الملفات ومستوى الرسم البياني الحسابي ومستوى المجتمع. تم تلخيص هذه المستويات والمفاهيم أدناه ، ثم تدخل الأقسام اللاحقة في كل منها بمزيد من التفصيل.
بالإضافة إلى المستويات الثلاثة للمفاهيم ، تحدد ROS أيضًا نوعين من الأسماء -- أسماء موارد الحزمة وأسماء موارد الرسم البياني -- والتي تمت مناقشتها أدناه.
ملاحظة: منذ ROS Groovy تصف صفحات الويكي هذه المفاهيم من حيث صلتها بنظام بناء catkin الجديد. للإصدارات الأقدم من ROS أو عند استخدام rosbuild buildsystem ، انظر:rosbuild/ROS/Concepts
مستوى نظام ملفات ROS
تغطي مفاهيم مستوى نظام الملفات بشكل أساسي موارد ROS التي تواجهها على القرص ، مثل:
الحزم: الحزم هي الوحدة الرئيسية لتنظيم البرامج في ROS. قد تحتوي الحزمة على عمليات وقت تشغيل ROS ("العقد") ، أو مكتبة تعتمد على ROS ، أو مجموعات بيانات ، أو ملفات تكوين ، أو أي شيء آخر يتم تنظيمه معًا بشكل مفيد. الحزم هي أكثر عناصر البناء الذرية وعنصر التحرير في ROS. وهذا يعني أن أكثر الأشياء الدقيقة التي يمكنك إنشاؤها وإصدارها هي الحزمة.
الحزم الوصفية: الحزم الوصفية هي حزم متخصصة تعمل فقط على تمثيل مجموعة من الحزم الأخرى ذات الصلة. تُستخدم العبوات الوصفية الأكثر شيوعًا كحامل مكان متوافق مع الإصدارات السابقة للتحويلrosbuild Stacks.
بيانات الحزم: توفر البيانات (package.xml) بيانات وصفية حول الحزمة ، بما في ذلك الاسم والإصدار والوصف ومعلومات الترخيص والتبعيات والمعلومات الوصفية الأخرى مثل الحزم المصدرة. يتم تعريف بيان الحزمة package.xml في REP-0127.
المخازن: مجموعة من الحزم التي تشترك في نظام VCS مشترك. تشترك الحزم التي تشترك في VCS في نفس الإصدار ويمكن إصدارها معًا باستخدام أداة التشغيل التلقائي لإصدار catkin bloom. غالبًا ما يتم تعيين هذه المخازن إلى rosbuild Stacks. يمكن أن تحتوي المخازن أيضًا على حزمة واحدة فقط.
أنواع الرسائل (msg): أوصاف الرسائل المخزنة في my_package / msg / MyMessageType.msg ، تحدد هياكل البيانات لـ الرسائل المرسلة في ROS.
أنواع الخدمات (srv): أوصاف الخدمة المخزنة في my_package / srv / MyServiceType.srv ، تحدد هياكل بيانات الطلب والاستجابة لـ الخدمات في ROS.
مستوى الرسم البياني في ROS
"الرسم البياني الحسابي" هو شبكة الند للند لعمليات ROS التي تعالج البيانات معًا. المفاهيم الأساسية للرسم البياني الحسابي لـ ROS هي "العقد Node" و "الرئيس Master" و "خادم المعاملات Parameter Server" و "الرسائل messages" و "الخدمات services" و "الموضوعات topics" و "الحقائب bags" '، وكلها توفر بيانات للرسم البياني بطرق مختلفة.
يتم تنفيذ هذه المفاهيم في حزمة ros_comm.
العقد: العقد هي العمليات التي تقوم بالحساب. تم تصميم ROS ليكون معياريًا بمقياس دقيق ؛ يتكون نظام التحكم في الروبوت عادة من العديد من العقد. على سبيل المثال ، تتحكم عقدة واحدة في محدد نطاق الليزر ، وتتحكم عقدة واحدة في محركات العجلة ، وتنفذ عقدة واحدة التوطين ، وتنفذ عقدة واحدة تخطيط المسار ، وتوفر العقدة الواحدة عرضًا رسوميًا للنظام ، وما إلى ذلك. تتم كتابة عقدة ROS باستخدام ROS مكتبة العميل ، مثل روس س++ roscpp أو روس بايثون rospy.
الرئيس: يوفر رئيس ROS تسجيل الاسم والبحث عن بقية الرسم البياني الحسابي. بدون المفتاح الرئيسي ، لن تتمكن العقد من العثور على بعضها البعض أو تبادل الرسائل أو استدعاء الخدمات.
خادم المعاملات: يسمح خادم المعاملات بتخزين البيانات عن طريق المفتاح في موقع مركزي. إنه حاليًا جزء من الرئيس Master.
الرسائل: تتواصل العقد مع بعضها البعض بتمرير الرسائل. الرسالة هي ببساطة بنية بيانات ، تتكون من حقول مكتوبة. يتم دعم الأنواع الأساسية القياسية (عدد صحيح ، نقطة عائمة ، منطقية ، إلخ) ، وكذلك مصفوفات الأنواع البدائية. يمكن أن تتضمن الرسائل بنى ومصفوفات متداخلة بشكل عشوائي (تشبه إلى حد كبير هياكل C).
الموضوعات: يتم توجيه الرسائل عبر نظام نقل تحت مسمى النشر Publish / الاشتراك Subscribe. ترسل العقدة رسالة عن طريق "نشرها" إلى موضوع. الموضوع هو اسم يستخدم لتعريف محتوى الرسالة. العقدة المهتمة بنوع معين من البيانات سوف "تشترك" في الموضوع المناسب. قد يكون هناك عدة ناشرين ومشتركين متزامنين لموضوع واحد ، وقد تنشر عقدة واحدة و / أو تشترك في مواضيع متعددة. بشكل عام ، الناشرون والمشتركون ليسوا على علم بوجود بعضهم البعض. الفكرة هي فصل إنتاج المعلومات عن استهلاكها. منطقيا ، يمكن للمرء أن يفكر في الموضوع على أنه ناقل رسائل مكتوب بشدة. كل ناقل له اسم ، ويمكن لأي شخص الاتصال بالحافلة لإرسال الرسائل أو استقبالها طالما أنها من النوع الصحيح.
الخدمات: نموذج النشر / الاشتراك هو نموذج اتصال مرن للغاية ، ولكن النقل أحادي الاتجاه الخاص به ليس مناسبًا لتفاعلات الطلب / الرد ، والتي غالبًا ما تكون مطلوبة في نظام موزع. يتم الطلب / الرد عبر الخدمات ، والتي يتم تحديدها بواسطة زوج من هياكل الرسائل: أحدهما للطلب والآخر للرد. تقدم عقدة التزويد خدمة تحت اسم ويستخدم العميل الخدمة عن طريق إرسال رسالة الطلب وانتظار الرد. تقدم مكتبات عملاء ROS بشكل عام هذا التفاعل للمبرمج كما لو كان استدعاء إجراء عن بعد.
الحقائب: تعد الحقائب تنسيقًا لحفظ بيانات رسائل ROS وتشغيلها. تعد الحقائب آلية مهمة لتخزين البيانات ، مثل بيانات المستشعرات ، التي يصعب جمعها ولكنها ضرورية لتطوير واختبار الخوارزميات.
يعمل ROS الرئيس كخدمة أسماء في الرسم البياني لحساب ROS. يخزن الموضوعات و الخدمات معلومات التسجيل لـ ROS العقد. تتواصل العقد مع الرئيس للإبلاغ عن معلومات التسجيل الخاصة بهم. عندما تتواصل هذه العقد مع الرئيس Master ، يمكنها تلقي معلومات حول العقد المسجلة الأخرى وإجراء الاتصالات حسب الاقتضاء. سيقوم الرئيس Master أيضًا بإجراء عمليات رد نداء لهذه العقد عندما تتغير معلومات التسجيل هذه ، مما يسمح للعقد بإنشاء اتصالات ديناميكيًا أثناء تشغيل العقد الجديدة.
العقد تتصل بالعقد الأخرى مباشرة ؛ يوفر الرئيس Master معلومات البحث فقط ، مثل خادم DNS. سوف تطلب العقد التي تشترك في موضوع ما اتصالات من العقد التي تنشر هذا الموضوع ، وستقوم بإنشاء هذا الاتصال عبر بروتوكول اتصال متفق عليه. البروتوكول الأكثر شيوعًا المستخدم في ROS يسمى TCPROS ، والذي يستخدم مآخذ TCP / IP القياسية.
تسمح هذه البنية بالعملية المنفصلة ، حيث تكون الأسماء هي الوسيلة الأساسية التي يمكن من خلالها بناء أنظمة أكبر وأكثر تعقيدًا. تلعب الأسماء دورًا مهمًا جدًا في ROS: تحتوي جميع العقد والموضوعات والخدمات والمعلمات على أسماء. تدعم كل ROS مكتبة العميل إعادة تعيين سطر الأوامر للأسماء ، مما يعني أنه يمكن إعادة تكوين البرنامج المترجم في وقت التشغيل ليعمل في هيكل مختلف للرسم البياني الحسابي.
على سبيل المثال ، للتحكم في جهاز تحديد المدى بالليزر Hokuyo ، يمكننا بدء تشغيل برنامج التشغيل عقدة_هوكويو hokuyo_node ، الذي يتحدث إلى الليزر وينشر رسائل << MsgLink (sensor_msgs / LaserScan) >> حول موضوع "المسح Scan". لمعالجة هذه البيانات ، قد نكتب عقدة باستخدام فلترة_الضوء التي تشترك في الرسائل حول موضوع "المسح Scan". بعد الاشتراك ، سيبدأ عامل التصفية الخاص بنا تلقائيًا في تلقي الرسائل من الليزر.
لاحظ كيف يتم فصل الجانبين. كل ما تفعله عقدة hokuyo_node هو نشر عمليات المسح ، دون معرفة ما إذا كان أي شخص مشتركًا أم لا. كل ما يفعله المرشح هو الاشتراك في عمليات المسح ، دون معرفة ما إذا كان أي شخص ينشرها. يمكن بدء العقدتين ، وقتلهما ، وإعادة تشغيلهما ، بأي ترتيب ، دون التسبب في أي ظروف خطأ.
قد نضيف لاحقًا ليزرًا آخر إلى الروبوت الخاص بنا ، لذلك نحتاج إلى إعادة تكوين نظامنا. كل ما نحتاجه هو "إعادة رسم خريطة" الأسماء المستخدمة. عندما نبدأ أول "hokuyo_node" ، يمكننا أن نقول له بدلاً من ذلك أن نعيد تعيين "scan" إلى "base_scan" ، ونفعل الشيء نفسه مع عقدة التصفية. الآن ، ستتواصل كلتا العقدتين باستخدام موضوع base_scan بدلاً من ذلك ولن تسمع الرسائل حول موضوع المسح. ثم يمكننا بدء تشغيل "hokuyo_node" آخر لجهاز البحث عن نطاق الليزر الجديد.
مستوى مجتمع ROS
مفاهيم مستوى مجتمع ROS هي موارد ROS التي تمكن المجتمعات المنفصلة من تبادل البرامج والمعرفة. تشمل هذه الموارد:
التوزيعات: توزيعات ROS هي مجموعات من أكوام (جمع كومة مجموعة من الحزم) التي يمكنك تثبيتها. تلعب التوزيعات دورًا مشابهًا لتوزيعات Linux: فهي تسهل تثبيت مجموعة من البرامج ، كما أنها تحتفظ بإصدارات متسقة عبر مجموعة من البرامج.
المخازن: تعتمد ROS على شبكة موحدة من مخازن الأكواد ، حيث يمكن للمؤسسات المختلفة تطوير مكونات برامج الإنسالة الخاصة بها وإصدارها.
ويكي ROS: Wiki مجتمع ROS هو المنتدى الرئيسي لتوثيق المعلومات حول ROS. يمكن لأي شخص التسجيل للحصول على حساب والمساهمة في الوثائق الخاصة به ، وتقديم التصحيحات أو التحديثات ، وكتابة البرامج التعليمية ، والمزيد.
نظام تذكرة الخلل: يرجى الاطلاع على التذاكر للحصول على معلومات حول تذاكر الملفات.
القوائم البريدية: تعد القائمة البريدية لمستخدمي ros قناة الاتصال الأساسية حول التحديثات الجديدة لـ ROS ، فضلاً عن منتدى لطرح أسئلة حول برنامج ROS.
أجوبة ROS: موقع للأسئلة والأجوبة للإجابة على الأسئلة المتعلقة بـ ROS.
مقالات: تقدم ros.org مدونة تحديثات منتظمة ، بما في ذلك الصور ومقاطع الفيديو.
Contents
الأسماء
أسماء موارد الرسم البياني
توفر أسماء موارد الرسم البياني بنية تسمية هرمية تُستخدم لجميع الموارد في الرسم البياني لحساب ROS ، مثل العقد و المعاملات و المواضيع و الخدمات. هذه الأسماء قوية جدًا في ROS وهي أساسية لكيفية تكوين الأنظمة الأكبر والأكثر تعقيدًا في ROS ، ، لذلك من المهم فهم كيفية عمل هذه الأسماء وكيف يمكنك التعامل معها.
قبل أن نشرح المزيد من التفاصيل عن الأسماء ، إليك بعض الأمثلة على الأسماء:
/ (the global namespace)
/foo
/stanford/robot/name
/wg/node1
تُعد أسماء موارد الرسم البياني آلية مهمة في ROS لتوفير التغليف. يتم تعريف كل مورد ضمن مساحة اسم ، والتي يمكن مشاركتها مع العديد من الموارد الأخرى. بشكل عام ، يمكن للموارد إنشاء موارد داخل مساحة الاسم الخاصة بهم ويمكنهم الوصول إلى الموارد داخل أو فوق مساحة الاسم الخاصة بهم. يمكن إجراء الاتصالات بين الموارد في مساحات أسماء مختلفة ، ولكن يتم ذلك بشكل عام عن طريق رمز التكامل فوق كلتا نطاقات الأسماء. يعزل هذا التغليف أجزاء مختلفة من النظام عن الاستيلاء بطريق الخطأ على المورد المسمى الخاطئ أو أسماء الاختطاف العالمية.
يتم حل الأسماء نسبيًا ، لذلك لا تحتاج الموارد إلى معرفة مساحة الاسم الموجودة فيها. هذا يبسط البرمجة حيث يمكن كتابة العقد التي تعمل معًا كما لو كانت جميعها في مساحة اسم المستوى الأعلى. عندما يتم دمج هذه العقد في نظام أكبر ، يمكن "دفعها لأسفل" في مساحة اسم تحدد مجموعة التعليمات البرمجية الخاصة بها. على سبيل المثال ، يمكن للمرء أن يأخذ عرضًا توضيحيًا لستانفورد وعرضًا تجريبيًا من Willow Garage ودمجهما في عرض توضيحي جديد باستخدام الرسوم البيانية الفرعية "stanford" و "wg". إذا كان كلا العرضين يحتويان على عقدة تسمى "الكاميرا" ، فلن يتعارضوا. يمكن إنشاء الأدوات (مثل التمثيل البياني للرسم البياني) وكذلك المعلمات (مثل الاسم_العرضي) التي يجب أن تكون مرئية للرسم البياني بأكمله بواسطة عقد المستوى الأعلى.
الأسماء الصحيحة
يحتوي الاسم الصحيح على الخصائص التالية:
الحرف الأول هو حرف ألفا ([a-z | A-Z]) ، تيلدا (~) أو الشرطة المائلة للأمام (/)
يمكن أن تكون الأحرف اللاحقة أبجدية رقمية ([0-9 | a-z | A-Z]) ، أو شرطات سفلية (_) ، أو شرطة مائلة للأمام ( / )
استثناء : لا يمكن أن تحتوي الأسماء الأساسية (الموضحة أدناه) على شرطات مائلة للأمام ( / ') أو تيلدا ("~`) بداخلها.
Resolving
هناك أربعة أنواع من أسماء موارد الرسم البياني في ROS: "أساسي Base" و "نسبي relative" و "عام Global" و "خاص Private" ، والتي لها الصيغة التالية:
base
relative/name
/global/name
~private/name
بشكل افتراضي ، يتم إجراء الدقة "نسبيًا" لمساحة اسم العقدة. على سبيل المثال ، تحتوي العقدة / wg / node1 على مساحة الاسم / wg ، لذا فإن الاسم node2 سيتم تحليله إلى / wg / node2.
الأسماء التي لا تحتوي على محددات لمعرفات الهيكلة هي أسماء "أساسية". الأسماء الأساسية هي في الواقع فئة فرعية من الأسماء النسبية ولها نفس قواعد الدقة. يتم استخدام الأسماء الأساسية بشكل متكرر لتهيئة اسم العقدة.
الأسماء التي تبدأ بـ "/" هي "عامة Global" - تعتبر قد تم حلها بالكامل. يجب تجنب الأسماء العامة قدر الإمكان لأنها تحد من إمكانية نقل الكود.
الأسماء التي تبدأ بـ "~" هي "خاصة". يقومون بتحويل اسم العقدة إلى مساحة اسم. على سبيل المثال ، يحتوي node1 في مساحة الاسم / wg / على مساحة الاسم الخاصة / wg / node1. الأسماء الخاصة مفيدة لتمرير المعلمات إلى عقدة معينة عبر خادم المعلمات.
إليك بعض أمثلة تحليل الاسم:
Node |
Relative (default) |
Global |
Private |
/node1 |
bar -> /bar |
/bar -> /bar |
~bar -> /node1/bar |
/wg/node2 |
bar -> /wg/bar |
/bar -> /bar |
~bar -> /wg/node2/bar |
/wg/node3 |
foo/bar -> /wg/foo/bar |
/foo/bar -> /foo/bar |
~foo/bar -> /wg/node3/foo/bar |
إعادة التخطيط
يمكن إعادة تعيين أي اسم داخل عقدة ROS عند تشغيل العقدة في سطر الأوامر. لمزيد من المعلومات حول هذه الميزة ، راجع إعادة تعيين الوسائط.
أسماء موارد الحزمة
تُستخدم أسماء موارد الحزمة في ROS مع مفاهيم على مستوى نظام الملفات لتبسيط عملية الإحالة إلى الملفات وأنواع البيانات على القرص. تعتبر أسماء موارد الحزمة بسيطة للغاية: فهي مجرد اسم الحزم الموجود بها المورد بالإضافة إلى اسم المورد. على سبيل المثال ، يشير الاسم "std_msgs / String" إلى نوع الرسالة "String" في الحزمة "std_msgs".
تتضمن بعض الملفات ذات الصلة بـ ROS والتي يمكن الإشارة إليها باستخدام أسماء موارد الحزم ما يلي:
أسماء موارد الحزمة تشبه إلى حد بعيد مسارات الملفات ، إلا أنها أقصر بكثير. ويرجع ذلك إلى قدرة ROS على تحديد موقع الحزم على القرص وعمل افتراضات إضافية حول محتوياتها. على سبيل المثال ، يتم تخزين أوصاف الرسائل دائمًا في الدليل الفرعي msg ولها امتداد .msg ، لذا فإن std_msgs / String هي اختصار لـ المسار / إلى / std_msgs / msg / String.msg. وبالمثل ، فإن نوع العقدة "foo / bar" يعادل البحث عن ملف باسم "bar" في الحزمة "foo" بأذونات قابلة للتنفيذ.
الأسماء الصحيحة
تحتوي أسماء موارد الحزمة على قواعد تسمية صارمة حيث يتم استخدامها غالبًا في التعليمات البرمجية التي يتم إنشاؤها تلقائيًا. لهذا السبب ، لا يمكن أن تحتوي ROS الحزم على أحرف خاصة بخلاف الشرطة السفلية ، ويجب أن تبدأ بحرف أبجدي. الاسم الصالح له الخصائص التالية:
1. الحرف الأول هو حرف ألفا ([a-z | A-Z])
يمكن أن تكون الأحرف اللاحقة أبجدية رقمية ([0-9 | a-z | A-Z]) أو شرطات سفلية (_) أو شرطة مائلة للأمام ( / )
- يوجد على الأكثر شرطة مائلة واحدة للأمام ("/").
كود API
roscpp::names API reference (ROS Noetic)