LightPong

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Idee

Unsere Grundidee war es ein interaktives Spiel zu entwickeln, bei dem der Spieler mit einem Lichtkegel, der auf den Boden projiziert wird und sich wie ein Ball verhält, interagieren kann. Das Spiel ist für mindestens 2 Personen gedacht, die gegeneinander spielen können. Der Lichtkegel soll durch ein Movinglight realisiert werden und die Kollisionsdetektion zwischen Licht und Mensch mittels Tiefenbild der Microsoft Kinect erfolgen.

Lightpong aufbau.png

Erste Ansätze

Unser erster Gedanke war alle Komponenten in einer einzigen Softwareumgebung anzusteuern um die Verbindung der Geräte möglichst einfach und mit geringer Latenz zu realisieren. Dabei fiel unsere Wahl auf Java Eclipse mit den Plugins JNect und Open DMX Wrapper JNI. Allerdings scheiterte dieser Versuch bereits an der Einbindung der Kinect.

Auf Empfehlung der zuständigen Dozenten fiel die Wahl schließlich auf Open Frameworks in Codeblocks, mit der Verwendung der Addons OpenKinect und OpenDMX. Um uns an dieses Framework ran zu tasten, besorgten wir uns OpenFrameWorks um einen Beispielcode für OpenKinect zu testen, da wir uns nicht sicher waren ob die Kinect für unser Projekt wirklich geeignet ist. Für das Beispiel benötigten wir eine OpenFrameWorks Version mit dem Compiler MinGW. Doch hatten wir eine zu alte Version von CodeBlocks gedownloaded, wodurch der Code nicht kompilierte. Durch aktualisierung der Version konnten wir das Problem beheben, und hatten unseren ersten Testlauf mit der Kinect. Darauf hin stellten wir fest, dass der sehr helle Lichtkegel des Movinglights nicht die Tiefenwahrnehmung der Kinect beeinflusst. --> gute Grundvoraussetzung für unser Projekt

Uns kam dann die Idee, die Kinect fix an das Movinglight zu montieren. Vorteile dadurch: -Nur noch eine Kamera, statt zwei(je Spielfeldseite eine) -fixe Position der "Region of Interest" im Tiefenbild einstellbar

-->Dadurch muss sich der Threshold der Kamera jedoch dynamisch dem Abstand zum Bodens anpassen, sodass nur Objekte die sich unmittelbar über dem Boden befinden, erkannt werden. Eine Kollsion soll demnach eine Änderung der Verhaltensweise des Movinglights auslösen.

Da die Kinect recht schwer ist und eine externe Stromversorgung voraussetzt, wurde uns nahegelegt es mit der Asus Xtion Pro Live zu versuchen, da diese die selben Sensoren besitzt wie die Kinect und keine externe Stromversorgung benötigt.

-->Diese funktiontierte allerdings nicht mit der Software der Kinect und eigene Plugins/Addons waren nicht auffindbar.

Weil wir mit der Kamera soviele Probleme hatten, widmeten wir uns der Ansteuerung des Movinglights über das OpenframeWorks Addon OpenDMX.

Umsetzung

Koordinatentransformation:

Das Movinglight wird per Tilt(Kippwinkel) und Pan(Drehwinkel) in seiner Bewegung gesteuert. Somit verwenden wir hierfür Polarkoordinaten des Spielfeldes.

Spiellogik.png

Da Die Spielelogik im R² in Kartesischen Koordinaten realisiert wurde, und das Movinglight per "PolarKoordinaten" gesteuert wird, musste eine Koordinatentransformation im Code der Spielelogik durchgeführt werden

Abstand Spielmittelfeldpunkt zum Licht: R.png

Berechnung für x: Xy.png

Berechnung für y: Y.png.

Berechnung der Tilt- und Panwinkel und Umwandlung in Level für DMX (0-255)


zur Spielelogik:

Diese wurde als Programm in C++ realisiert und diente als Referenz zum Überprüfen, ob das Movinglight sich bewegt wie es soll. Doch das Movinglight bewegte sich zu ungenau und fehlerhaft, was wir auch nach vielen Versuchen nicht ändern konnten.

Code


Fazit

-Durch die vorher beschriebenen Hürden, konnte das Projekt leider noch nicht sehr weit realisiert werden

-Ansteuerung des Movinglights funktioniert, jedoch zu ungenau

-mögliche Lösung: Ansteuerung des Fine tilt und pan

-Kinectprogrammierung noch nicht realisiert