Drone.move()

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Projekt

Das Projekt Drone.move() beschäftigt sich mit der Verbindung zwischen dem Parrot AR Quadrocopter und einer Kinect Kamera. Dabei soll der Quadrocopter über eine Schnittstelle mittels Gesten gesteuert werden.

Hardware

Asus XtionPro Live
-------------------Platzhalter Asus Xtion-----------------------
AR.Drone2.0
ARDrone2.JPG

Software

Aufbau

AufbauDrone.move().jpg

Umsetzung

Die Umsetzung war nicht so ganz einfach, denn es gibt mehrere Möglichkeiten das Problem anzugehen.

  • Treiber ( z.B. Microsoft, OpenNI, XBox-Kinect, Asus XtionPro Live, KinectSDK, OpenNI )
  • Gestenerkennung ( z.B. Kineticspace, FAAST, Processing-Programme )
  • Steuerung der Drohne mit dem PC ( OpenDroneControl )

Verbindungen

Als erstes wurde eine Verbindung zwischen dem PC und der Asus-Kamera benötigt. Dazu haben wir die Treiber der Kamera, sowie OpenNI installiert.
Somit stand die theoretische Verbindung für eine Bildübertragung. Durch das Programm Processing war es uns möglich ein erstes Bild zu erhalten.
Daraufhin begann die eigentliche Arbeit dieses Projektes. Als Schnittstelle zwischen Drohne und Kamera benutzten wir ODC (Open Drone Control).
Diese Schnittstelle liefert einen ausführbaren Code in dem Programm Processing. Mit Hilfe der Maus war es uns nun möglich die Drohne zu steuern.
Somit fehlte uns nur noch die Gestenerkennung. Dafür benutzten wir das Programm FAAST.
FAAST baut eine Verbindung mit der Asus-Kamera über OpenNI auf und gibt ein getracktes Livebild des Körpers aus. Das Körpertracking besteht aus
der vollautomatischen Skeletterkennung. Durch das Programm konnten wir verschiedene Gesten einspeichern und einzelne Tasten ausgeben.
Problematisch war, das ODC mit einer Taste nichts anfangen konnte. Somit mussten wir den Code von der Maus- auf die Tastensteuerung umschreiben.
Nach noch ein paar Korrekturen in Bezug auf die flüssige Steuerung der Drohne und dem abspeichern von exakten Gesten,
konnte der Quadrocopter nun gesteuert werden.

Probleme

Für uns gab es bei diesem Projekt drei große Probleme.

1. Verbindung der Kinect mit dem PC. Hierbei gibt es sehr viele Ansätze und unterschiedliche Treiber. Zudem stehen sich die Microsoft und Open-Source Treiber gegenseitig im Weg.
2. Der ODC-Code, welcher Bewegungsbefehle addierte und danach pro Tastendruck nur eine Bewegung ausführte (kein flüssiges Fliegen).
3. Es gab ein großes Delay in der Videoübertragung der Drohne.

Lösung

1. Wir benutzten einen Laptop mit Windows 7. Als erstes versuchten wir unser Glück mit der XBox-Kinect und den Windows Treibern. Die XBox-Kinect machte uns jedoch mehr Probleme als gedacht. Die automatische Installation von Treibern beim Anschliessen funktionierte nicht und somit versuchten wir die richtigen Treiber im Internet aufzutreiben. Nachdem wir gefühlt 100 unterschiedliche Windows-Treiber, sowie Xbox-Kinect Treiber für Bild und Ton ausprobiert hatten, wechselten wir zur Asus-Kinect. Bei diesem Modell funktionierte die automatische Installation der Treiber beim ersten Mal. Nach kurzer Deinstallation der Windows-Treiber, konnten wir nun auch mit Hilfe von OpenNI endlich das erste Videosignal empfangen. OpenNI wurde auch später wichtig, um die Gesten mit dem Programm FAAST zu tracken.
OpenNI Treiber

2. ODC Code wurde auf folgende Weise angepasst:

 pressed = false;
 
 if(keyPressed && !pressed){
   pressed = true;
   if (flying==true){
     switch (key)
     {
     case 'a':
       droneX      = -0.1;     // nach links fliegen
       droneY      =  0.0;
       droneZ      =  0.0;
       droneDrehen =  0.0;
       break;
     case 'd':
       droneX      =  0.1;    // nach rechts fliegen
       droneY      =  0.0;
       droneZ      =  0.0;
       droneDrehen =  0.0;
     break;
     case 's':
       droneZ      =  0.1;   // nach hinten fliegen
       droneX      =  0.0;   
       droneY      =  0.0;
       droneDrehen =  0.0;
     break;
     case 'w':
       droneZ      = -0.2;    // nach vorne fliegen
       droneX      =  0.0;    
       droneY      =  0.0;
       droneDrehen =  0.0;
     break;
     case 'q':
       droneY      =  0.5;    // steigen
       droneX      =  0.0;    
       droneZ      =  0.0;
       droneDrehen =  0.0;
     break;
     case 'e':
       droneY      = -0.5;   // sinken
       droneX      =  0.0;    
       droneZ      =  0.0;
       droneDrehen =  0.0;
     break;
     case 'b':
       droneDrehen =  5.0;   // rechts drehen
       droneX      =  0.0;   
       droneY      =  0.0;
       droneZ      =  0.0;
      
     break;
     case 'l':
       drone.hover();   // schwebe Position
     break;
     default:
       drone.land();
     break;
   } 
 }
 
   drone.move(droneX, droneY, droneZ, droneDrehen);
   
 }   

DroneControl

3. Das Videosingal war für unser Projekt nicht relevant. Eine einfache Lösung wäre gewesen, dass mehrer Laptops mit einander verlinkt werden und somit das Delay reduziert wird.

Videos

https://www.youtube.com/watch?v=3CGeg6u0Vlc
https://www.youtube.com/watch?v=Jqd5rvhbc0c

Mitwirkende

  • Philipp Schönhuth
  • Moritz Bayer
  • Charly Preisig
  • Pascal Kirschbaum