OhmFlight

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Die 3D Kamera von Microsoft ist eine preisgünstige 3D Kamera und wird daher in vielen Projekten verwendet. Neben dem Farbbild bekommt man ein zweites Bild mit Tiefeninformationen. Ziel dieses Projektes war es die Steuerung eines Flugsimulators durch Gestenerkennung mittels der Microsoft Kinect.

Start.png

Konzept

Ziel war es die Gesten eines Spielers durch die Kinect zu erfassen und in weiternen Programmen auszuwerten um damit einen virtuellen Joystick anzusteuern. Dieser wird in einem Flugsimulator (Microsoft Flight) ausgewählt und steuert das Flugzeug.

Umsetzung

Die Skelettdaten der Person werden mit der Kinect aufgenommen und mittels OSC-Kinect per OSC-Nachricht an ein Auswerteprogramm geschickt. Das Auswerteprogramm wertet die Gesten des Spielers aus und übersetzt sie in Joystickparameter, welche per OSC weiter an den virutellen Joystick geschickt werden.

OSC-Kinect

OSC-Kinect ist ein simples Programm, das die Skelettdaten per OSC versendet. Als Framework verwendet es das Microsoft SDK. Das Programm ist in C++ geschrieben und der Sourcecode ist als Visual Studio Projekt verfügbar.

/joint/<jointid>/<userid>  posx posy poz
 
Where:
userid is 0-5 and
jointid is one of:
        "hip_centre",
        "spine",
        "shoulder_centre",
        "head",
        "shoulder_left",
        "elbow_left",
        "wrist_left",
        "hand_left",
        "shoulder_right",
        "elbow_right",
        "wrist_right",
        "hand_right",
        "hip_left",
        "knee_left",
        "ankle_left",
        "foot_left",
        "hip_right",
        "knee_right",
        "ankle_right",
        "foot_right"

OSC-Kinect

Auswertung der Gesten

Die Auswertung der von OSC-Kinect empfangenen OSC Narichten erfolgt in einem seperaten Programm. Dieses erkennt die Gesten und setzt sie in Joystick Befehle um. Die Befehle werden per OSC an eine Joystick-Feeder Appplikation vJoy geschickt. Für das Senden,Empfangen und Auswerten von OSC-Nachrichten verwendeten wir das OSCPack Framework. oscpack

/vjoy/xyz X-Wert Y-Wert Z-Wert


Gesten

Bei der Überlegung, welche Gesten zwingend benötigt werden, stellten wir fest, dass der Roll und Pitch Winkel zur Steuerung eines Flugzeuges unablässig sind.


Rollpitchyawplain.png

Dazu definierten wir zwei Gesten.

Roll

Strichmann.png

Formel: x1/y1 = X/Y-Position der rechten Hand x2/y2 = X/Y-Position der linken Hand

(y1-y2)/wurzel( (x1-x2)² + (y1-y2)² ) = Rollwinkel

Hält der Spieler seine Hände horizontal ergibt sich ein Rollwinkel von 0°. Hält er eine Hand nach oben, die andere nach unten, ergibt sich ein Rollwinkel von +-90°.

Pitch

y1/z1 = Y/Z-Position der Hüfte y2/z2 = Y/Z-Position des Schulterzentrums

(z1 - z2)/Wurzel( (z1-z2)² + (y1-y2)² ) = Pitchwinkel

Beugt der Spieler sich nach vorne, fliegt das Flugzeug nach unten, beugt er sich nach hinten, fliegt das Flugzeug nach oben.

vJoy - virtueller Joystick

vJoy ist ein virtueller Joystick Treiber, welcher mittels einer Feeder Applikation gesteuert werden kann. Die Feeder Applikation empfängt die OSC-Nachrichten mit den Joystickparametern des Auswerteprogramms und schickt diese an den Joystick. Auch hier verwendeten wir oscpack um die OSC-Nachrichten zu Empfangen und Auszuwerten.

vJoy

Probleme

  • Treiberinstallation nicht einfach (nur das Kinect SDK funktionierte)
  • Probleme mit der Einbindung von Libraries unter Windows (in das vJoy Projekt)

Ergebnis

Zu unserer eigenen Überraschung funktionierte die Steuerung des Flugzeuges auf Anhieb problemlos.

Video zum Download

Programmcode zum Download