Guten Tag liebe Leser von Habr. Vor einigen Jahren
schrieb ich über die Verwendung des Raspberry Pi Camera Board auf dem Raspberry Pi in Verbindung mit ROS. In diesem und dem nächsten Artikel möchte ich über die Verwendung einer Weitwinkelkamera wie Fish Eye auf dem Raspberry Pi 3 mit installiertem Ubuntu 16.04 sprechen. An wen es interessant ist frage ich unter kat.
Für den Anfang, warum Fischaugen-Kamera? Ich habe viele Artikel über die Verwendung von Weitwinkelkameras für visuelle Kilometerzähler und SLAM gesehen. Dank des größeren Betrachtungswinkels des Fischauges verbessert die Kamera die Genauigkeit der visuellen Kilometerzähler. Also wollte ich eine solche Kamera mit Raspberry Pi mit ROS-Unterstützung ausprobieren. Ich habe auf
dx.com eine Kamera mit einem Winkel von 160 Grad für 28 US-Dollar gekauft. Das Kamera-Kit enthält außerdem zwei IR-Lampen für Nachtsicht:

Im ersten Artikel werde ich über die Installation der erforderlichen Treiber, OpenCV 3 und Pakete zur Unterstützung des Raspberry Pi Camera Board in ROS sprechen.
Installieren des Fischaugen-Kameratreibers auf dem Raspberry Pi 3
Also fangen wir an. Verbindung zu RPi 3 über SSH herstellen:
ssh -Y <user>@<ip>
Der Parameter -Y löst das Problem, dass beim Starten einiger GUI-Anwendungen der Fehler "Verbindung zur Anzeige konnte nicht hergestellt werden" angezeigt wird (Qt, Fenster mit dem Image aus dem OpenCV-Programm). Erfahren Sie
hier mehr.
Zunächst müssen wir die Unterstützung des Kameratreibers in den Raspberry Pi raspi-config-Einstellungen aktivieren. In Raspbian ist dieser Dienst bereits aktiviert, in Ubuntu müssen Sie ihn installieren:
sudo apt-get install raspi-config
Führen Sie raspi-config aus:
sudo raspi-config
Wählen Sie die Option Schnittstelle, dann die Pi-Kamera und klicken Sie auf Ja. Und schließlich fertig.
Überprüfen Sie, ob die Kameraunterstützung mit dem Dienstprogramm raspistill aktiviert ist:
raspistill -o mypicture.jpg
Wenn Sie die Fehlermeldung „Kamera wird nicht erkannt. Bitte überprüfen Sie sorgfältig, ob das Kameramodul korrekt installiert ist. Überprüfen Sie, ob Sie die Kamera richtig an den Raspberry Pi angeschlossen haben. Sie können das System auch neu starten (es hat mir geholfen).
Versuchen wir, ein Video aufzunehmen:
raspivid -o myvideo.h264
Ich habe ein Bild auf einem Monitor, der an einen Raspberry Pi angeschlossen ist. Ich konnte kein Popup auf meinem Computer anzeigen, wenn ich eine Verbindung über ssh herstellte.

Verwenden von OpenCV 3 mit einer Fischaugen-Kamera auf einem Raspberry Pi
Installieren Sie die Bibliothek picamera [array]:
pip install "picamera[array]"
Installieren Sie die erforderlichen Abhängigkeiten für OpenCV. Aktualisieren Sie zunächst den apt-Paketmanager und aktualisieren Sie die vorinstallierten Pakete:
sudo apt-get update sudo apt-get upgrade
Installieren Sie einige Bibliotheken:
sudo apt-get install build-essential cmake pkg-config sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt-get install libxvidcore-dev libx264-dev sudo apt-get install libgtk-3-dev sudo apt-get install libatlas-base-dev gfortran sudo apt-get install python2.7-dev python3.5-dev
Wir werden OpenCV 3 von der Quelle installieren.
cd ~ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip unzip opencv.zip
Wir müssen auch das opencv_contrib-Repository herunterladen:
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip unzip opencv_contrib.zip
Tatsache ist, dass in OpenCV 3-Paketen mit Feature-Deskriptoren (wie SIFT und SURF) in ein separates Contrib-Repository verschoben wurden. Um die Tag-Deskriptoren verwenden zu können, müssen wir das Contrib-Repository separat herunterladen.
Jetzt können wir endlich OpenCV installieren. Wir können cmake ausführen, um OpenCV mit den erforderlichen Parametern zu kompilieren:
cd ~/opencv-3.1.0/ mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \ -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \ -D BUILD_EXAMPLES=ON ..
Wenn cmake ohne Fehler erfolgreich war, führen Sie make aus:
make -j4
Beim Kompilieren wurde der Fehler "Segmentierungsfehler" angezeigt. Wenn Sie den gleichen Fehler erhalten, machen Sie sauber, um die Kompilierungsergebnisse zu entfernen, und machen Sie mit einem Kernel:
make clean make
Das Kompilieren dauerte 3 Stunden. Installieren Sie abschließend OpenCV 3:
sudo make install sudo ldconfig
Es gibt eine interessante Nuance im Zusammenhang mit ROS Kinetic. Wenn Sie Rin Kinetic installieren, fügt ROS den Pfad zu den Python-Bibliotheken (/opt/ros/kinetic/lib/python2.7/dist-packages) zum Systempfad hinzu, wenn Sie den Quellbefehl /opt/ros/kinetic/setup.bash ausführen. Dies führt zu einigen Problemen bei der nachfolgenden Installation von OpenCV aus dem Quellcode (mehr dazu finden Sie
hier ). Entfernen Sie zur Behebung des Problems die Zeile 'source /opt/ros/kinetic/setup.bash' aus der .bashrc-Datei. Vergessen Sie nicht zu laufen:
source ~/.bashrc
Lassen Sie uns überprüfen, ob OpenCV jetzt korrekt mit Python verknüpft ist.
Erstellen Sie einen Ordner für das Projekt und ein einfaches Testskript:
mkdir PiCamera && cd PiCamera vim test_cam.py
Fügen Sie der Datei den folgenden Code hinzu:
from picamera.array import PiRGBArray from picamera import PiCamera import time import cv2
Führen Sie das Skript aus:
python test_cam.py
Wenn erfolgreich, bekommen wir so etwas:

Versuchen wir nun, Videos von der Kamera aufzunehmen.
vim test_videom.py
Fügen Sie der Datei den folgenden Code hinzu:
Versuchen wir etwas Interessanteres, zum Beispiel die Kantenerkennung. Ich benutze hier Kennys Detektor (Code
von hier ):
from picamera.array import PiRGBArray from picamera import PiCamera import time import cv2 import numpy as np
Hier ist das Ergebnis der Ausführung des Programms:

Hinzufügen von Raspberry Pi Camera-Unterstützung zu ROS
Fügen wir nun die Möglichkeit hinzu, mit einer Fischaugen-Kamera für den Raspberry Pi von ROS zu arbeiten. Installieren Sie zunächst den erforderlichen V4L2-Treiber für die Raspberry Pi-Kamera (mehr dazu
hier ). Führen Sie den folgenden Befehl aus:
sudo rpi-update
und starten Sie das System neu. Fügen Sie nun den Treiber hinzu:
sudo modprobe bcm2835-v4l2
Stellen Sie sicher, dass das Gerät / dev / video0 verfügbar ist:
ll /dev/video0
Die Ausgabe sieht folgendermaßen aus:
crw-rw----+ 1 root video 81, 0 Mar 17 15:47 /dev/video0
Laden Sie das Paket usb_cam herunter:
sudo apt-get install ros-kinetic-usb-cam source /opt/ros/kinetic/setup.bash
Führen Sie den ROS-Master und rqt_image_view aus:
roscore roslaunch usb_cam usb_cam-test.launch rosrun rqt_image_view rqt_image_view
Wählen Sie das Thema / usb_cam / image_raw aus. Wir bekommen folgendes Bild:

Jetzt kann die Fischaugen-Kamera mit allen Computer-Vision-Paketen in ROS verwendet werden. Das nächste Mal werden wir versuchen, Objekte zu erkennen. Viel Glück an alle in den Experimenten und bis bald!