جدول المحتويات:

RGB-D SLAM مع Kinect على Raspberry Pi 4 [Buster] ROS Melodic: 6 خطوات
RGB-D SLAM مع Kinect على Raspberry Pi 4 [Buster] ROS Melodic: 6 خطوات

فيديو: RGB-D SLAM مع Kinect على Raspberry Pi 4 [Buster] ROS Melodic: 6 خطوات

فيديو: RGB-D SLAM مع Kinect على Raspberry Pi 4 [Buster] ROS Melodic: 6 خطوات
فيديو: RGB-D SLAM With Kinect on Raspberry Pi 4 ROS Melodic 2024, شهر نوفمبر
Anonim
Image
Image

كتبت العام الماضي مقالًا حول إنشاء وتثبيت ROS Melodic على Raspberry Pi الجديد (في ذلك الوقت) باستخدام نظام تشغيل Debian Buster. تلقت المقالة الكثير من الاهتمام هنا على Instructables وعلى الأنظمة الأساسية الأخرى. أنا سعيد جدًا لأنني ساعدت الكثير من الأشخاص على تثبيت ROS بنجاح على Raspberry Pi. في الفيديو المصاحب ، أوضحت أيضًا بإيجاز الحصول على صورة عميقة من Kinect 360. في وقت لاحق اتصل بي العديد من الأشخاص على LinkedIn وسألوني كيف تمكنت من استخدام Kinect مع Raspberry Pi. لقد فوجئت نوعًا ما بالسؤال ، نظرًا لأن عملية إعداد Kinect في ذلك الوقت استغرقت حوالي 3-4 ساعات ولم تبدو معقدة للغاية. لقد قمت بمشاركة ملفات.bash_history الخاصة بي مع جميع الأشخاص الذين استفسروا عن المشكلة وفي أبريل وجدت أخيرًا الوقت لكتابة مقال حول كيفية تثبيت برامج تشغيل Kinect وتنفيذ RGB-D SLAM باستخدام RTAB-MAP ROS. أسبوع من الليالي الطوال بعد بدء كتابة المقال ، أفهم الآن لماذا سألني الكثير من الناس هذا السؤال:)

سأبدأ بشرح موجز حول الأساليب التي نجحت والتي لم تنجح. ثم سأشرح كيفية تثبيت برامج تشغيل Kinect للاستخدام مع ROS Melodic وأخيراً كيفية إعداد جهازك لـ RGB-D SLAM باستخدام RTAB-MAP ROS.

الخطوة 1: ما الذي نجح وما الذي لم ينجح

هناك عدد قليل من برامج التشغيل المتاحة لـ Kinect على Raspberry Pi - اثنان منهم مدعومان من قبل ROS.

برامج تشغيل OpenNI - حزمة openni_camera لـ ROS

برامج تشغيل libfreenect - حزمة freenect_stack لـ ROS

إذا نظرت إلى مستودعات GitHub الخاصة بها ، يمكنك أن تجد أن برنامج تشغيل OpenNI قد تم تحديثه آخر مرة منذ سنوات ، وعمليًا هو EOL لفترة طويلة. ibfreekinect من ناحية أخرى يتم تحديثه في الوقت المناسب. نفس الشيء بالنسبة لحزم ROS الخاصة بهم ، تم إصدار freenect_stack لـ ROS melodic ، في حين أنه أحدث توزيعة openni_camera قدم دعمًا لـ Fuerte …

من الممكن تجميع وتثبيت برنامج تشغيل OpenNI وحزمة openni_camera على Raspberry Pi لـ ROS Melodic ، على الرغم من أنه لم ينجح معي. للقيام بذلك ، اتبع هذا الدليل ، الخطوات 1 ، 2 ، 3 ، في الخطوتين 2 و 3 ، قم بإزالة علامة "-mfloat-abi = softfp" من ملف Platform / Linux / Build / Common / Platform. ARM (وفقًا لإرشادات حول هذا قضية جيثب). ثم استنساخ حزمة openni_camera إلى مساحة عمل catkin وتجميعها باستخدام catkin_make. لم ينجح الأمر بالنسبة لي على الرغم من أن الخطأ كان يؤدي إلى فشل إنشاء عمق. السبب: واجهة USB غير مدعومة!

