Blob o' Flop - interaktive Steuerung mit Wiimote über OSC

Aus toolbox_interaktion
Version vom 5. November 2014, 22:19 Uhr von Bruenig (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Diese Dokumentation beschreibt Idee und Umsetzung hinter dem Spiel Blob o’ Flop, das im Sommersemester 2011 im Rahmen des Interaktionspraktikums entstanden ist.


Idee

Die Idee hinter dem Spiel basiert auf folgenden beiden, unabhängig von einander entstandenen, Ideen:

  1. Feuerwehrspiel Mit einem Schlauch soll ein virtuelles, brennendes Haus gelöscht werden.

  2. Klekstischtennis Mit einem Tischtennisball soll gegen eine Wand gespielt werden. Das Auftreffen des Balls erzeugt virtuelle Farbklekse.


Da wir letztere Idee in Sachen Sensorik als im Rahmen des Praktikums zu aufwändig einschätzten, kombinierten wir beide Ideen zu einem neuen Spielkonzept: Mit einem Schlauch soll auf die Leinwand gezielt werden, auf dieser entstehen dadurch virtuelle Farbklekse.

Vorraussetzungen

Zur Umsetzung der Idee müssen wir einen Punkt auf der Wand bestimmen, auf den mit dem Schlauch gezielt wird. Außerdem ist für eine aufwendigere Umsetzung auch noch der Winkel in dem der Schlauch gehalten wird, sowie der Abstand des Spielers von der Wand interessant. Hierfür fanden wir folgende prinzipielle Möglichkeiten:

  1. An dem Schlauch wird ein Infrarot Laser befestigt, dadurch entsteht auf der Leinwand ein unsichtbarer Punkt, der von einer Infrarot Kamera erfasst werden kann. Zusätzlich wird am Schlauch eine Infrarot LED und ein Neigungssensor befestigt. Mit einer zweiten Infrarot Kamera könnte man so, die Position des Spielers im Raum bestimmen, durch den Neigungssensor die Neigung des Schlauchs feststellen.

  2. Am oder im Schlauch wird eine Wiimote befestigt. Die internen Neigungssensoren der Wiimote könnenbenutzt werden, um den Winkel zu bestimmen in dem der Schlauch gehalten wird. Zusätzlich werden an der Seite der Leinwand zwei oder vier Infrarot LEDs angebracht, die mit der internen Infrarot Kamera der Wiimote ausgewertet werden können und so Rückschluss auf den Zielpunkt und den Abstand des Spielers geben.

Wiisensor.png

Abbildung 1: Die Wiimote als Sensor für unser Spielesystem mit den 4 IR-Strahlern neben der Spielfläche


Da wir privat bereits mehrere Wiimotes zur Verfügung hatten und die Umsetzung mit diesen wesentlich einfacher und erfolgversprechender erschien, entschlossen wir uns für den zweiten Aufbau, der in Abbildung 1 noch einmal dargestellt ist. Die roten Kreise an den Ecken der Leinwand symbolisieren dabei die angebrachten Infrarot LEDs, mehr dazu im Abschnitt 3.2 Die Wiimote kommuniziert über Bluetooth, weshalb wir uns keine Gedanken über mögliche eigene Hardwareschnittstellen machen mussten. Außerdem erhalten wir durch die Wiimote die Möglichkeit, mehrere Spieler gleichzeitig auf der gleichen Fläche mit- oder gegeneinander spielen zu lassen, da die Zuordnung des Zielpunktes, des Abstands und der Neigung direkt auf den einzelnen Spieler abgebildet werden kann.

Struktur und Aufbau

Software:

Netzstruktur.png

Abbildung 2: Prinzipieller Aufbau des Gesamtsystems

Die Grafik zeigt das Zusammenspiel der Komponenten unseres Systems. Eine oder mehrere Wiimotes werden per Bluetooth mit einem Rechnersystem verbunden. Konkret haben wir uns für ein Linuxsystem entschieden (Xubuntu 11.04), da wir dort keine Abhängigkeit von verschiedenen Bluetooth Stacks feststellen konnten.1. Außerdem gibt es für Xubuntu die benötigte Software schon im Repository System, wodurch sich die Untersuchung auf Inkompatibilitäten und Abhängigkeiten stark vereinfacht. Lizensiert ist die Software durchgängig unter GNU GPL.

Mit dem Paket wmgui ist außerdem eine Software verfügbar, die in einer grafischen Oberfläche die Möglichkeit bietet, die Sensoren der Wiimote auszulesen und anzuzeigen, wodurch man schon vorab einen Einblick in Funktion und Möglichkeiten des Gerätes gewinnen kann.

Unter http://www.nescivi.nl/wiiosc/ gibt es eine Software, die es ermöglicht, die Aktionen einer oder mehrerer Wiimotes per Open Sound Control über UDP an ein entferntes System zu senden. Diese Software setzt wie auf der Website beschrieben auf einige Bibliotheken auf, die aber ebenfalls alle in den Xubuntu Repositories vorhanden sind. Nach einem apt-get install liblo7-dev cwiid1-dev bluez reicht ein einfaches make im Ordner des wiiosc Programms, um es lauffähig kompilieren zu können. In unserem derzeitigen Aufbau benutzen wir WiiOSC um die Daten an den gleichen PC zu senden und halten uns dadurch die Möglichkeit offen, in Zukunft den Bluetooth Empfänger von dem Rechnersystem, das sich um die Darstellung kümmert, zu trennen. Auf diesem System läuft ein Thread, der die Daten aus dem Netzwerk empfängt und sie über mehrere Ringpuffer (einer pro Spieler) an die Spielesoftware weitergibt. Von dieser Spielesoftware aus können ebenfalls Daten an den Thread zurück gesendet werden, die dieser dann in OSC Nachrichten umwandelt und an die WiiOSC Software zurück sendet. Hierbei handelt es sich um Steuerdaten, wie zum Beispiel das Aktivieren der Leuchtdioden oder des RumblePacks in den Wiimotes.

Die Software die sich um die Darstellung des Spiels kümmert, wurde in SDL geschrieben, da SDL eine relativ einfach zu lernende, aber dennoch schnelle Implementierung von grafischen Spielen ermöglicht. SDL ist nicht nur für Linux, sondern auch für Windows verfügbar, jedoch müssten möglicherweise einzelne Teile der Software portiert werden, wenn Blob o’ Flop unter Windows gespielt werden soll.

Das Spiel Blob o' Flop

BlobOFlop hauptmenue.png

Das Spiel ist nur über OSC-Befehle Steuerbar, das heist jeglicher Versuch die Software ohne entspechende OSC-Anbindung zu Starten wird scheitern.

Im Spiel wurden eine unterschiedliche Funktionen implementiert. Als wichtigstes ist das Hauptmenü mit Konfiguration um Wiimotes hinzuzufügen und zu kalibrieren.

Das Spiel an sich hat auch 3 verschiedene Spielmodis das altbekannte TicTacToe und 2 Spielmodis mit Farbkleksen.

BlobOFlop Flaechenspiel.png Zeitspiel.png Tictactoe.png

Die zwei Farbkleksspielmodis sind das eigentliche Blob o' Flop, welches je nach schütteln der Wiimotes unterschiedliche große Farbklekse auf die Spielfläche wirft. Hier können mehere Spieler gegeneinander spielen zum einen gibt es die Möglichkeit auf Zeit gegeneinander zu spielen zum anderen kann darum gespielt werden wer als erstes 30% der Fläche am Bildschirm mit seiner Farbe zugeklekst hat.

Hardware:

Um eine Positionsbestimmung für die Wiimotes zu ermöglichen brauchten wir einen Ersatz für die Wii-Konsole. Da wir hieraus nur die Infrarot leuchten benötigen würden entschlossen wir uns 4 LED-Scheinwerfer zu bauen. Diese LED-Scheinwerfer bestehen aus jeweils 4 IR-LEDs einer Batteriehalterung mit 2 Batterien und einem Jumper der als Schalter fungiert. Für die Befestigung der Module fanden sich Leistungsstarke Magneten die auch durch ein Whiteboard hindurch die Module an der Wand halten können. So ist das ganze System äußerst flexibel und kann sowohl auf einem Laptop als auch auf einer Leinwand genutzt werden.

Da die Wiimotes voll funktionsfähig vorhanden waren benötigten wir für unsere Anwendung keinerlei weiter Hardware.


Inbetriebnahme:

Bei den ersten Tests mit den Wiimotes und den IR Modulen zeigte sich, dass die Wiimotes einen Mittelwert aus allen gefundenen IR-Quellen ausgeben. Also bei der Verwendung von 4 IR-Scheinwerfern geben diese den Mittelpunkt dieser 4 Punkte aus. Da wir beim Testen auf der Leinwand feststellten, dass es eigentlich kaum möglich ist auf der Leinwand überall hinzuzielen ohne einen der 4 IR-Scheinwerfer aus dem Bild zu verlieren, entschlossen wir uns anstelle der 4 Scheinwerfer in jeder Ecke nur 2 IR-Module in der Mitte zu verwenden. Dies machte uns in der Software aufgrund des zurückgegebenen Mittelpunktes keine Probleme.


Zusammenfassung / Ausblick:

Als Zusammenfassung lässt sich sagen, dass sich doch mit relativ einfachen und wenigen Mitteln eine lustige Spielidee umsetzten lässt. Auch die verschiedenen Schnittstellen geben die Möglichkeit dieses Spiel auch mit anderen Eingabegeräten zu steuern (z.B. die Kinect).

Beim Spielen des Spiels viel auf, dass der Rechner anscheinend mit der Datenmenge über Bluetooth nicht komplett umgehen kann. Hierzu wäre es eventuell denkbar mehrere extra Rechner mit der Bluetoothsoftware zu verwenden und einen extra nur für die SDL Applikation. Desweiteren sind im Moment alle Parameter der Software nicht in einer Konfigurationsdatei untergebracht sondern im Quellcode hinterleget hier wäre es sinnvoll die benötigten Parameter in eine extra Datei auszulagern, die bei Spielbeginn geladen wird. Dies würde ein permanentes neubauen der Software vermeiden und auch so das Spielen und weiter entwickeln erleichtern.

Download:

Sourcen