Fun Golf 2000

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Fun Golf 2000 ist ein interaktives Minigolfspiel, bei dem der Spieler auf einem projizierten Feld steht und mithilfe eines echten Schlägers versuchen muss, einen Ball einzulochen.

Ideen für die Umsetzung

Zunächst wurde eine normale Webcam verwendet, mit der die Position eines Laserpointerpunktes getrackt werden sollte. Dies hat nur unter optimalen Lichtverhältnissen funktioniert und die Latenz war für ein flüssiges Spielerlebnis zu hoch.

Für den nächsten Versuch wurde eine Wiimote anstelle der Kamera und eine Infrarot-Sensorleiste anstelle des Laserpointers benutzt. Die Wiimote wurde an der Decke befestigt und die Sensorleiste wurde zum Golfschläger. Die Lichtverhältnisse spielten so keine Rolle mehr, da die Wiimote nur die beiden Infrarotdioden der Leiste sieht. Allerdings war es sehr aufwendig die Daten auszulesen und zu verarbeiten, weil die Wiimote kein Kamerabild liefern kann. Zudem war die Reichweite für unsere Zwecke ungenügend.

Die optimalste Umsetzung gelang uns schließlich mit einer Infrarotkamera. Mithilfe von Filtern waren für die Kamera nur noch zwei helle Lichtpunkte der Sensorleiste sichtbar, die einfach zu tracken waren. Die Latenz war durch die bessere Kamera ebenfalls kein Problem mehr.

Golf grafik.jpg


Aufbau

Hardware

Das projizierte Spielfeld

Der Beamer wurde senkrecht nach unten zeigend an der Decke befestigt, um Verzerrungen des Bildes zu vermeiden. Ebenso ist der Schattenwurf durch diese Anordnung minimal. Die Infrarotkamera befand sich direkt neben dem Beamer. Besonders wichtig war es, die Brennweite der Kamera an die Größe des Spielfeldes anzupassen. Im Kamerabild konnte man neben den Infrarotdioden des Schlägers auch noch das projizierte Feld sehen. Dieses Problem konnte mit einem Filter vor der Linse jedoch leicht behoben werden. Der Schläger bestand lediglich aus einer Wii Sensorleiste, die waagerecht an einer Stange befestigt wurde. Die Sensorleiste war perfekt für unsere Zwecke geeignet, da sie zwei Infrarotdioden besitzt, die nur von der Kamera wahrgenommen werden können. Zwei Dioden waren notwendig, um die Rotation des Schlägers zu implementieren.

Tracking in EyesWeb

Der erste Schritt war es, das Bild zu binarisieren, um die Datenmengen zu reduzieren und weitere Verarbeitungen zu erleichtern. Benutzt wurde ein helligkeitsabhängiger Threshold-Operator. Man musste einen geeigneten Schwellwert finden, der nur das Licht der Dioden im Bild sichtbar lässt. Das Signal waren nun lediglich zwei weiße Flecken auf schwarzem Grund, deren Koordinaten noch ermittelt werden mussten. Hierfür eignete sich der Einsatz sogenannter Blobs. Mithilfe von "ExtractBlobs" kann man die Lichtpunkte in zwei Regionen aufteilen und anschließend mit "ExtractBlob2DInfo" jeweils eine X- und Y-Koordinate des Schwerpunkts eines Blobs extrahieren. Diese Daten mussten nun nur noch an Processing übermittelt werden.


Der fertige Patch in EyesWeb

OSC und Processing

Ein Auszug des Codes


Das OSC-Protokoll eignet sich in diesem Fall am besten zur Datenübermittlung, weil kleine Datenmengen (4 Floats für die Koordinaten) schnell übermittelt werden können und EyesWeb sowie Processing nativ OSC unterstützen. Mithilfe eines OSC-Listeners lässt sich testen, ob und auf welchem Port die Nachrichten von EyesWeb gesendet werden. Diese Daten übernimmt man dann im Code in Processing und rechnet mit einer einfachen Formel die Floats in Koordinaten um (siehe Bild).

Die Implementierung des Schlägers erwies sich schwieriger als gedacht. Es war nicht möglich, die Verbindungslinie der beiden Punkte direkt auf Kollisionen zu überprüfen, deshalb musste sie in einzelne Punkte aufgeteilt werden. Für jeden dieser Punkte fand dann eine Kollisionsabfrage statt. Für das fertige Spiel fehlte nur noch eine simple Ballphysik und das Loch. Der Ball sollte von den Banden abprallen und je nach Stärke des Schlages die korrekte Geschwindigkeit haben. Hierfür muss man eine Zeit lang mit den Werten der Geschwindigkeitsvektoren spielen, bis man ein möglichst realistisches Ballverhalten erreicht hat. Das Spiel ist gewonnen, wenn der Ball mit vollem Radius das Loch überschreitet.






Fazit

Infrarotkameras eignen sich sehr gut bei der Arbeit mit Projektionen, da das Tracking unabhängig vom Hintergrundbild funktioniert. Die Latenz ist minimal, wodurch ein flüssiges Spielerlebnis gegeben ist. Das Spiel ist selbsterklärend und intuitiv zu bedienen. Der User benötigt keinerlei Vorkenntnisse, solange er weiß, wie man Minigolf im echten Leben spielt. Das Spielprinzip lässt sich noch beliebig erweitern. Denkbar wären verschiedene Golfplätze, Hindernisse oder ein Mehrspieler-Modus, doch dafür war die Zeit zu knapp.


Golf final.jpg


Dateien

Processing Code und EyesWeb Patch