أدى استخدام libfreenect و freenect_stack إلى النجاح في النهاية ، ولكن كان هناك عدد غير قليل من المشكلات التي يجب حلها وكان الحل صعبًا بعض الشيء ، على الرغم من أنه يعمل بشكل مستقر للغاية (1 ساعة + استمرار التشغيل).

الخطوة 2: تثبيت برامج تشغيل Freenect و Freenect_stack

تثبيت برامج تشغيل Freenect و Freenect_stack
تثبيت برامج تشغيل Freenect و Freenect_stack

سأفترض أنك تستخدم صورة ROS Melodic Desktop الخاصة بي من هذه المقالة. إذا كنت تريد إجراء التثبيت في بيئة مختلفة ، على سبيل المثال صورة ros_comm أو في Ubuntu لـ Raspberry Pi ، فتأكد من أن لديك معرفة كافية حول ROS لحل المشكلات التي قد تنشأ عن هذا الاختلاف.

لنبدأ ببناء برامج تشغيل libfreenect من المصدر ، نظرًا لأن الإصدار المبني مسبقًا من apt-get repository قديم جدًا.

sudo apt-get update

sudo apt-get install libusb-1.0-0-dev

استنساخ بوابة

القرص المضغوط libfreenect

mkdir build && cd build

cmake -L..

صنع

sudo جعل التثبيت

نأمل أن تكون عملية الإنشاء هادئة ومليئة بالرسائل الصديقة للبيئة. بعد تثبيت برنامج تشغيل libfreenect ، الخطوة التالية هي تثبيت حزمة freenect_stack لـ ROS. هناك عدد غير قليل من الحزم الأخرى التي يعتمد عليها ، سيتعين علينا استنساخها والبناء باستخدام catkin_make معًا. قبل أن تبدأ ، تأكد من إعداد مساحة عمل catkin وتحديد مصادرها بشكل صحيح!

من مجلد src مساحة عمل catkin الخاص بك:

استنساخ بوابة

استنساخ بوابة

استنساخ بوابة

استنساخ بوابة

استنساخ بوابة

استنساخ بوابة

ووه ، كان ذلك كثيرًا من الاستنساخ.

التعديل اللاحق: كما أشار أحد القراء ، يجب ضبط مستودع vision_opencv على الفرع اللحني. لهذا القرص المضغوط إلى src / vision_opencv وتنفيذها

بوابة الخروج لحني

ثم ارجع إلى مجلد مساحة عمل catkin. للتحقق مما إذا كنا نتبع التبعيات لجميع الحزم في المكان ، نفّذ هذا الأمر:

تثبيت rosdep - من المسارات src --ignore-src

إذا نجحت في استنساخ جميع الحزم الضرورية ، فسيطلب تنزيل libfreekinect باستخدام apt-get. أجب لا ، لأننا قمنا بالفعل بتثبيته من المصدر.

sudo apt-get install libbullet-dev libharfbuzz-dev libgtk2.0-dev libgtk-3-dev

catkin_make -j2

وقت الشاي ؛) أو أيا كان مشروبك المفضل.

بعد انتهاء عملية التجميع ، يمكنك محاولة تشغيل kinect stack والتحقق مما إذا كان ينتج العمق والصور الملونة بشكل صحيح. أستخدم Raspberry Pi بدون رأس ، لذا أحتاج إلى تشغيل RVIZ على جهاز كمبيوتر سطح المكتب.

في Raspberry Pi ، قم (قم بتغيير عنوان IP إلى عنوان IP الخاص بـ Raspberry Pi!):

تصدير ROS_MASTER_URI = https://192.168.0.108: 11311

تصدير ROS_IP = 192.168.0.108

roslaunch freenect_launch freene. إطلاق العمق_التسجيل: = صحيح

سترى الإخراج كما في لقطة الشاشة 1. "إيقاف تدفق جهاز RGB و Depth Stream flush." يشير إلى أن Kinect جاهز ، ولكن لا يوجد شيء مشترك في موضوعاته حتى الآن.

على كمبيوتر سطح المكتب المثبت عليه ROS Melodic ، قم بما يلي:

تصدير ROS_MASTER_URI = https://192.168.0.108: 11311

تصدير ROS_IP = [your-desktop-computer-ip] rviz

الآن يجب أن تكون قادرًا على رؤية تدفقات صور RGB و Depth في RVIZ كما في لقطة الشاشة 2 أعلاه … ولكن ليس في نفس الوقت.

حسنًا ، هنا تبدأ الأشياء المبتكرة. لقد أمضيت 3 أيام في تجربة برامج تشغيل وأساليب مختلفة ولم ينجح شيء - بمجرد أن أحاول الوصول إلى دفقين في وقت واحد ، سيبدأ Kinect في انتهاء المهلة كما ترون في لقطة الشاشة 3. لقد جربت كل شيء: مصدر طاقة أفضل ، وإمدادات أقدم من libfreenect و freenect_stack ، إيقاف usb_autosuspend ، حقن التبييض في منافذ USB (حسنًا ، ليس الأخير! لا تفعل ذلك ، إنها مزحة ولا ينبغي أن تشكل نصيحة فنية:)). ثم في إحدى مشكلات Github ، رأيت حسابًا لشخص قال إن جهاز Kinect الخاص به غير مستقر ، إلى أن "قام بتحميل ناقل USB" عن طريق توصيل WiFi dongle. حاولت ذلك، وأنها عملت. من ناحية ، أنا سعيد لأنه نجح. من ناحية أخرى ، يجب على شخص ما إصلاح ذلك. حسنًا ، في غضون ذلك ، بعد إصلاح ذلك (نوعًا ما) ، دعنا ننتقل إلى الخطوة التالية.

الخطوة 3: تثبيت خريطة RTAB المستقلة

تثبيت مستقل RTAB MAP
تثبيت مستقل RTAB MAP

أولاً ، لدينا مجموعة من التبعيات ليتم تثبيتها:

على الرغم من توفر حزمة armhf سابقة الإنشاء لـ PCL ، فسنحتاج إلى تجميعها من المصدر بسبب هذه المشكلة. استشر مستودع PCL GitHub لمعرفة كيفية تجميعه من المصدر.

sudo apt-get install libvtk6-dev libvtk6-qt-dev libvtk6-java libvtk6-jni

sudo apt-get install libopencv-dev cmake libopenni2-dev libsqlite3-dev

الآن لنقوم باستنساخ rtab map مستقل لمستودع الحزمة git إلى المجلد الرئيسي الخاص بنا ونقوم ببنائه. لقد استخدمت الإصدار الأخير (0.18.0).

استنساخ بوابة

قرص rtabmap / بناء

cmake..

جعل -j2

sudo جعل التثبيت

sudo ldconfig rtabmap

الآن عندما نقوم بتجميع RTAB MAP المستقل ، يمكننا الانتقال إلى الخطوة الأخيرة - تجميع وتثبيت غلاف ROS لـ RTAB MAP ، rtabmap_ros.

الخطوة 4: تثبيت Rtabmap_ros

تثبيت Rtabmap_ros
تثبيت Rtabmap_ros

إذا وصلت إلى هذا الحد ، فمن المحتمل أنك تعرف التدريبات الآن:) قم بنسخ مستودع rtabmap_ros إلى مجلد مساحة عمل catkin الخاص بك. (قم بتنفيذ الأمر التالي من مجلد src مساحة عمل catkin!)

استنساخ بوابة

سنحتاج أيضًا إلى حزم ROS هذه ، حيث يعتمد rtabmap_ros على:

