Sommario:

RGB-D SLAM con Kinect su Raspberry Pi 4 [Buster] ROS Melodic: 6 passaggi
RGB-D SLAM con Kinect su Raspberry Pi 4 [Buster] ROS Melodic: 6 passaggi

Video: RGB-D SLAM con Kinect su Raspberry Pi 4 [Buster] ROS Melodic: 6 passaggi

Video: RGB-D SLAM con Kinect su Raspberry Pi 4 [Buster] ROS Melodic: 6 passaggi
Video: RGB-D SLAM с Kinect на Raspberry Pi 4 ROS Melodic 2024, Novembre
Anonim
Image
Image

L'anno scorso ho scritto un articolo sulla creazione e l'installazione di ROS Melodic sul nuovo (a quel tempo) Raspberry Pi con il sistema operativo Debian Buster. L'articolo ha ricevuto molta attenzione sia qui su Instructables che su altre piattaforme. Sono molto contento di aver aiutato così tante persone a installare con successo ROS su Raspberry Pi. Nel video di accompagnamento ho anche dimostrato brevemente come ottenere un'immagine di profondità da Kinect 360. Successivamente numerose persone mi hanno contattato su LinkedIn e mi hanno chiesto come sono riuscito a utilizzare Kinect con Raspberry Pi. Sono rimasto un po' sorpreso dalla domanda, dal momento che il processo per preparare Kinect in quel momento mi ha richiesto circa 3-4 ore e non sembrava estremamente complicato. Ho condiviso i miei file.bash_history con tutte le persone che mi hanno chiesto informazioni sul problema e ad aprile ho finalmente trovato il tempo per scrivere un articolo su come installare i driver Kinect ed eseguire RGB-D SLAM con RTAB-MAP ROS. Settimana di notti insonni dopo aver iniziato a scrivere l'articolo ora capisco perché così tante persone mi hanno fatto questa domanda:)

Inizierò con una breve spiegazione su quali approcci hanno funzionato e quali no. Poi spiegherò come installare i driver Kinect per l'uso con ROS Melodic e infine come configurare la tua macchina per RGB-D SLAM con RTAB-MAP ROS.

Passaggio 1: cosa ha funzionato e cosa no

Ci sono alcuni driver disponibili per Kinect su Raspberry Pi - di questi due sono supportati da ROS.

Driver OpenNI - pacchetto openni_camera per ROS

driver libfreenect - pacchetto freenect_stack per ROS

Se guardi i loro rispettivi repository GitHub, puoi scoprire che il driver OpenNI è stato aggiornato l'ultima volta anni fa e in pratica è EOL da molto tempo. ibfreekinect d'altra parte viene aggiornato tempestivamente. Lo stesso per i rispettivi pacchetti ROS, freenect_stack è stato rilasciato per ROS melodic, mentre l'ultima distro per cui openni_camera ha elencato il supporto è Fuerte…

È possibile compilare e installare il driver OpenNI e il pacchetto openni_camera su Raspberry Pi per ROS Melodic, anche se non ha funzionato per me. Per farlo, segui questa guida, passaggi 1, 2, 3, passaggi 2 e 3, rimuovi il flag "-mfloat-abi=softfp" dal file Platform/Linux/Build/Common/Platform. ARM (per consiglio su questo problema Github). Quindi clona il pacchetto openni_camera nel tuo spazio di lavoro catkin e compila con catkin_make. Tuttavia, non ha funzionato per me, l'errore stava creando un generatore di profondità non riuscito. Motivo: l'interfaccia USB non è supportata!

L'uso di libfreenect e freenect_stack ha avuto successo alla fine, ma c'erano alcuni problemi da risolvere e la soluzione era un po' complicata, sebbene funzionasse in modo molto stabile (1 ora + funzionamento continuato).

Passaggio 2: installazione dei driver Freenect e Freenect_stack

Installazione dei driver Freenect e Freenect_stack
Installazione dei driver Freenect e Freenect_stack

Presumo che tu usi la mia immagine di ROS Melodic Desktop da questo articolo. Se vuoi eseguire l'installazione in un ambiente diverso, ad esempio ros_comm image o in Ubuntu per Raspberry Pi, assicurati di avere una conoscenza sufficiente di ROS per risolvere i problemi che potrebbero derivare da tale differenza.

Iniziamo compilando i driver libfreenect dai sorgenti, poiché la versione precompilata del repository apt-get è troppo obsoleta.

sudo apt-get update

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

git clone

cd libfreenect

mkdir build && build cd

cmake -L..

fare

sudo make install

Si spera che il processo di costruzione sia tranquillo e pieno di messaggi ecologici. Dopo aver installato il driver libfreenect, la prossima cosa da fare è installare il pacchetto freenect_stack per ROS. Ci sono molti altri pacchetti da cui dipende, dovremo clonarli e costruire con catkin_make tutti insieme. Prima di iniziare, assicurati che il tuo spazio di lavoro Catkin sia configurato e acquistato correttamente!

Dalla cartella src dell'area di lavoro Catkin:

git clone

git clone

git clone

git clone

git clone

git clone

Whooh, era un sacco di clonazione.

EDIT DOPO: Come è stato sottolineato da uno dei miei lettori, il repository vision_opencv deve essere impostato sul ramo melodico. Per quel cd su src/vision_opencv ed esegui

git checkout melodic

Quindi torna alla cartella dell'area di lavoro di Catkin. Per verificare se abbiamo dipendenze per tutti i pacchetti in atto, eseguiamo questo comando:

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

Se hai clonato con successo tutti i pacchetti necessari, verrà richiesto di scaricare libfreekinect con apt-get. Rispondi no, poiché l'abbiamo già installato dalla fonte.

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

catkin_make -j2

L'ora del tè;) o qualunque sia la tua bevanda preferita.

Dopo che il processo di compilazione è terminato, puoi provare a lanciare lo stack kinect e controllare se emette correttamente le immagini di profondità e colore. Uso Raspberry Pi senza testa, quindi ho bisogno di eseguire RVIZ sul mio computer desktop.

Su Raspberry Pi fai (cambia l'indirizzo IP con l'indirizzo IP del tuo Raspberry Pi!):

esporta ROS_MASTER_URI=https://192.168.0.108:11311

esporta ROS_IP=192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration:=true

Vedrai l'output come nella schermata 1. "Arresto dispositivo RGB e flusso di profondità flush". indica che Kinect è pronto, ma non è ancora stato sottoscritto nulla ai suoi argomenti.

Sul tuo computer desktop con ROS Melodic installato fai:

esporta ROS_MASTER_URI=https://192.168.0.108:11311

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

Ora dovresti essere in grado di vedere i flussi di immagini RGB e Depth in RVIZ come nella schermata 2 sopra… ma non allo stesso tempo.

Ok, qui è dove iniziano le cose hacky. Ho passato 3 giorni a provare diversi driver e approcci e niente ha funzionato: non appena provavo ad accedere a due flussi contemporaneamente, il Kinect iniziava a scadere come puoi vedere nella schermata 3. Ho provato di tutto: migliore alimentazione, commit più vecchi di libfreenect e freenect_stack, fermando usb_autosuspend, iniettando candeggina alle porte USB (ok, non l'ultima! non farlo, è uno scherzo e non dovrebbe costituire un consiglio tecnico:)). Quindi in uno dei problemi di Github ho visto un account di una persona che ha affermato che il proprio Kinect era instabile, fino a quando non ha "caricato il bus USB" collegando il dongle WiFi. L'ho provato e ha funzionato. Da un lato, sono contento che abbia funzionato. D'altra parte, qualcuno dovrebbe davvero aggiustarlo. Bene, nel frattempo dopo aver (più o meno) risolto il problema, passiamo al passaggio successivo.

Passaggio 3: installazione di RTAB MAP autonomo

Installazione di RTAB MAP autonomo
Installazione di RTAB MAP autonomo

Per prima cosa abbiamo un mucchio di dipendenze da installare:

Nonostante sia disponibile un pacchetto armhf precompilato per PCL, sarà necessario compilarlo dai sorgenti a causa di questo problema. Consultare il repository GitHub di PCL per vedere come compilarlo dal sorgente.

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

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

Ora cloniamo rtab mappa il repository git del pacchetto standalone nella nostra cartella home e costruiamolo. Ho usato l'ultima versione (0.18.0).

git clone

cd rtabmap/build

cmq..

make -j2

sudo make install

sudo ldconfig rtabmap

Ora che abbiamo compilato RTAB MAP autonomo, possiamo passare all'ultimo passaggio: compilare e installare il wrapper ROS per RTAB MAP, rtabmap_ros.

Passaggio 4: installazione di Rtabmap_ros

Installazione di Rtabmap_ros
Installazione di Rtabmap_ros

Se sei arrivato così lontano, probabilmente conosci il trapano ormai:) Clona il repository rtabmap_ros nella cartella src del tuo spazio di lavoro catkin. (Esegui il comando successivo dalla cartella src dell'area di lavoro catkin!)

git clone

Avremo bisogno anche di questi pacchetti ROS, da cui rtabmap_ros dipende:

git clone

git clone

git clone

git clone

git clone

Prima di iniziare la compilazione puoi assicurarti di non perdere alcuna dipendenza con il seguente comando:

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

Installa più dipendenze da ap-get (queste non interromperanno il collegamento, ma genereranno un errore durante la compilazione)

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

Quindi spostati nella cartella dell'area di lavoro di Catkin e inizia a compilare:

cd..

catkin_make -j2

Spero che tu non abbia esagerato con la tua compilation preferita. Dopo che la compilazione è terminata, siamo pronti per eseguire la mappatura!

Passaggio 5: mostra l'ora

Orario dello spettacolo
Orario dello spettacolo
Orario dello spettacolo
Orario dello spettacolo

Fai quel trucco stravagante aggiungendo qualcosa come WiFi o dongle Bluetooth a una porta USB: stavo usando 2 porte USB 2.0, una per Kinect, l'altra per il dongle WiFi.

Su Raspberry Pi fai (cambia l'indirizzo IP con l'indirizzo IP del tuo Raspberry Pi!): 1 ° terminale:

esporta ROS_MASTER_URI=https://192.168.0.108:11311

esporta ROS_IP=192.168.0.108

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

2° terminale:

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 Decimation 1000 --Odom 2":=falso

Vedrai l'output come nella schermata 1. "Arresto del dispositivo RGB e flusso di profondità flush". indica che Kinect è pronto, ma non è ancora iscritto ai suoi argomenti. Nel secondo terminale dovresti vedere messaggi sulla qualità di odom. Se sposti Kinect troppo velocemente, la qualità di odom andrà a 0 e dovrai spostarti in una posizione precedente o iniziare da un database pulito.

Sul tuo computer desktop con ROS Melodic e il pacchetto rtab_map installati (ti consiglio di usare un computer Ubuntu per questo, poiché i pacchetti precompilati sono disponibili per l'architettura amd64) fai:

esporta ROS_MASTER_URI=https://192.168.0.108:11311

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

rviz

Aggiungi i display MapGraph e MapCloud a rviz e scegli gli argomenti corrispondenti provenienti da rtab_map. Bene, questo è tutto, dolce gusto della vittoria! Vai avanti e fai un po 'di mappatura:)

Passaggio 6: riferimenti

Durante la scrittura di questo articolo ho consultato una serie di risorse, principalmente forum e problemi con GitHub. Li lascio qui.

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

Aggiungimi su LinkedIn se hai domande e iscriviti al mio canale YouTube per ricevere notifiche su progetti più interessanti che coinvolgono l'apprendimento automatico e la robotica.

Consigliato: