ITree

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Die Idee

Die Idee der Gruppe war – passend zur Weihnachtszeit einen Baum interaktiv zu dekorieren. Dies sollte mit Hilfe der Kinect realisiert werden. Auf eine Oberfläche wird ein grüner Tannenbaum projiziert. Auf der rechten Seite des Baums befindet sich ein Auswahlmenü mit allen zur Verfügung stehenden Schmuckstücken. Der Benutzer kann aus dem Auswahlmenü Schmuckstücke nehmen und damit den Baum dekorieren.

Das fertige Produkt


Realisierung

Wir haben unsere Arbeit in 2 Schritte unterteilt:

  • Frontend-Programmierung - Programmierung der Interaktionsmöglichkeiten auf der Oberfläche des Systems (Kugeln auswählen und positionieren).
  • Kinect-Anbindung - Ermittlung der aktuellen Position und Weitergabe an die Frontend-Programmierung.

Frontend-Programmierung

Als Entwicklungsumgebung für die Frontend-Programmierung haben wir uns auf Grund reichlich gesammelter Erfahrung für Processing entschieden.

  • Das Processing-Programm besteht aus unterschiedlichen Klassen für jedes Schmuckstück – „Kugel“, „Lebkuchen“ und „Kerze“ und der Hauptklasse für den Baum.
  • Die grafische Darstellung der Schmuckstücke und des Baums wurde mit Photoshop erstellt.
Baum
  • Für noch mehr Weihnachtsstimmung sorgt die Klasse „Schnee“- kleine weiße Schneeflöckchen rieseln herunter.
  • Bei der Anbindung des Auswahlmenüs in Processing sind Schwierigkeiten aufgetreten, deswegen haben wir uns in der Endversion für eine Lösung ohne Menü entschieden. Bei jedem Benutzerklick wird auf dem Baum ein zufälliges Schmuckstück platziert.

Kinect-Anbindung unter Windows

  • Die Kinect Programmierung unter Windows ist mit der SimpleOpenNI Schnittstelle für Processing realisiert, da die offizielle SDK von Microsoft nur für .NET Produkte freigegeben ist. (Eine Installationsanleitung dazu gibt es hier im Wiki)
import SimpleOpenNI.*;
SimpleOpenNI  kinect;
  • Nachdem das Processing-Programm gestartet wurde, wird vom User erwartet dass er eine Kalibrierungsposition einnimmt.
  • Nach der Kalibrierung wird die Anzahl der Benutzer ermittelt.
  • Für den ersten Benutzer, der gefunden wird, wird das Skelett ausgerechnet. Es wird automatisch die Position der rechten Hand ermittelt und der Schwerpunkt approximiert. Um den Schwerpunkt wird ein gelber Punkt mit Radius r auf dem Bildschirm gezeichnet. Diese Position ist ab jetzt die „Startposition“ der Hand.
  kinect = new SimpleOpenNI(this);
  kinect.enableDepth();

  // turn on user tracking
  kinect.enableUser(SimpleOpenNI.SKEL_PROFILE_ALL);
  kinect.setMirror(true);
  size(640, 480);
  
void draw()
{
  kinect.update();
  PImage depth = kinect.depthImage();
  image(depth, 0, 0);

  IntVector userList = new IntVector();
  kinect.getUsers(userList);

  // if we found any users
  if (userList.size() > 0) {
    // get the first user
    int userId = userList.get(0);

    // if we're successfully calibrated
    position = enableTracking(userId);
    startPos=position;
  }
}
  • Wenn der Benutzer seine Hand weit in der negativen z-Richtung bewegt (also nach vorne), sprich Startposition – position_jetzt > 250 Punkte, dann wird die „Klick“-Aktion ausgeführt und der Kreis um den Schwerpunkt der Hand ändert seine Farbe und den Radius, so dass es für den Benutzer sichtbar ist, dass die Aktion erkannt wurde.
if (startPos.z-position.z>250)
    {
      fill (#EFF013);
      rad=20;
    }

Programm-Code

Programm-Code: iTreeCode

Präsentation des Projekts: iTreeDokumentation