argus labyrinth

Das Argus Labyrinth | Interaktive Rauminstallation

Gruppenprojekt im Fach: Interaktion im Raum
Tobias Betz (Programmierung), Patrick Rucireto (Design), Stefan Eisele (Programmierung), Katharina Kulakow (Konzeption), Corinna Groß  (Konzeption)

DIE IDEE

“Finde dein Weg durch das interaktive Labyrinth. Aber Vorsicht: Du bist nicht alleine…”

Ein Labyrinth auf einer Leinwand führt die Besucher durch den Raum zu einem Ziel: bequeme Sessel und erfrischende Drinks. Doch niemand weiß, was passiert, wenn sie vom Weg abkommen. Die Wirklichkeit wird mit einer virtuellen Komponente überlagert. Das reale Bild des Raumes wird mithilfe einer virtuellen Karte erweitert. Der Besucher wird anhand seiner Körperbewegungen  registriert und indirekt anhand eines virtuellen Labyrinths auf einer Leinwand durch den Raum gelenkt. Über die Auswertung von Sensordaten der Kinect wird das Projekt gesteuert.

DIE KINECT 1414
Die Kinect wird eingesetzt, um die Position des Teilnehmers im Raum zu bestimmen. Über die SimpleOpenNI – Library werden anhand der Kinect die Koordinaten des Teilnehmers an Processing übermittelt. Es werden x, y und z-Werte übermittelt. Dabei definieren die x-Werte die horizontale Bewegung des Teilnehmers, die y-Werte die vertikale und die z-Werte den Abstand zwischen Teilnehmer und der Kinect. Die x- und z-Werte werden der zuvor beschriebenen User-Klasse übergeben, um somit die Position des Teilnehmers im Labyrinth zu bestimmen. Die Kinect bietet die Möglichkeit bis zu 3 Teilnehmer gleichzeitig zu erkennen. Aus konzeptionellen und technischen Gründen haben wir uns für nur einen zu erkennenden Teilnehmer entschieden. Weiterhin werden die ermittelten Werte für die Rotation des Auges in der Eye-Klasse verwendet.

DAS ZIEL

Mit dem Projekt wollen wir Menschen auf Überwachung aufmerksam machen. Die Besucher werden spielerisch an das Thema herangeführt; sie sollen aber früher oder später feststellen, dass sie Überwachung oft gar nicht bewusst wahrnehmen. Sie sollen sich im Anschluss kritisch mit dem Thema auseinandersetzen.

PROCESSING

Das Projekt wurde in der quelloffenen Software Processing (v. 2.2.1) realisiert. Es handelt sich hierbei um eine Java-Basierte Programmiersprache.
Es werden externe “Java-Libraries” verwendet darunter:

Das Programm besteht aus 4 verschiedenen Klassen und der Verknüpfung von Kinect Parametern:

  1. Die Labyrinth – Klasse:

In dieser Klasse wird zunächst die Form des Labyrinths anhand eines 2D-Vektor Arrays (Vec2D[]) beschrieben. Es besteht aus insgesamt 48 Vektoren. Mit Hilfe der “toxiclibs-library” wird eine Polygon2D Klasse erzeugt, welche die zuvor bestimmten Vektoren übergeben bekommt. Dieses Vorgehen macht es möglich Punkte zu unterscheiden, die sich innerhalb oder außerhalb des Labyrinths befinden. So können später bestimmte Ereignisse ausgelöst werden, wenn sich der Teilnehmer außerhalb bzw. innerhalb des Labyrinths befindet. Die Labyrinth-Klasse enthält zusätzlich eine “display” Funktion, in der das Labyrinth als Grafik dargestellt wird.

  1.  Die Box –  Klasse:

Diese Klasse definiert die Position und das Aussehen der gestalterisch zu Quadern reduzierten Hochhäuser. Die Position wie auch die Größe und Form werden als Übergabewerte übermittelt. Somit hat man die Möglichkeit zu jeder Zeit auf die Form der Quader Einfluss zu nehmen. In dem digitalen Labyrinth deformieren sich die Quader, sobald sich der Teilnehmer außerhalb des Labyrinths befindet.  Dies soll eine potentielle Gefahr sichtbar machen.

  1. Die User –  Klasse:

Diese Klasse definiert die Position und das Aussehen der Teilnehmer in dem Digitalen Labyrinth. Über die Funktion void initializeSphere(…)  werden 3D – Vektoren generiert, die gebraucht werden um eine Kugel (Sphere) als Darstellung für den Teilnehmer zu generieren. Über die Funktion void buildSphere(…)  wird die Kugel generiert.

  1. Die Eye – Klasse:

Wie bei der User-Klasse wird hier eine Kugel über die Funktionen void initializeSphere(…)  und void buildSphere(…)  generiert. Zusätzlich wird hier noch ein Bild von einem Auge auf die Kugel “gemapped”. Durch die schon in Processing implementierten Funktionen rotateX(), rotateY() und rotateZ()  kann die Kugel über die jeweiligen Achsen rotiert werden.