-
-
Neuer Benutzer
Öfters hier
Hallo zusammen.
Ich arbeite grad an der Uni an nem Programm, welches mit einer von der Decke nach unten gerichteten CCD-Kamera ine einem bestimmten Gebiet eine Menge (bis zu 60) Mikroroboter erkennen und tracken soll. Da bin ich natürlich auf die gleiche Problematik gestossen, und meine Lösung sieht folgendermaßen aus:
Die Roboter kriegen zwei Positions-smd-LEDs aufs Dach gesetzt, die einen genügen großen Abstrahlwinkel haben, sonst verliert die Kamera sie an den Rändern des Gebiets. Diese beiden LEDs sollten möglichst verschiedene Farben haben, also z.B. rot und blau, um die Ausrichtung der Bots zu bestimmen. Mit rot und gelb hab ich allerdings z.B. schon Schwierigkeiten gehabt, weil in dem rot sehr viele gleiche Farbanteile stecken wie in dem gelb und umgekehrt. Soviel zur Theorie.
In der Realität haben wir auf die zweite LED verzichtet, und zwar - man glaubt es kaum - wegen des Energieverbrauchs. Die Roboter sind halt doch _sehr_ klein, und somit auch ihre Akkus. Aber man kann die Ausrichtung ja auch über den letzten und den aktuellen Standort bestimmen, merkt dann halt nicht wenn der Bot auf der Stelle rotiert.
Warum LEDs? Im HSV-Colorspace kann man diese eben auch bei widrigen Randbedingungen noch sehr zuverlässig aus dem Bild extrahieren. Da auf die Roboter-Arena noch ein Beamer verschiedene Sequenzen projeziert, aus denen die autonomen Bots selbst ihr Position und andere Daten bestimmen können, gibt es ständig irgendwelche Reflexionen und Helligkeitsunterschiede, die normale Farbmarkierungen ausschließen würden.
Die Bildverarbeitung sieht folgendermaßen aus:
- grabbe Frame von der Kamera
- Wandle Frame von RGB nach HSV (wie das geht ist findet sich u.a. im Bildverarbeitungs-Tutorial)
- Filter: Alles, was nicht LED ist wird weiß, die LEDs werden auch aufgearbeitet
- der eigentliche Erkennungs-Algo läuft im Prinzip durch das Bild, sucht Farbkleckse/LEDs, vergleicht mit alten Positionen und gesammelten Daten und entscheidet dann welcher Roboter wo ist.
Die Mittelpunkte der Kleckse bestimme ich einfach, indem für jeden Pixel eines Kleckses der x- und y-Wert aufaddiert werden und dann jeweils durch die Anzahl der Pixel geteilt wird. Das müsste das gleiche sein, das ihr meint.
Ich hoff das war jetzt hilfreich (auf jeden Fall lang 
Gruß
Raphael
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen