Talaan ng mga Nilalaman:

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

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

Video: RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 Hakbang
Video: RGB-D SLAM With Kinect on Raspberry Pi 4 ROS Melodic 2024, Nobyembre
Anonim
Image
Image

Noong nakaraang taon nagsulat ako ng isang artikulo tungkol sa pagbuo at pag-install ng ROS Melodic sa bago (sa oras na iyon) Raspberry Pi kasama si Debian Buster OS. Ang artikulo ay nakatanggap ng maraming pansin kapwa dito sa Mga Instructable at sa iba pang mga platform. Natutuwa ako na natulungan ko ang maraming tao upang matagumpay na mai-install ang ROS sa Raspberry Pi. Sa kasamang video ay nagpakita din ako ng maikling imahe sa pagkuha ng lalim na imahe mula sa Kinect 360. Kalaunan maraming tao ang nakipag-ugnay sa akin sa LinkedIn at tinanong ako kung paano ko nagamit ang Kinect sa Raspberry Pi. Medyo nagulat ako sa tanong, dahil ang proseso ng paghahanda ng Kinect sa oras na iyon ay tumagal sa akin ng tungkol sa 3-4 na oras at tila hindi kumplikado. Ibinahagi ko ang aking.bash_history file sa lahat ng mga taong nagtatanong sa akin tungkol sa isyu at noong Abril ay natagpuan ang oras upang magsulat ng isang artikulo tungkol sa kung paano i-install ang mga driver ng Kinect at gumanap ng RGB-D SLAM sa RTAB-MAP ROS. Linggo ng mga walang tulog na gabi pagkatapos simulang isulat ang artikulo na naiintindihan ko ngayon kung bakit maraming tao ang nagtanong sa akin ng katanungang ito:)

Magsisimula ako sa maikling paliwanag tungkol sa kung anong mga diskarte ang gumana at alin ang hindi. Pagkatapos ay ipapaliwanag ko kung paano i-install ang mga driver ng Kinect para magamit sa ROS Melodic at sa wakas kung paano i-set up ang iyong machine para sa RGB-D SLAM gamit ang RTAB-MAP ROS.

Hakbang 1: Ano ang Gumana at Ano ang Hindi

Mayroong ilang mga driver na magagamit para sa Kinect sa Raspberry Pi - sa kanila dalawa ay suportado ng ROS.

Mga driver ng OpenNI - package ng openni_camera para sa ROS

mga driver ng libfreenect - pakete ng freenect_stack para sa ROS

Kung titingnan mo ang kani-kanilang mga Repository ng GitHub, maaari mong malaman na ang driver ng OpenNI ay huling na-update taon na ang nakakaraan at sa pagsasanay ay EOL sa mahabang panahon. Ang ibfreekinect sa kabilang banda ay napapanahong nai-update. Parehas para sa kani-kanilang mga pakete ng ROS, ang freenect_stack ay pinakawalan para sa ROS melodic, habang siya ang huling distro openni_camera ay nakalista ang suporta para kay Fuerte…

Posibleng mag-ipon at mag-install ng OpenNI driver at openni_camera package sa Raspberry Pi para sa ROS Melodic, kahit na hindi ito gumana para sa akin. Upang magawa iyon sundin ang gabay na ito, ang mga hakbang 1, 2, 3, sa hakbang 2 at 3 alisin ang "-mfloat-abi = softfp" flag mula sa Platform / Linux / Build / Common / Platform. ARM file (bawat payo dito Isyu ng Github). Pagkatapos i-clone ang openni_camera package sa iyong workspace ng catkin at ipagsama sa catkin_make. Hindi ito gumana para sa akin bagaman, nabigo ang error sa paglikha ng lalim na generator. Dahilan: Ang USB interface ay hindi suportado!

Ang paggamit ng libfreenect at freenect_stack ay nagbigay ng tagumpay sa huli, ngunit may ilang mga problema upang malutas at ang solusyon ay medyo hacky, kahit na gumagana nang masyadong matatag (1 oras + patuloy na operasyon).

Hakbang 2: Pag-install ng Mga Driver ng Freenect at Freenect_stack

Pag-install ng Mga Freenect Driver at Freenect_stack
Pag-install ng Mga Freenect Driver at Freenect_stack

Ipagpalagay ko na ginagamit mo ang aking imahe ng ROS Melodic Desktop mula sa artikulong ito. Kung nais mong gawin ang pag-install sa iba't ibang kapaligiran, halimbawa ros_comm na imahe o sa Ubuntu para sa Raspberry Pi, tiyakin na mayroon kang sapat na kaalaman tungkol sa ROS upang malutas ang mga problema na maaaring lumabas mula sa pagkakaiba.

Magsimula tayo sa pamamagitan ng pagbuo ng mga driver ng libfreenect mula sa mapagkukunan, dahil ang apt-get repository na pre-built na bersyon ay masyadong luma na.

sudo apt-get update

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

git clone

cd libfreenect

mkdir build && cd build

cmake -L..

gumawa

sudo gumawa ng pag-install

Inaasahan namin na ang proseso ng pagbuo ay hindi mapalagay at puno ng berdeng mga mensahe sa kaaya-aya. Matapos mong mai-install ang driver ng libfreenect, ang susunod na gagawin na gawin ay ang pag-install ng freenect_stack package para sa ROS. Mayroong ilang iba pang mga pakete na nakasalalay sa, kailangan nating i-clone ang mga ito at bumuo sa catkin_make lahat. Bago ka magsimula, siguraduhin na ang iyong workspace ng catkin ay maayos na na-set up at nakuha!

Mula sa iyong catkin workspace src folder:

git clone

git clone

git clone

git clone

git clone

git clone

Whooh, iyon ay maraming pag-clone.

LATER EDIT: Tulad ng itinuro ng isa sa aking mga mambabasa, ang vision_opencv repository ay kailangang maitakda sa melodic branch. Para sa cd na iyon sa src / vision_opencv at isagawa

git checkout melodic

Pagkatapos ay bumalik sa iyong folder ng workspace ng catkin. Upang suriin kung umaasa kami para sa lahat ng mga pakete sa lugar na isagawa ang utos na ito:

pag-install ng rosdep --mula sa mga landas src --ignore-src

Kung matagumpay mong na-clone ang lahat ng kinakailangang mga pakete hihilingin itong mag-download ng libfreekinect nang may apt-get. Sagot hindi, dahil na-install na namin ito mula sa pinagmulan.

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

catkin_make -j2

Oras ng tsaa;) o kung anuman ang iyong paboritong inumin.

Matapos matapos ang proseso ng pagtitipon maaari mong subukang ilunsad ang stack ng kinect at suriin kung ito ay naglalabas ng maayos ng mga imahe ng lalim at kulay. Gumagamit ako ng Raspberry Pi na walang ulo, kaya kailangan kong patakbuhin ang RVIZ sa aking desktop computer.

Sa Raspberry Pi do (Baguhin ang IP address sa IP address ng iyong Raspberry Pi!):

i-export ang ROS_MASTER_URI = https://192.168.0.108: 11311

i-export ang ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch lalim_registrasyon: = totoo

Makikita mo ang output tulad ng sa Screenshot 1. "Ang pagtigil sa RGB ng aparato at Lalim ng stream flush." Ipinapahiwatig na ang Kinect ay handa na, ngunit wala pang naka-subscribe sa mga paksa nito.

Sa iyong desktop computer na may naka-install na ROS Melodic gawin:

i-export ang ROS_MASTER_URI = https://192.168.0.108: 11311

i-export ang ROS_IP = [iyong-desktop-computer-ip] rviz

Ngayon ay dapat mong makita ang mga stream ng imahe ng RGB at Lalim sa RVIZ tulad ng sa Screenshot 2 sa itaas … ngunit hindi sa parehong oras.

Okay, narito nagsisimula ang mga bagay na hacky. Gumugol ako ng 3 araw na pagsubok sa iba't ibang mga driver at diskarte at walang gumana - sa lalong madaling susubukan kong i-access ang dalawang daloy ng sabay-sabay ang Kinect ay magsisimulang mag-time out tulad ng nakikita mo sa Screenshot 3. Sinubukan ko ang lahat: mas mahusay na supply ng kuryente, mas matandang paggawa ng libfreenect at freenect_stack, pagtigil sa usb_autosuspend, pag-iniksyon ng pagpapaputi sa mga USB port (okay, hindi ang huli! huwag gawin ito, ito ay isang biro at hindi dapat bumuo ng isang teknikal na payo:)). Pagkatapos sa isa sa mga isyu ni Github nakita ko ang isang account ng isang tao na nagsabing ang kanilang Kinect ay hindi matatag, hanggang sa "mai-load nila ang USB bus" sa pamamagitan ng pagkonekta sa WiFi dongle. Sinubukan ko iyon at gumana ito. Sa isang banda, natutuwa ako na gumana ito. Sa kabilang banda, ang isang tao ay talagang nararapat na ayusin iyon. Kaya, pansamantala ang pagkakaroon ng (uri ng) naayos na, magpatuloy tayo sa susunod na hakbang.

Hakbang 3: Pag-install ng Standalone RTAB MAP

Pag-install ng Standalone RTAB MAP
Pag-install ng Standalone RTAB MAP

Una mayroon kaming isang pangkat ng mga dependency na mai-install:

Sa kabila ng mayroong isang prebuilt armhf package na magagamit para sa PCL, kakailanganin namin itong ipunin mula sa mapagkukunan dahil sa isyung ito. Kumunsulta sa repository ng PCL GitHub upang makita kung paano ito maiayos mula sa mapagkukunan.

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

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

Ngayon ay i-clone ang rtab map standalone package git repository sa aming folder sa bahay at itayo ito. Ginamit ko ang pinakabagong paglabas (0.18.0).

git clone

cd rtabmap / build

cmake..

gumawa -j2

sudo gumawa ng pag-install

sudo ldconfig rtabmap

Ngayon kapag naipon namin ang standalone RTAB MAP, maaari kaming lumipat sa huling hakbang - pagsasama at pag-install ng ROS wrapper para sa RTAB MAP, rtabmap_ros.

Hakbang 4: Pag-install ng Rtabmap_ros

Pag-install ng Rtabmap_ros
Pag-install ng Rtabmap_ros

Kung nakarating ka sa malayo, malamang na alam mo na ang drill ngayon:) I-clone ang repository ng rtabmap_ros sa iyong catkin workspace src folder. (Ipatupad ang susunod na utos mula sa iyo ng catkin workspace src folder!)

git clone

Kakailanganin din namin ang mga ROS package na ito, ang rtabmap_ros ay depende sa:

git clone

git clone

git clone

git clone

git clone

Bago ka magsimula sa pagtitipon maaari mong tiyakin na hindi ka nawawala ng anumang mga dependency sa sumusunod na utos:

pag-install ng rosdep --mula sa mga landas src --ignore-src

Mag-install ng higit pang mga dependency mula sa ap-get (hindi ito makagambala sa pag-link, ngunit magtatapon ng isang error habang pinagsama-sama)

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

Pagkatapos ay lumipat sa iyong folder ng workspace ng catkin at simulang mag-ipon:

cd..

catkin_make -j2

Inaasahan kong hindi mo inilagay ang iyong paboritong inuming pinagsama-sama kahit saan masyadong malayo. Matapos ang pag-ipon ay tapos na handa kaming gawin ang pagmamapa!

Hakbang 5: Ipakita ang Oras

Ipakita ang Oras
Ipakita ang Oras
Ipakita ang Oras
Ipakita ang Oras

Gawin ang hacky trick na iyon sa pagdaragdag ng isang bagay tulad ng WiFi o Bluetooth dongle sa isang USB port - Gumagamit ako ng 2 USB 2.0 port, isa para sa Kinect, ang isa para sa WiFi dongle.

Sa Raspberry Pi do (Baguhin ang IP address sa IP address ng iyong Raspberry Pi!): 1st terminal:

i-export ang ROS_MASTER_URI = https://192.168.0.108: 11311

i-export ang ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch lalim_registrasyon: = totoong data_skip: = 2

Ika-2 terminal:

roslaunch rtabmap_ros rgbd_mapping.launch rtabmap_args: = - delete_db_on_start --Vis / MaxFeatures 500 --Mem / ImagePreDecimation 2 --Mem / ImagePostDecimation 2 --Kp / DetectorStrategy 6 --OdomF2M / MaxSizeab: = false

Makikita mo ang output tulad ng sa Screenshot 1. "Ang pagtigil sa RGB ng aparato at Lalim ng stream flush." Ipinapahiwatig na handa na ang Kinect, ngunit wala pang naka-subscribe sa mga paksa nito. Sa pangalawang terminal dapat na nakikita mo ang mga mensahe tungkol sa kalidad ng odom. Kung masyadong mabilis mong ilipat ang Kinect, ang kalidad ng odom ay pupunta sa 0 at kakailanganin mong lumipat sa isang dating lokasyon o magsimula mula sa malinis na database.

Sa iyong desktop computer na naka-install ang ROS Melodic at rtab_map package (inirerekumenda kong gamitin mo ang Ubuntu computer para doon, dahil magagamit ang mga paunang built na package para sa arkitektura ng amd64):

i-export ang ROS_MASTER_URI = https://192.168.0.108: 11311

i-export ang ROS_IP = [iyong-desktop-computer-ip]

rviz

Magdagdag ng MapGraph at ipinapakita ang MapCloud sa rviz at piliin ang mga kaukulang paksa na nagmumula sa rtab_map. Sa gayon, ito na, matamis na lasa ng tagumpay! Sige at gumawa ng ilang pagmamapa:)

Hakbang 6: Mga Sanggunian

Habang sinusulat ang artikulong ito mayroong isang bilang ng mga mapagkukunan na kinunsulta ko, karamihan sa mga forum at mga isyu sa GitHub. Iiwan ko sila dito.

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

Idagdag ako sa LinkedIn kung mayroon kang anumang mga katanungan at mag-subscribe sa aking YouTube channel upang ma-notify tungkol sa higit pang mga kagiliw-giliw na proyekto na kinasasangkutan ng machine learning at robotics.

Inirerekumendang: