Innehållsförteckning:

RGB-D SLAM Med Kinect på Raspberry Pi 4 [Buster] ROS Melodic: 6 steg
RGB-D SLAM Med Kinect på Raspberry Pi 4 [Buster] ROS Melodic: 6 steg

Video: RGB-D SLAM Med Kinect på Raspberry Pi 4 [Buster] ROS Melodic: 6 steg

Video: RGB-D SLAM Med Kinect på Raspberry Pi 4 [Buster] ROS Melodic: 6 steg
Video: Creative Tools skannar och 3D-printar Andreas Lindqvist 2024, Juli
Anonim
Image
Image

Förra året skrev jag en artikel om att bygga och installera ROS Melodic på nya (då) Raspberry Pi med Debian Buster OS. Artikeln har fått mycket uppmärksamhet både här på Instructables och på andra plattformar. Jag är mycket glad att jag hjälpte så många människor att framgångsrikt installera ROS på Raspberry Pi. I den medföljande videon visade jag också kortfattat att få djupbild från Kinect 360. Senare har många människor kontaktat mig på LinkedIn och frågat mig hur jag lyckades använda Kinect med Raspberry Pi. Jag blev lite förvånad över frågan, eftersom processen med att göra Kinect redo vid den tiden tog mig cirka 3-4 timmar och verkade inte extremt komplicerat. Jag delade mina.bash_history-filer med alla som frågade mig om problemet och i april fann jag äntligen tid att skriva en artikel om hur man installerar Kinect-drivrutiner och utför RGB-D SLAM med RTAB-MAP ROS. Vecka med sömnlösa nätter efter att ha börjat skriva artikeln förstår jag nu varför så många ställde mig denna fråga:)

Jag börjar med en kort förklaring om vilka tillvägagångssätt som fungerade och vilka som inte fungerade. Sedan ska jag förklara hur du installerar Kinect-drivrutiner för användning med ROS Melodic och slutligen hur du konfigurerar din maskin för RGB-D SLAM med RTAB-MAP ROS.

Steg 1: Vad som fungerade och vad som inte fungerade

Det finns några få drivrutiner tillgängliga för Kinect på Raspberry Pi - av dem stöds två av ROS.

OpenNI -drivrutiner - openni_camera -paket för ROS

libfreenect -drivrutiner - freenect_stack -paketet för ROS

Om du tittar på deras respektive GitHub -förråd kan du upptäcka att OpenNI -drivrutinen senast har uppdaterats för flera år sedan och i praktiken är EOL under lång tid. ibfreekinect å andra sidan uppdateras i tid. Samma för deras respektive ROS -paket, freenect_stack släpptes för ROS -melodi, medan hans senaste distro openni_camera har listat stöd för är Fuerte …

Det är möjligt att kompilera och installera OpenNI -drivrutinen och openni_camera -paketet på Raspberry Pi för ROS Melodic, även om det inte fungerade för mig. För att göra det, följ den här guiden, steg 1, 2, 3, i steg 2 och 3 tar bort "-mfloat-abi = softfp" -flaggan från plattformen/Linux/Build/Common/Platform. ARM-filen (enligt råd om detta Github -fråga). Klona sedan openni_camera -paketet till din catkin -arbetsyta och kompilera med catkin_make. Det fungerade dock inte för mig, felet var att skapa djupgenerator misslyckades. Orsak: USB -gränssnitt stöds inte!

Att använda libfreenect och freenect_stack gav framgång i slutändan, men det fanns en hel del problem att lösa och lösningen var lite hackig, om än fungerade mycket stabilt (1 timme + fortsatt drift).

Steg 2: Installera Freenect -drivrutiner och Freenect_stack

Installera Freenect -drivrutiner och Freenect_stack
Installera Freenect -drivrutiner och Freenect_stack

Jag antar att du använder min ROS Melodic Desktop -bild från den här artikeln. Om du vill installera i en annan miljö, till exempel ros_comm image eller i Ubuntu för Raspberry Pi, se till att du har tillräckligt med kunskap om ROS för att lösa problem som kan uppstå från den skillnaden.

Låt oss börja med att bygga libfreenect-drivrutiner från källan, eftersom apt-get repository förbyggd version är för föråldrad.

sudo apt-get uppdatering

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

git -klon

cd libfreenect

mkdir build && cd build

cmake -L..

göra

sudo gör installationen

Förhoppningsvis blir byggprocessen händelselös och full av gröna vänliga meddelanden. När du har installerat libfreenect -drivrutinen är nästa steg att installera freenect_stack -paketet för ROS. Det finns en hel del andra paket det beror på, vi måste klona dem och bygga med catkin_make alla tillsammans. Innan du börjar, se till att din catkin -arbetsyta är korrekt inställd och hämtad!

Från din catkin workspace src -mapp:

git-klon

git-klon

git-klon

git-klon

git-klon

git -klon

Oj, det var mycket kloning.

SENARE REDIGERA: Som det påpekades av en av mina läsare måste vision_opencv -förvaret ställas in på melodisk gren. För den cd: n till src/vision_opencv och kör

git checkout melodisk

Gå sedan tillbaka till din catkin -arbetsytemapp. För att kontrollera om vi är beroende av alla paket på plats kör vi det här kommandot:

rosdep installera-från-sökvägar src --ignore-src

Om du lyckades klona alla nödvändiga paket kommer det att begära att ladda ner libfreekinect med apt-get. Svara nej, eftersom vi redan har installerat det från källan.

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

catkin_make -j2

Te tid;) eller vad din favoritdrink är.

När kompileringsprocessen är klar kan du prova att starta kinect stack och kontrollera om den ger ut djup- och färgbilder korrekt. Jag använder Raspberry Pi utan huvud, så jag måste köra RVIZ på min stationära dator.

På Raspberry Pi gör (Ändra IP -adressen till IP -adressen för din Raspberry Pi!):

exportera ROS_MASTER_URI = https://192.168.0.108: 11311

exportera ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration: = true

Du kommer att se utmatning som i Skärmdump 1. "Stoppa enhetens RGB och djupströmspolning." indikerar att Kinect är klart, men inget prenumererar på dess ämnen ännu.

Gör på din stationära dator med ROS Melodic installerat:

exportera ROS_MASTER_URI = https://192.168.0.108: 11311

exportera ROS_IP = [din-stationära-dator-ip] rviz

Nu ska du kunna se RGB- och djupbildströmmar i RVIZ som i skärmdump 2 ovan … men inte samtidigt.

Okej, här börjar hackiga grejer. Jag tillbringade 3 dagar med att försöka olika drivrutiner och tillvägagångssätt och ingenting fungerade - så snart jag skulle försöka komma åt två strömmar samtidigt började Kinect ta ut tid som du kan se i skärmdump 3. Jag försökte allt: bättre strömförsörjning, äldre åtaganden av libfreenect och freenect_stack, stoppa usb_autosuspend, injicera blekmedel till USB -portar (okej, inte den sista! gör det inte, det är ett skämt och ska inte utgöra ett tekniskt råd:)). Sedan i ett av Github -frågorna såg jag ett konto om en person som sa att deras Kinect var instabil tills de "laddade USB -bussen" genom att ansluta WiFi -dongeln. Jag försökte det och det fungerade. Å ena sidan är jag glad att det fungerade. Å andra sidan borde någon verkligen fixa det. Tja, medan vi har (typ) fixat det, låt oss gå vidare till nästa steg.

Steg 3: Installera fristående RTAB MAP

Installera fristående RTAB MAP
Installera fristående RTAB MAP

Först har vi ett gäng beroenden som ska installeras:

Trots att det finns ett förbyggt armhf -paket tillgängligt för PCL måste vi kompilera det från källan på grund av det här problemet. Kontakta PCL GitHub -förvaret för att se hur du kompilerar det från källan.

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

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

Låt oss nu klona rtab map fristående paket git -förvar till vår hemmapp och bygga det. Jag använde den senaste versionen (0.18.0).

git -klon

cd rtabmap/build

cmake..

gör -j2

sudo gör installationen

sudo ldconfig rtabmap

När vi nu har sammanställt fristående RTAB MAP kan vi gå vidare till det sista steget - sammanställa och installera ROS -omslag för RTAB MAP, rtabmap_ros.

Steg 4: Installera Rtabmap_ros

Installera Rtabmap_ros
Installera Rtabmap_ros

Om du kommit så långt känner du förmodligen till övningen nu:) Klon rtabmap_ros -förvaret till din catkin -arbetsytas src -mapp. (Utför nästa kommando från din catkin workspace src -mapp!)

git -klon

Vi behöver också dessa ROS -paket, som rtabmap_ros beror på:

git-klon

git-klon

git-klon

git -klon

git-klon

Innan du börjar kompilering kan du se till att du inte saknar några beroenden med följande kommando:

rosdep installera-från-sökvägar src --ignore-src

Installera fler beroenden från ap-get (dessa kommer inte att avbryta länkningen, utan kommer att ge ett fel under sammanställningen)

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

Flytta sedan till din catkin -arbetsytemapp och börja kompilera:

CD..

catkin_make -j2

Hoppas att du inte har lagt din favorit samlingsdryck någonstans för långt. När sammanställningen är klar är vi redo att göra kartläggningen!

Steg 5: Visa tid

Visa tid
Visa tid
Visa tid
Visa tid

Gör det hackiga tricket med att lägga till något som WiFi eller Bluetooth -dongel till en USB -port - jag använde 2 USB 2.0 -portar, en för Kinect, den andra för WiFi -dongel.

På Raspberry Pi gör (Ändra IP -adressen till IP -adressen för din Raspberry Pi!): Första terminalen:

exportera ROS_MASTER_URI = https://192.168.0.108: 11311

exportera ROS_IP = 192.168.0.108

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

2: a terminalen:

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: = falskt

Du kommer att se utmatning som i Skärmdump 1. "Stoppa enhetens RGB och djupströmspolning." indikerar att Kinect är klart, men inget prenumererar på dess ämnen ännu. I den andra terminalen bör du se meddelanden om odomkvalitet. Om du flyttar Kinect för snabbt kommer odomkvaliteten att gå till 0 och du måste flytta till en tidigare plats eller börja från ren databas.

På din stationära dator med ROS Melodic och rtab_map-paketet installerat (jag rekommenderar att du använder Ubuntu-dator för det, eftersom förbyggda paket är tillgängliga för amd64-arkitektur) gör:

exportera ROS_MASTER_URI = https://192.168.0.108: 11311

exportera ROS_IP = [din-stationära-dator-ip]

rviz

Lägg till MapGraph- och MapCloud -skärmar till rviz och välj motsvarande ämnen från rtab_map. Tja, det här är det, söt smak av seger! Gör en kartläggning:)

Steg 6: Referenser

När jag skrev den här artikeln fanns det ett antal resurser jag konsulterade, mest forum och GitHub -frågor. Jag lämnar dem här.

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

Lägg till mig på LinkedIn om du har några frågor och prenumerera på min YouTube -kanal för att få besked om mer intressanta projekt som involverar maskininlärning och robotik.

Rekommenderad: