Erkennung und Erkennung von Objekten von der Kamera in ROS mithilfe des Pakets find_object_2d



Einer der Vorteile des Robot Operating System (ROS) besteht darin, dass es viele Pakete enthält, die in unseren Anwendungen wiederverwendet werden können. In unserem Fall möchten wir ein System zur Erkennung und Erkennung von Objekten einführen. Das Paket find_object_2d implementiert die Funktionsdetektoren und Deskriptoren SURF, SIFT, ORB, FAST und BRIEF zum Erkennen von Objekten . Über die grafische Oberfläche dieses Pakets können wir die Objekte markieren, die wir erkennen möchten, und sie für die zukünftige Erkennung speichern. Der Detektorknoten erkennt Objekte in Kamerabildern und veröffentlicht Objektdetails über das Motiv. Mit einem 3D-Sensor kann die Tiefe und Ausrichtung eines Objekts bewertet werden.

Am Ende des Artikels Videotests am Beispiel von ORB- und SIFT-Algorithmen.

Find_object_2d einstellen


Die Installation dieses Pakets ist recht einfach. Hier ist der Befehl, um es unter Ubuntu 16.04 und ROS Kinetic zu installieren:

$ sudo apt-get install ros-kinetic-find-object-2d 

Von der Quelle installieren


Wechseln Sie zum ROS-Arbeitsbereich:

 $ cd ~/catkin_ws/src 

Kopieren Sie den Quellcode in den Ordner src:

 $ git clone https://github.com/introlab/find-object.git src/find_object_2d 

Erstellen Sie einen Arbeitsbereich:

 $ catkin_make 

Ausführen von find_object_2d-Knoten mithilfe von Webcams


Im Folgenden wird beschrieben, wie Sie die Detektorknoten für eine Webcam starten. Wenn wir ein Objekt mithilfe einer Webcam erkennen möchten, müssen wir zuerst das Paket usb_cam installieren (siehe vorherigen Artikel).

1. Starten Sie roscore:

 $ roscore 

2.1 Schließen Sie die USB-Kamera an den Computer an und führen Sie den ROS-Treiber usb_cam aus:

 $ roslaunch usb_cam usb_cam-test.launch 

Dadurch wird der ROS-Treiber für USB-Webcams gestartet, und Sie können die Themen in diesem Treiber mit dem Befehl rostopic list anzeigen. Die Liste der Themen im Treiber wird hier angezeigt:


Vom Kameratreiber veröffentlichte Themen

2.2 Eine alternative Möglichkeit, Videos von der Kamera über uvc_camera zu senden:

 $ rosrun uvc_camera uvc_camera_node 

3. Aus der Themenliste verwenden wir das Thema des Rohbilds von der Kamera, das im Thema / usb_cam / image_raw veröffentlicht ist. Wenn Sie dieses Thema erhalten, besteht der nächste Schritt darin, den Objekterkennungsknoten zu starten. Der folgende Befehl startet den Objekterkennungsknoten:

 $ rosrun find_object_2d find_object_2d image:=/usb_cam/image_raw 

Dieser Befehl öffnet das Objekterkennungsfenster, in dem wir den Kamerakanal und die Funktionen der Objekte sehen.

4. Wie können wir damit ein Objekt erkennen? Im Folgenden finden Sie die Verfahren zum Durchführen der grundlegenden Ermittlung mit diesem Tool:


Fenster zur Erkennung von Suchobjekten

5. Sie können mit der rechten Maustaste auf das linke Seitenfeld (Objekte) dieses Fensters klicken und erhalten die Möglichkeit, Objekte aus der Szene hinzuzufügen. Wenn Sie diese Option auswählen, werden Sie aufgefordert, ein Objekt aus der aktuellen Szene zu markieren. Nach Abschluss der Markierung wird das markierte Objekt von der Szene aus verfolgt. Der vorherige Screenshot zeigt den ersten Schritt, in dem eine Szene mit einem Objekt erfasst wird.

6. Nachdem Sie das Objekt auf die Kamera ausgerichtet haben, klicken Sie auf die Schaltfläche „Bild aufnehmen“, um auf das Objekt zu klicken:


Objektassistent zum Erfassen eines Objekts hinzufügen

7. Im nächsten Fenster wird ein Objekt aus der aktuellen Bindung markiert. Die folgende Abbildung zeigt dies. Wir können den Mauszeiger verwenden, um ein Objekt zu markieren. Klicken Sie auf die Schaltfläche "Weiter", um das Objekt zuzuschneiden, und fahren Sie mit dem nächsten Schritt fort:


Objektassistent zum Beschriften eines Objekts hinzufügen

8. Nach dem Zuschneiden des Objekts wird die Gesamtzahl der Funktionsbeschreibungen für das Objekt angezeigt. Sie können auf die Schaltfläche „Ende“ klicken, um eine Objektvorlage zur Erkennung hinzuzufügen. Die folgende Abbildung zeigt den letzten Schritt des Hinzufügens einer Objektvorlage zu dieser Detektoranwendung:


Letzter Schritt des Assistenten zum Hinzufügen von Funktionen

9. Herzlichen Glückwunsch! Sie haben ein zu entdeckendes Objekt hinzugefügt. Jetzt können Sie die in der nächsten Aufnahme gezeigte Erkennung sehen. Sie können den Begrenzungsrahmen um das erkannte Objekt sehen:


Suchobjekt-Assistent Starten der Erkennung

10. Ist das genug? Wie wäre es mit der Position des Objekts? Wir können bekommen
Objektposition mit folgendem Befehl:

 $ rosrun find_object_2d print_objects_detected 


Eigenschaftendetails

11. Sie können auch vollständige Informationen über das erkannte Objekt von erhalten
/ Objekt des Themas. In diesem Thema wird ein Multicast-Array veröffentlicht, das aus der Breite und Höhe des Objekts und der Homografiematrix besteht, um die Position und Ausrichtung des Objekts sowie seine Skalierungs- und Versatzwerte zu berechnen. Sie können das Echo des / object-Themas wie folgt erhalten:


Themen- / Objektwerte

12. Wir können die neue Position und Orientierung aus den folgenden Gleichungen berechnen:


Die Gleichung zur Berechnung der Position des Objekts

Hier ist H die Homographie einer 3 × 3-Matrix, (x1, y1) ist die Position des Objekts im gespeicherten Bild und (x2, y2) ist die berechnete Position des Objekts im aktuellen Rahmen.
Sie können den Quellcode des Knotens print_objected_src überprüfen, um mithilfe der Homografiematrix eine Onversion zu erhalten.

Hier ist der Quellcode für diesen Knoten.

Testen des Videos des Pakets find_object_2d am Beispiel der ORB- und SIFT-Algorithmen



Zusammenfassung des Algorithmus: ORB ist schnell, sieht jedoch keine entfernten Objekte und bestimmt die Geometrie häufig nicht korrekt. SIFT erkennt entfernte Objekte, bestimmt die Geometrie genau, erfordert große Rechenressourcen und wird für die kommerzielle Nutzung bezahlt.

Vom EduMIP- Roboter zu lösende Fragen :

  1. Empfangen Sie von der Logitech C920-Kamera auf BeagleBone Blue ein bereits hardwarecodiertes Video und übertragen Sie es in dieser Form auf einen großen Computer in ROS.
  2. Verbinden Sie die Abstandssensoren VL6180X, Vl53l0x und den Stoßfänger, um eine Karte in ROS zu erstellen. (Zubehör bereits bestellt)
  3. Schreiben Sie einen Algorithmus in ROS, der die Daten der Karte und der von der Kamera erkannten Objekte verarbeitet und darauf basierend eine Bewegungsroute erstellt.

Wenn es Robotik-Enthusiasten wie mich gibt, die bereit sind, sich dem Projekt anzuschließen, dann schreiben Sie in eine persönliche E-Mail, ich brauche Hilfe zu den oben genannten Themen.

Source: https://habr.com/ru/post/de414991/


All Articles