الترجمة والملاحة في ROS باستخدام rtabmap

مساء الخير أيها القراء الأعزاء. في مقالتي الأخيرة ، تحدثت عن خوارزميتي SLAM تم تصميمهما لكاميرات العمق: rtabmap و RGBD-SLAM. ثم حاولنا فقط بناء خريطة للمنطقة. في هذه المقالة سوف أتحدث عن إمكانيات التوطين والتنقل في الروبوت باستخدام خوارزمية rtabmap. الذين يهتمون ، من فضلك ، تحت القط.

التوطين في rtabmap مع التصور في rviz


بادئ ذي بدء ، إذا لم يكن سيد ROS قيد التشغيل ، فقم بتشغيله:

roscore 

قم بتشغيل برنامج تشغيل الكاميرا:

 roslaunch freenect_launch freenect.launch depth_registration:=true 

قم بتشغيل rtabmap لإنشاء خريطة مع تصور في rviz وحذف الخريطة القديمة:

 roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start" rtabmapviz:=false rviz:=true 

عند اكتمال إجراء بناء الخريطة ، نقوم بإنهاء البرنامج باستخدام Ctrl + C لحفظ الخريطة وإعادة تشغيل rtabmap في وضع التوطين:

 roslaunch rtabmap_ros rtabmap.launch localization:=true rtabmapviz:=false rviz:=true 

الصورة

لإظهار الخريطة في rviz ، تحتاج إلى النقر فوق علامة الاختيار في عنصر تنزيل الخريطة على شاشة MapCloud:

الصورة

الصورة

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

الصورة

بناء الخرائط والملاحة باستخدام rtabmap باستخدام Turtlebot كمثال


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

 sudo apt-get install ros-<ros_version>-turtlebot-bringup ros-<ros_version>-turtlebot-navigation ros-<ros_version>-rtabmap-ros 

بشكل افتراضي ، يتم استخدام برنامج تشغيل OpenNI2 ، والذي تم تحديده في ملف 3dsensor_runch (TURTLEBOT_3D_SENSOR = asus_xtion_pro). في تجاربي ، استخدمت كاميرا Microsoft Kinect. لنقم بتثبيت برنامج التشغيل الخاص به في المتغير TURTLEBOT_3D_SENSOR:

 echo 'export TURTLEBOT_3D_SENSOR=kinect' >> ~/.bashrc source ~/.bashrc 

سنبدأ الآن في بناء الخريطة باستخدام حزم خاصة لمحاكاة Turtlebot في rtabmap_ros:

 roslaunch turtlebot_bringup minimal.launch roslaunch rtabmap_ros demo_turtlebot_mapping.launch args:="--delete_db_on_start" rgbd_odometry:=true roslaunch rtabmap_ros demo_turtlebot_rviz.launch 

سنرى في نافذة rviz:



والآن مع سحابة من النقاط من كاميرا Kinect:

الصورة

يجب أن ترى خريطة ثنائية الأبعاد ، وخريطة ثلاثية الأبعاد ، والمزيد من إخراج الموضوع الضروري للملاحة. بالإضافة إلى ذلك ، يتم عرض شاشات rviz القياسية وشاشات محددة إضافية لـ rtabmap (الخريطة المحلية ، الخريطة العالمية ، Rtabmap Cloud) في لوحة العرض على اليسار.

الصورة

دعنا ننقل الكاميرا في الفضاء وبعد فترة سنرى:

الصورة

بشكل افتراضي ، يستخدم rtabmap نفس قاعدة البيانات في كل مرة يتم فيها تشغيل demo_turtlebot_rviz.co.unch. لحذف الخريطة القديمة والبدء في إنشاء الخريطة مرة أخرى (من البداية النظيفة) ، يمكنك إما حذف قاعدة البيانات المحفوظة في الملف ~ / .ros / rtabmap.db يدويًا ، أو تشغيل demo_turtlebot_rviz_runch باستخدام الوسيطة args: = "- delete_db_on_start".

قم بتشغيل بناء الخريطة دون حذف قاعدة البيانات:

 roslaunch rtabmap_ros demo_turtlebot_mapping.launch 

بعد بناء الخريطة ، ستبدو النتيجة على النحو التالي:

الصورة

توطين مع Turtlebot


الآن لدينا خريطة محفوظة في قاعدة البيانات في الملف ~ / .ros / rtabmap.db. إعادة تشغيل demo_turtlebot_mapping_runch في وضع الأقلمة مع الأقلمة: = true:

 roslaunch rtabmap_ros demo_turtlebot_mapping.launch rgbd_odometry:=true localization:=true 

سنرى الصورة التالية:

الصورة

حرك Kinect إلى الجانب. سيحدد الروبوت موقعه الجديد بمجرد اكتشافه حلقة (إغلاق الحلقة):

الصورة

سوف يستغرق الكشف عن الحلقة الناجحة وقتًا ، لذا كن صبورًا.
يعمل بسرعة كبيرة:



التنقل المستقل مع Turtlebot


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

الصورة

وبيان الهدف من خلال النقر في مكان عشوائي على الخريطة

الصورة

أضف عرض Pose عن طريق تحديد الموضوع "/ move_base / current_goal" له وعرض المسار بتحديد الموضوع "/ move_base / NavfnROS / plan". يجب أن ترى المسار المخطط (الخط الأخضر على الخريطة) والهدف المحدد ، المشار إليه بسهم أحمر:

الصورة

إن حزمة move_base مسؤولة عن التحكم في الروبوت نحو الهدف. ستنشر أوامر الحركة مثل geometry_msgs / Twist إلى الموضوع / mobile_base / أوامر / السرعة:

 rostopic echo /mobile_base/commands/velocity 

يمكن العثور على معلومات إضافية حول العمل مع حزمة التنقل في البرنامج التعليمي على صفحة turtlebot_navigation الرسمية. هناك أيضًا برنامج تعليمي لاستخدام rtabmap على الروبوت الخاص بك.

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

Source: https://habr.com/ru/post/ar406615/


All Articles