MikroKopter - Forum » Eigene Projekte » Vorstellung: PositionHold mit On-Board-Kamera und Bildverarbeitung

Vorstellung: PositionHold mit On-Board-Kamera und Bildverarbeitung

Neues Thema Antwort

Seite: 1

Autor Neuer Beitrag
Mitglied
Registriert seit: Apr 2008
Beiträge: 177
Ort: Potsdam
Hallo,

ich möchte euch hier kurz mein Projekt auf Basis des MikroKopters vorstellen, was ich im Rahmen meiner Diplomarbeit umgesetzt habe. Das Ziel der Arbeit war es, ein Objekt mit Hilfe einer On-Board-Kamera autonom zu finden und eine Position möglichst genau über diesem einzunehmen. Die grobe Position des zu suchenden Objektes wird durch GPS-Koordinaten vorgegeben.
Der Praktische Teil der Arbeit besteht also aus den Teilen:
1. GPS-basierte Grobpositionierung
2. Kamerabasierte Feinpositionierung

1. Grobpositionierung
Dieser Teil war recht einfach mit Hilfe der NaviCTRL zu lösen. Ähnlich wie im Koptertool kann mit der entwickelten Software auf einem Kartenbild die Suchposition markiert werden. Aus der gewählten Position und einigen anderen Parametern wird ein Suchmuster generiert und an die NaviCTRL übertragen. Anschließend wird der Wegpunkteflug per seriellem Kanal gestartet.

2. Feinpositionierung
Während des Wegpunktefluges werden die Sensordaten des MikroKopter und die Videodaten zu dem Notebook gesendet und dort fortlaufend ausgewertet.
In dem aktuellen Stand habe ich die Objektsuche noch recht einfach gehalten. Das Objekt muss sich anhand seiner Farbe vom Hintergrund abheben und eine einfache Kontur besitzen. Das Objekt wird mit einer farbbasierten Segmentierung detektiert die wie folgt aufgebaut ist.:
- Entzerrung des Kamerabildes
- Glättung mit Gaußfilter
- umwandeln von RGB in HSV-Farbraum
- herausfiltern des Objektes durch Auswahl passender HSV-Intervalle
- Blobsuche (finden zusammenhängender Pixel)
- Merkmalsextraktion (Blobgröße, Kompaktheit, Position)

Aus der detektierten Objektposition im Kamerabild und den empfangenen Sensordaten (Nick, Roll, Höhe) wird die Abweichung vom Zielobjekt berechnet. Die berechnete Regelabweichung wird in einen X- und einen Y-Anteil aufgeteilt und von jeweils einem PID-Regler minimiert. Die beiden PID-Regler generieren Nick- und Rollkommandos welche an den MikroKopter zurück gesendet werden.
User image

3. Ergebnisse
Das folgende Video zeigt einen Anflug des Objektes und die autonome Positionsstabilisierung inklusive Bremsmanöver.

Video: Objektanflug und Stabilisierung


In dem zweiten Video habe ich die Stabilität und Genauigkeit der Positionierung getestet. Dazu habe ich mit einem Ventilator auf der höchsten Stufe eine Störgröße erzeugt. Die Position wird mit eingeschaltetem Ventilator auf +/- 40cm genau gehalten. Wird der Ventilator ausgeschaltet erhöht sich die Genauigkeit auf +/- 20 cm.

Video: Genauigkeit und Stabilität


Hier noch ein Paar Screenshots der entwickelten Anwendung.
User image User image


Es gäbe noch viel mehr zu erzählen aber ich belasse es erst einmal dabei. Wenn ihr Fragen habt nur zu.
Unter dem folgenden Link findet ihr noch das Diplomposter (PDF, ~4MB) was ich dazu erstellt habe. Dort sind ein paar mehr Informationen und Grafiken enthalten.

Viele Grüße
Gregor
« Bearbeitet von Xmd5a am 04.04.2013 01:07. »
Mitglied
Registriert seit: Sep 2010
Beiträge: 3042
Ort: Emmental
Schaut sehr interessant aus.
Und ich habe gleich ein paar Fragen dazu:

-Basiert das System auf der original NC Software oder wurde diese dazu geändert?
-Könnte man den dazu nötigen Rechner nicht auch gleich mitfliegen lassen?
Mitglied
Registriert seit: Sep 2011
Beiträge: 1181
Ort: südlich des Weißwurstäquators
wirklich interessanter Ansatz.
Aber draußen über einer Wiese oder einem Getreidefeld, welches sich im Wind wiegt wird das System dann eher nicht funktionieren. Oder ich denke da gerade an einen meiner letzten Einsätze: Baustelle von oben fotografieren. Da haben sich 20 oder 30 Baustellenfahrzeuge bewegt, Bauarbeiter sind rumgewuselt, Kräne haben Lasten geschwenkt.... Da dürfte dann das System ganz schön schwitzen. Nicht dass man dann plötzlich ein Planierraupen-Follow-Me draus macht :-)
Was passiert wenn du den Kopter schnell um 90 oder 180 Grad gierst?
Dass dazu noch ein Laptop gebraucht wird sehe ich auch als großes Manko.
Mitglied
Registriert seit: Jun 2011
Beiträge: 300
Ort: zwischen Donau, Isar und Vils
Greger, Gratulation zu der sehr interessanten Arbeit. Ich bin überzeugt, dass zum Thema Lageerkennung mittels Bildverarbeitung in Zukunft noch Einiges geschehen wird, und Du bist vorne dabei.

Eigentlich cool: Dein autonomer Quadrokopter macht es wie ein Pilot, der sein Flugzeug auf Sicht steuert.

Gruß, Armin
Mitglied
Registriert seit: Apr 2008
Beiträge: 177
Ort: Potsdam
Danke für euer Feedback.

@Karakara
Die Firmware der NaviCTRL blieb unangetastet. Der Sourcecode ist ja leider nicht verfügbar. Mein Programm nutzt lediglich die ganz normalen seriellen Kommandos um den Wegpunkteflug zu programmieren.
Die Firmware der FlightCTRL dagegen habe ich etwas modifizieren müssen. Zum einen habe ich eine eigene minimale Debugdaten Struktur definiert welche nur die Daten enthält die ich benötige. Das sind die Lagedaten Nick, Roll und Höhe sowie der Bestätigungsframe der auf ein externes Kontrollkommando zurückgesendet wird. Die Wiederholungsrate der Lagedaten und das Senden von Steuerdaten konnte somit auf die Bildwiederholfrequenz der Kamera von 30Hz gesteigert werden. Außerdem habe ich die Abozeit einer Debuganfrage auf unendlich gesetzt sodass die Anfrage nicht immer wiederholt werden muss. Das hat auch gleich das Problem gelöst, dass ab und zu eine Datenanfrage unterging und somit die Lagedaten ausblieben.
Zu guter Letzt habe ich noch die Verarbeitung des Kontrollschalters zum aktivieren der externen Kontrolle so verändert, dass auch die seriellen Kanäle zurückgesetzt werden wenn der Schalter betätigt wird. Das war nötig um ein Fallback bei aktivierter GPS-Navigation zu ermöglichen.

Den Rechner mitfliegen lassen ist natürlich wünschenswert und auch für die Zukunft geplant. In so einer Arbeit muss man aber aufgrund des Zeitmangels einige Abgrenzungen und Einschränkungen vornehmen. Ich habe die Lösung mit einem Notebook gewählt, weil ich dadurch Vorteile in der Entwicklung gesehen habe. Ich erhielt dadurch bessere Debugging-Möglichkeiten und konnte Softwareänderungen direkt testen, ohne sie auf den MikroKopter übertragen zu müssen. Ich habe aber schon darüber nachgedacht das Raspberry-Pi Board einzusetzen wenn sich zeigt das es leistungsfähig genug ist.

@Santa Matze
Solange das gesuchte Objekt im Getreidefeld sichtbar ist, dürfte es funktionieren. Es ist aber bereits geplant das ganze mit dem optischen Fluss oder Template-Matching-Verfahren umzusetzen. Da dürfte es dann wirklich Probleme in dynamischen Umgebungen geben was die ganze Sache etwas aufwendiger macht. Aber so ein Planierraupen-Follow-Me hat ja auch was. ;-)

Solange sich die Giergeschwindigkeit im normalen Rahmen bewegt wie sie bei einen MikroKopter üblich ist, sollte es zu keinen Problemen kommen. Ausführlich habe ich das noch nicht getestet weil es nicht weiter relevant für die Aufgabenstellung war. Wenn es wieder etwas wärmer ist folgen noch viele Tests im Freifeld.

@ArminW
Danke.
Im Vordergrund der Arbeit stand erst einmal eine stabile Regelung und nur eine rudimentäre Bildverarbeitung. Mir schwirren auf jeden Fall noch sehr viele Ideen im Kopf herum die ich unbedingt umsetzen möchte. Für mich jedenfalls ist das ganze Thema noch lange nicht beendet sondern fängt gerade erst an.
MK-Betatester
Registriert seit: Feb 2009
Beiträge: 3407
Wow ! Das könnte durchaus neuen Schwung für den MK bedeuten. Respekt..
Mitglied
Registriert seit: Feb 2013
Beiträge: 67
blattsalat meinte
Wow ! Das könnte durchaus neuen Schwung für den MK bedeuten.


Naja - übertreib mal nicht...
Mitglied
Registriert seit: Sep 2010
Beiträge: 3042
Ort: Emmental
Xmd5a kennst du das hier:
http://www.geometh-data.ethz.ch/publicat/diploma/2011_Baeni/index.html
Das geht in eine ähnliche Richtung. Die Blidauswertung ist aber da sehr aufwändig und erfolgte erst nach dem Flug.

Verstehe ich das richtig, das bei dir die Kamera ohne Ausgleich fix am Kopter montiert ist?
Mitglied
Registriert seit: Apr 2008
Beiträge: 177
Ort: Potsdam
@Karakara
Gehört habe ich schon davon. Auch ein interessantes Projekt. Wobei die reine Bildverarbeitung dank der Infrarotkamera nicht so sehr komplex ist. Das Problem der Arbeit war anscheinend eher das Verbinden der Geo-Koordinaten mit den Bildinformationen. Der Vorteil bei dem Projekt ist natürlich das für die Bildverarbeitung quasi unendlich viel Zeit zur verfügung steht und keine Echtzeitauswertung erfolgen muss.

Ja richtig. Bis auf die Vibrationsdämpfung ist die Kamera fix montiert. Der Neigungsausgleich erfolgt in der Software weil man damit viel flexibler ist. Der Nachteil ist, dass bei starken Steuermanövern das Objekt auch mal aus dem Blickbereich der Kamera geraten kann. In dem ersten Video trat der Fall z. B. bei dem Bremsmanöver ein.
User image
Mitglied
Registriert seit: Sep 2012
Beiträge: 375
Vielleicht verstehe ich da ja was falsch, aber das kann meine uralte AR -Drone bereits, bestimmt ihre Position über Grund über die eingebaute, nach unten gerichtet Kamera, kann damit Symbole erkenn, und darauf reagieren, die Frontkamera kann bestimmten Mustern folgen.

gruß Tom
Mitglied
Registriert seit: Mar 2011
Beiträge: 724
Ort: Bayern
raytom meinte
Vielleicht verstehe ich da ja was falsch, aber das kann meine uralte AR -Drone bereits, bestimmt ihre Position über Grund über die eingebaute, nach unten gerichtet Kamera, kann damit Symbole erkenn, und darauf reagieren, die Frontkamera kann bestimmten Mustern folgen.

gruß Tom


Ja richtig und hat sogar follow me, aber für eine dipl. Arbeit kann man so etwas durchaus mal machen ;-)
http://www.youtube.com/watch?v=zivyJ05VuAA
Mitglied
Registriert seit: Feb 2014
Beiträge: 8
Hallo Georg,
vor einiger Zeit hatte ich Deinen Betrag über "Kameragestützte Feinpositionierung eines Quadrokopters" gelesen.
Ich arbeite zur Zeit an einem ähnlichen Problem, welches sich mit der Entfernungsmessung "Kopter-Hindernis" in Flugrichtung beschäftigt.
Über einen passenden Sensor soll die Entfernung Oktokopter - Hindernis in Flugrichtung gemessen werden, um die Information dann in
der 1.Phase über den Signalweg HoTT-Telemetriekanal in die Sprachausgabe des Senders zu führen.
hier: vielleicht ANPASSUNG des Protokolls MK-voice( VDF-file); vielleicht ist an dieser Stelle von Deiner Seite eine Hilfe möglich.

In der 2. Phase soll das Signal (binär oder analog) für die Steuerung der Flight-Ctrl genutzt werden, so dass der Kopter bei inem
Kurs von A nach B auf Hindernisse reagiert und z.B. die Flughöhe automatisch verändert.

Dabei denke ich an die Programmiersprache, den Kommandobefehlen und deren
Befehlsprioritäten sowie den
entsprechenden Schnittstellen-Protokollen.
Hilfreich wäre auch ein Programmablaufplan (PAP).
Die elektrische Schnittstellenspezifikation wäre vermutlich auch von Vorteil.

Ein Sensor nimmt die Entfernung auf und kann analoge Daten über eine Schnittstelle (RS232, RS422, USB)
Vielleicht kannst Du mir einige Hinweise & Tipps zum Thema Programm-Anpassung Flight-Crtl. geben.
Viele Grüße & besten Dank im voraus.
KLAUS

Neues Thema Antwort

Seite: 1

MikroKopter - Forum » Eigene Projekte » Vorstellung: PositionHold mit On-Board-Kamera und Bildverarbeitung