LinefollowerDrone

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Im Projekt Linefollower Drone wurde versucht einer AR-Drone das Erkennen und Folgen einer Linie zu ermöglichen. Die Drohne selbst diente als Sensor und die nötigen Berechnungen wurden von einem Laptop als Basisstation ausgeführt, ausgewertet und als Navigationsdaten zurückgesendet. Die Kommunikation zwischen Drohne und Laptop fand über den drohneneigenen WiFi-Hotspot statt.


Idee

Die Grundidee zum Projekt war anfangs eine andere. Ziel war die Digitatlisierung von Objekten im Außenbereich (z.B. Statuen, Bäume). Die Drohne sollte die Objekte einscannen und sich an Linien, die um das zu scannende Objekt herum gezogen wurden, orientieren. Das größte Problem dabei war, dass über den verwendeten Treiber nur je eine Kamera ansprechbar war. Man entschied sich deshalb das Projekt auf Linienerkennung und automatisches Folgen zu beschränken.


Hardware

Laptop

Der Laptop, der als Basisstation diente, war für das Auswerten der erhaltenen Sensordaten zuständig. Diese wurden ausgewertet in die entsprechenden ROS-Packages und die darin enthaltenen Algorithmen gespeist, um dann die resultierenden Navigationsdaten/-befehle wieder an die Drohne zurückzusenden.

Spezifikation

  • Auflösung 1920x1080 Pixel (praktisch um mehrere Terminals für Feedback offen zu haben)
  • Intel Core i7-4700MQ (@2.40GHz) Prozessor
  • 16GB RAM
  • Debian 8 (Jessie)
  • ROS Kinetic Distribution


Xbox360 Wireless Controller

Der Xbox 360 Wireless Controller wurde mit entsprechenden Treibern unter Linux zum Laufen gebracht. Zweck und nutzen des Controllers bestand darin, die Drohne manuell steuern zu können und so den autonomen Flug abzusichern.

Tastenbelegung

  • A -> Starten der Drohne (Take Off)
  • B -> Notaus der Drohne (Emergency)
  • Y -> Toggeln des autonomen Linienfolgens (Folgen? ja/nein)
  • X -> Landen der Drohne (Landing)
  • Rechter Analogstick -> oben/unten = Flughöhe der Drohne ändern | rechts/links = Drehen um die eigene (Z-)Achse der Drohne
  • Linker Analogstick -> oben/unten = Die Drohne nach vorwärts bzw. rückwärts steuern | rechts/links = Die Drohne nach rechts bzw. links steuern

Controller.jpg


Parrot AR.Drone 2.0 (Power Edition)

Die verwendete Parrot AR-Drone ist ein Quadrocopter, der wie andere Quadrocopter zu steuern ist. So ist es möglich Bewegungen nach vorn, links, rechts und hinten, sowie oben, unten und eine Drehung um die eigene Achse auszuführen. Die Steuerung der Drohne die standardmäßig über die App AR.FreeFlight 2 möglich ist, wurde durch ein eigenes ROS-Package ersetzt. Dank in der Power Edition bereits vorhandenen zwei und einem weiteren HD-Akku (Flugzeit pro Akku ungefähr 18 Minuten) waren ausdauernde Testflüge möglich.

Spezifikation

  • HD-Frontkamera 720P 30FPS
  • Gyroskop (3 Achsen, Präzision 2 000°/Sekunde)
  • Magnetometer(3 Achsen, Präzision +/- 50mg)
  • Beschleunigungsmesser (3 Achsen, Präzision 6°)
  • Drucksensor (Präzision +/- 10Pa)
  • Ultraschallsensoren für die Messung der Flughöhe Höhenmessung
  • Vertikal-Kamera (60FPS QVGA zur Messung der Bodengeschwindigkeit)
  • WIFI Kommunikation
  • Flugzeit von knapp 1 Stunde (mit 3 Akkus)

Drohne.jpg


System-Struktur

Das nachfolgende Blockschaltbild zeigt den funktionalen Aufbau des Projekts und die dafür nötigen Kommunikationswege auf.

System.jpg


Realisierung

Nach Vorschlägen von Seiten der Betreuer wurde entschieden ROS (robot operating system), anstatt der Parrot eigenen SDK, als Schnittstelle zwischen Laptop und Drohne zu verwenden. Grund dafür ist die umfangreichere Verwendungsmöglichkeit, so konnte mittels ROS das komplette Projekt realisiert werden, wohingegen bei Verwendung der SDK zusätzliche Programme von Nöten gewesen wären. Die verwendeten ROS-Pakete im Überblick:

Die genauen Funktionen von ROS zu erklären würde den Rahmen diese Wiki Eintrags sprengen, deshalb kann hier genaueres nachgelesen werden. Zu Beginn sollte reichen, dass es unter anderem zwei Akteure oder Funktionen gibt, sogenannte Publisher und Subsriber. Wie der Name vermuten lässt published bzw. veröffentlicht einer von beiden Daten auf die der andere subscribed hat, auf die er also wartet. Auf diese Weise ist auch der erste Teil des Projekts, die Controllersteuerung realisiert. Jeder Button fungiert mittels des "joy" Packages als Publisher um bestimmte Befehle, die im modifizierten Joystick Controller Modul des "ardrone_tutorial" Packages festgelegt sind, zu pushen. Diese werden dann von der Drohne bzw. einem anderen Package, das subscribed hat, aufgegriffen und lösen dann entsprechende Reaktionen auf. Nachdem die Funktionsweise von ROS in den Grundzügen ersteinmal verstanden war, stellte sich dies als gut lösbare Aufgabe heraus. Schwerer war dann schon der zweite und damit auch Hauptteil des Projekts, in dem die Algorithmen zur Linienerkennung und Linienverfolgung zu entwerfen und implementieren waren. Das Ansprechen der Drohne verlief wie bei der Controllersteuerung auch mit schnellem Erfolg. Die Linienerkennung war nach aufwändigerer Arbeit dann auch getan. Nur die aus den erhaltenen Daten resultierenden Befehle oder anders gesagt die Regelung der Drohne stellte sich dann als äußerst knifflig heraus. Zum Ende des Projekts war die Drohne in der Lage sich zu Linien hin zu orientieren und die entsprechende Position über z.B. einer Weg- bzw. Linienkreuzung zu halten. Die eigenen Bewegungen und Abdriftmomente der Drohne sorgten jedoch dafür, dass die Linien wieder aus dem eigenen Blickfeld verschwanden und erneut nach einer Linie gesucht werden musste. Dadurch war ein Linienfolgen im erdachten und gewünschten Sinn nicht möglich. Folglich bestand die Arbeit zum Schluss des Projekts, neben dem Vorbereiten der Abschluss Präsentation, noch aus dem nicht sonderlich erfolgreichen Versuch dieses regelungstechnische Problem zu beseitigen.


Ausblick

Da das Folgen einer Linie in Ansätzen funktioniert wäre eine Ausbaumöglichkeit des Projekts der Entwurf einer verbesserten Regelung. Folglich läge der Schwerpunkt auf der Lösung des vorallem regelungstechnischen Problems dieses Drohnenprojekts.

Auch die Modifikation des ROS AR.Drone Treibers wäre eine denkbare Weiterführung aller AR.Drone 2.0 Projekte, um künftig in der Lage zu sein beide Kameras simultan ansprechen zu können.


Source-Link

- Programmcode