Inhaltsverzeichnis:

RGB-D SLAM mit Kinect auf Raspberry Pi 4 [Buster] ROS Melodic - Gunook
RGB-D SLAM mit Kinect auf Raspberry Pi 4 [Buster] ROS Melodic - Gunook

Video: RGB-D SLAM mit Kinect auf Raspberry Pi 4 [Buster] ROS Melodic - Gunook

Video: RGB-D SLAM mit Kinect auf Raspberry Pi 4 [Buster] ROS Melodic - Gunook
Video: Building an Autonomous RC Car | Part 1 2024, November
Anonim
Image
Image

Letztes Jahr habe ich einen Artikel über das Erstellen und Installieren von ROS Melodic auf dem neuen (damals) Raspberry Pi mit Debian Buster OS geschrieben. Der Artikel hat sowohl hier auf Instructables als auch auf anderen Plattformen viel Aufmerksamkeit erhalten. Ich bin sehr froh, dass ich so vielen Leuten geholfen habe, ROS erfolgreich auf Raspberry Pi zu installieren. Im begleitenden Video habe ich auch kurz gezeigt, wie man mit Kinect 360 ein Tiefenbild bekommt. Später haben mich zahlreiche Leute auf LinkedIn kontaktiert und mich gefragt, wie ich es geschafft habe, Kinect mit Raspberry Pi zu verwenden. Ich war etwas überrascht von der Frage, da ich zu diesem Zeitpunkt etwa 3-4 Stunden brauchte, um Kinect vorzubereiten, und mir nicht extrem kompliziert vorkam. Ich habe meine.bash_history-Dateien mit allen Personen geteilt, die mich zu diesem Problem befragten, und im April endlich die Zeit gefunden, einen Artikel über die Installation von Kinect-Treibern und die Durchführung von RGB-D-SLAM mit RTAB-MAP ROS zu schreiben. Eine Woche schlafloser Nächte, nachdem ich mit dem Schreiben des Artikels begonnen habe, verstehe ich jetzt, warum mir so viele Leute diese Frage gestellt haben:)

Ich werde mit einer kurzen Erklärung beginnen, welche Ansätze funktioniert haben und welche nicht. Dann erkläre ich, wie Sie Kinect-Treiber für die Verwendung mit ROS Melodic installieren und schließlich Ihren Computer für RGB-D SLAM mit RTAB-MAP ROS einrichten.

Schritt 1: Was hat funktioniert und was nicht?

Es gibt einige Treiber für Kinect auf Raspberry Pi - von ihnen werden zwei von ROS unterstützt.

OpenNI-Treiber - openni_camera-Paket für ROS

libfreenect-Treiber - freenect_stack-Paket für ROS

Schaut man sich die jeweiligen GitHub-Repositories an, stellt man fest, dass der OpenNI-Treiber zuletzt vor Jahren aktualisiert wurde und in der Praxis schon lange EOL ist. ibfreekinect wird dagegen zeitnah aktualisiert. Ebenso wie ihre jeweiligen ROS-Pakete wurde freenect_stack für ROS melodic veröffentlicht, während seine neueste Distribution openni_camera Unterstützung für Fuerte aufgelistet hat…

Es ist möglich, OpenNI-Treiber und openni_camera-Paket auf Raspberry Pi für ROS Melodic zu kompilieren und zu installieren, obwohl es bei mir nicht funktioniert hat. Um dies zu tun, befolgen Sie diese Anleitung, die Schritte 1, 2, 3, in den Schritten 2 und 3 entfernen das Flag "-mfloat-abi=softfp" aus der Datei Platform/Linux/Build/Common/Platform. ARM (gemäß Hinweis dazu Github-Problem). Klonen Sie dann das Paket openni_camera in Ihren catkin-Workspace und kompilieren Sie es mit catkin_make. Bei mir hat es jedoch nicht funktioniert, der Fehler beim Erstellen des Tiefengenerators ist fehlgeschlagen. Grund: USB-Schnittstelle wird nicht unterstützt!

Die Verwendung von libfreenect und freenect_stack brachte am Ende Erfolg, aber es gab einige Probleme zu lösen und die Lösung war etwas hackig, funktionierte jedoch sehr stabil (1 Stunde + Weiterbetrieb).

Schritt 2: Freenect-Treiber und Freenect_stack installieren

Installieren von Freenect-Treibern und Freenect_stack
Installieren von Freenect-Treibern und Freenect_stack

Ich gehe davon aus, dass Sie mein ROS Melodic Desktop-Image aus diesem Artikel verwenden. Wenn Sie die Installation in einer anderen Umgebung durchführen möchten, zum Beispiel ros_comm image oder in Ubuntu für Raspberry Pi, stellen Sie sicher, dass Sie über ausreichende Kenntnisse über ROS verfügen, um Probleme zu lösen, die sich aus diesem Unterschied ergeben könnten.

Beginnen wir damit, libfreenect-Treiber aus dem Quellcode zu erstellen, da die vorgefertigte Version des apt-get-Repository zu veraltet ist.

sudo apt-get update

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

git-Klon

cd libfreenect

mkdir build && cd build

cmake -L..

machen

sudo machen installieren

Hoffentlich wird der Build-Prozess ereignislos und voller umweltfreundlicher Nachrichten sein. Nachdem Sie den libfreenect-Treiber installiert haben, müssen Sie als nächstes das freenect_stack-Paket für ROS installieren. Es gibt noch einige andere Pakete, von denen es abhängt, wir müssen sie klonen und mit catkin_make zusammen bauen. Bevor Sie beginnen, stellen Sie sicher, dass Ihr Catkin-Arbeitsbereich richtig eingerichtet und mit Quellen versehen ist!

Aus deinem catkin workspace src-Ordner:

git-Klon

git-Klon

git-Klon

git-Klon

git-Klon

git-Klon

Whooh, das war eine Menge Klonen.

SPÄTERE BEARBEITUNG: Wie einer meiner Leser darauf hingewiesen hat, muss das vision_opencv-Repository auf den melodischen Zweig gesetzt werden. Dafür cd zu src/vision_opencv und ausführen

git checkout melodisch

Gehen Sie dann zurück zu Ihrem catkin-Workspace-Ordner. Um zu überprüfen, ob wir Abhängigkeiten für alle vorhandenen Pakete haben, führen Sie diesen Befehl aus:

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

Wenn Sie alle erforderlichen Pakete erfolgreich geklont haben, werden Sie aufgefordert, libfreekinect mit apt-get herunterzuladen. Antworten Sie mit Nein, da wir es bereits aus der Quelle installiert haben.

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

catkin_make -j2

Tea Time;) oder was auch immer dein Lieblingsgetränk ist.

Nachdem der Kompilierungsvorgang abgeschlossen ist, können Sie versuchen, Kinect Stack zu starten und zu überprüfen, ob die Tiefen- und Farbbilder richtig ausgegeben werden. Ich verwende Raspberry Pi Headless, daher muss ich RVIZ auf meinem Desktop-Computer ausführen.

Auf Raspberry Pi tun (Ändern Sie die IP-Adresse in die IP-Adresse Ihres Raspberry Pi!):

export ROS_MASTER_URI=https://192.168.0.108:11311

Export ROS_IP=192.168.0.108

roslaunch freenect_launch freenect.launch Tiefe_Registrierung:=true

Sie sehen die Ausgabe wie in Screenshot 1. "Beenden des RGB- und Tiefenstreams des Geräts." zeigt an, dass Kinect bereit ist, aber seine Themen sind noch nicht abonniert.

Führen Sie auf Ihrem Desktop-Computer mit installiertem ROS Melodic Folgendes aus:

export ROS_MASTER_URI=https://192.168.0.108:11311

export ROS_IP=[Ihre-Desktop-Computer-IP] rviz

Jetzt sollten Sie RGB- und Tiefenbildstreams in RVIZ wie in Screenshot 2 oben sehen können … aber nicht gleichzeitig.

Okay, hier fängt hackiges Zeug an. Ich habe 3 Tage damit verbracht, verschiedene Treiber und Ansätze auszuprobieren und nichts funktionierte - sobald ich versuchte, auf zwei Streams gleichzeitig zuzugreifen, begann die Kinect-Zeitüberschreitung, wie Sie in Screenshot 3 sehen können. Ich habe alles versucht: bessere Stromversorgung, ältere Commits von libfreenect und freenect_stack, usb_autosuspend stoppen, Bleichmittel in USB-Ports injizieren (okay, nicht der letzte! Tu es nicht, es ist ein Witz und sollte keine technische Beratung darstellen:)). Dann sah ich in einer der Github-Ausgaben einen Bericht einer Person, die sagte, ihre Kinect sei instabil, bis sie "den USB-Bus geladen" hat, indem sie einen WiFi-Dongle angeschlossen hat. Das habe ich probiert und es hat funktioniert. Einerseits bin ich froh, dass es funktioniert hat. Auf der anderen Seite sollte das wirklich jemand reparieren. Nun, da wir das inzwischen (irgendwie) behoben haben, gehen wir zum nächsten Schritt über.

Schritt 3: Eigenständige RTAB MAP installieren

Eigenständige RTAB-MAP installieren
Eigenständige RTAB-MAP installieren

Zuerst müssen wir eine Reihe von Abhängigkeiten installieren:

Obwohl für PCL ein vorgefertigtes armhf-Paket verfügbar ist, müssen wir es wegen dieses Problems aus dem Quellcode kompilieren. Konsultieren Sie das PCL GitHub-Repository, um zu erfahren, wie Sie es aus dem Quellcode kompilieren.

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

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

Lassen Sie uns nun das rtab map Standalone-Paket git Repository in unseren Home-Ordner klonen und erstellen. Ich habe die neueste Version (0.18.0) verwendet.

git-Klon

cd rtabmap/build

cmake..

mache -j2

sudo machen installieren

sudo ldconfig rtabmap

Wenn wir nun die eigenständige RTAB MAP kompiliert haben, können wir zum letzten Schritt übergehen - dem Kompilieren und Installieren des ROS-Wrappers für RTAB MAP, rtabmap_ros.

Schritt 4: Installieren von Rtabmap_ros

Installation von Rtabmap_ros
Installation von Rtabmap_ros

Wenn Sie so weit gekommen sind, kennen Sie wahrscheinlich die Übung inzwischen:) Klonen Sie das rtabmap_ros-Repository in Ihren catkin-Workspace-src-Ordner. (Führen Sie den nächsten Befehl aus Ihrem catkin workspace src-Ordner aus!)

git-Klon

Wir benötigen auch diese ROS-Pakete, von denen rtabmap_ros abhängt:

git-Klon

git-Klon

git-Klon

git-Klon

git-Klon

Bevor Sie mit der Kompilierung beginnen, können Sie mit dem folgenden Befehl sicherstellen, dass keine Abhängigkeiten fehlen:

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

Installieren Sie weitere Abhängigkeiten von ap-get (diese unterbrechen die Verknüpfung nicht, sondern geben einen Fehler während der Kompilierung aus)

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

Wechseln Sie dann in Ihren catkin-Workspace-Ordner und beginnen Sie mit der Kompilierung:

CD..

catkin_make -j2

Ich hoffe, Sie haben Ihr Lieblings-Compilation-Getränk nicht zu weit entfernt. Nachdem die Kompilierung abgeschlossen ist, sind wir bereit für das Mapping!

Schritt 5: Zeit anzeigen

Show Time
Show Time
Show Time
Show Time

Machen Sie diesen Hacktrick, indem Sie einem USB-Port etwas wie WiFi- oder Bluetooth-Dongle hinzufügen - ich habe 2 USB 2.0-Ports verwendet, einen für Kinect, den anderen für WiFi-Dongle.

Auf Raspberry Pi tun (Ändern Sie die IP-Adresse in die IP-Adresse Ihres Raspberry Pi!): 1. Terminal:

export ROS_MASTER_URI=https://192.168.0.108:11311

Export ROS_IP=192.168.0.108

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

2. Anschluss:

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 --Odommap 2:=falsch

Sie sehen die Ausgabe wie in Screenshot 1. "Beenden des RGB- und Tiefenstreams des Geräts." zeigt an, dass Kinect bereit ist, aber seine Themen sind noch nicht abonniert. Im zweiten Terminal sollten Meldungen zur Odom-Qualität angezeigt werden. Wenn Sie Kinect zu schnell verschieben, geht die Odom-Qualität auf 0 und Sie müssen zu einem vorherigen Speicherort wechseln oder mit einer sauberen Datenbank beginnen.

Auf Ihrem Desktop-Computer mit installiertem ROS Melodic- und rtab_map-Paket (ich empfehle Ihnen, dafür einen Ubuntu-Computer zu verwenden, da vorgefertigte Pakete für die AMD64-Architektur verfügbar sind):

export ROS_MASTER_URI=https://192.168.0.108:11311

export ROS_IP=[Ihre-Desktop-Computer-IP]

rviz

Fügen Sie MapGraph- und MapCloud-Anzeigen zu rviz hinzu und wählen Sie die entsprechenden Themen aus rtab_map. Nun, das ist es, süßer Geschmack des Sieges! Mach weiter und mach ein paar Karten:)

Schritt 6: Referenzen

Beim Schreiben dieses Artikels habe ich eine Reihe von Ressourcen konsultiert, hauptsächlich Foren und GitHub-Probleme. Ich lasse sie 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

Fügen Sie mich auf LinkedIn hinzu, wenn Sie Fragen haben und abonnieren Sie meinen YouTube-Kanal, um über weitere interessante Projekte im Bereich Machine Learning und Robotik informiert zu werden.

Empfohlen: