MotionBank // LineVisualizer

LineVisualizer
Mit dem LineVisualizer ist es möglich aus den Bewegungspfaden der Choreographien des Motionbank-Projekts Flugrouten für die AR.Drone zu generieren.
Ziel des Projekts ist es die Tanzbewegungen visuell mittels Lightpainting in den realen Raum zu bringen und so von der Bühne abzukoppeln. Die Drohne wird dabei mit einer LED ausgestattet und erlaubt es die abgeflogenen Tanzpfade im Freien vor spannenden Kulissen festzuhalten.

The application “LineVisualizer” creates optimized flight paths for the AR.Drone 2.0 (or similar quadcopters) based on captured movement data from the motionbank project.
My aim for the project was to visualize the dance movements in real space via lightpainting. This was achieved by attaching a led to the drone. It allowed to interpret and capture the existing dance movements in front of interesting sceneries.

 

Ausgangspunkt

Aus verschiedenen Recherchen hat sich die Idee mit der Langzeitbelichtung entwickelt. Zunächst habe ich mit dem Gedanken gespielt, das Projekt mit einer Art Drawbot in 3-Achsen umzusetzen. Die zweite Möglichkeit war die Umsetzung mit einem Quadrocopter.

Letzteres habe ich weiter verfolgt und mich nochmals in der Richtung umgesehen und diverse einsetzbare Quadrocopter gesucht. Die Wahl fiel auf die AR.Drone 2.0 von Parrot.
Sie fliegt von Haus aus sehr stabil und macht das Experimentieren damit etwas komfortabler.

 

Konzept

Die AR.Drone soll mit entsprechenden Befehlen gesteuert werden und die Tanzbewegungen bzw. Pfade der Tänzer nachfliegen. Die Steuerung und Kommunikation erfolgt dabei über einen eigens entwickelten Processing-Sketch. Eine LED an der Drohne macht es möglich im Dunkeln die komplette Bewegung wiederum als Lightpainting festzuhalten.
Projekt Konzept
Im finalen Projekt wird die Flugroutenberechnung und GPS-Positionierung mit Processing umgesetzt und die generierten Daten werden anschließend auf den GPS-Empfänger der AR.Drone geladen.

 

Software / Hardware / Material

  • Processing (zur Pfadberechnung und Positionierung)
    • YADrone (Processing-Library zur Kommunikation mit der AR.Drone 2.0)
    • UnfoldingMaps (Processing-Library für Kartenansicht)
  • qGroundControl (Übermittlung der GPS-Daten, Flugüberwachung)
  • AR.Drone 2.0 von Parrot (inkl. GPS-Flugschreiber)
  • verschiedene LEDs (Farben, Helligkeit) + Material für Schweifoptik
  • Kamera, Stativ, Laptop

lv_stuff-01lv_stuff-02lv_stuff-03

 

Umsetzung

Anfänge, Tests und Problemstellungen

Zuerst habe ich versucht einige Tests mit der AR.Drone zu machen, um mich mit Flugverhalten und Kommunikation vertraut zu machen. Um die Drohne über Processing anzusprechen und Befehle zu übermitteln habe ich die YADrone-Library der Uni Hamburg verwendet. Mit dieser Library kann man einfache Befehle und deren Dauer angeben und so die Drohne fliegen lassen:

cmd.takeOff().doFor(5000);
cmd.goLeft(30).doFor(2000);
cmd.hover().doFor(2000);
cmd.landing();

Das hat im Großen und Ganzen gut funktioniert, hatte aber bei Befehlsabläufen und im speziellen dem move()-Befehl ein paar Macken, bei denen ich die Ursachen nicht fix beheben konnte. Die Steuerung der Drohne mit dieser Methode habe ich dann erstmal beiseite gelegt, da auch die Kommunikation teilweise instabil und unsicher war.

Neben diesen Problem gab es bisher keine Möglichkeit gezielt Koordinaten abzufliegen.
Generell habe ich mir anfangs überlegt wie ich den Pfad am Besten abfliegen kann. Dazu gibt es 3 Möglichkeiten:

Abb. 1: Flug zu Koordinaten

Abb. 1: Flug zu Koordinaten

flugbahn-05

Abb. 2: Flug einer Kreisbahn (Variante “Zick-Zack”)

flugbahn-06

Abb. 3: Flug einer Kreisbahn (Variante “Winkel”)

Die beiden letzteren könnten die Bewegung zwar durch die Kreisbahn genauer abfliegen, jedoch ist die Berechnung für so einen komplexen Pfad, wie er beim MotionBank-Projekt vorliegt, sehr schwierig. Die Wahl fiel also auf das Abfliegen von Koordinaten.

Bei meinen Recherchen bin ich auf das Programm qGroundControl gestoßen. Mit dieser Software ist es möglich autonome Flüge per GPS zu organisieren.
Die jeweiligen GPS-Koordinaten werden – nach Planung der Route – auf den GPS-Empfänger übertragen und abgeflogen.

Mein Plan war nun die Flugdaten soweit für die Übertragung vorzubereiten, dass man mit einem Programm die ganzen Flugrouten erstellen und positionieren kann und das Flugprogramm nur für den Upload der GPS-Daten und die Flugüberwachung nutzt (letzteres war im Nachhinein auch sinnvoll).

 

Der LineVisualizer

Der Hauptteil der Arbeit war die Erstellung der Anwendung zur Generierung der Flugrouten.
Als Basis haben wir die Trackingdaten der Tänzer genutzt, um so an die Bewegungspfade zu kommen. Der LineVisualizer erstellt je nach Anforderung eine grobe Flugroute, die den Bewegungen der Tänzer entspricht.
In der Anwendung ist es möglich, Start und Endpunkt der Choreographie zu wählen, um bestimmte Pfade zu extrahieren. Auch die oben genannte Vergröberung ist einstellbar, also die Schrittweite für die Koordinaten.
Weil die Choreographien teilweise komplizierte und sehr kleine Schritte beinhalten, werden diese Teile – bis zu einer gewissen Entfernungsgröße – automatisch für die Flugroute optimiert.

LineVisualizer: Flugrouten-Erstellung

LineVisualizer: Flugrouten-Erstellung

Die Vereinfachung des Pfads wird mit grünen Linien gekennzeichnet. Blaue Linien zeigen den normalen Verlauf zur folgenden Koordinate.

Durch die Optimierung der Daten entsteht so eine Flugroute mit einzelnen Koordinaten. Im zweiten Schritt ging es dann darum das ganze auf GPS-Koordinaten zu konvertieren. Dazu musste ich mich zunächst mit der Systematik und Logik von Breiten- und Längengraden befassen und herausfinden, in welcher Größenordnung ein Meter ungefähr liegt.
Mit diesem Wissen konnte ich dann die optimierten Koordinaten auf GPS-Positionen mappen und sofern es mit der GPS-Genauigkeit möglich ist, habe ich den Flugroute auf eine reale Fläche von 12×12 Meter berechnet. Die Fläche ist aber im Skript leicht anpassbar.

Damit man auch in der Anwendung selbst die Route frei positionieren kann, habe ich eine Kartenansicht eingebaut. Wie bei bekannten Kartendiensten kann man auf der Karte navigieren und die Route per Klick an den gewünschten Ort setzen. Für die Implementierung der Karten habe ich die UnfoldingMaps-Library genutzt, welche sehr komfortabel einsetzbar ist.

Ein Feature das etwas später hinzukam, war die Drehung der Route: Das ist sinnvoll, wenn man eine bestimme Perspektive der Flugroute vor einer Kulisse haben möchte. Mithilfe mathematischer Funktionen (Cosinus und Sinus) habe ich auch diese Herausforderung umsetzen können. Es ist möglich die Drehung entweder direkt im Skript zu ändern, oder flexibel im Programm selbst. Nach der Drehung wird anschließend die Route mit den GPS-Positionen neu berechnet.

LineVisualizer: Kartenansicht

LineVisualizer: Kartenansicht

Wenn man zufrieden mit der Positionierung ist, kann man die Flugdaten exportieren. Es wird eine Datei exportiert (Waypoint-File), die anschließend in qGroundControl geladen werden kann (Infos & Erläuterung siehe unten).
Die Route wird dann dort auch angezeigt und kann sofort auf den GPS-Empfänger der AR.Drone geladen werden (Verbindung mit der AR.Drone ist dazu nötig).

lv_qgc

Erläuterung zum Aufbau der Waypoint-Datei (ein Wegpunkt/Koordinate pro Zeile):

QGC WPL <VERSION>
<INDEX> <CURRENT WP> <COORD FRAME> <COMMAND> <PARAM1> <PARAM2> <PARAM3> <PARAM4> <PARAM5/X/LONGITUDE> <PARAM6/Y/LATITUDE> <PARAM7/Z/ALTITUDE> <AUTOCONTINUE>

weitere Infos: http://qgroundcontrol.org/mavlink/waypoint_protocol#waypoint_file_format

 

Lightpainting und LED

Ich habe verschiedene Leuchtmittel und Modifikationen getestet. Ziel war es einen diffusen Schweif zu kreieren.
Angefangen habe ich mit Knicklichtern, da diese schon länglich sind und dadurch eine breite Spur ziehen. Im Test haben sie aber versagt, weil die Lichtausbeute zu gering ist und auf dem Foto quasi nicht sichtbar sind.
Eine einfache LED war mir von der Optik zu gewöhnlich, deshalb habe ich einen Trinkhalm mit Transparentpapier beklebt und auf die LED gesteckt. Das Ergebnis war ein nach oben abnehmender Strahl. Ein anderer Versuch, eine kleine LED-Taschenlampe zu verwenden endete in einem Crash der Drohne wegen Gleichgewichtverlust.
Die letzte Idee war jeweils an beiden Enden des Trinkhalms eine LED zu befestigen. Das Ganze hat Ähnlichkeit mit einer kleinen Leuchtstoffröhre und erzeugt einen Schweif, der in beide Richtungen nach außen heller wird.

Licht-Mods: Knicklicht rot, Knicklicht grün, LED-Taschenlampe mit Transparentpapier als Diffusor, blaue LED mit Trinkhalm, zwei weiße LEDs an beiden Seiten des Trinkhalm

Licht-Mods: Knicklicht rot, Knicklicht grün, LED-Taschenlampe mit Transparentpapier als Diffusor, blaue LED mit Trinkhalm, zwei weiße LEDs an beiden Seiten des Trinkhalm

verschiedene Lighttrails analog zu oben aufgeführten Leuchtmitteln

verschiedene Lighttrails analog zu oben aufgeführten Leuchtmitteln

Knicklicht rotKnicklicht grünLED-Taschenlampe mit Diffusor
blaue LED mit Plastikröhrchenzwei weiße LEDs an beiden Enden
Die Bilder sind im Verhältnis sehr lichtstark, da sie in kurzer Entferung zur Kamera aufgenommen wurden. In der echten Anwendung sinkt die Helligkeit mit der Entfernung. Auch die Schweifform ist unter Umständen nicht exakt so sichtbar.

Projekt: LineVisualizer

Flugroutenerstellung im Linevisualizer

Flugvorbereitung und Durchführung

Fotografische Visualisierung der Flugrouten
LineVisualizer - Capture 01
LineVisualizer - Capture 02
LineVisualizer - Capture 03LineVisualizer - Capture 04