Guten Tag, liebe Leser! In jüngsten Artikeln habe ich über die beliebten SLAM- und visuellen Odometrie-Methoden gesprochen, die in ROS unterstützt werden. In diesem Artikel werde ich ein wenig vom Thema abweichen und über das Einrichten und Arbeiten mit ROS auf dem
NVIDIA Jetson TK1- Mikrocomputer
sprechen . Nachdem wir alles installiert haben, was wir brauchen, werden wir die
Streolabs ZED-Stereokamera anschließen und ausprobieren. An wen es interessant ist frage ich unter kat.
Über NVIDIA Jetson
Betrachten Sie zunächst die NVIDIA Jetson TK1-Plattform. NVIDIA Jetson TK1 ist ein NVIDIA-Mikrocomputer, der auf dem
Tegra K1 SOC (CPU + GPU auf einem einzelnen Chip mit CUDA-Unterstützung) basiert. NVIDIA Jetson verfügt über eine Quad-Core-ARM-Cortex-A15-CPU mit 2,3 GHz, dieselben Komponenten wie der Raspberry Pi (HDMI, USB 2.0 und 3.0, Ethernet) sowie PC-spezifische Module: SATA, Mini-PCIe . Der mobile Prozessor
Tegra K1 hat sehr ähnliche Eigenschaften und Architekturen wie Desktop-GPUs, sodass er hohen Lasten bei minimalem Stromverbrauch standhält. Wie auf der
offiziellen Seite angegeben, können Sie mit
dem Prozessor alle ressourcenintensiven Grafikaufgaben auf der Platine ausführen, z. B. Gesichtserkennung, Augmented Reality und sogar Computer Vision-Aufgaben für unbemannte Fahrzeuge. Weitere Informationen zu allen Plattformfunktionen finden Sie
hier .
Der interne Speicher des NVIDIA Jetson TK1 wird durch ein 16-GB-eMMC-Modul dargestellt. Standardmäßig ist NVIDIA Jetson TK1 mit dem Betriebssystem Ubuntu 14.04 vorinstalliert.
Ein 12-V-AC / DC-Adapter wird zur Stromversorgung des Mikrocomputers verwendet.

ZED-Stereokamera
Die ZED-Stereokamera ist eine passive Tiefenkamera, die aus zwei gewöhnlichen RGB-Kameras besteht, die 12 cm voneinander entfernt sind und eine Sicht von bis zu 20 Metern haben. Im Gegensatz zu aktiven Kameras (wie ASUS Xtion und Microsoft Kinect) verfügt die ZED-Stereokamera nicht über einen Infrarotlaser zur Entfernungsmessung. Die Kamera ist relativ günstig (kostet 449 US-Dollar). Der Vorteil der Kamera ist ihre geringe Größe (175 x 30 x 33 mm) und Leichtigkeit (159 g).
Mit der Kamera können
Karten des Gebiets im Freien auf der Drohne erstellt werden .
Weitere Informationen zur Kamera finden Sie
auf der offiziellen Seite .

Ubuntu auf NVIDIA Jetson TK1 konfigurieren
Wir verbinden den NVIDIA Jetson TK1 über HDMI mit dem Monitor, ein Ethernet-Kabel mit dem entsprechenden Anschluss und schließlich über den 12-V-AC / DC-Adapter mit der Stromquelle.
Um das System auf NVIDIA Jetson zu installieren, müssen Sie möglicherweise JetPack TK1 installieren (Anweisungen finden Sie
hier ). Ich habe NVIDIA Jetson mit bereits installiertem JetPack und Ubuntu 14.04 zur Hand, daher werde ich hier nicht darüber nachdenken, es zu installieren.
Das Ubuntu 14.04-System startet also automatisch. Für die Autorisierung verwenden wir den Ubuntu-Benutzernamen und das Passwort.
Ermitteln Sie die IP-Adresse des Jetson-Hosts:
ifconfig
Holen Sie sich die Hardwarespezifikationen:
lscpu
Die Schlussfolgerung lautet:
Architecture: armv7l Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1
Möglicherweise liegt ein Problem beim Herstellen einer Verbindung zu Jetson über SSH vor: ifconfig zeigt die IP-Adresse an, Sie können jedoch unter dieser Adresse keine Verbindung zu Jetson herstellen. Öffnen Sie zur Behebung des Problems die Datei / etc / network / interface im Stammverzeichnis:
sudo nano /etc/network/interface
und fügen Sie die Zeilen hinzu:
auto eth0 iface eth0 inet dhcp
Wir haben eine dynamische Zuweisung von IP-Adressen vorgenommen. Speichern Sie die Änderungen und führen Sie Folgendes aus:
sudo ifup eth0
Jetzt sollte alles funktionieren. Diese Entscheidung wurde
von hier aus getroffen .
Stellen Sie nun über SSH eine Verbindung zu Jetson her:
ssh -X ubuntu@<ip_address>
Installieren Sie CUDA
Für die Arbeit mit der ZED-Kamera benötigen wir das ZED SDK, für das die installierte CUDA-Version 6.5 erforderlich ist. Laden Sie hier die Deb-Datei für CUDA Toolkit 6.5 für L4T herunter (Anweisungen
hier ):
wget http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb
Legen Sie die Repository-Metadaten für die gerade heruntergeladene CUDA für L4T fest:
sudo dpkg -i cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb
Laden Sie das CUDA Toolkit selbst herunter und installieren Sie es, einschließlich des OpenGL-Toolkits für NVIDIA:
sudo apt-get update
Installieren Sie cuda-toolkit-6-5:
sudo apt-get install cuda-toolkit-6-5
Fügen Sie den Ubuntu-Benutzer zur Gruppe "Video" hinzu, um Zugriff auf die GPU zu erhalten:
sudo usermod -a -G video $USER
Hier ist $ USER Ubuntu.
Fügen Sie die Pfade zum CUDA-Installationsordner zum .bashrc-Skript hinzu und führen Sie es im aktuellen Terminal aus:
echo "export PATH=/usr/local/cuda-6.5/bin:$PATH" >> ~/.bashrc echo "export $PATH=/usr/local/cuda-6.5/bin:$PATH" >> ~/.bashrc source ~/.bashrc
Überprüfen Sie, ob das CUDA Toolkit auf dem Gerät installiert ist:
nvcc -V
USB 3.0 auf dem Jetson TK1 konfigurieren
Standardmäßig wird der USB 3.0-Anschluss vom System des Jetson TK1 als USB 2.0 konfiguriert. Wir müssen es als USB 3.0 konfigurieren. Öffnen Sie dazu die Datei /boot/extlinux/extlinux.conf unter dem Stammverzeichnis:
sudo vi /boot/extlinux/extlinux.conf
Suchen Sie die Zeichenfolge 'usb_port_owner_info = 0'. Wenn diese Zeile zweimal vorkommt, ändern Sie die letzte Aufnahme. Schreiben Sie 'usb_port_owner_info = 0' in 'usb_port_owner_info = 2' um.
Installieren Sie das ZED SDK
Das Installationsverfahren ähnelt Desktop-Linux. Es ist nur zu beachten, dass OpenCV bereits bei der Installation von JetPack installiert ist, damit Sie die Tegra-Optimierung dafür verwenden können. Daher ist eine manuelle Installation von OpenCV nicht erforderlich.
Um die ZED-Stereokamera verwenden zu können, muss das ZED SDK 1.2 installiert werden. Das Installationsprogramm verwendet eine spezielle Jetson TK1-Laufdatei. Laden Sie das Installationsprogramm herunter:
wget https://www.stereolabs.com/developers/downloads/archives/ZED_SDK_Linux_JTK1_v1.2.0.run
Legen Sie die Ausführungsrechte für die Datei fest und führen Sie sie im Terminal aus:
sudo chmod +x ZED_SDK_Linux_JTK1_v1.2.0.run ./ZED_SDK_Linux_JTK1_v1.2.0.run
Wir akzeptieren die Bedingungen der Lizenzvereinbarung, drücken 'q' und dann 'Y'. Folgen Sie als nächstes den Anweisungen.
Starten Sie den ZED Explorer auf Jetson selbst (funktioniert nicht, wenn Sie eine Remoteverbindung über SSH herstellen):
/usr/local/zed/tools/ZED\ Explorer

Installieren des ROS-Treibers für die ZED-Stereokamera
Ich habe ROS Indigo in meinen Experimenten verwendet. Installieren Sie die Abhängigkeiten für den ROS-Treiber:
sudo apt-get install ros-indigo-tf2-ros ros-indigo-image-transport ros-indigo-dynamic-reconfigure ros-indigo-urdf
Installieren Sie den ROS-Wrapper für die ZED-Kamera:
cd ~/catkin_ws/src git clone https://github.com/zastrix/zed-ros-wrapper.git git checkout ef3ad46f14cf62ff21083829a1fa6879d20246de cd ~/catkin_ws catkin_make
Führen Sie zed_wrapper aus, indem Sie die folgenden Befehle in verschiedenen Fenstern des Terminals ausführen:
roscore roslaunch zed_wrapper zed.launch
Wir zeigen die aktiven Themen:
rostopic list
In der Liste werden zusätzlich zu den Standardthemen Themen mit dem Präfix / zed angezeigt:
/zed/depth/camera_info /zed/depth/depth_registered /zed/joint_states /zed/left/camera_info /zed/left/image_raw_color /zed/left/image_rect_color /zed/odom /zed/point_cloud/cloud_registered /zed/rgb/camera_info /zed/rgb/image_raw_color /zed/rgb/image_rect_color /zed/right/camera_info /zed/right/image_raw_color /zed/right/image_rect_color
Führen Sie rqt_image_view aus:
rosrun rqt_image_view rqt_image_view
Bei Auswahl des Themas / zed / depth / depth_registered erhalten wir eine Tiefenkarte:

RGB-Bild von der linken Kamera (/ zed / left / image_raw_color):

Und schließlich das RGB-Bild von der rechten Kamera (/ zed / right / image_raw_color):

Daten von der Kamera werden in den Themen / zed / rgb / image_raw_color und / zed / depth / depth_registered mit einer Frequenz von 15 Hz veröffentlicht.
Die Häufigkeit der Veröffentlichung einer Punktwolke finden Sie im Thema / zed / point_cloud / cloud_registered:
rostopic hz /zed/point_cloud/cloud_registered
average rate: 4.146 min: 0.202s max: 0.371s std dev: 0.04798s window: 11 average rate: 4.178 min: 0.191s max: 0.371s std dev: 0.04306s window: 16
Führen Sie rviz auf Jetson selbst aus (ich konnte es nicht erfolgreich starten, wenn ich eine Verbindung über ssh mit der Option -x herstellte):
rosrun rviz rviz


SLAM On NVIDIA Jetson mit ZED-Stereokamera
Probieren wir jetzt die ZED-Kamera für eine praktische Aufgabe aus. Auf NVIDIA Jetson können Sie den SLAM RTAB-MAP-Algorithmus problemlos ausführen. Installieren Sie zunächst den ROS-Wrapper für RTAB-MAP:
sudo apt-get install ros-indigo-rtabmap-ros
Führen Sie nun rtabmap mit der ZED-Kamera aus. Wenn zed_wrapper nicht ausgeführt wird, führen Sie es aus:
rosrun zed_wrapper zed_wrapper_node
Führen Sie rtabmap aus:
rtabmap
Wählen Sie die ZED-Kamera im rtabmap-Fenster als Quelle aus:

Ich habe den RTAB-MAP nicht auf NVIDIA Jetson getestet, daher überlasse ich Ihnen, liebe Leser, die Möglichkeit, diesen SLAM-Algorithmus auszuprobieren. Die Verwendung von RTAB-MAP finden Sie in meinen letzten beiden Artikeln (
hier und
hier ).
Ich hoffe, dieser Artikel ist ein guter Ausgangspunkt für die Verwendung der ZED-Stereokamera und des NVIDIA Jetson-Mikrocomputers. Ich wünsche Ihnen viel Glück bei den Experimenten und bis bald!
PS: Ihre Meinung zur Auswahl einer kostengünstigen Stereokamera zum Experimentieren ist interessant. ROS-Unterstützung ist keine große Sache, vor allem der Preis. Bitte schreiben Sie Ihre Optionen in die Kommentare zum Artikel.
PS (Upd): Ich würde gerne passive Stereokameras wie ZED ausprobieren. Wünschenswert in der Lage, mit Raspberry Pi 3 zu arbeiten.