Cuprins:

RGB-D SLAM Cu Kinect pe Raspberry Pi 4 [Buster] ROS Melodic: 6 pași
RGB-D SLAM Cu Kinect pe Raspberry Pi 4 [Buster] ROS Melodic: 6 pași
Anonim
Image
Image

Anul trecut am scris un articol despre construirea și instalarea ROS Melodic pe un nou (la acea vreme) Raspberry Pi cu sistemul de operare Debian Buster. Articolul a primit multă atenție atât aici pe Instructables, cât și pe alte platforme. Mă bucur foarte mult că am ajutat atât de mulți oameni să instaleze cu succes ROS pe Raspberry Pi. În videoclipul însoțitor am demonstrat, de asemenea, pe scurt că obțin imaginea de profunzime de la Kinect 360. Mai târziu, numeroase persoane m-au contactat pe LinkedIn și m-au întrebat cum am reușit să folosesc Kinect cu Raspberry Pi. Am fost cam surprinsă de întrebare, deoarece procesul de pregătire a Kinect la momentul respectiv mi-a luat aproximativ 3-4 ore și nu mi s-a părut extrem de complicat. Am împărtășit fișierele mele.bash_history cu toți oamenii care mă întrebau despre această problemă și în aprilie am găsit în cele din urmă timpul pentru a scrie un articol despre cum să instalez driverele Kinect și să efectuez RGB-D SLAM cu RTAB-MAP ROS. Săptămâna nopților nedormite după ce am început să scriu articolul, acum înțeleg de ce atât de mulți oameni mi-au pus această întrebare:)

Voi începe cu o scurtă explicație despre ce abordări au funcționat și care nu. Apoi, voi explica cum să instalați driverele Kinect pentru utilizare cu ROS Melodic și, în cele din urmă, cum să vă configurați mașina pentru RGB-D SLAM cu RTAB-MAP ROS.

Pasul 1: Ce a funcționat și ce nu

Există câteva drivere disponibile pentru Kinect pe Raspberry Pi - dintre ele două sunt acceptate de ROS.

Drivere OpenNI - pachetul openni_camera pentru ROS

drivere libfreenect - pachet freenect_stack pentru ROS

Dacă vă uitați la depozitele respective GitHub, puteți afla că driverul OpenNI a fost actualizat ultima oară cu ani în urmă și în practică este EOL de mult timp. Pe de altă parte, ibfreekinect este actualizat în timp util. La fel și pentru pachetele lor ROS, freenect_stack a fost lansat pentru ROS melodic, în timp ce ultima distribuție openni_camera a listat suportul pentru Fuerte …

Este posibil să compilați și să instalați driverul OpenNI și pachetul openni_camera pe Raspberry Pi pentru ROS Melodic, deși nu a funcționat pentru mine. Pentru a face acest lucru, urmați acest ghid, pașii 1, 2, 3, de la pasii 2 și 3 eliminați semnalizatorul „-mfloat-abi = softfp” din fișierul Platform / Linux / Build / Common / Platform. ARM (pe sfaturi despre acest lucru Problema Github). Apoi clonați pachetul openni_camera în spațiul de lucru catkin și compilați cu catkin_make. Totuși nu a funcționat pentru mine, eroarea la crearea generatorului de adâncime a eșuat. Motiv: interfața USB nu este acceptată!

Folosirea libfreenect și freenect_stack a avut succes la final, dar au existat destul de multe probleme de rezolvat, iar soluția a fost cam dificilă, deși a funcționat foarte stabil (1 oră + funcționare continuă).

Pasul 2: Instalarea driverelor Freenect și Freenect_stack

Instalarea driverelor Freenect și Freenect_stack
Instalarea driverelor Freenect și Freenect_stack

Presupun că utilizați imaginea mea desktop Melodic ROS din acest articol. Dacă doriți să faceți instalarea în medii diferite, de exemplu, imaginea ros_comm sau în Ubuntu pentru Raspberry Pi, asigurați-vă că aveți suficiente cunoștințe despre ROS pentru a rezolva problemele care ar putea apărea din această diferență.

Să începem prin a construi drivere libfreenect din sursă, deoarece versiunea pre-construită a repozitiei apt-get este prea învechită.

sudo apt-get update

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

git clone

cd libfreenect

mkdir build && cd build

cmake -L..

face

sudo make install

Sperăm că procesul de construcție va fi fără evenimente și plin de mesaje ecologice. După ce ați instalat driverul libfreenect, următorul lucru care trebuie făcut este să instalați pachetul freenect_stack pentru ROS. Există destul de multe alte pachete de care depinde, va trebui să le clonăm și să le construim împreună cu catkin_make. Înainte de a începe, asigurați-vă că spațiul dvs. de lucru pentru pisici este configurat și obținut corect!

Din folderul src catkin workspace src:

git clone

git clone

git clone

git clone

git clone

git clone

Vai, a fost o mulțime de clonare.

EDITARE ULTERIORĂ: După cum a subliniat unul dintre cititorii mei, depozitul vision_opencv trebuie setat la ramura melodică. Pentru acel cd să src / vision_opencv și să execute

git checkout melodic

Apoi reveniți la folderul spațiului de lucru Catkin. Pentru a verifica dacă avem dependențe pentru toate pachetele în loc, executăm această comandă:

rosdep install --de-căi src --ignore-src

Dacă ați clonat cu succes toate pachetele necesare, va solicita descărcarea libfreekinect cu apt-get. Răspundeți nu, deoarece l-am instalat deja de la sursă.

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

catkin_make -j2

Ora ceaiului;) sau oricare ar fi băutura ta preferată.

