[Documentation] [TitleIndex] [WordIndex

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

يحتوي ROS على ثلاثة مستويات من المفاهيم: مستوى نظام الملفات ومستوى الرسم البياني الحسابي ومستوى المجتمع. تم تلخيص هذه المستويات والمفاهيم أدناه ، ثم تدخل الأقسام اللاحقة في كل منها بمزيد من التفصيل.

بالإضافة إلى المستويات الثلاثة للمفاهيم ، تحدد ROS أيضًا نوعين من الأسماء -- أسماء موارد الحزمة وأسماء موارد الرسم البياني -- والتي تمت مناقشتها أدناه.

ملاحظة: منذ ROS Groovy تصف صفحات الويكي هذه المفاهيم من حيث صلتها بنظام بناء catkin الجديد. للإصدارات الأقدم من ROS أو عند استخدام rosbuild buildsystem ، انظر:rosbuild/ROS/Concepts

مستوى نظام ملفات ROS

تغطي مفاهيم مستوى نظام الملفات بشكل أساسي موارد ROS التي تواجهها على القرص ، مثل:

مستوى الرسم البياني في ROS

"الرسم البياني الحسابي" هو شبكة الند للند لعمليات ROS التي تعالج البيانات معًا. المفاهيم الأساسية للرسم البياني الحسابي لـ ROS هي "العقد Node" و "الرئيس Master" و "خادم المعاملات Parameter Server" و "الرسائل messages" و "الخدمات services" و "الموضوعات topics" و "الحقائب bags" '، وكلها توفر بيانات للرسم البياني بطرق مختلفة.

يتم تنفيذ هذه المفاهيم في حزمة ros_comm.

يعمل 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" آخر لجهاز البحث عن نطاق الليزر الجديد.

http://ros.org/images/wiki/ROS_basic_concepts.png ROS_basic_concepts.dia

مستوى مجتمع ROS

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

الأسماء

أسماء موارد الرسم البياني

توفر أسماء موارد الرسم البياني بنية تسمية هرمية تُستخدم لجميع الموارد في الرسم البياني لحساب ROS ، مثل العقد و المعاملات و المواضيع و الخدمات. هذه الأسماء قوية جدًا في ROS وهي أساسية لكيفية تكوين الأنظمة الأكبر والأكثر تعقيدًا في ROS ، ، لذلك من المهم فهم كيفية عمل هذه الأسماء وكيف يمكنك التعامل معها.

قبل أن نشرح المزيد من التفاصيل عن الأسماء ، إليك بعض الأمثلة على الأسماء:

  • / (the global namespace)

  • /foo

  • /stanford/robot/name

  • /wg/node1

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

يتم حل الأسماء نسبيًا ، لذلك لا تحتاج الموارد إلى معرفة مساحة الاسم الموجودة فيها. هذا يبسط البرمجة حيث يمكن كتابة العقد التي تعمل معًا كما لو كانت جميعها في مساحة اسم المستوى الأعلى. عندما يتم دمج هذه العقد في نظام أكبر ، يمكن "دفعها لأسفل" في مساحة اسم تحدد مجموعة التعليمات البرمجية الخاصة بها. على سبيل المثال ، يمكن للمرء أن يأخذ عرضًا توضيحيًا لستانفورد وعرضًا تجريبيًا من Willow Garage ودمجهما في عرض توضيحي جديد باستخدام الرسوم البيانية الفرعية "stanford" و "wg". إذا كان كلا العرضين يحتويان على عقدة تسمى "الكاميرا" ، فلن يتعارضوا. يمكن إنشاء الأدوات (مثل التمثيل البياني للرسم البياني) وكذلك المعلمات (مثل الاسم_العرضي) التي يجب أن تكون مرئية للرسم البياني بأكمله بواسطة عقد المستوى الأعلى.

الأسماء الصحيحة

يحتوي الاسم الصحيح على الخصائص التالية:

  1. الحرف الأول هو حرف ألفا ([a-z | A-Z]) ، تيلدا (~) أو الشرطة المائلة للأمام (/)

    1. يمكن أن تكون الأحرف اللاحقة أبجدية رقمية ([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])

  1. يمكن أن تكون الأحرف اللاحقة أبجدية رقمية ([0-9 | a-z | A-Z]) أو شرطات سفلية (_) أو شرطة مائلة للأمام ( / )

  2. يوجد على الأكثر شرطة مائلة واحدة للأمام ("/").

كود API

roscpp::names API reference (ROS Noetic)

Next

Higher-Level Concepts


2024-04-13 12:25