Projekt: „AR-Bedienungsanleitung für einen Kaffeeautomat“
Breaking News
Um Vrml Modelle korrekt zeichnen zu können, musste ich die ARVrml.lib anpassen. Der "Patch" dazu ist unten im WIKI. Kompilieren nicht vergessen

Ab dann kann man nach setzen eines Flag alle
OpenGL States wie "glEnable(GL_BLEND)" selbst setzen.
--
TobiasLang - 03 Jul 2005
Aktuelle Screenshots
--
TobiasLang - 04 Jul 2005
0 Projektbeschreibung
Unser Projekt umfasst die Implementierung und Installierung einer interaktiven AR-Bedienungsanleitung für einen Kaffeeautomat auf Grundlage des opensource Augmented Reality Toolkit (
ARToolKit). Je nachdem welche Aktion an dem Gerät durchgeführt werden soll, kann der Benutzer eine Animation auswählen die ihm die dazu nötigen Schritte einfach demonstriert und auf seine Interaktion wartet bzw. reagiert.
1 Kamera
Wir verwenden für das System eine Firewire-Kamera die mit 30 Frames pro Sekunde aufzeichnet.
1.1 Kameraposition
Die Kamera wird in der Kaffeeküche des Lehrstuhls für Medieninformatik im 5. Stock in der Amalienstraße fest installiert. Um eine Störung des Systems durch Verdeckung möglichst gering zu halten installieren wir die Kamera in einem steilen Aufnahme-Winkel über der Eingangstüre zur Kaffeeküche, so dass sie den Kaffeeautomat über die rechte Schulter des vor ihm stehenden Benutzers filmt.
2 Workflows
Das System soll eine Unterstützung zum durchführen folgender Aktionen an dem Kaffeeautomat bieten.
2.1 Kaffee kochen
Hierbei handelt es sich um die Standard-Aktion, das Kochen einer Tasse Kaffee. Der Benutzer wird angewiesen eine leere Tasse unter den Ausguss zu stellen und die entsprechende Kaffee-Taste am Apparat zu betätigen.
2.2 Espresso kochen
Zum bereitstellen eines Espressos wird der Benutzer angewiesen eine leere Espresso-Tasse unter den Ausguss zu stellen und die Espresso-Taste am Gerät zu drücken.
2.3 Wasser nachfüllen
Wenn der Wasserbehälter des Kaffeeautomaten leer ist muss dieser vom Benutzer nach oben herausgezogen werden. Dann wird der Deckel entfernt und am Wasserhahn Wasser eingefüllt. Anschließend wird der Deckel wieder auf den Wassertank gesetzt und dieser in den Kaffeeautomat gesteckt.
2.4 Kaffeebohnen nachfüllen
Im Fall, dass der Kaffeebohnen-Behälter leer ist muss der Benutzer den Deckel dessen abnehmen und Kaffeebohnen nachfüllen. Anschließend verschließt er den Behälter wieder mit dem Deckel.
2.5 Reinigen
Zum Reinigen des Kaffeeautomaten muss der Benutzer als ersten Schritt die Schublade die sich ganz unten im Gerät befindet herausziehen. In dieser sammelt sich der nachtropfende oder übergelaufene Kaffee. Der Inhalt muss in die Spüle entsorgt werden. Als zweiten Schritt kann der Benutzer wenn die Schublade entfernt ist den Kaffeesatz-Behälter aus dem Kaffeeautomat entnehmen und dessen Inhalt in den Abfall entsorgen. Anschließend werden erst der Kaffeesatz-Behälter und dann die Auffang-Schublade wieder an ihre Position gebracht.
3 Animationen
Die Startup-Animation eines Workflows wird nach der Auswahl dessen in einer Schleife zehn Mal wiederholt. Sollte der Benutzer in dieser Zeit die vorgegebene Aktion nicht durchführen geht das System in den Ausgangszustand zurück.
3.1 Kaffee kochen
Eine Hand stellt eine Kaffeetasse unter den Ausguss und betätigt virtuell den Schalter für Kaffee am Gerät der grafisch rot markiert ist. Daraufhin läuft virtueller Kaffee in die Tasse.
3.2 Espresso kochen
Eine Hand stellt eine Espressotasse unter den Ausguss und betätigt virtuell den Schalter für Espresso am Gerät der grafisch rot markiert ist. Daraufhin läuft virtueller Espresso in die Tasse.
3.3 Wasser nachfüllen
Der Wasserbehälter wird grafisch in transparentem Rot hervorgehoben. Er wird von einer virtuellen Hand aus seiner Position im Kaffeeautomat nach oben gehoben. Dann entfernt eine zweite virtuelle Hand den Deckel des Behälters in einer Rotationsbewegung nach rechts. Daraufhin bewegt sich der Behälter etwas in Richtung Wasserhahn. Anschließend bewegt sich der Behälter wieder zurück, der Deckel wird wieder aufgesetzt und zuletzt der Behälter wieder nach unten an seine ursprüngliche Position gebracht.
3.4 Kaffeebohnen nachfüllen
Nachdem der Deckel des Kaffeebohnen-Behälters von einer virtuellen Hand nach rechts in einer Rotationsbewegung geöffnet wurde schüttet eine zweite Hand virtuelle Kaffeebohnen hinein. Anschließend wird der Deckel wieder zurück auf den Behälter geklappt.
3.5 Reinigen
Eine virtuelle Hand zieht die Auffang-Schublade aus dem Kaffeeautomat und bewegt sie zum ausleeren in Richtung Spüle. Dann entnimmt eine zweite virtuelle Hand den Kaffeesatz-Behälter und bewegt ihn in Richtung Abfalleimer zum entleeren. Zuletzt laufen die beiden Teilanimationen in umgekehrter Reihenfolge ab.
4 Menü
Die Auswahl eines Workflows erfolgt vom Benutzer über ein Menü. Dieses besteht aus einem Multimarker, der durch sechs Marker in einer Reihe repräsentiert wird. Eine Auswahl erfolgt aufgrund von Verdeckung genau eines Markers z.B. mit dem Finger.
4.1 Position des Menüs
Das Menü wird auf dem rechten Seitenteil des Küchenschranks über der Spüle angebracht, so dass es von der Kamera gut und relativ störungsfrei eingefangen werden kann.
4.2 Sechs Menüpunkte
Für jeden der fünf Workflows existiert ein Menüpunkt. Das Design des jeweiligen Markers soll mit der von ihm repräsentieren Aktion in Beziehung stehen. Außerdem existiert ein weiterer Menüpunkt zum Abbrechen eines laufenden Workflows bzw. Animation. Durch dessen Betätigung wird das System in den Ausgangszustand zurückgesetzt.
4.3 Animation der Menüpunkte
Um die Selektion eines Workflows bzw. eines Menüpunkts genau zu bestimmen und zufällige Verdeckungen nicht zu interpretieren reagiert das Menü nur auf eine Selektion bei der nur genau ein Marker mindestens eine Sekunde verdeckt ist. Dem Benutzer wird die Dauer der Verdeckung durch seinen Finger demonstriert, indem sich innerhalb der Sekunde grafisch ein Zylinder auf dem jeweiligen Marker aufbaut.
5 Anzeige
Zur Anzeige ist für den Prototyp zunächst ein Notebook ausreichend. Später soll dieses durch ein in der Küche fest installiertes Display, z.B. durch einen Tablet-PC, ersetzt werden.
Für die Realisierung der Funktionalitäten werden an dem Kaffeeautomat und an allen seinen herausnehmbaren Teilen, wie z.B. dem Wasserbehälter, Marker angebracht.
Wir verwenden dazu mehrere Multimarker, um der Verdeckung eines Markers durch den Benutzer und somit einem Totalausfall des Systems vorzubeugen.
Die Multimarker können dann in Bezug zueinander gesetzt werden. So kann der Start einer Animation durch das Entfernen eines herausnehmbaren Teils, wie z.B. der Auffangschublade, über eine Distanzmessung zwischen zwei Markern oder die Verdeckung eines Markers getriggert werden.
Da sich einige der Marker an Stellen befinden werden an denen sie mit Wasser oder Kaffee in Berührung kommen können werden wir sie mit einer Schutzfolie abdecken. Dies gilt besonders für die Marker am Wasserbehälter der unter dem Wasserhahn gefüllt wird und den Marker unter dem Ausguss dessen Verdeckung das Unterstellen einer Tasse triggert.
Für die Animationen „Wasser nachfüllen“ und „Reinigen“ benötigen wir die Kalibrierung des Raums. Dies geschieht über einen Marker an der Wand hinter dem Kaffeeautomat. In einer Konfigurationsdatei kann dann angegeben werden in welcher Richtung vom Gerät aus sich die Spüle bzw. der Abfalleimer befinden.

PS: Sorry für die Qualität...mein Handy gibt nicht mehr her...die Fire-Wire-Cam hoffentlich schon
--
HelgeGross - 01 Jul 2005
7 Programmierbare Shader (GLSL)
Da wir die Möglichkeiten, die uns moderne Hardware bietet, auch nutzen wollen, habe ich die Rendering Pipeline auf Shader umgestellt. Diese sind in der
OpenGL Shading Language geschrieben und ermöglichen uns z.B. Blinn Shading oder Environment Reflections.
Zur Technik: Die Shader benutzen
OpenGL Extensions, dafür gibt es den Wrapper
GLEW
Dieser muss gelinkt sein. Das Programm checkt, ob eine geeignete Grafikkarte vorhanden ist und rendert dementsprechend.
Eine Einführung in GLSL gibt es im
GLSL Tutorial .
Die Shader programmiert man am besten mit dem
Render Monkey, die Projektdatei für den Default Kaffee Shader ist hier auf dem WIKI ladbar.
--
TobiasLang - 02 Jul 2005
System Design
GLSL Shader (CShader)
- beinhaltet einen Shader
- wird an eine C3DObjekt gebunden
- kann je nach Bedarf ein- und ausgeschaltet werden.
3D-Objekte (C3DObject)
- haben fertige, modellierte 3D-Grafik/Animation zugeordnet
- laden/verwalten/zeichnen sich selbst
Szene (CScene)
- generiert sich aus aktuellem Zustand
- verwaltet alle 3D-Objekte sowie deren Beziehungen untereinander
Zustand (CState)
- speichert logischen Gesamtzustand des Systems
- kennt Zuordnung Marker <-> 3D-Objekt
Ablaufsteuerung (CControl)
- interpretiert Sichtbarkeit und Transformation von Markern
- löst Aktionen aus (Objekt verändern, Animation abspielen...)
- modifiziert (als Ergebnis) den aktuellen Zustand
ARToolkit
- trackt und liefert Markertransformationen
Framework
- (eher kleines) Rahmenwerk zur Initialisierung und zum Zusammenspiel des Ganzen
Integration der Markerdetektion von ARToolKitPlus
Hier der Patch mit der neuen Markererkennung von
ARToolKitPlus:
--
ToniZeitler - 13 Jul 2005
Szenengraph
Hier ist mal ein Entwurf. Sollen wir die Multimarker auch noch irgendwie berücksichtigen? Wenn ja wie? Zwei Markerpfeile gehen auf ein Objekt?
Ergänzung: Die Kaffeemaschine ist auch noch ein Objekt, die Marker für die Benutzereingabe fehlen
VRML Modelle und Markerpositionen
Der Kaffeeauffang blinkt solange, bis der darunterliegende Marker sichtbar wird.
--
TobiasLang - 20 Jun 2005
SVN-Verzeichnisstruktur
bin
doc
include
src
--
SebastianBoring - 23 Jun 2005
Auswahlmenü (oberer und unterer Teil)
Restliche Marker
Auffangbecken (unten)
- Ort: Auffangbecken (darnuterliegend)
- ID: 014
- Größe: 6 x 6 cm
Kaffeebohnenbehälter (Deckel)
- Ort: Kaffeebohnenbehälter (Deckel)
- ID: 012
- Größe: 6 x 6 cm
Kaffeesatzbehaelter
- Ort: Kaffeesatzbehälter (Links)
- ID: 015
- Größe: 4 x 4 cm
- Ort: Kaffeesatzbehälter (Rechts)
- ID: 016
- Größe: 4 x 4 cm
- Ort: Kaffeesatzbehälter (Vorne)
- ID: 017
- Größe: 6 x 6 cm
Kaffeemaschine
- Ort: Kaffeemaschine (Oben)
- ID: 011
- Größe: 6 x 6 cm
- Ort: Kaffeemaschine (Vorne)
- ID: 010
- Größe: 4 x 4 cm
Verdeckung der Tasse
- Ort: Verdeckungsmarker für Tasse (auf dem Auffangbecken)
- ID: 013
- Größe: 4 x 4 cm
Wandmarker (für Umgebung)
- Ort: Wand hinter der Kaffeemaschine (zu jeder Zeit hoffentlich sichtbar)
- ID: 000
- Größe: 18 x 18 cm
Wassertank
- Ort: Wassertank (Deckel)
- ID: 009
- Größe: 6 x 6 cm
- Ort: Wassertank (Seite - verdeckt)
- ID: 008
- Größe: 6 x 6 cm
- Ort: Wassertank (Vorne)
- ID: 007
- Größe: 4 x 4 cm
--
SebastianBoring - 06 Jul 2005
Aufgabenverteilung bis Mi 13.07.2005
Tobias Lang
- 3D-Modell des Kaffeebohnen-Behälters
- Korrekte Verdeckungen (Shader)
- Animationen
- Distanz-/Verdeckungsbasiertes Triggern der nächsten Animation oder Ende einer Animation
Toni Zeitler
- Animationen
- Distanz-/Verdeckungsbasiertes Triggern der nächsten Animation oder Ende einer Animation
Helge Groß
- Animationen
- Distanz-/Verdeckungsbasiertes Triggern der nächsten Animation oder Ende einer Animation
Sebastian Boring
- 4x4 Marker am Wassertank und für Tassen-Verdeckung breiterer Rahmen?
- Animationen
- Distanz-/Verdeckungsbasiertes Triggern der nächsten Animation oder Ende einer Animation
TODO:
- Rechner in der Kaffeeküche fit machen!
- Ende des Kaffee/Espresso Workflows wird durch wieder sichtbaren Tasse-Verdeckungs-Marker getriggert!
--
HelgeGross - 07 Jul 2005