استنساخ بوابة

استنساخ بوابة

استنساخ بوابة

استنساخ بوابة

استنساخ بوابة

قبل أن تبدأ في التجميع ، يمكنك التأكد من عدم فقد أي تبعيات باستخدام الأمر التالي:

تثبيت rosdep - من المسارات src --ignore-src

قم بتثبيت المزيد من التبعيات من ap-get (لن يؤدي ذلك إلى مقاطعة الارتباط ، ولكنه سيؤدي إلى حدوث خطأ أثناء التجميع)

sudo apt-get install libsdl-image1.2-dev

ثم انتقل إلى مجلد مساحة عمل catkin وابدأ في التجميع:

قرص مضغوط..

catkin_make -j2

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

الخطوة 5: وقت العرض

موعد العرض
موعد العرض
موعد العرض
موعد العرض

قم بهذه الحيلة المبتكرة بإضافة شيء مثل WiFi أو Bluetooth dongle إلى منفذ USB - كنت أستخدم منفذين USB 2.0 ، أحدهما لـ Kinect والآخر لـ WiFi dongle.

في Raspberry Pi ، قم (قم بتغيير عنوان IP إلى عنوان IP الخاص بـ Raspberry Pi!): المحطة الأولى:

تصدير ROS_MASTER_URI = https://192.168.0.108: 11311

تصدير ROS_IP = 192.168.0.108

roslaunch freenect_launch freen.

المحطة الثانية:

roslaunch rtabmap_ros rgbd_mapping.la تشغيل rtabmap_args: = - delete_db_on_start --Vis / MaxFeatures 500 --Mem / ImagePreDecimation 2 --Mem / ImagePostDecimation 2 --Kp / DetectorStristic 6 --OdomF2M / MaxSize 1000 --Odomvecap: = خطأ

سترى الإخراج كما في لقطة الشاشة 1. "إيقاف تدفق جهاز RGB و Depth Stream flush." يشير إلى أن Kinect جاهز ، ولكن لا يوجد شيء مشترك في موضوعاته حتى الآن. في المحطة الثانية ، يجب أن ترى رسائل حول جودة odom. إذا قمت بنقل Kinect بسرعة كبيرة ، فستنتقل جودة odom إلى 0 وستحتاج إلى الانتقال إلى موقع سابق أو البدء من قاعدة بيانات نظيفة.

على كمبيوتر سطح المكتب الخاص بك مع تثبيت حزمة ROS Melodic و rtab_map (أوصيك باستخدام كمبيوتر Ubuntu لذلك ، نظرًا لأن الحزم سابقة الإنشاء متوفرة لهندسة amd64) ، قم بما يلي:

تصدير ROS_MASTER_URI = https://192.168.0.108: 11311

تصدير ROS_IP = [your-desktop-computer-ip]

rviz

أضف MapGraph و MapCloud إلى rviz واختر الموضوعات المقابلة القادمة من rtab_map. حسنًا ، هذا هو طعم النصر الحلو! انطلق وقم ببعض الخرائط:)

الخطوة 6: المراجع

أثناء كتابة هذا المقال ، استشرنا عددًا من الموارد ، معظمها منتديات ومشكلات GitHub. سأتركهم هنا.

github.com/OpenKinect/libfreenect/issues/338

www.reddit.com/r/robotics/comments/8d37gy/ros_with_raspberry_pi_and_xbox_360_kinect_question/

github.com/ros-drivers/freenect_stack/issues/48

official-rtab-map-forum.67519.x6.nabble.com/RGB-D-SLAM-example-on-ROS-and-Raspberry-Pi-3-td1250.html

github.com/OpenKinect/libfreenect/issues/524

أضفني على LinkedIn إذا كان لديك أي أسئلة واشترك في قناتي على YouTube للحصول على إشعارات حول المزيد من المشاريع المثيرة للاهتمام التي تتضمن التعلم الآلي والروبوتات.

موصى به: