## AR in Public ## 1.3 Verortung des Users im Raum Forschungsprojekt von Jens Fehrenbacher 04.11.2022 ![[Collage_Session_1.png]] ##### Aufbau - Vorhaben - Code + Recherche - Feldversuch: Funktionalität - Ästhetisch-interaktive Eindrücke - Abschließende Gedanken ### Vorhaben Als nächster Schritt im [[AR in Public 1 - Skizze und Exploration|Erkunden der Möglichkeiten von Augmented-Reality auf dem Smartphone]] möchte ich mehr über die potentiellen Interaktionen mit dem User des Smartphones erfahren. Statt also [[AR in Public 1.2 - Flächenerkennung|fixe Flächen im Raum zu erkennen]], sollen nun also digitale Objekte abhängig von der Position des Smartphones gesetzt werden. Dies baut auf der Beobachtung auf, dass Flächen, wenn sie denn erst einmal erkannt wurden, in ihrer Räumlichkeit in abhängig vom Blickwinkel sehr gut dargestellt wurden. Sie weicht kaum vom Platz und passt sich perspektivisch meiner Bewegung um sie herum an. Also scheint meine Position zum erfassten Raum recht exakt abgebildet zu sein. Diese Beobachtung ergänzt sich mit einem weiteren interessanten Motiv des vorigen Schrittes: Das mit den Bewegungsweisen des Users im Raum experimentiert werden kann. - Als erster Schritt muss also auf Programmierebene die Funktion gefunden und verstanden werden, welche die Koordination des Smartphones im virtuellen Koordinatensystems des erfassten Raumes abbildet. - Auf dieser Basis soll im zweiten Schritt Objekte in Abhängigkeit von der User-Position platziert und bewegt werden. - Aus diesen Versuchen entsteht die Motivation für den Feldversuch: Indem die Positionen in einer Liste gespeichert werden, soll eine Spur von Objekten den Laufweg des Users abbilden. ### Code und Recherche (bei technischem Interesse, Ergebnisse finden sich bei 'Feldversuch') Mit diesem Vorhaben bewege ich mich bereits außerhalb dessen, was auf der 'Processing for Android'-Webseite dokumentiert wurde ([[AR in Public 1.1 - AR mit 'Processing for Android'|Hier der Link zu meiner Einführung]]). Da es sich bei Processing aber um eine Abwandlung der Java-Programmiersprache handelt, die standartmäßig für die Entwicklung von Android-Apps genutzt wird, lassen sich Java-Funktionen, die Google für die Android-App-Entwicklung gut dokumentiert hat, zurückgreifen. So stoße ich auf diese [Dokumentation des 'Pose'-Objekts](https://developers.google.com/ar/reference/java/com/google/ar/core/Pose?hl=en) die ich aber noch nicht komplett verstehe und deshalb im [Processing Forum](https://discourse.processing.org/t/ar-getpose-of-camera-pose-class/37337/6) nachfrage, wo mir innerhalb von zwei Tagen bei der Übersetzung geholfen wird. Also kann ich jetzt auf die Koordinaten des Smartphones im Raum zugreifen. Was dabei, fast beiläufig deutlich wird, ist dass mit jedem Starten der App ein neues Koordinatensystem mit der Anfangsposition des Smartphones als Nullpunkt erstellt wird. Wird das Smartphone bewegt, erhält es eine Koordinate im Verhältnis zu diesem Nullpunkt. Indem Objekte nun in Abhängigkeit von diesem Nullpunkt UND in Abhängigkeit von der Position des Smartphones platziert werden können, können diese zwei Koordinatensysteme zueinander in Beziehung gebracht werden. Mein erster Test versucht genau dies. Eine Box bleibt starr im Raum, eine verschiebt sich durch meine Bewegung. ![[pose-test_1.png]] ```java // code by Jens Fehrenbacher, thx to mnse for Pose-support import processing.ar.*; import com.google.ar.core.*; void setup() { fullScreen(AR); } void draw() { lights(); ARSurface surface = (ARSurface) getSurface(); Pose p = surface.camera.getPose(); float tx = p.tx(); float ty = p.ty(); float tz = p.tz(); // Koordinaten der Kamera-Position werden aufgegriffen if (mousePressed) { println(tx + "/" + ty + "/" + tz); } stroke(204, 102, 0); strokeWeight(10); pushMatrix(); translate(0,0,-1); rotateY(ty*3); fill(0,0,200); box(0.1); popMatrix(); // Koordinaten der Kamara verschieben Position der Box pushMatrix(); translate(tx,ty,tz-1); fill(0,200,200); box(0.1); popMatrix(); line(0,0,-1,0,0.3,-1); line(0,0,-1,tx,ty,tz-1); line(tx,ty+0.3,tz-1,tx,ty,tz-1); line(tx,ty+0.3,tz-1,0,0.3,-1); } ``` #### Variation zur 'Boxline' Die Nutzbarkeit der Koordinaten lädt im nächsten Schritt dazu ein, eine *Spur* von Boxen zu hinterlassen. Dazu wird als *object oriented programming* eine Klasse von Boxen erstellt. Alle 10 Frames wird eine neue Box an den Koordinaten der Kamera erstellt. So folgt eine Linie aus Boxen dem User. ```java // code by Jens Fehrenbacher, thx to mnse for Pose-support import processing.ar.*; import com.google.ar.core.*; ArrayList<Line> lines; float conx = 0; float cony = 0; float conz = 0; float tx = 0; float ty = 0; float tz = 0; int count = 0; boolean shorten = false; void setup() { fullScreen(AR); lines = new ArrayList<Line>(); rectMode(CORNERS); } void draw() { ambientLight(102, 102, 102); directionalLight(100, 200, 0, 0, 0.8, -0.3); directionalLight(100, 0, 200, 0, 0.6, 0.8); // Lichteinstellungen, damit die Boxen etwas räumlicher wirken ARSurface surface = (ARSurface) getSurface(); Pose p = surface.camera.getPose(); tx = p.tx(); ty = p.ty(); tz = p.tz(); for (int i = lines.size()-1; i >= 0; i--) { Line line = lines.get(i); line.display(); } count++; if (count == 10){ newline(); // alle 10 frames kommt eine neue box hinzu count = 0; if (shorten){ // Bei Mausklick (s.u.) kürzt sich die Spur sukzessiv lines.remove(0); lines.remove(0); } } } void newline(){ lines.add(new Line(tx, ty, tz, conx, cony, conz)); conx = tx; cony = ty; conz = tz; println(lines.size()); } void mouseReleased() { println(tx + "/" + ty + "/" + tz); shorten = !shorten; println(shorten); } class Line { float x1; float y1; float z1; float x2; float y2; float z2; Line(float tempX1, float tempY1, float tempZ1, float tempX2, float tempY2, float tempZ2) { x1 = tempX1; y1 = tempY1; z1 = tempZ1; x2 = tempX2; y2 = tempY2; z2 = tempZ2; } void display() { strokeWeight(15); fill(200,0,0); noStroke(); pushMatrix(); translate(x1,y1,z1); box(0.05); popMatrix(); } } ``` ### Feldversuch Diese Anwendung, die in kurzen Abständen an der Smartphone-Position eine rote Box erscheinen lässt, teste ich auf dem Campus der RUB: 1. Um herauszufinden wie gut die Verortung im Raum ist und ob ich tatsächlich eine 'Spur' hinterlasse 2. Um zu beobachten, welche visuellen Effekte auftreten und welchen Einfluss diese auf die Interaktion haben - mit welchen Verhaltensweisen also experimentiert werden kann. #### Erste Beobachtung Tatsächlich funktioniert das Tracking im Raum erstaunlich gut. Obwohl die Anwendung nicht auf Geo-Daten wie GPS zurückgreift, entspricht die Position der Boxen im virtuellen Koordinatensystem in der Überlagung mit dem Kamerabild meinem Laufweg recht genau. Nicht nur in der platten Ebene, auch die unterschiedlichen Höhenlevel werden passend dargestellt, wie anhand der 'Spur' auf der Treppe deutlich wird. ![[boxline_ausschnitt.png]] Die Beobachtungen lassen sich provisorisch in funktionale und ästhetische Aspekte aufteilen, wobei sich beide Bereiche zwangsläufig überschneiden. ##### Funktionale Aspekte Wenn auch das Tracking an sich erstaunlich gut ist, fallen im Testlauf schnell einige Punkte auf - *Verlorene Orientierung*: Ähnlich wie bei der [[AR in Public 1.2 - Flächenerkennung|Flächenerkennung]] verliert sich der Ankerpunkt bei schnellen Bewegungen oder auch dem Schwenk über monochrone oder ungeometrische Flächen (die keinen Anhaltspunkt fürs Tracking bieten). Der Abgleich der virtuellen Koordinatensystems mit der abgefilmten Umgebung geht verloren und die Spur wird im Raum verschoben und stellt nicht mehr die gegangene Route dar. Ich muss durch meine Bewegung dem Tracking die Chance geben, zu funktionieren. - *Schwebende Boxen*: Da die Smartphone-Position getrackt wird und nicht der Körper bzw. die Füße, schweben die Boxen zwangsläufig so hoch über dem Boden, wie ich das Gerät halte. Dadurch entsteht ein Teils verwirrender Eindruck, weil nicht ganz klar ist, auf welcher Höhe bzw. Bild-Tiefe die Boxen zu verorten sind. - *Durch Wände sehen*: Wände und sonstige Hindernisse werden zwangsläufig ignoriert, da es keinen Ableich derer Distanz zum Smartphone zur dargestellten Distanz der Boxen gibt. Dadurch werden Boxen vor Wänden visualisiert, hinter denen sie sich eigentlich befinden sollten. Dadurch, wie durch das Schweben, wirken sie manchmal seltsam losgelöst, während sie in anderen Momenten eine ### Ästhetische bzw. die Interaktion betreffende Aspekte Ästhetische und die Interaktion betreffende Aspekte fallen hier in meinen Augen ganz klar zusammen, da das, was erfahren wird, zwangsläufig in Abhängigkeit von meinen Bewegungen und Blickrichtungen geschieht. - Und andersherum: Die Verhaltensweisen fortgeführt werden, aus denen interessante Eindrücke hervorgehen können. - *Datenspur*: Als erster Eindruck bin ich überrascht, wie exakt ich von einer Spur von Datenhäppchen verfolgt werde. Anders als bei der Flächenerkennung, bei der ich den Raum vermessen habe, wird nun meine Bewegung vermessen und gespeichert. Das Getrackt-Werden wird hier spürbar, auch wenn es sich nicht um analysierbare GPS-Daten handelt, sondern um relative Positionen zum Startpunkt der Anwendung. In Hinblick auf das tatsächliche, dauerhafte getrackt und analysiert werden durch die Nutzung digitaler Geräte wirkt das durchaus etwas unbehaglich. Gleichzeitig lädt diese Visualisierung aber auch dazu ein, mit dem *Verwirren* des Systems zu spielen, was anhand der oben genannten Funktionalen Aspekte aufscheint. Außerdem kann ich so gewissermaßen mit meinen Spuren *malen*. - *Stop and Go*: Zunächst stellt sich ein Modus ein, bei dem ich zunächst ein Stück laufe, ohne etwas zu sehen, da schließlich die Boxen hinter mir erscheinen. Um dann das *Ergebnis* zu betrachten drehe ich mich um und Betrachte die Boxen-Formation. So entspinnt sich ein Wechselspiel, bei dem potentiell interessante Laufwege ausprobiert werden. Insbesondere die dreidimensionale Bewegung, etwas das Treppensteigen bietet sich an, um auf die eigene, räumliche Spur *zurück zu blicken*. - *Digitale Brotkrumen*: Dieses Wechselspiel kann gewissermaßen abgekürzt werden, wenn rückwärts gegangen wird. So poppen immer wieder die Boxen ganz nah vor dem Smartphone auf. Dadurch wird die Tiefendimension umso deutlicher, da die Boxen zunächst sehr groß, die Sicht versperrend, sind. Beim weiter rückwärts Gehen werden sie dann kleiner, bis die nächste Box ganz nah auftaucht. Eine Kollegin bezeichnet diesen Effekt als *digitale Brotkrumen*. Tatsächlich erscheint die Platzierung der Objekte nun *gestaltbarer*, da der direkte Effekt gesehen wird. Ich kann aktiv eine Fährte legen. Darüber hinaus bietet sich ein Spiel mit der Höhe der Boxen an: Ich kann *tiefere* Boxen platzieren, indem ich das Smartphone in Hüfthöhe halte, und dann von oben auf die Boxen schauen. Das Auf und Ab bildet in der Folge eine Welle in der Spur. Zugegebenermaßen ist dieses Spiel mit dem Rückwärtsgehen nicht ganz ungefährlich. - *Sich Selbst im Weg stehen*: Sowohl beim *Stop and Go* als auch beim Rückwärtsgehen ergibt sich das Problem, dass die nahen Boxen zwangsläufig die hinteren verdecken. Also muss ich meiner Spur ausweichen, um sie zu betrachten - was teils durchaus schwierig ist, da ja immer wieder neue Boxen generiert werden, die wiederum die Sicht verdecken. Teils halte ich das Smartphone höher, um einen Überblick über den Verlauf der Spur zu halten oder steige auf eine Bank. - *Skulpuralität*: Dadurch ergibt sich der spannende Effekt, dass sich an den Punkten der Betrachtung viele Boxen auf engem Raum sammeln, die sich dadurch überlagern und zu kantigigen, teils fast knubbelig wirkenden Gebilden werden. Der Wechsel der Perspektiven wird also mit-aufgezeichnet. Die Spur meines Betrachtens wird abgebildet und selbst zu einer Skulptur, die wiederum betrachtet werden kann und dabei immer wieder neue Skulpturen erzeugt. Ein Eindruck von einer Formation, die beim Betrachten entstanden ist, als das Smartphone hochgehalten wurde: ![[boxline_skulptur.png]] ### Abschließende Gedanken In der Rückschau auf den Feldversuch fällt auf, dass durch diese Anwendung, die an sich wenig komplex ist, lange Bewegungen und Laufwege durch den öffentlichen Raum interessant werden. Beim ersten Bild mit der Treppe wurde erst, gewissermaßen *beiläufig* die Anwendung eine knappe Minute laufen lassen, um erst im Umdrehen und Zurückblicken das Ergebnis zu betrachen. Dabei erzeugen unterschiedliche Bewegungsarten unterschiedliche Effekte: Neben dem *Brotkrumen*-Effekt beim Rückwärtsgehen wird hier auch zwangläufig langsamer gegangen, wodurch der Abstand zu den Boxen kleiner wird. Beim Betrachten wiederum rücken die Boxen zu nah aneinander, dass sie sich überschneiden und aus der Spur ein Gebilde wird, in der sich Gestaltung und Betrachtung verschränken. Dabei behält die Anwendung etwas *Widerspenstiges*. Es entsteht weniger ein souveränes Gestalten nach eigenen Vorstellungen, eher entsteht eine tastende Bewegung, die nie ganz sicher sein kann, was ihr folgt, sondern auch immer wieder irritiert und überrascht wird. Die Boxen erscheinen an der exakten Position des Smartphones, sodass sie nie während der Generierung sichtbar sind, sondern erst im Wegbewegen, welches selbst neue Boxen erzeugt. Viel geschieht *aus Versehen*. Gerade diese Eigenwilligkeit stellt in meinen Augen einen gewissen Reiz dar: Weder wird die Kontrollillusion der freien Gestaltung vorgetäuscht, wie sie bei *Kreativ-Apps* aller Art angepriesen wird, noch impliziert das *Verfolgt-Werden* durch die Boxen ein eindeutiges Überwachung-Szenario da dieses Prinzip ebenso aktiv gestört wie zum Spielprinzip werden kann. Die Unreinheiten und Widersprüchlichkeiten lösen sich nicht auf.