Oculus Copter

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Für das Interaktionspraktikum werden am Anfang des Semesters Ideen gesammelt. Danach werden Gruppen gebildet, die jeweils für ein Projekt zuständig sind. Auf diese Weise ist die Idee entstanden die AR.Drone mittels der Oculus Rift anzusteuern. Für die Projektteilnehmer ist es eine sehr gute Möglichkeit das Gelernte in die Praxis umzusetzen.

Praktikum Interaktion
Betreuung Professor Heinz Brünig
Umsetzung Nick Böhmer
Tobias Denner
Hai Bang Nguyen
Simon Zisler
Zeitraum WS 13/14


Konzept

Die Hauptidee war eine Steuerung eines Quadrocopters mittels Gyrosensor der Oculus Rift. Gleichzeitig sollte das Bild der Kamera über die Oculus Rift angezeigt werden. Ein echtes 3D-Sehen ist in der geplanten Version nicht möglich, da die verwendete Ar.Drone 2.0 nur eine Kamera besitzt. Eine Erweiterung auf eine 2te Kamera wurde zuerst nicht ausgeschlossen, allerdings im Rahmen des Zeitplans für unmöglich erklärt. Zudem kann mit einem 3-Achsen Gyrometer keine Höhensteuerung realisiert werden. Es wird eine zusätzliche Eingabe wie Tastatur oder WII-Controller für die Flughöhe benötigt.

  • Steuerung
    • Über das Gyrometer der Oculus Rift
    • Über WII-Controller/Tastatur
  • Ausgabe
    • Oculus Rift
    • Zusätzlich auf einem Monitor
  • Quadrocopter
    • Höhensteuerung per Tastatur
    • Drehen per Oculus Rift
    • Fliegen zuerst per Tastatur (Sicherheit)

Bei unserem Konzept bzw. zusammen mit der verwendeten Hardware fielen gleich ein paar Schwachpunkte ein:

  • Im Flug zeigt die Kamera je nach Winkel nach unten, die Sicht gerade aus ist nicht mehr voll gewährleistet. Abhilfe würde eine externe Kamera schaffen, die die Neigung der Ar.Drone 2.0 ausgleicht und immer nach vorne zeigt
  • Die Ar.Drone 2.0 ist kein "3D" Quadrocopter. Es ist nicht möglich den Quadrocopter schräg zu stellen und gleichzeitig an der selben Position zu verweilen. Abhilfe würde ein anderer Quadrocopter oder eine bewegliche Kamera schaffen.

Daher wäre die beste Möglichkeit eine 2-achsig bewegbare Kamera per Oculus Rift und die komplette Ar.Drone 2.0 per Tastatur oder WII-Controller zu steuern. Aus Kosten- und Zeitgründen haben wir die Schwachpunkte an unserem Konzept in Kauf genommen um die Aufgabe (vorerst) nicht unnötig komplex zu gestalten.

Interaktion konzept.png

Zum ansteuern der Oculus Rift ist ein Leistungsstarker PC notwendig. Die AR.Drone kann direkt per W-Lan angesteuert werden. Die Steuerbefehle sollen über OSC versendet werden, der Videostream als Bytestream in UDP Paketen. Damit ist es Möglich, die Bedienstelle von der AR.Drone zu trennen. Es muss nur eine ausreichend schnelle Netzwerkverbindung vorhanden sein. Sollte die Kommunikation über das Internet laufen, wird eine SSL Verschlüsselung und die Verwendung eines VPNs empfohlen.

Oculus Rift

Die Oculus Rift wurde in den letzen Monaten durch eine große Medienresonanz sehr bekannt. Die Entwicklerversion wurde unter anderem durch Kickstarter finanziert. Bei der Entwicklerversion 1.1 wurde von gesundheitlichen Problemen wie Schwindel, Orientierungslosigkeit oder Übelkeit berichtet[1]. Dies ist unter anderem durch die relativ hohe Latenz hervorgerufen. Bei einer neuen Testversion, die auf der CES am 08.01.2014 vorgestellt wurde, soll keine Motion Sickness mehr auftreten. [2] Zudem unterstützt die neue Version Positionstracking mittels Infrarotleds. Das große Sichtfeld hebt die Oculus Rift gegenüber aktuellen Konkurrenzprodukten in der gleichen Preisklasse hervor. Es sind keine Ränder des Displays mehr zu sehen. Dies erhöht die Immersion. Bei vergleichsmodellen mit kleinerem Sichtfeld hat der Träger das Gefühl, er sieht auf einen entfernten Bildschirm.

Technische Daten

  • Display
    • 1280x800px
    • Sichtfeld 110°
  • Gyrometer
    • Abtastfrequenz 1GHz
    • 3-Achsen
  • 3 verschiedene Linsen um Sehschwäche auszugleichen
  • Schnittstellen
    • Video
      • HDMI
      • DVI
    • Steuerung
      • USB 2.0
    • Stromversorgung

Die technischen Daten[3] beziehen sich auf die aktuelle Entwicklerversion 1.1.

Theoretische Überlegungen

Bei der Planung haben wir ein paar Überlegungen zu der Realisierung mit der Oculus Rift gemacht. Besonders die zeitintensiven Probleme wollten wir von Anfang an auf die zeitliche Machbarkeit prüfen.

Um ein 3D Eindruck zu bekommen müssen wir zwei Bilder gleichzeitig anzeigen und zum Teil überlagern. Die Verarbeitung zweier Videostreams (720p 30fps), besonders die Mischung, benötigt sehr viel Rechenaufwand. Daher haben wir uns direkt für einen Leistungsfähigen PC entschieden. Da wir auf den 3D Eindruck vorerst verzichten müssen (nur eine Kamera), müssen wir die Verschiebung trotzdem anwenden. Bei einem Test mit dem Desktophintergrund konnte man nur unscharf und unangenehm das Bild erkennen. Daher müssen zwei verschiedene Ausschnitte aus dem Stream gewählt werden. Das bedeutet, für das linke Auge wird rechts ein Streifen abgeschnitten, für das rechte Auge wird auf der linken Seite des Bildes ein Streifen abgeschnitten. Die menschliche Sehfunktion bildet dann die zwei beschnittenen Teilbilder zu einem Bild zusammen.

Das Display der Oculus Rift wird über Linsen auf dem Auge abgebildet. Diese Linsen selektieren einmal den Bildausschnitt und vergrößern das scheinbare Sichtfeld. Die Linsen Verzerren allerdings das angezeigte Bild. Durch eine Softwaremäßige Vorverzerrung als Ausgleich wird dieses Problem behoben. Das vorgeschlagene Verzerrungsmodell hat eine Ordnung von sechs und benötigt damit ebenfalls einige Rechenleistung.

Allein durch diese zwei rechenintensiven Schritte scheidet die anfangs angedachte Wahl des Raspberry PI aus. Die geplante Software (offizielles SDK, open framework) würde auf der ARM Plattform laufen, allerdings wäre ein Echtzeitbetrieb nach unseren Einschätzungen nicht möglich.

Praktische Anwendung

Ziele der Arbeit mit der Oculus Rift:

- Ausgabe eines Videostreams
- Auslesen der Neigungsdaten (x|y|z), sowie Übergabe an Steuerung des Quadcopters

Zunächst wurde versucht mit der vorgegebenen Installationsanleitung für Windows ein einfaches Projekt mit der Oculus Rift zu starten.

Vorgaben der Installationsanleitung:

- Erstellen eines neues Projekts in Microsoft Visual Studio
- Hinzufügen von weiteren "Include Directories" ("[OCULUS_SDK_LOCATION]/LibOVR/Include" und  "[OCULUS_SDK_LOCATION]/LibOVR/Lib/Win32")
- Hinzufügen weiterer Libs aus Windows ("libovrd.lib" und "Winmm.lib")

Um die nötigen Libs aus Windows verwenden zu können, wurde Microsoft Visual Studio benötigt. Zunächst wurde mit der Version 2012 von Visual Studio gearbeitet. In dieser Version wurden Files beim importieren aus den Bibliotheken des Oculus Rift SDK überschrieben. Aufgrunddessen wurde auf eine andere Visual Studio Version zugegriffen.

Aufgrund des SDK des Quadcopters konnte nur die Version 2008 von Visual Studio verwendet werden. Diese wird aber nicht von der Oculus Rift unterstützt, weshalb sich die beiden SDK untereinander nicht eigneten. Dies war der Grund für den Umstieg auf Linux.

Unter Linux wurde zunächst das SDK der Oculus Rift kompiliert. Im Weiteren Verlauf wurde eine Demoversion zur Ausgabe der Werte des Bewegungssensors kompiliert und ausgeführt.

Weiterer Versuch mit Openframeworks:

Aufgrund der Tatsache, dass der Quadcopter sich über Openframeworks steuern lässt, wurde versucht die Oculus Rift über Openframeworks anzusteuern. Nach Installation der entsprechenden Libs von Github.com wurden Probleme mit Openframeworks festgestellt. Die Oculus Rift wurde nicht von Openframeworks erkannt. Es wird vermutet, dass die Version des verwendeten SDK innerhalb der Github-Library veraltet sind.

Momentaner Stand:

- Oculus Rift SDK kompiliert auf Linux
- Bewegungssensor wurde ausgelesen
- Programmieren der Steuerung (Neigung -> Drehen der Drone) noch nötig
- Einlesen von Videostreams (Berechnung der Bilddaten) noch nötig

AR Drone

Theoretische Überlegung

Für unser Projekt verwenden wir die Parrot AR.Drone 2.0 des französischen Herstellers Parrot SA. Unser Zeil ist die Ansteuerung der AR.Drone mit der Oculus Rift. Die Ar.Drone 2.0 hat die Möglichkeit HD-Video aufzuzeichnen. Dieses wird dann auf der Oculus dargestellt. Die AR.Drone 2.0 stellt eine Wlan Hotspot bereit. Darüber ist es möglich mit der AR.Drone in kontakt zu treten.

Technische Details

Im folgenden werden die wichtigsten technischen Details dargestellt.

  • Prozessor
    • 1-GHz-32-bit-ARM Cortex A8 + digitaler 800-MHz-Videoprozessor von Texas Instruments
  • Arbeitsspeicher
    • 1 GB DDR2-RAM (200 MHz)
  • Kameras
    • Vorne: 92° mit 720p (30 fps)
    • Unten: QVGA (60 fps)
  • Batterie
    • 1000-mAh-Lithium-Polymer-Batterie mit 11,1 Volt
  • Flugdauer
    • ca. 12 Minuten
  • Sensoren
    • dreiachsiges Gyroskop
    • dreiachsiges Magnetometer
    • dreiachsiger Beschleunigungssensor
    • Ultraschall bis 6 Meter + Luftdruck-Sensor
  • Anschlüsse
    • USB-Port
  • Betriebssystem
    • Linux
  • Konnektivität
    • Wi-Fi b/g/n
  • Abmessungen
    • 52,5 cm × 51,5 cm (Indoor-Hülle)
    • 45 cm × 29 cm (Outdoor-Hülle)
  • Gewicht
    • 420 Gramm (Indoor-Hülle)
    • 380 Gramm (Outdoor-Hülle)
  • Motoren
    • 4 bürstenlose Innenläufermotoren (14,5 Watt / 28.500 1/min)


Umsetzung: Verwendung des offiziellen SDK

Geplant war die Verwendung des offiziellen SDK, das eine Übertragung der Videostreams und das Ansteuern der Drone vom zur Verfügung gestellten Windows-PC aus einfach ermöglichen sollte. Vorgegangen wurde anhand der zugehörigen Installationsanleitung:

- Installation der angegebenen Abhängigkeiten (Windows-SDK, DirectX-SDK, Windows-Lib)
- Kompilieren des SDK und der Beispielprojekte

Der Compiler listete jedoch weitere fehlende Abhängigkeiten auf. Durch Verwendung von MS Visual Studio konnte ein großer Teil dieser Abhängigkeiten aufgelöst werden, jedoch bereiteten die restlichen Abhängigkeiten große Probleme, da jede weitere Abhänhigkeiten nach sich zog. Außerdem konnte nicht die selbe Version des MS Visual Studios verwendet werden, wie für die Oculus Rift benötigt, da bei Verwendung einer anderen Version entweder die Makros nicht funktionieren, oder Files gelöscht werden. Des weiteren war es nötig, einige Files aus einer älteren Version des SDK zu kopieren, da der Hersteller diese in den neueren Versionen (1.8 - 2.0) vergessen hat ;)

Der testweise Versuch, das SDK auf einem Ubuntu-Notebook zu installieren gelang nach dem automatischen Auflösen weniger Abhängigkeiten problemlos, auch die Beispielprojekte, die im SDK enthalten waren, ließen sich problemlos kompilieren. Bei der Verwendung des "Navigation"-Beispielprojektes konnten alle Sensordaten und der Videostream einfach ausgelesen werden, aus unbekannten Gründen konnte die ARDrone aber nicht ferngesteuert werden.

Ein weiterer, anschließender Versuch war es, anstelle des offiziellen SDK eine OpenFrameworks Lösung zu verwenden. Mit dieser war es sehr schnell möglich, die Drone vom Rechner aus fernzusteuern, allerdings war es uns nicht möglich, damit auch den Videostream zu empfangen.


Als Ratschlag für künftige Projekte, die das offizielle SDK verwenden wollen, möchten wir die Verwendung von Ubuntu nahelegen, da dort die Ansteuerung der ARDrone das einzige nennenswerte Problem darstellt, was aber auch mit etwas mehr Zeit lösbar gewesen sein sollte.

Ausblick

Nach dem erfolgreichen Kompilieren beider SDKs wären folgende Schritte angestanden:

- Umleiten des Videostreams auf die Oculus Rift
- Anpassen des Videostreams durch Grafikfunktionen (Oculus Rift benötigt bestimmte Verzerrung des Bildes)
- Umrechnen der Sensorwerte auf geeignete Steuersignale für die ARDrone
- Anpassen der Empfindlichkeit
- Ansteuerung der ARDrone durch die Oculus Rift

Einzelnachweise

  1. http://www.gamestar.de/hardware/tft-monitore/oculus-rift/oculus_rift,584,3029169.html
  2. http://www.heise.de/newsticker/meldung/Virtual-Reality-Brille-ausprobiert-Neue-Version-der-Oculus-Rift-mit-Positionstracking-und-OLED-2077813.html
  3. Oculus Rift Manual: http://static.oculusvr.com/sdk-downloads/documents/Oculus_SDK_Overview.pdf