Target Tracking

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Autor: Martin Berysztak
Betreuer: Prof. Schneider

Raketenwerfer von getdigital.de

Ziel

Ein roter Luftballon soll in Bewegung vor einem weissen Hintergrund erkannt und vom Raketenwerfer getroffen werden.

Aufgabe

  1. Erkennen Sie den Luftballon vor seinem Hintergrund mit einer Webcam.
  2. Fokussieren Sie den Raketenwerfer auf den Luftballonschwerpunkt.
  3. Treffen Sie den Luftballon in einer Flugsequenz mit 3 von 4 Schüssen.


Lösung

Die Lösung der Aufgabenstellung teilt sich in drei Teilschritte:

Ansteuern des Raketenwerfers

Zur Lösung der Aufgabe ist der von getdigital.de vertriebene Raketenwerfer zur Lösung der Aufgabe nicht geeignet, da so nur eine Ansteuerung über die gegebene Software möglich ist. Für die vorliegende Lösung wurde ein Raketenwerfer mit einer neuen Ansteuerung über [| Arduino] entwickelt. Zum Ansteuern es Raketenwerfers muss die Verbindung mit matlab hergestellt werden. Erst dann kann man die einzelnen Motoren des Raketenwerfers ansteuern.

Umgebauter Raketenwerfer
Bei Fragen zur Entwicklung der neuen Ansteuerung, wenden Sie sich an Jan Kifmann oder Hauke Ludwig





Zum Initialisieren der webcam wird die Image Acquisition Toolbox verwendet. Mithilfe des BlobAnalysis Befehls lassen sich Umrisse von Objekten erkennen. Der Centroid Befehl gibt dann den Mittelpunk des gefundenen Objektes an. Zu Initialisierung werden noch verschiedene Text- und Visualisierungsbefehle benutzt, welche im Skript ersichtlich sind, jedoch zur Lösung der Aufgabe nur eine Hilfestellung für den Benutzer gibt.

Objekterkennung (roter Ballon vor weißem Hintergrund)

Um ein rotes Objekt in einem Live Videobild aus einem weißen Hintergrund zu selektieren müssen folgende Schritte durchgeführt werden:

  1. Im ersten Schritt muss jedes Frame aus dem rgb-Bild einzelt ausgelesen werden.

    Quelle: http://arindambose.com/blog/?p=72
  2. Der zweite Schritte besteht darin sich nur den roten Teil des RGB-Bildes zu holen.
    Schritt 2
    Quelle: http://arindambose.com/blog/?p=72
  3. Darauf in wird das Bild aus dem rgb-Farbraum in ein Graustufenbild umgewandelt.
    Schritt 3
    Quelle: http://arindambose.com/blog/?p=72
  4. Nun wird der rote Teil des RGB-Bildes vom Graubild subtrahiert.
    Schritt 4
    Quelle: http://arindambose.com/blog/?p=72
  5. Auf das Graubild wird ein Median Filter eingesetzt um störende Verrauschungen zu entfernen.
    Schritt 5
    Quelle: http://arindambose.com/blog/?p=72
  6. Das gefilterte Bild wird nun in ein Binärbild umgewandelt. Die roten Objekte werden hierfür weiß gemacht der Rest wird schwarz.
    Schritt 6
    Quelle: http://arindambose.com/blog/?p=72


Diese Schritte werden im Code während der While-schleife immer wieder für jedes Bild durchgeführt. Anhand dessen kann nun mit Hilfe des BlobAnalysis-Befehls nun die roten Objekte selktiert werden.

Objekt Tracking

Um das Objekt zu verfolgen wird auf die zuvor im vision.BlobAnalysis-Befehl ausgebenen und in der centroid-Variable gespeicherten Mittelwertskoordinaten zugegriffen. Außerdem wird die Tatsache genutzt, dass der Raketenwerfer etwas über dem Mittelpunkt des Kamarabildes schießt. Dieser befindet sich in einem Bereich von:

  • X-Richtung: 330-380
  • Y-Richtung: 360-290

Dadurch wird die Annahme getroffen, dass wenn das zu treffende Objekt sich in Bildmittelpunktbereich befindet, es getroffen wird. Dies wird erreicht indem anhand von if-Bedingungen und der Centroid Variable geprüft wird ob sich der Mittelpunkt des Objektes sich bereits im Abschussbereich befindet, wenn dies nicht der Fall ist soll der Raketenwerfer sich solange in diese Richtung bewegen.

Befinden sich nun der Mittelpunkt des Objektes oberhalb des Kameramittelpunktes, werden alle Bewegungen des Raketenwerfers eingestellt und das Objekt wird abgeschossen.

Bedienung des Tools

Zum Testen der Lösung muss eine webcam auf dem Raketenwerfer mittig befestigt werden. Raketenwerfer und webcam müssen in die USB-Anschlüsse gesteckt werden. Im matlab file target_tracking.m muss dann die Variable usb_port_rak dem aktuellen USB-Port angepasst werden (siehe Gerätemanager). Je nach Lichtverhältnis und Entfernung Raketenwerfer - Wand müssen der Schwellwert der Roterkennung und die minimale und maximale blob area angepasst werden.

Ausblick

Aufgrund der gegebenen Hardware kann der Raketenwerfer sich schnell bewegende Objekte schlecht treffen, denn der Raketenwerfer bewegt sich dafür zu langsam.Die Bewegung des Objektes ist im Video durch rütteln am Raketenwerfer simuliert worden.
Man könnte mithilfe einer Vorrausberechnung der Flugbahn dem entgegenwirken. Dies benötigt jedoch einen leistungsfähigen Computer. Ob der Arduinu dafür geeignet ist, bleibt zweifelhaft. Des Weiteren könnte man maximal den Bereich des Mittelpunktes eingrenzen und die Parameter genauer setzen. Der Rotbereich muss für jede Gegebenheit, sprich Lichtverhältnis, angepasst werden, dies könnte in einem weiteren Schritt noch verändert werden. Das Skript zur Roterkennung sieht teilweise auch andere rote Objekte als nur den Ballon, da die Range für die Objekte noch sehr grob ist. Man müsste eine feste Größe für die Ballons definieren, um nur bestimmte Objekte wie Ballons selektieren zu können.



Siehe auch

Vollständige Lösung mit Video[1]
Quelle zur Roterkennung[2]


→ zurück zum Hauptartikel: Digitale Signal- und Bildverarbeitung SoSe2014