Microsoft hat Ende 2010 eine kleine Revolution im Spielkonsolenbereich angekündigt: Der Kinect-Kontroller, im Prinzip eine Art Kamera ähnlich wie EyeToy für die Playstation mit einem besonderen Clou: Sie erfasst Objekte im Raum dreidimensional durch eine weitere Tiefenkamera und kann dadurch Körperteile, Bewegungen etc. sehr genau erfassen. Warum ich mich für einen Controller einer Spielkonsole (XBox 360) interessiere die ich nicht einmal besitze? Ziemlich schnell nach der Veröffentlichung wurden Open Source-Treiber veröffentlicht, für Windows und Linux. Mittlerweile haben diese Treiber (der Herstellerfirma PrimeSense) auch den offiziellen Segen von Microsoft. Meine ersten Gehversuche damit sehen so aus:
Ich habe mir nun solch einen Sensor gekauft und diesen mit den Beispielprogrammen sowie einigen anderen Hacks aus dem Internet fleißig getestet.
Die Treiber und Beispielprogramme gibt es auf dieser Seite:
Man benötigt von dort folgendes:
OpenNI Unstable Build for Windows
PrimeSense NITE Unstable Build for Windows
Während der Installation von OpenNITE wird man nach dem Key gefragt (der ist frei verfügbar, aber man übersieht ihn leicht): 0KOIk2JeIBYClPWVnMoRKn5cdY4=
Der Treiber für den Sensor auf der Seite sollte man nicht verwenden, der ist für ein ähnliches aber anderes Gerät. Es gibt hier eine leicht modifizierte Version:
https://github.com/avin2/SensorKinect
Hier brauchen wir wiederum folgendes:
SensorKinect Module – Win32 installer aus dem „Bin“-Ordner
Zusätzlich habe ich für Windows eine Tastatursteuerung anhand von Gesten installiert und eingerichtet. Das Paket findet man hier:
http://projects.ict.usc.edu/mxr/faast/
Das „Flexible Action and Articulated Skeleton Toolkit (FAAST)“ ermöglicht es durch die Erkennung von Gesten und Bewegungen Tastaturaktionen (und neuerdings auch Maussteuerung) auszuführen. Ich habe damit eine Steuerung für Google Earth eingerichtet (genau das zeigt das Video weiter oben).
Folgendes Mapping-File habe ich dafür verwendet:
# mappings from input events to output events
# format: event_name threshold output_type event
#lean_left 10 key_special 37 #left
right_arm_across 5 key_special 39 #right
left_arm_across 5 key_special 37 #left
#lean_right 10 key_special 39 #right
lean_forwards 15 key_special 38 #up
lean_backwards 15 key_special 40 #down
left_arm_up 6 key –
right_arm_up 6 key +
Unter Linux bin ich derzeit dabei die Beispielprogramme so anzupassen dass ich bspw. eine komplette Maussteuerung verwenden kann oder auch anhand der Erkennung meiner Hände Dinge manipulieren kann. Ich verwende dazu die Beispielprogramme von NITE, diese zeigen einige Möglichkeiten des Sensors auf, bspw. das Skelett-Tracking, die Hand-Erkennung, Darstellung des Tiefenbildes mit OpenGL und ähnliches. Ich bin hier auf einem guten Weg, ich habe mich dabei auch hiervon inspirieren lassen:
http://www.keyboardmods.com/2010/12/howto-use-kinect-as-mouse-in-linux.html
Dieses Beispiel habe ich schon soweit erweitert dass zusätzlich zur Maussteuerung auch ein 3D-Bild dargestellt wird und ich ein Rechteck mit meinen Händen manipulieren kann. In das Rechteck kann ich bereits ein BMP als Textur einbinden, aber für viel mehr reicht mein Wissen über OpenGL derzeit noch nicht aus 😉
Hier noch ein paar Videos von Leuten die erstaunliche Dinge mit Kinect durchführen: