فهرست مطالب:

RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 Step
RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 Step

تصویری: RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 Step

تصویری: RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 Step
تصویری: 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 بنویسم. هفته ای از شبهای بی خوابی پس از شروع نوشتن مقاله ، من اکنون فهمیدم که چرا بسیاری از مردم این سوال را از من پرسیدند:)

من با توضیح مختصر در مورد اینکه چه رویکردهایی م workثر بودند و کدام م didn'tثر نبودند ، شروع می کنم. سپس نحوه نصب درایورهای 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 در حال به روز رسانی است. freenect_stack برای بسته های ROS مربوط به آنها ، برای 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 حذف کنید (در این مورد توصیه می شود مسئله Github) سپس بسته openni_camera را در فضای کاری catkin خود کلون کرده و با catkin_make کامپایل کنید. برای من کار نمی کند ، خطا در ایجاد ژنراتور عمق ناموفق بود. دلیل: رابط USB پشتیبانی نمی شود!

استفاده از libfreenect و freenect_stack در نهایت موفقیت آمیز بود ، اما مشکلات زیادی برای حل وجود داشت و راه حل کمی هک کننده بود ، اگرچه بسیار پایدار بود (1 ساعت + ادامه عملیات).

مرحله 2: نصب Freenect Drivers و Freenect_stack

نصب Freenect Drivers و Freenect_stack
نصب Freenect Drivers و Freenect_stack

فرض می کنم که از تصویر ROS Melodic Desktop من در این مقاله استفاده می کنید. اگر می خواهید نصب را در محیط های مختلف انجام دهید ، به عنوان مثال تصویر ros_comm یا در اوبونتو برای Raspberry Pi ، مطمئن شوید که اطلاعات کافی در مورد ROS برای حل مشکلات احتمالی ناشی از این تفاوت دارید.

بیایید با ایجاد درایورهای libfreenect از منبع شروع کنیم ، زیرا نسخه پیش ساخته apt-get repository بسیار قدیمی است.

sudo apt-get update

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

git clone

سی دی libfreenect

mkdir build && cd build

cmake -L..

بساز

sudo make install

امیدوارم فرایند ساخت بدون هیچ گونه پیچیدگی و مملو از پیامهای دوستانه سبز باشد. پس از نصب درایور libfreenect ، راه حل بعدی نصب بسته freenect_stack برای ROS است. بسته های زیادی وجود دارد که بستگی دارد ، ما باید آنها را کلون کرده و با catkin_make همه با هم بسازیم. قبل از شروع ، مطمئن شوید که فضای کار catkin شما به درستی تنظیم و منبع شده است!

از پوشه src catkin your workpace:

git clone

git clone

git clone

git clone

git clone

git clone

وای ، این شبیه سازی زیادی بود.

ویرایش دیرتر: همانطور که توسط یکی از خوانندگان من اشاره شد ، مخزن vision_opencv باید در شاخه آهنگین تنظیم شود. برای آن cd به src/vision_opencv رفته و اجرا کنید

git checkout ملودیک

سپس به پوشه فضای کاری catkin خود بازگردید. برای بررسی اینکه آیا وابستگی همه بسته ها را داریم ، این دستور را اجرا کنید:

rosdep install --from-paths src --ignore-src

اگر همه بسته های لازم را با موفقیت کلون کردید ، درخواست بارگیری libfreekinect با apt-get را خواهید داشت. پاسخ نه ، زیرا ما قبلاً آن را از منبع نصب کرده ایم.

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

catkin_make -j2

زمان چای ؛) یا هر نوشیدنی مورد علاقه شما.

پس از اتمام فرایند کامپایل ، می توانید کینکت استک را راه اندازی کرده و بررسی کنید که آیا عمق و تصاویر رنگی را به درستی خروجی می دهد یا خیر. من از Raspberry Pi بدون سر استفاده می کنم ، بنابراین باید RVIZ را روی رایانه رومیزی خود اجرا کنم.

در Raspberry Pi do (آدرس IP را به آدرس IP رزبری پای خود تغییر دهید!):

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

صادرات ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch deep_registration: = true

خروجی را در تصویر 1 مشاهده می کنید. "توقف RGB دستگاه و جریان عمقی". نشان می دهد که 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 آنها ناپایدار است ، تا اینکه آنها با اتصال دانگل WiFi "گذرگاه USB را بارگذاری کردند". امتحانش کردم، کار کرد. از یک طرف ، خوشحالم که کار کرد. از طرف دیگر ، کسی واقعاً باید آن را حل کند. خوب ، در حالی که (به نوعی) آن را برطرف کرده ایم ، بگذارید به مرحله بعدی برویم.

مرحله 3: نصب مستقل RTAB MAP

نصب مستقل RTAB MAP
نصب مستقل RTAB MAP

ابتدا مجموعه ای از وابستگی ها را برای نصب داریم:

با وجود این که یک بسته armhf از پیش ساخته شده برای PCL موجود است ، اما به دلیل این مسئله باید آن را از منبع کامپایل کنیم. برای مشاهده نحوه کامپایل آن از منبع با مخزن PCL GitHub مشورت کنید.

sudo apt-get نصب 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) استفاده کردم.

git clone

cd rtabmap/build

cmake..

make -j2

sudo make install

sudo ldconfig rtabmap

اکنون که ما RTAB MAP مستقل را کامپایل کرده ایم ، می توانیم به آخرین مرحله برویم - کامپایل و نصب ROS wrapper برای RTAB MAP ، rtabmap_ros.

مرحله 4: نصب Rtabmap_ros

نصب Rtabmap_ros
نصب Rtabmap_ros

اگر تا اینجا پیش رفتید ، احتمالاً تا به حال تمرین را می دانید:) مخزن rtabmap_ros را در پوشه src catkin workpace خود کلون کنید. (دستور بعدی را از پوشه src catkin workpace اجرا کنید!)

git clone

ما به این بسته های ROS نیز نیاز داریم ، زیرا rtabmap_ros به موارد زیر بستگی دارد:

git clone

git clone

git clone

git clone

git clone

قبل از شروع کامپایل ، می توانید مطمئن شوید که هیچ گونه وابستگی را با دستور زیر از دست نداده اید:

rosdep install --from-paths src --ignore-src

وابستگی های بیشتری را از ap-get نصب کنید (اینها پیوند را قطع نمی کند ، اما هنگام تدوین خطا ایجاد می کند)

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

سپس به پوشه فضای کاری catkin خود رفته و کامپایل را شروع کنید:

سی دی..

catkin_make -j2

امیدوارم که نوشیدنی تلفیقی مورد علاقه خود را زیاد دور نزده باشید. پس از اتمام کامپایل ، ما آماده انجام نقشه برداری هستیم!

مرحله 5: نمایش زمان

نمایش زمان
نمایش زمان
نمایش زمان
نمایش زمان

با افزودن چیزی مانند WiFi یا دانگل بلوتوث به درگاه USB ، این ترفند هک کننده را انجام دهید - من از 2 پورت USB 2.0 استفاده می کردم ، یکی برای Kinect ، دیگری برای دانگل WiFi.

در Raspberry Pi do (آدرس IP را به آدرس IP رزبری پای خود تغییر دهید!): ترمینال اول:

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

صادرات ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch deep_registration: = true_ship: = 2

ترمینال دوم:

roslaunch rtabmap_ros rgbd_mapping.launch rtabmap_args: = "-delete_db_on_start --Vis/MaxFeatures 500 --Mem/ImagePreDecimation 2 --Mem/ImagePostDecimation 2 --Kp/DetectorStrategy 6 --Odomrt2Mdom/MaxSab" 1000 ": = غلط

خروجی را در تصویر 1 مشاهده می کنید. "توقف RGB دستگاه و جریان عمیق". نشان می دهد که Kinect آماده است ، اما هنوز چیزی در موضوعات آن ثبت نشده است. در ترمینال دوم شما باید پیام هایی در مورد کیفیت odom مشاهده کنید. اگر Kinect را خیلی سریع حرکت دهید ، کیفیت odom به 0 می رسد و باید به مکان قبلی بروید یا از پایگاه داده تمیز شروع کنید.

در رایانه رومیزی خود با بسته ROS Melodic و rtab_map (توصیه می کنم از رایانه اوبونتو برای این کار استفاده کنید ، زیرا بسته های از پیش ساخته شده برای معماری amd64 در دسترس هستند) انجام دهید:

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

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

rviz

نمایشگرهای MapGraph و MapCloud را به rviz اضافه کنید و موضوعات مربوطه را که از rtab_map آمده انتخاب کنید. خوب ، این است ، طعم شیرین پیروزی! پیش بروید و نقشه برداری کنید:)

مرحله ششم: منابع

در هنگام نوشتن این مقاله منابعی وجود داشت که من با آنها مشورت کردم ، بیشتر انجمن ها و مسائل 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

اگر س questionsالی دارید ، مرا در LinkedIn اضافه کنید و در کانال YouTube من مشترک شوید تا از پروژه های جالب تر مربوط به یادگیری ماشین و رباتیک مطلع شوید.

توصیه شده: