Balance

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Balance ist ein Projekt das, im Rahmen des Praktikums "Interaktion", im Sommersemester 2014 entstand.

Einleitung

Ziel des Projektes war die Entwicklung eines Mini-Spieles, in dem man eine Platform mit einem Mobile Device (Smartphone, Tablet) in einem 3D Raum steuert. Die Anzeige der 3D Landschaft erfolgt auf der Oculus Rift.

Spielbeschreibung

Video

Screenshot des Spieles


Der Benutzer hat die Möglichkeit geometrische Körper auf die, von ihm gesteuerte, Platform fallen zu lassen. Unterteilt werden diese Körper in zwei Gruppen.

  • Kugel
  • Störkörper (Quader, Kegel ...)

Ziel des Spieles ist es nun die Störkörper durch kippen der Platform von selbiger zu entfernen, ohne dass die Kugel herunterfällt. Für jeden entfernten Störkörper werden dem Benutzer Punkte gutgeschrieben. Das Spiel endet wenn die die Kugel von der Platform fällt.

Steuerbar ist sowohl die Rotation als auch die Translation der Platform.

Aufbau

Systemaufbau

Oculus Rift

Die Oculus Rift ist eine, von der Firma Oculus VR, entwickelte 3D Brille. Sie wird auf dem Kopf, änhlich einer Skibrille, getragen. Der Benutzer sieht durch, an die Sehstärke anpassbare, Linsen auf einen, in zwei Sehbereiche geteiltes, Bildschirm. Da jedes Auge nur die für es gedachte Perspektive wahrnimmt entsteht ein dreidimensionaler Eindruck. Die Oculus Rift verfügt zusätzlich über einen sogenannten Head-Tracker. Dieser misst die Neigung und Drehung des Kopfes und leitet die Daten an die Applikation weiter.

Steuerung

Da die Wahrnehmung des Benutzers durch die Oculus Rift eingeschränkt ist, benötigt er eine Eingabemethode die er auch ohne Blickkontakt bedienen kann. Zum Einsatz kommt hierzu ein Smartphone bzw. Tablet, da diese Geräte Gyroskop- und Beschleunigungssensoren enthalten. Diese Sensoren sind empfindlich genug um eine feinestufige Steuerung der Platform zu gewähreisten. Zusätzlich kann der Touchscreen dieser Geräte für weitere Benutzereingaben genutzt werden. Dabei muss aber darauf geachtet werden, dass nur wenige, ausreichend groß dimensionierte, Eingabeflächen möglich sind, da der Benutzer diese nicht sehen kann.

Rechner

Zentrale Komponente ist ein gewöhnlicher PC. Er empfängt die Neigungsinformationen vom Mobile Device, wertet diese aus, und gibt die 3D Umgebung auf Oculus Rift aus. Die Übetragung der Daten des Mobil Devices an den Rechner erfolgt über WLAN, die Ausgabe auf die Oculus Rift ist entweder über DVI oder HDMI möglich.

Software

Mobile Device

Auf dem Mobile Device kommt die Software TouchOSC zum Einsatz. Diese ermöglichkeit das Auslesen der Gyroskop- und Beschleunigungssensoren. Weitergeleitet werden diese Daten in OSC Paketen über die WLAN Schnittstelle. Zusätzlich erlaubt TouchOSC die Nutzung einer selbstdefinierten Benutzeroberfläche. Eingaben über die Oberfläche werden ebenfalls als OSC Meldungen übertragen.

Gyroskop- / Beschleunigungssensoren

Die Übertragung dieser Werte muss im Konfigurationsmenü von TouchOSC aktiviert werden, anschließend werden mehrere dutzend OSC Nachrichten pro Sekunde übetragen. Eine Nachricht hat das folgende Format:

/accxyz X Y Z

  • X beschreibt den Anstellwinkel des Gerätes
  • Y beschreibt den Rollwinkel des Gerätes
  • Z ist ein Beschleunigungswert, der in diesem Projekt nicht genutzt wird

Eine weitere Konfiguration diese Nachricht bezüglich Wertebereich oder Häufigkeit ist nicht möglich.

TouchOSC ist erhältlich für iOS und Android, allerdings unterscheidet sich die Ausgabe der Gyroskopsensoren zwischen diesen beiden Platformen

  • Der Wertebereich der entsprechenden Winkel ist auf iOS zwischen -1.0 und +1.0 auf Android zwischen -10.0 und +10.0
  • Zwischen iOS und Android ist der Wert für den Anstellwinkel invertiert. Um ein identisches Bewegungsmuster zu bekommen müsste also der Bildschirm des Android Gerätes nach oben zeigen, während der Bildschirm des iOS Gerätes nach unten zeigt (bzw. umgekehrt).

Benutzeroberfläche

Die Eingabemöglichkeiten des Benutzers beschränken sich auf zwei Möglichkeiten.

  • Umschalten der Steuerung der Platform von Rotation auf Translation
  • Erzeugen von weiteren Störkörpern bzw. Neustarten des Spieles, falls die Kugel von der Platform gefallen ist

Hierzu wird die Bedienfläche von TouchOSC in zwei füllende Bereiche unterteilt. Jedem Bereich wird die Funktion eines Tasters zugeordnet. Der Benutzer lässt die Steuerungsumschaltung mit dem linken Daumen aus und die lässt neue Körper mit dem rechten Daumen auf die Platform fallen.

Erzeugt werden diese Oberflächen mit dem TouchOSC Editor. Dieser kann die Oberflächen auch auf des Mobile Device übetragen. Funktion, Größe und Farbe der Eingabemöglichkeiten kann beliebig definiert werden. Zu beachten ist aber, dass die Oberfläche an die Bildschirmgröße und das Bildschirmformat des Mobile Devices angepasst werden muss. Ein Tablet benötigt also ein anderes Layout als ein Smartphone, eine automatische Skalierung existiert nicht. Es wird außerdem zwischen Hoch- und Querformat unterschieden

Die OSC-Adresse der Bedienelemente kann selbstdefiniert werden.

  • /Lenkometer/Links X
  • /Lenkometer/Rechts Y

Screenshot TouchOSC Editor mit fertiger Benutzeroberfläche

X und Y nehmen die Werte 1 bei gedrückter Taste und 0 bei losgelassener Taste an. Die Übertragung der Nachrichten erfolgt pegelgesteuert.

TouchOSC erlaubt auch, dass das Mobile Device OSC Meldungen empfängt und auswertet, dies wird aber in diesem Projekt nicht genutzt.

Spiel

Die eigentliche Spielapplikation ist in openFrameworks implementiert. openFrameworks ist ein auf „Creative Coding“ (kreatives und intuitives Programmieren) ausgelegtes Open-Source-Toolkit, in C++ geschrieben und auf einer Vielzahl von Betriebssystemen lauffähig. openFrameworks bietet die Möglichkeit eine Vielzahl von Funktionen über Addons einzubinden.

Genutzte Addons

  • ofxOculusRift
  • ofxBullet
  • ofxOSC
  • ofxXMLSettings

ofxOculusRift rechnet die Darstellung der 3D-Landschaft in ein für die Oculus Rift geeignetes Format um. Hierzu wird die Darstellung dupliziert (eine für das linke und eine weiter für das rechte Auge) und die Perspektive für die beiden Augen korrigiert. Zusätzlich wird ein Shader angewendet um die Verzerrung der Oculus Rift Linsen zu korrigieren.

ofxBullet ist eine Physikbibliothek. Sie wird genutzt um eine physikalisch korrekte Bewegung der einzelnen Körper zu erreichen. Die Körper unterliegen der Einflüsse durch die Schwerkraft können sich aber auch, in ihrer Bewegung, gegenseitig beeinflussen. Die Platform wird durch die Körper nicht beeinflusst.

ofxOSC erlaubt den Empfang und das Senden von OSC Meldungen, sowie derren Auswertung. In diesem Projekt wird von der Sendefunktion kein Gebrauch gemacht

ofxXMLSettings wird genutzt um Konfigurationsparameter in einer XML Datei abzulegen.

Platformsteuerung

Die Gyroskopdaten, die an die Applikation übertragen werden, weisen ein starkes Rauschen auf. Nachfolgendes Beispiel zeigt ein iPad 2 während es flach auf einem Tisch lag: osc: /accxyz 0.0142822 0.0105743 -1.03578

osc: /accxyz 0.0113525 0.00872803 -1.03387

osc: /accxyz 0.0142517 0.00863647 -1.02994

osc: /accxyz 0.0113678 0.00776672 -1.03093


Die Werte schwanken selbst in Ruhelage stark, was zu einem deutlich sichtbaren Zittern der Platform führt. Ein Abschneiden der Nachkommastellen scheidet aus, da die Platform so nur in einer vergleichsweise groben Rasterung gesteuert werden kann. Ein Mittelwert bzw. Median Filterung scheiden ebenfalls aus. Um das Zittern der Platform auf ein akzeptables Niveau zu bringen muss über eine größere Menge an Werten gefiltert werden. Dies sorgt aber, ab einer bestimmten Menge, für eine warnehmbare Latenz zwischen Benutzer und Darstellung. Zum Einsatz kommt deswegen ein zeitdiskretes PT1-Glied (Tiefpass).

neuer Ausgangswert = Zeitkonstante * ( Verstärkung * Einganswert - alter Ausgangswert ) + alter Ausgangswert

Über die Zeitkonstante kann das Zittern der Platform gesteuert werden. Je kleiner der Wert umso kleiner das Zittern.

Projektdateien

Programmcode

Teilnehmer

Sebastian Bilz

Tobias Steger

Thomas Wendel

Links