Drawjector42

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Das Projekt "Drawjector42" entstand im Praktikum zur Vorlesung "Interaktion" im Sommersemester 2014.

Drawjector42
Drawjector42 logo.png
Semester: SS2014
Entwicklungsteam: Martin Deß
Martin Güttler
Paul Köckritz
Betreuer: Prof. Dr. Heinz Brünig
Dipl.-Ing. Johannes Brendel

Übersicht

Mit Hilfe eine Beamers soll eine Spielfläche auf einen Tisch projeziert werden, auf welcher sich ein Spielelement ( Ball ) bewegt. Mit einem echten Stift können Striche auf die Spielfläche gezeichnet werden, welche von einer Kamera erfasst werden und so mit dem projezierten Ball interagieren.


Implementierung

Ablaufdiagramm
Drawjector42 in Betrieb (Bild aus zugehörigem Video)

Die Spielfläche wird von einer Kamera gefilmt. Die Kamera verfügt über einen Filter, der Licht im sichtbaren Spektrum aussperrt. Damit sind nur die gezeichneten Linien im Kamerabild erkennbar und nicht etwa das vom Beamer projezierte Bild.

Objekterkennung/Bildanalyse

Mit Hilfe eines auf Open Frameworks Bibliotheken basierenden Programms werden die Linien interpretiert und als Objekte zusammen mit dem Ball in einer Physik Engine verarbeitet.

Im Detail bedeutet das, dass für jeden Frame der ursprüngliche Hintergrund subtrahiert wird um die gezeichenten Bildelemente hervorzuheben. Weiterhin können mit der ofxCV Funktion findContours() die Konturen der Objekte extrahiert und als polylines gespeichert werden. Um zu kleine und zu große Objekte auszuschließen, kann eine mindest/maximale Fläche angegeben werden. Dies verhindert die Interpretation von Störungen(z.B. Schatten des Spielers) als Bildobjekte.

Die extrahierten polylines können an die box2D Physik Engine übergeben werden. Diese Physik Engine erstellt entsprechen den polylines Objekte in der 2D-Welt zwischen denen dann Kollisionen erkannt werden können. Weiterhin kann sie diesen Objekten Eigenschaften zuweisen um zum Beispiel Gravitationseffekte zu realisieren.


Kalibrierung

Um die Bilder des Beamers und der Kamera aufeineander auszurichten ist eine manuelle Kalibrierung notwedig.

Dazu wird ein Gitter auf die Spielfläche projeziert, welches durch die Pfeiltasten verschoben bzw. gestaucht werden kann bis verschiedene Testobjekte sich mit ihren projezierten Gegenstücken decken. Intern wird durch dieses Verschieben/Verzerren eine Projektionsmatrix erstellen, welche auf die polylines und das ursprüngliche Gitter angewandt wird.


Software

OpenFrameworks Bibliotheken:

  • ofxCv: ofxCv ist eine Softwarebibliothek zur Bildverarbeitung in OpenFrameworks. Sie ermöglicht es auf einfach Weiße Bilder oder Videos zu Analsieren und so Konturen, Bereiche, Gesten oder Gesichter zu erkennen. Bei Videos ist auch eine Traking-Funktion leicht realisierbar. In diesem Projekt wurde ofxCv dazu verwendet, die Konturen der gezeichneten Linien zu detektieren und in Form einer Polyline (Linie zusammengesetzt aus verbundenen Punkten) zur weiteren Verarbeitung bereitzustellen.
  • ofxBox2D: ofxBox2D ist eine 2D-Physics Engine, welche in der Lage ist Objekte, wie z.B. Linien, Kreise oder Rechtecke, in einer 2D-Welt zu erstellen. Jedes Objekt hat seine eigenen physikalischen Eigenschaften wie z.B. Gewicht, Größe, Reibungsfaktor, Abprallfaktor und Geschwindigkeit. Außerdem verfügt auch jedes Objekt über eine eigene Kollisionserkennung. In diesem Projekt übernimmt ofxBox2D die Polyline von den ofxCv Funktionen und erstellt daraus ein Linien-Objekt welches mit einem zuvor erstellen, sich bewegenden, Kreisobjekt interagieren kann.

IDE:

Code::Blocks 12.11 (für Windows): Code::Blocks ist eine freie, quelloffene Entwicklungsumgebung für C, C++, D und Fortran. Code::Blocks basiert auf wxWidgets und läuft unter GNU/Linux, Windows und den meisten Unix-Derivaten.

Hardware

Aufbaudiagramm
  • Spielfläche: Als Spiefläche kann jede beliebige ebene Fläche dienen. Da die Spielfläche bemalt werden soll ist entweder davor Papier unterzulegen oder ein wieder entfernbarer Stift zu verwenden.
  • Beamer: Der Beamer sollte lichtstark genug sein um auch bei Tageslicht auf zwei Meter Abstand noch ein gutes Bild darstellen zu können. Er wird optimalerweiße in der Nähe der Kamera angebracht um den Versatz von Beamer zu Kamera gering zu halten. Außerdem muss natürlich darauf geachtet werden, dass der Beamer in dieser Position auch den gewünschten Bereich abdecken kann.
  • Kamera: Es wurde sich bei diesem Projekt für eine Kamera mit Infra-Rot Filter entschieden. Somit ist sichergestellt, dass die Projektionen des Beamers keinen Einfluss auf die Analyse des Videobildes habe. Beim Aufbau ist darauf zu achten, die Kamera in einer Höhe zu Positionieren, in der sie den gewünschten Bereich erfassen kann.

Team

Martin Güttler

Paul Köckritz

Martin Deß

Projektdaten


Links

Quellen

Wikipedia Eintrag zu Code::Blocks