Python Roboter: Kameradaten filtern

ascer

Captain
Registriert
Juni 2008
Beiträge
3.703
Moin Moin,



wir arbeiten momentan als 3er-Team an einer Komponente zusammen mit vielen anderen Teams und benötigen gerade mal ein wenig Brainstorming ^^

Wir haben einen Roboter mit verschiedenen Verhaltensskripten, eines unserer Skripte tracked ein Objekt mit der RoboCam und passt die Position des Roboters dann geringfügig in Abhängigkeit zur Objektposition an.

D.h. ich kann z.B. eine Flasche, einen Ball, ..., tracken lassen und bewege ich das Objekt, folgt sowohl die Kamera als auch der Roboter selbst dem Objekt.

Die Problematik dabei ist jetzt die Berechnung der Objektdaten. Die Raw-Infos sind genau genug, wenn der Robo stillsteht, d.h. z.B. Flasche auf 1m Entfernung und 'nen halben Meter nach rechts (vom Robo aus gesehen) erkennt er wunderbar, dreht sich in Richtung des Objekts, läuft ein Stück drauf zu um es genauer zu betrachten (das Goal ist halt, einen sinnvollen Mindestabstand zu halten und dabei möglichst direkt gerade auf das Objekt zu gucken).

Schwierig wird das ganze dadurch, dass die Bilddaten natürlich total noisy sind, wenn er anfängt zu laufen (der Robo wackelt stark, also verwackelte Bilder).

Im Stillstand erkennt unser Skript auf 1m Entfernung z.B. einen Winkel von 15° zum Objekt auf ungefähr +/- 5-10° genau, je nach Objekt (Größe, Gleichmäßigkeit...).

Beim laufen hingegen geht die Genauigkeit oft so stark in den Keller, dass wir bei +/- 30° und mehr ankommen.

D.h. der Robo tracked das Objekt im Stillstand, dreht sich korrekt, läuft korrekt (zuerst), aber beim laufen korrigiert er dann wieder (wegen den noisy data) seine Richtung/Winkel vollkommen falsch.

Finalerweise wollen wir aber, dass er auch bewegten Objekten einigermaßen folgen kann (es ist also keine Option, das Objekt nur einmal zu tracken und danach immer die Altdaten zu nehmen).

Man könnte natürlich den Robo zwischendurch beim Laufen immer wieder stehen bleiben lassen und neu zu tracken, aber auch das ist ja nicht sooo die tolle Lösung.

Hat vielleicht jemand eine gute Idee, wie man die Rawinfos vernünftig filtern könnte?
Sowas wie Horizontaler Abstand, Vertikaler Abstand, Winkel, Radius, Luftliniendistanz u.v.m funktioniert im Stand halt ziemlich gut (z.B. bei einer 2m entfernten Wasserflasche schätzt er die Entfernung auf ungefähr 1,95m bis 2,05m, fängt er aber wieder an zu laufen sind wir bei 1,2m bis 3,8m - murks^^)

Wir haben aktuell keine tolle Idee, außer vielleicht beim laufen dauernd Mittelwerte zu bilden. Hat jemand möglicherweise mehr Erfahrung mit sowas und 'ne gute Idee, wie man solche noisy Bildinfos gut filtern könnte?



Viele Grüße & Danke

ascer
 
Wieso baut ihr kein Gimbal ein was die Kamera ruhig hält? :)
 
Schon nach Bildstabilisatoralgorithmen geschaut? Oder eben die mechanische Variante wie von Xanta vorgeschlagen.
 
Budgettechnisch gesehen ist Kamerastabilisierung gerade nicht so praktisch, abgesehen davon ist im Prinzip halt auch so der Plan, dass man relativ "gammelige" Webcams mit verwackelten Bildern hat, damit man quasi gezwungen ist eine vernünftige Implementierung zu bauen.

Ein wenig gesucht haben wir schon nach Bildstabilisierungsalgorithmen, aber bis jetzt hat uns Google da leider im Stich gelassen^^
 
Was meinst du genau mit Ungenauigkeit, weil der Roboter wackelt? Wenn er das Bild nicht korrekt erkennt, weil es gerade bei einer Bewegung aufgenommen wurde (blur), dann solltet ihr zu einer Deconvolution greifen. Die Bewegungsrichtung kennt ihr ja, da müsste sich der Convolution Kernel fast angeben lassen (ausprobieren!). Sonst eine variational method nehmen und den Kernel mitberechnen.
 
Interessant, vielen Dank, dass klingt ja schon mal ganz gut :)

Hättest du noch weitere Infos / Beispiele oder so dazu?
 
Zuletzt bearbeitet:
Vielen Dank :)
Das schau ich mir mal an und versuch das direkt Montag mal :)
 
Zurück
Oben