Съдържание:

RGB-D SLAM с Kinect на Raspberry Pi 4 [Buster] ROS Мелодичен: 6 стъпки
RGB-D SLAM с Kinect на Raspberry Pi 4 [Buster] ROS Мелодичен: 6 стъпки

Видео: RGB-D SLAM с Kinect на Raspberry Pi 4 [Buster] ROS Мелодичен: 6 стъпки

Видео: RGB-D SLAM с Kinect на Raspberry Pi 4 [Buster] ROS Мелодичен: 6 стъпки
Видео: RTAB based RGBD SLAM | 3D Depth Mapping | ::ROS | Raspberry Pi 4 2024, Ноември
Anonim
Image
Image

Миналата година написах статия за изграждането и инсталирането на ROS Melodic на нова (по това време) Raspberry Pi с Debian Buster OS. Статията е получила много внимание както тук на 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 мелодичен, докато последният дистрибутор 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_make. При мен обаче не работи, грешката беше, че създаването на генератор на дълбочина не успя. Причина: USB интерфейсът не се поддържа!

Използването на libfreenect и freenect_stack донесе успех в крайна сметка, но имаше доста проблеми за решаване и решението беше малко хакерско, макар и работещо много стабилно (1 час + продължителна работа).

Стъпка 2: Инсталиране на драйвери на Freenect и Freenect_stack

Инсталиране на драйвери на Freenect и Freenect_stack
Инсталиране на драйвери на Freenect и Freenect_stack

Предполагам, че използвате моето ROS Melodic Desktop изображение от тази статия. Ако искате да направите инсталация в различна среда, например ros_comm image или в Ubuntu за Raspberry Pi, уверете се, че имате достатъчно познания за ROS, за да разрешите проблеми, които могат да възникнат от тази разлика.

Нека започнем с изграждането на драйвери на libfreenect от източника, тъй като предварително изградената версия на хранилището apt-get е твърде остаряла.

sudo apt-get update

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

git clone

cd libfreenect

mkdir build && cd build

cmake -L..

направете

sudo make install

Надяваме се, че процесът на изграждане ще бъде безпроблемен и пълен със зелени приятелски съобщения. След като инсталирате драйвера libfreenect, следващото нещо, което трябва да направите, е да инсталирате пакета freenect_stack за ROS. Има доста други пакети, от които зависи, ще трябва да ги клонираме и изградим заедно с catkin_make. Преди да започнете, уверете се, че работното ви място е правилно настроено и снабдено!

От папката на работното ви пространство catkin src:

git клонинг

git clone

git клонинг

git clone

git clone

git clone

Уау, това беше много клониране.

ПОСЛЕДНО РЕДАКТИРАНЕ: Както беше посочено от един от моите читатели, хранилището на vision_opencv трябва да бъде настроено на мелодичен клон. За това cd към src/vision_opencv и изпълнете

git checkout мелодичен

След това се върнете в папката работно пространство. За да проверите дали имаме зависимости за всички налични пакети, изпълнете тази команда:

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

Време за чай;) или каквото и да е любимата ви напитка.

След като процесът на компилиране приключи, можете да опитате да стартирате стека kinect и да проверите дали той извежда правилно дълбочината и цветните изображения. Използвам Raspberry Pi без глава, така че трябва да стартирам RVIZ на настолния си компютър.

На Raspberry Pi do (Променете IP адреса на IP адреса на вашия Raspberry Pi!):

експортиране на ROS_MASTER_URI = https://192.168.0.108: 11311

експортиране ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch дълбочина_регистрация: = вярно

Ще видите изход като на снимка на екрана 1. "Спиране на RGB на устройството и потока на дълбочина." показва, че Kinect е готов, но все още нищо не е абонирано за неговите теми.

На вашия настолен компютър с инсталиран ROS Melodic направете:

експортиране на ROS_MASTER_URI = https://192.168.0.108: 11311

експортирайте ROS_IP = [вашият настолен компютър-ip] rviz

Сега би трябвало да можете да виждате RGB и Depth потоци от изображения в RVIZ, както на снимка на екрана 2 по -горе … но не едновременно.

Добре, тук започват хакерски неща. Прекарах 3 дни, опитвайки различни драйвери и подходи и нищо не проработи - веднага щом се опитах да получа достъп до два потока едновременно, Kinect ще започне да изтече времето, както можете да видите на Снимка 3. Опитах всичко: по -добро захранване, по -стари ангажименти на libfreenect и freenect_stack, спиране на usb_autosuspend, инжектиране на белина на USB портове (добре, не последният! не го правете, това е шега и не трябва да представлява технически съвет:)). Тогава в един от проблемите на Github видях акаунт на човек, който каза, че Kinect е нестабилен, докато не „заредят USB шината“чрез свързване на WiFi ключ. Опитах това и се получи. От една страна се радвам, че се получи. От друга страна, някой наистина трябва да поправи това. Е, междувременно като (някак) поправихме това, нека преминем към следващата стъпка.

Стъпка 3: Инсталиране на самостоятелна RTAB MAP

Инсталиране на самостоятелна RTAB MAP
Инсталиране на самостоятелна RTAB MAP

Първо трябва да инсталираме куп зависимости:

Въпреки, че за PCL е наличен предварително изграден пакет armhf, ще трябва да го компилираме от източника поради този проблем. Консултирайте се с хранилището на 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).

git clone

cd rtabmap/build

cmake..

направи -j2

sudo make install

sudo ldconfig rtabmap

Сега, когато сме съставили самостоятелна RTAB MAP, можем да преминем към последната стъпка - компилиране и инсталиране на ROS обвивка за RTAB MAP, rtabmap_ros.

Стъпка 4: Инсталиране на Rtabmap_ros

Инсталиране на Rtabmap_ros
Инсталиране на Rtabmap_ros

Ако сте стигнали дотук, вероятно вече знаете тренировката:) Клонирайте хранилището rtabmap_ros във вашата папка src работно пространство catkin. (Изпълнете следващата команда от папката src в работното пространство на catkin!)

git clone

Ще ни трябват и тези ROS пакети, че rtabmap_ros зависи от:

git клонинг

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

След това преминете към папката на работното пространство и започнете да компилирате:

cd..

catkin_make -j2

Надявам се, че не сте поставили любимата си напитка за компилация никъде твърде далеч. След като компилацията приключи, ние сме готови да направим картографирането!

Стъпка 5: Покажете времето

Време за шоу
Време за шоу
Време за шоу
Време за шоу

Направете този хакерски трик, като добавите нещо като WiFi или Bluetooth ключ към USB порт - използвах 2 USB 2.0 порта, единия за Kinect, другият за WiFi ключа.

На Raspberry Pi do (Променете IP адреса на IP адреса на вашия Raspberry Pi!): 1 -ви терминал:

експортиране на ROS_MASTER_URI = https://192.168.0.108: 11311

експортиране ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch дълбочина_регистрация: = true data_skip: = 2

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 --OdomF2Modom2: = невярно

Ще видите изход, както на Екранна снимка 1. "Спиране на RGB на устройството и потока на дълбочина." показва, че Kinect е готов, но все още нищо не е абонирано за неговите теми. Във втория терминал трябва да виждате съобщения за качеството на odom. Ако преместите Kinect твърде бързо, качеството на odom ще достигне 0 и ще трябва да се преместите на предишно местоположение или да започнете от чиста база данни.

На вашия настолен компютър с инсталиран пакет ROS Melodic и rtab_map (препоръчвам ви да използвате компютъра Ubuntu за това, тъй като готовите пакети са налични за архитектура amd64):

експортиране на ROS_MASTER_URI = https://192.168.0.108: 11311

експортиране на ROS_IP = [вашият настолен компютър-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, за да получавате известия за по -интересни проекти, включващи машинно обучение и роботика.

Препоръчано: