BunnySlayer

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Praktikumsarbeit des Studiengangs Elektro- und Informationstechnik im SS2013.

Logo BunnySlay.png

Das Team

Unser Team besteht aus drei Studierenden vom Studiengang Elektro- und Informationstechnik.

  • Sebastian Kierner
  • Tobias Gruner
  • Andreas Nickl

Die Idee

Ein interaktives Geschicklichkeitsspiel "zur Stressbewältigung". Ein Spielfeld mit neun Löchern wird von einem Beamer auf eine Tischplatte projeziert. Aus diesen Löchern tauchen zufällig Hasen auf, die mit einem Handschlag getroffen werden müssen, um Punkte zu bekommen

Hardware

Die Auswahl der Hardware fiel dabei auf die folgenden Komponenten:

Kinect

Die Kinect Kamera von Microsoft wird per USB mit dem Steuerungs-PC verbunden. Sie beinhaltet eine Kamera, mit der sie Farbige Bildinformationen erfassen kann, einen Tiefensensor und Mikrofone. Für das Projekt ist nur der Tiefensensor relevant.

Beamer

Der verwendete Beamer basiert auf kurzdistanz Technik und besitzt einen besonderen Standfuß, der es erlaubt, direkt auf die Tischplatte vor dem Beamer zu projizieren. Mit einem kleinen Aufbau wird er leicht erhöht aufgebaut, damit die Kinect direkt darunter Platz findet um das gesamte Spielfeld zu überblicken.

Steuerungs PC

Als Steuerungs-PC kann jeder Rechner mit gängigem Ausgang für den Beamer und USB Port verwendet werden. Außerdem wird ein installiertes .NET Framework 4.0 vorausgesetzt.

Das System

Das System besteht im wesentlichen aus zwei Komponenten, die in jeweils einer Anwendung realisiert sind.

  • Anwendung zur Erkennung der der Kinect Bildinhalte mit OSC Server
  • BunnySlayer Spielfeld mit OSC Client

Aufbau 2.jpg

Die Realisierung

Bildaufnahme

Die Bildaufnahme erfolgt mit Hilfe der Kinect, die per USB angeschlossen wird. Aus dem Kinect SDK wurde das Beispielprogramm "Sceleton Basics WPF" überarbeitet. Die Anwendung erkennt über den Tiefensensor einen Spieler und kann dessen rechte Hand selektieren. Die Koordinaten der Hand werden anschließend per OSC übetragen. Eine Übertragung erfolgt ausschließlich, wenn die Hand die Tischplatte berührt, also wenn zugeschlagen wird. Dadurch wird der Datenverkehr reduziert.

  • Die X-Koordinate der Hand wird im Server als X-Koordinate gesendet
  • Die Y-Koordinate der Hand wird im Server als Schlag Information gesendet. Dier Triggerung ist über einen Schwellwert realisiert
  • Die Z-Koordinate der Hand wird im Server als Y-Koordinate gesendet

Die Werte für X und Y werden intern auf "1" normiert.

Die OSC Kommunikation erfolgt durch das open Source Framework "Bespoke OSC Library". Diese stellt sowohl Client als auch Server funktionalität bereit.

Mapping koordinaten.PNG

Bildverarbeitung

Die zweite Anwendung nimmt eine Verbindung zum OSC Server auf und erhält daraus die Koordinaten der Hand, sowie den Status, ob zugeschalgen wurde.

In WPF werden alle Controls relativ zu ihren übergeordneten Controls angeordnet. Das Spielfeld ist dem Window und dem darin befindlichen Grid untergeordnet. Eine normale Interaktion mit Events ist durch die OSC Kommunikation nicht möglich. Also müssen die von der Kinect empfangenen Daten in absolute Bildschirmkoordinaten umgerechnet werden. Im Anschluss daran muss mittels HitTest Methode aus der VisualTreeHelper Klasse das Element gefunden werden, welches sich an der entsprechenden Stelle befindet.

Quellen

Der Quellcode der Anwendung "BunnySlayer" kann hier heruntergeladen werden. Die Zipdatei beinhaltet das gesamte Visual Studio Projekt sowie die DLL Files des OSC Frameworks.

Der Quellcode der Anwendung "SkeletonBasics-WPF" kann hier heruntergeladen werden. Die Zipdatei beinhaltet das gesamte Visual Studio Projekt sowie die DLL Files des OSC Frameworks und das Kinect SDK.

Im Moment müssen beide Anwendungen einzeln gestartet werden. Es ist zwingend notwendig die BunnySlayer Anwendung vor der SkeletonBasics Anwendung zu starten, da sonst die OSC Verbindung fehlschlägt.

Lange Nacht der Wissenschaften 2013

Das Projekt wird zur Langen Nacht der Wissenschaften ausgestellt.

Bis dahin werden folgende Punkte verbessert:

  • Beseitigung einzelner Bugs
  • Automatische Kalibrierung der Handerkennung (im Moment noch hart codiert)
  • Einbau verschiedener Levels/Schwierigkeitsgrade je nach Spielfortschritt
  • "Böse Häschen"