3rd Person Drone

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Einleitung

Die Grundidee war es, eine "3rd-Person"-Ansicht von einer Person zu erhalten. Diese Person kann sich so, wie bei einem Videospiel, in verbindung mit einer Oculus Rift selbst in einer solchen Ansicht beobachten und dabei auch frei bewegen.

Dabei fliegt eine Drohne (Parrot AR.Drone 2.0) autonom einem Marker, welcher am Hinterkopf des Benutzers angebracht wird, in einem bestimmten Abtstand hinterher. Dieser Abstand wird in Relation zu diesem Marker so eingestellt, dass eine solche "3rd-Person"-Ansicht entsteht.

Projektstruktur

Die gesamte Software ist in der Programmiersprache C++ geschrieben.

Dabei wird das Software-Framework "ROS"(Robot Operating System)verwendet, welches eine komplette Kommunikationsinfrastruktor sowie weitere Vorteile mit sich bringt. ROS erlaubt es, eigenständige Softwarekomponenten (sog. "packages") zu erstellen, welche durch Senden/Empfangen von Nachrichten (sog. "messages") miteinander kommunizieren. So können einige bereits vorhandenene packages in die Programmierung der Software eingebunden werden.

Durch die Verwendung dieses Frameworks wurde das Problem der Inkompatibilität zwischen den Software-Bibliotheken von AR.Drone und Oculus Rift behoben. Für beide Geräte gibt es Treiber-packages, mit denen man diese mittels ROS ansprechen kann.

Für die Weiterarbeit an diesem Projekt wird das Durcharbeiten des ROS-Tutorials [1] empfohlen, da ein Verständnis von ROS essentiell für die Erweiterung/Verbesserung des gesamten Systemes ist!

Die Übertragung des Kamerastreams an die Oculus Rift konnte leider aufgrund der begrenzten Bearbeitungszeit des Projektes nicht mehr implementiert werden

Verwendete Hard- und Software

Für das Projekt wurden folgende Hard- und Softwarekomponenten verwendet:

  • Hardware:
- Parrot AR.Drone ("Ausgabe")
- XBOX-360 Wireless-Controller
- Notebook 
  • Software:
- Ubuntu 14.04
- Robot Operating System (ROS) indigo [2]
- ROS-Package: ardrone_autonomy (ROS-Version des offiziellen AR.Drone Treibers) [3]
- ROS-Package: ar_pose (Markererkennung basierend auf dem ARtoolkit) [4]
- ROS-Package: joy (Controllertreiber) [5]
- ROS-Package: image_view (Anzeigen des Videostreams) [6]
- ROS-Package: ardrone_marker_to_control (Eingenständig erstelltes ROS-Package für autonomes Fliegen) [7]

Zusammenspiel der Komponenten

Die Steuerung der Drohne erfolgt über einen PC, der mittels WLan mit der Drohne (agiert als Router) verbunden wird. Anschließend werden die einzelnen ROS-Komponenten über das Terminal gestartet. Das ROS-Package "ardrone_marker_to_control" liefert eine Konsolenausgabe von Soll- und Istwerten der Regelung sowie einige informationen über den Betriebsstatus der Software.

Gesteuert wird die Software über einen XBOX-360 Controller (Es kann auch ein beliebiger andere Controller verwendet werden). Über den Controller kann zwischen folgenden Modi hin und her geschalten werden:

- Controllersteuerung über Neigung
- Controllersteuerung über Geschwindigkeitsregelung
- Autonomes Fliegen via Marker

Das nachfolgende Bild gibt einen Überblick über das Software-Layout sowie den Informationsfluss:

ARDrone SoftwareLayout.JPG

Allgemeine Steuerung

Sind alle Komponenten erfolgreich gestartet, sollte die Anwendung des packages "ardrone_marker_to_control" folgende Informationen ausgeben:

- Verbindungsstatus mit Controller
- Marker erkannt
- Aktiver Modus
  0: Keine Verbindung mit Marker/Controller -> Drohne landen!
  1: Controllersteuerung über Neigung
  2: Autonomes Fliegen via Marker
  3: Controllersteuerng via Geschwindigkeitsregelung
- Steuerdaten für die Drohne
- Start-/Landebefehl?
- Befehl zum Moduswechsel?
- Istgeschwindigkeit der Drohne via Onboard-Sensorik(sehr ungenau)

Tastenbelegung des Controllers:

- Linker  Joystick:  Soll-Neigung/Geschwindigkeit
- Rechter Joystick:  Landen/Sinken bzw. Rotieren
 
- A: Drohne Starten
- B: Drohne Landen
- X: Umschalten: Marker/Controllersteuerung
- Y: Umschalten: Controllersteuerung über Neigung/Geschwindigkeit

Betriebsmodi

Folgende Betriebsmodi der Drohne stehen zur Auswahl:

 1: Controllersteuerung über Neigung:
 Die Drohne wird über den Controller gesteuert. Dabei wird durch den linken Joystick die Neigung der Drohne vorgegeben.
 - Reine Steuerung

 3: Controllersteuerng via Geschwindigkeitsregelung:
 Die Drohne wird über den Controller gesteuert. Dabei wird durch den linken Joystick die Sollgeschwindigkeit der Drohne
 vorgegeben. Zur Regelung der Geschwindigkeit wird die Istgeschwindigkeit des Onboard-Sensors verwendet. Dieser ist teilweise 
 jedoch sehr ungenau. Aus diesen 
 - Umrechnung von Soll-Geschwindigkeit & Ist-Geschwindigkeit in eine Soll-Geschwindigkeitsdifferenz
 - Umrechnung der Soll-Geschwindigkeitsdifferenz in eine Soll-Neigung

 2: Autonomes Fliegen via Marker:
 Die Drohne wird durch den Marker gesteuert. Dabei werden die Daten der Markererkennung (Relative Position des Markers zur 
 Drohne) verwendet.
 - Umrechnung der Abweichung zur Soll-Position in eine Soll-Geschwindigkeit"
 - Umrechnung von Soll-Geschwindigkeit & Ist-Geschwindigkeit in eine Soll-Geschwindigkeitsdifferenz
 - Umrechnung der Soll-Geschwindigkeitsdifferenz in eine Soll-Neigung
   -> Kann nur bei aktiver Markererkennung aktiviert werden

Zu Beachten ist jedoch folgendes: Aus Sicherheitsgründen hat Betriebsmodus 1 zu jeder Zeit Vorrang! Das bedeutet, alle Knöpfe des Controllers können jederzeit verwendet werden. Sobald ein Joystick des Controllers bewegt wird, wird das autonome Fliegen über den Marker unterbrochen.

Projektdurchführung

3rd Person Drone Markerverfolgung 2.gif

AllvjOmYGuFEHZVyPsvRvlSky2aXDzU7G ftgpZYMNnW.jpg

Ablauf

Zu Beginn des Projekts war das erste Ziel das reine Ansteuern der Drohne mit einem X-Box360 Controller zum Testen des in ROS verfügbaren Treibers für die AR.Drone. Dazu wurde ein Programm geschrieben welche die Inputs eines Controllers in die entsprechenden Signale für die Drohne umwandelt.

Im Anschluss wurde eine geeignete Möglichkeit für die Erkennung von Markern gesucht, die Wahl viel dann Schlussendlich auf ar_pose, welches auf dem artoolkit basiert. Die Software verwendet den Kamera-Stream der Drohne und erkennt in diesem dann den Marker und gibt die relative Postion und Lage des Markers zu Kamera als Ausgabe zurück.

Aus den zurückgegebenen Position und Lage wurden dann die entsprechenden Steuersignale für die Drohne berechnet und an die Drohne weitergegeben. Die Parameter für die Regelung wurden dabei dann experimentell ermittelt.

Die Positionsregelung wurde gegen Ende des Projekt mit Hilfe von den Daten der Inertia Measurement Unit (IMU) um eine Geschwindigkeitsregelung erweitert. Dazu wurde von der Soll-Geschwindigkeit die aktuelle Ist-Geschwindigkeit aus der IMU abgezogen und daraus ergibt sich dann die entsprechende Ansteuerung für die Drohne.

Abschluss

  • Gelöste Probleme:
- Ansteuern der Drohne über den Treiber
- Kombination von Marker-Regelung und Controller-Steuerung
- Geschwindigkeitsregelung der Drohne mit IMU Daten
  • Ungelöstes Problem:
- Inkonsistenz im Verhalten der IMU

Autoren:

- Dominik Dess
- Oliver Klement
- Maximilian Röck (roeckma52465@th-nuernberg.de)

Links

- Programmcode