După ce procesul de compilare s-a încheiat, puteți încerca să lansați stiva kinect și să verificați dacă rezultă în mod corespunzător imaginile de adâncime și culoare. Folosesc Raspberry Pi fără cap, așa că trebuie să rulez RVIZ pe computer.

Pe Raspberry Pi faceți (Schimbați adresa IP în adresa IP a 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: = adevărat

Veți vedea ieșirea ca în captura de ecran 1. „Oprirea dispozitivului RGB și fluxul de adâncime la culoare”. indică faptul că Kinect este gata, dar încă nu este abonat la subiectele sale.

Pe computerul desktop cu ROS Melodic instalat faceți:

export ROS_MASTER_URI = https://192.168.0.108: 11311

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

Acum ar trebui să puteți vedea fluxuri de imagini RGB și Adâncime în RVIZ ca în Captura de ecran 2 de mai sus … dar nu în același timp.

Bine, iată de unde încep lucrurile ciudate. Am petrecut 3 zile încercând diferite drivere și abordări și nimic nu a funcționat - de îndată ce aș încerca să accesez simultan două fluxuri, Kinect ar începe să expire așa cum puteți vedea în Captura de ecran 3. Am încercat totul: o sursă de alimentare mai bună, comisioane mai vechi de libfreenect și freenect_stack, oprirea usb_autosuspend, injectarea de înălbitor în porturile USB (bine, nu ultima! nu o faceți, este o glumă și nu ar trebui să constituie un sfat tehnic:)). Apoi, într-una dintre problemele lui Github, am văzut un cont despre o persoană care a spus că Kinect-ul lor este instabil, până când au „încărcat magistrala USB” prin conectarea dongle-ului WiFi. Am încercat asta și a funcționat. Pe de o parte, mă bucur că a funcționat. Pe de altă parte, cineva ar trebui să rezolve asta. Ei bine, între timp având (un fel de) soluționat asta, să trecem la pasul următor.

Pasul 3: Instalarea RTAB MAP autonomă

Instalarea RTAB MAP autonomă
Instalarea RTAB MAP autonomă

Mai întâi avem de instalat o grămadă de dependențe:

În ciuda faptului că există un pachet armhf predefinit disponibil pentru PCL, va trebui să îl compilăm din sursă din cauza acestei probleme. Consultați depozitul PCL GitHub pentru a vedea cum să îl compilați din sursă.

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

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

Acum să clonăm rtab map pachet independent git repository în folderul nostru de acasă și să-l construim. Am folosit ultima versiune (0.18.0).

git clone

cd rtabmap / build

cmake..

face -j2

sudo make install

sudo ldconfig rtabmap

Acum, când am compilat RTAB MAP independent, putem trece la ultimul pas - compilarea și instalarea împachetării ROS pentru RTAB MAP, rtabmap_ros.

Pasul 4: Instalarea Rtabmap_ros

Instalarea Rtabmap_ros
Instalarea Rtabmap_ros

Dacă ați ajuns atât de departe, probabil că știți drillul până acum:) Clonați depozitul rtabmap_ros în folderul src al spațiului de lucru catkin. (Executați următoarea comandă din folderul catkin workspace src!)

git clone

Vom avea nevoie și de aceste pachete ROS, de care rtabmap_ros depinde:

git clone

git clone

git clone

git clone

git clone

Înainte de a începe compilarea, vă puteți asigura că nu lipsește nicio dependență cu următoarea comandă:

rosdep install --de-căi src --ignore-src

Instalați mai multe dependențe din ap-get (acestea nu vor întrerupe legarea, dar vor genera o eroare în timpul compilării)

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

Apoi, mutați-vă în folderul spațiului de lucru Catkin și începeți să compilați:

cd..

catkin_make -j2

Sper că nu ați pus băutura dvs. de compilare preferată nicăieri prea departe. După ce compilarea este terminată, suntem gata să facem maparea!

Pasul 5: Afișați ora

Arată timpul
Arată timpul
Arată timpul
Arată timpul

Faceți acest truc hacky adăugând ceva de genul WiFi sau Bluetooth dongle la un port USB - foloseam 2 porturi USB 2.0, unul pentru Kinect, celălalt pentru dongle WiFi.

Pe Raspberry Pi faceți (Schimbați adresa IP în adresa IP a Raspberry Pi!): Primul 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

Al 2-lea 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 / MaxSize 1000 - MaxSize 1000 -: = fals

Veți vedea ieșirea ca în captura de ecran 1. „Oprirea dispozitivului RGB și fluxul de adâncime la culoare”. indică faptul că Kinect este gata, dar nimic nu este încă abonat la subiectele sale. În al doilea terminal ar trebui să vedeți mesaje despre calitatea odom. Dacă mutați Kinect prea repede, calitatea odom va merge la 0 și va trebui să vă mutați într-o locație anterioară sau să începeți de la o bază de date curată.

Pe computerul desktop cu pachetul ROS Melodic și rtab_map instalat (vă recomand să utilizați computerul Ubuntu pentru asta, deoarece pachetele pre-construite sunt disponibile pentru arhitectura amd64) faceți:

export ROS_MASTER_URI = https://192.168.0.108: 11311

export ROS_IP = [computer-desktop-ip]

rviz

Adăugați afișaje MapGraph și MapCloud la rviz și alegeți subiectele corespunzătoare provenind de la rtab_map. Ei bine, asta este, gust dulce al victoriei! Continuați și faceți o cartografiere:)

Pasul 6: Referințe

În timp ce scria acest articol, am consultat o serie de resurse, în special forumuri și probleme GitHub. Le voi lăsa aici.

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

Adăugați-mă pe LinkedIn dacă aveți întrebări și abonați-vă la canalul meu YouTube pentru a primi notificări despre proiecte mai interesante care implică învățarea automată și robotică.

Recomandat: