Inhoudsopgave:

RGB-D SLAM met Kinect op Raspberry Pi 4 [Buster] ROS Melodic - Ajarnpa
RGB-D SLAM met Kinect op Raspberry Pi 4 [Buster] ROS Melodic - Ajarnpa

Video: RGB-D SLAM met Kinect op Raspberry Pi 4 [Buster] ROS Melodic - Ajarnpa

Video: RGB-D SLAM met Kinect op Raspberry Pi 4 [Buster] ROS Melodic - Ajarnpa
Video: Testing the Xbox360 Kinect on a Raspberry Pi 3 2024, November
Anonim
Image
Image

Vorig jaar schreef ik een artikel over het bouwen en installeren van ROS Melodic op nieuwe (toenmalige) Raspberry Pi met Debian Buster OS. Het artikel heeft veel aandacht gekregen, zowel hier op Instructables als op andere platforms. Ik ben erg blij dat ik zoveel mensen heb geholpen om ROS met succes op Raspberry Pi te installeren. In de begeleidende video heb ik ook kort gedemonstreerd hoe ik een dieptebeeld krijg van Kinect 360. Later hebben talloze mensen contact met me opgenomen op LinkedIn en me gevraagd hoe ik Kinect met Raspberry Pi heb kunnen gebruiken. Ik was een beetje verbaasd over de vraag, aangezien het proces om Kinect op dat moment gereed te maken ongeveer 3-4 uur kostte en niet extreem ingewikkeld leek. Ik deelde mijn.bash_history-bestanden met alle mensen die me informeerden over het probleem en vond in april eindelijk de tijd om een artikel te schrijven over het installeren van Kinect-stuurprogramma's en het uitvoeren van RGB-D SLAM met RTAB-MAP ROS. Week van slapeloze nachten na het schrijven van het artikel begrijp ik nu waarom zoveel mensen me deze vraag stelden:)

Ik zal beginnen met een korte uitleg over welke benaderingen wel en niet werkten. Daarna zal ik uitleggen hoe je Kinect-stuurprogramma's installeert voor gebruik met ROS Melodic en tot slot hoe je je machine instelt voor RGB-D SLAM met RTAB-MAP ROS.

Stap 1: Wat werkte en wat niet?

Er zijn een paar stuurprogramma's beschikbaar voor Kinect op Raspberry Pi - waarvan er twee worden ondersteund door ROS.

OpenNI-stuurprogramma's - openni_camera-pakket voor ROS

libfreenect-stuurprogramma's - freenect_stack-pakket voor ROS

Als je naar hun respectievelijke GitHub-repositories kijkt, kun je zien dat het OpenNI-stuurprogramma jaren geleden voor het laatst is bijgewerkt en in de praktijk EOL voor een lange tijd is. ibfreekinect daarentegen wordt tijdig bijgewerkt. Hetzelfde geldt voor hun respectievelijke ROS-pakketten, freenect_stack werd uitgebracht voor ROS melodic, terwijl de nieuwste distro waar openni_camera ondersteuning voor heeft vermeld Fuerte is …

Het is mogelijk om het OpenNI-stuurprogramma en het openni_camera-pakket op Raspberry Pi voor ROS Melodic te compileren en te installeren, hoewel het bij mij niet werkte. Om dat te doen volgt u deze handleiding, stappen 1, 2, 3, in stap 2 en 3 verwijder de "-mfloat-abi=softfp" vlag uit Platform/Linux/Build/Common/Platform. ARM bestand (volgens advies hierover Github-probleem). Kloon vervolgens het openni_camera-pakket naar uw catkin-werkruimte en compileer met catkin_make. Het werkte echter niet voor mij, de fout was dat het maken van de dieptegenerator mislukte. Reden: USB-interface wordt niet ondersteund!

Het gebruik van libfreenect en freenect_stack leverde uiteindelijk succes op, maar er waren nogal wat problemen om op te lossen en de oplossing was een beetje hacky, zij het zeer stabiel werkend (1 uur + continue werking).

Stap 2: Freenect-stuurprogramma's en Freenect_stack installeren

Freenect-stuurprogramma's en Freenect_stack installeren
Freenect-stuurprogramma's en Freenect_stack installeren

Ik neem aan dat je mijn ROS Melodic Desktop-afbeelding uit dit artikel gebruikt. Als je de installatie in een andere omgeving wilt doen, bijvoorbeeld ros_comm image of in Ubuntu voor Raspberry Pi, zorg er dan voor dat je voldoende kennis over ROS hebt om problemen op te lossen die uit dat verschil kunnen voortvloeien.

Laten we beginnen met het bouwen van libfreenect-stuurprogramma's vanaf de bron, aangezien de vooraf gebouwde versie van apt-get repository te verouderd is.

sudo apt-get update

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

git clone

cd libfreenect

mkdir build && cd build

cmake -L..

maken

sudo make install

Hopelijk verloopt het bouwproces rustig en vol groene vriendelijke berichten. Nadat u het libfreenect-stuurprogramma hebt geïnstalleerd, is het volgende dat u moet doen het freenect_stack-pakket voor ROS installeren. Er zijn nogal wat andere pakketten waarvan het afhankelijk is, we zullen ze moeten klonen en samen met catkin_make moeten bouwen. Voordat je begint, zorg ervoor dat je kattenwerkruimte goed is ingesteld en afkomstig is!

Vanuit je catkin workspace src map:

git clone

git clone

git kloon

git clone

git clone

git kloon

Whooh, dat was veel klonen.

LATER BEWERKEN: Zoals een van mijn lezers opmerkte, moet de repository van vision_opencv worden ingesteld op melodic branch. Voor die cd naar src/vision_opencv en uitvoeren

git kassa melodieus

Ga dan terug naar je catkin-werkruimtemap. Voer deze opdracht uit om te controleren of we afhankelijkheden voor alle aanwezige pakketten hebben:

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

Als je met succes alle benodigde pakketten hebt gekloond, zal het vragen om libfreekinect te downloaden met apt-get. Antwoord nee, omdat we het al vanaf de bron hebben geïnstalleerd.

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

catkin_make -j2

Tea time;) of wat je favoriete drankje ook is.

Nadat het compilatieproces is voltooid, kunt u proberen de kinect-stack te starten en te controleren of de diepte- en kleurenafbeeldingen correct worden uitgevoerd. Ik gebruik Raspberry Pi zonder hoofd, dus ik moet RVIZ op mijn desktopcomputer uitvoeren.

Op Raspberry Pi doen (verander het IP-adres in het IP-adres van uw Raspberry Pi!):

export ROS_MASTER_URI=https://192.168.0.108:11311

export ROS_IP=192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration:=true

U ziet de uitvoer zoals in Screenshot 1. "Stop apparaat RGB en Depth stream flush." geeft aan dat Kinect klaar is, maar er is nog niets geabonneerd op de onderwerpen.

Op uw desktopcomputer waarop ROS Melodic is geïnstalleerd, doet u het volgende:

export ROS_MASTER_URI=https://192.168.0.108:11311

export ROS_IP=[uw-desktop-computer-ip] rviz

Nu zou je RGB- en Depth-beeldstreams in RVIZ moeten kunnen zien zoals in Screenshot 2 hierboven … maar niet tegelijkertijd.

Oké, hier beginnen hacky-dingen. Ik heb 3 dagen verschillende stuurprogramma's en benaderingen geprobeerd en niets werkte - zodra ik probeerde toegang te krijgen tot twee streams tegelijk, begon de Kinect een time-out te krijgen, zoals je kunt zien in Screenshot 3. Ik heb alles geprobeerd: betere voeding, oudere commits van libfreenect en freenect_stack, usb_autosuspend stoppen, bleekmiddel in de USB-poorten injecteren (oké, niet de laatste! niet doen, het is een grap en zou geen technisch advies moeten zijn:)). Toen zag ik in een van Github's uitgaven een account van een persoon die zei dat hun Kinect onstabiel was, totdat ze "de USB-bus laadden" door een wifi-dongle aan te sluiten. Dat heb ik geprobeerd en het werkte. Aan de ene kant ben ik blij dat het gelukt is. Aan de andere kant, iemand zou dat echt moeten oplossen. Welnu, terwijl we dat (soort van) hebben opgelost, gaan we verder met de volgende stap.

Stap 3: Standalone RTAB MAP installeren

Standalone RTAB MAP installeren
Standalone RTAB MAP installeren

Eerst moeten we een aantal afhankelijkheden installeren:

Ondanks dat er een vooraf gebouwd armhf-pakket beschikbaar is voor PCL, moeten we dit vanwege dit probleem vanaf de broncode compileren. Raadpleeg PCL GitHub-repository om te zien hoe u het vanaf de bron kunt compileren.

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

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

Laten we nu rtab map standalone pakket git repository klonen naar onze thuismap en het bouwen. Ik heb de nieuwste versie (0.18.0) gebruikt.

git kloon

cd rtabmap/build

cmake..

maak -j2

sudo make install

sudo ldconfig rtabmap

Als we nu de standalone RTAB MAP hebben gecompileerd, kunnen we naar de laatste stap gaan - het compileren en installeren van ROS-wrapper voor RTAB MAP, rtabmap_ros.

Stap 4: Rtabmap_ros installeren

Rtabmap_ros installeren
Rtabmap_ros installeren

Als je zo ver bent gekomen, ken je de oefening nu waarschijnlijk wel:) Kloon de rtabmap_ros-repository naar je catkin workspace src-map. (Voer het volgende commando uit vanuit je catkin workspace src map!)

git kloon

We hebben deze ROS-pakketten ook nodig, waarvan rtabmap_ros afhankelijk is:

git clone

git clone

git clone

git clone

git clone

Voordat u begint met compileren, kunt u ervoor zorgen dat u geen afhankelijkheden mist met de volgende opdracht:

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

Installeer meer afhankelijkheden van ap-get (deze zullen de koppeling niet onderbreken, maar geven een foutmelding tijdens het compileren)

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

Ga dan naar je catkin-werkruimtemap en begin met compileren:

cd..

catkin_make -j2

Ik hoop dat je je favoriete compilatiedrankje niet te ver hebt neergezet. Nadat de compilatie is voltooid, zijn we klaar om de mapping te doen!

Stap 5: Toon tijd

Show Time
Show Time
Show Time
Show Time

Doe die hacky-truc door iets als WiFi of Bluetooth-dongle toe te voegen aan een USB-poort - ik gebruikte 2 USB 2.0-poorten, één voor Kinect, de andere voor WiFi-dongle.

Op Raspberry Pi doe (verander het IP-adres in het IP-adres van uw Raspberry Pi!):1e terminal:

export ROS_MASTER_URI=https://192.168.0.108:11311

export ROS_IP=192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration:=true data_skip:=2

2e aansluitpunt:

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/MaxSize 1000 --Odom 2/:=false

U ziet de uitvoer zoals in Screenshot 1. "Stop apparaat RGB en Depth stream flush." geeft aan dat Kinect klaar is, maar er is nog niets geabonneerd op de onderwerpen. In de tweede terminal zou je berichten over odom-kwaliteit moeten zien. Als u Kinect te snel verplaatst, gaat de odom-kwaliteit naar 0 en moet u naar een vorige locatie gaan of vanuit een schone database beginnen.

Op uw desktopcomputer met ROS Melodic en het rtab_map-pakket geïnstalleerd (ik raad u aan daarvoor een Ubuntu-computer te gebruiken, aangezien er vooraf gebouwde pakketten beschikbaar zijn voor amd64-architectuur):

export ROS_MASTER_URI=https://192.168.0.108:11311

export ROS_IP=[uw-desktop-computer-ip]

rviz

Voeg MapGraph- en MapCloud-schermen toe aan rviz en kies de corresponderende onderwerpen uit rtab_map. Nou, dit is het, zoete smaak van de overwinning! Ga je gang en maak wat kaarten:)

Stap 6: Referenties

Tijdens het schrijven van dit artikel heb ik een aantal bronnen geraadpleegd, voornamelijk forums en GitHub-problemen. Ik laat ze hier.

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

Voeg me toe op LinkedIn als je vragen hebt en abonneer je op mijn YouTube-kanaal om op de hoogte te blijven van meer interessante projecten op het gebied van machine learning en robotica.

Aanbevolen: