Was sie wissen sollten, bevor sie mit einem AR-Projekt beginnen
Erweiterte Realität (Augmented Reality, AR) ist inzwischen ein frequentiertes Buzzword – auch im Bereich der App Entwicklung. Es klingt nach etwas Neuem, Faszinierendem, einfach sexy. Wie kann man AR aber wirklich effektiv einsetzen und wie viel Arbeit, Zeit und Geld kostet so etwas?
Die Wahrnehmung der Tiefe des Raumes ist eine der wichtigsten Säulen zum Verständnis von durch Kameras aufgenommenen Szenerien. Dem 2014 vorgestellte Projekt Tango von Google gelang es als erstes, anhand eines speziellen Sensors für Abstände, die Vorstellung eines virtuellen 3D-Raumes innerhalb eines mobilen Gerätes abzubilden. Mittlerweile ist dies auch ohne einen speziellen Sensor für die Abstände möglich. Zum Beispiel durch die vor Kurzem veröffentlichte Technologie ARKit von Apple oder das Projekt ARCore. Beide gehen vom Projekt Tango aus und gewinnen relativ einfach eine Vorstellung über den aufgenommenen Raum. Jedoch haben diese Technologien dabei auch ihre Beschränkungen.
Eigenschaften der SDK
Beide Technologien haben ungefähr das gleiche Set an Eigenschaften. Einmal kann das eine SDK kann etwas besser, mal das andere – mehr oder weniger sind aber beide ähnlich.
- Feature Points: Erkennen von entsprechenden Bezugspunkten bei kontinuierlicher Aufnahme. Bei zwei Bildern (zwei Aufnahmen aus einem Video), die nur unmerkbar unterschiedlich sind, lässt sich berechnen, welche Pixelgruppe auf einer Aufnahme der Pixelgruppe auf der zweiten Aufnahme entspricht. Diese Punkte werden zum Grundbaustein bei der Umgebungserkennung.
- Motion Tracking: Die Fähigkeit, die Lage und Position des Gerätes in einer realen Szenerie zu bestimmen
- Environmental Understanding: Abschätzung von horizontalen Flächen (Polygon bei ARCore, Quader bei ARKit) und ihren Größen. Diese hilft dabei mit einer verhältnismäßig großen Genauigkeit bis auf Millimeter das Maß der realen Welt zu erfassen, auf das die virtuellen Objekte angewandt werden können.
- Light Estimation: Die Feststellung der Lichtquellenfarbe und der Lichtintensität zur Sicherstellung einer realistischen Abbildung von virtuellen Objekten in der Szenerie.
- User Interaction: Fähigkeit, die Koordinaten eines Punktes in der realen Welt auf Basis der Berührungsstelle (oder Richtung der Kamera) im Gerät zu bestimmen. Dadurch lassen sich die virtuellen Objekte direkt über den Bildschirm des Gerätes platzieren.
- Anchors: Die Flächen sind im realen Raum festgehalten, sodass sie im Einzelnen nicht miteinander verbunden sein müssen und trotzdem kontinuierlich dargestellt werden.
Neuheiten in den letzten Versionen
Bei ARCore 1.0 wurde das Aufspüren von Feature Points beschleunigt, es gibt noch mehr unterstützende Geräte und vor allem kam noch die Möglichkeit, texturierte Flächen im Allgemeinen aufzuspüren, dazu. Dadurch lassen sich schiefe Flächen oder auch Wände erfassen. Mit ARKit für iOS 11.3 können sogar vertikale Flächen aufgespürt werden, es gibt einen Autofokus und die Fähigkeit der Erkennung von im Vorhinein definierten Bildern.
Einschränkungen der AR-Technologien
In erster Linie wird AR durch die unterstützenden Geräte eingeschränkt.
ARKit (iOS) | ARCore (Android) |
---|---|
– iPhone (SE, 6s, 7, 8, Plus, X) – iPad Pro – iPad (2017) | – Asus Zenfone AR – LG (V30, V30+) – Google Pixel (1, 2, XL) – OnePlus 5 – Samsung Galaxy (S7, S7 Edge, S8, S8+, Note 8) |
ARKit erfordert iOS 11+ und einen A9-Prozessor oder neuer, ARCore braucht mindestens Android 7.
- Lichtmangel oder ein verzerrtes Bild (in Folge einer schnellen Bewegung der Kamera) verschlechtert die Qualität des Aufspürens, denn die Feature Points sind schwieriger erkennbar.
- Reflektierende Flächen oder Flächen mit wenig Details haben fast keine Feature Points, weswegen eine texturierte Oberfläche prinzipiell besser geeignet ist.
- Das Erfassen von komplizierteren Szenerien wie zum Beispiel Treppen, gekippten Flächen und Ähnlichem ist bei den genannten SDKs derzeit in einer noch viel zu frühen Entwicklungsphase.
- Das Erfassen der Lichtrichtung ist bisher nicht möglich.
- Zur Lösung dieser Probleme gibt es bisher keine hilfreichen Angebote von Seiten der SDK-Lieferer. ARKit experimentiert mit der Erkennung von im Vorhinein bekannten Bildern, aber allgemein ist es besser auf andere Bibliotheken zu setzen, wie zum Beispiel OpenCV (eine der beliebtesten Bibliotheken zur Bearbeitung von Bildern).
Die Erlösung durch Unity
Beide SDKs lassen sich nicht nur nativ verwenden, sondern auch in Verbindung mit Werkzeugen, die eine Bearbeitung der 3D-Umgebung einfacher machen. Eines von diesen ist zum Beispiel Unity 3D. Dank ihm lässt sich die virtuelle Umgebung deutlich einfacher kreieren als auf Basis eines nativen Codes auf der Endplattform. In Unity lässt sich ein Code schreiben, den man dann auf beiden Plattformen laufen lassen kann. Es gibt dabei allerdings gewisse Einschränkungen, da man die Durchschnittsmengen der Eigenschaften extrahieren muss, die bei den Plattformen übereinstimmend sind. Nur so passt der Code für multiple Plattformen und ist einzigartig.
Zu den markantesten Unterschieden beider Technologien gehört das Aufspüren von Flächen. ARCore definiert Flächen als diskrete Konvex-Polygone (Vielecke), die sich an die Krümmungen der Umgebung einfach anpassen lassen; ARKit detektiert lediglich Vierecke (ab der Version ARKit 1.5 auch Polygone). Damit man den Flächendetektor auf beiden Plattformen starten könnte, ist es notwendig eine Flächendetektion zu verwenden, die auf beiden Plattformen realisierbar ist, also die Viereck-Detektion. Für diesen Fall kann man beide Plattformen durch ARInterface abstrahieren, wodurch man mit einem SDK arbeiten kann, das im Hintergrund die Technologien von ARKit für iOS oder ARCore für Android verwendet. ARInterface bietet auch die Möglichkeit, die Apps direkt vom Computer aus abzustimmen, ohne den Code am Endgerät laufen zu lassen, was im Endeffekt Zeit beim Debuggen spart.
Beispiel eines AR-Projekts
Als ein anschauliches Beispiel für den Aufwand eines AR-Projekt, das in Unity geschrieben wurde, wurde hier das bewegte Modell BB8 ausgewählt (ein Roboter aus Star Wars).
Wie oben beschrieben kann das SDK horizontale Flächen erfassen, also den Boden, einen Tisch usw. Dadurch gewinnen wir eine Vorstellung über die aktuelle 3D-Szenerie und ihre Maße. Dass diese bei Bewegung der Kamera nicht verloren geht, wird durch ein ARInterface gesichert, das dazu Informationen aus dem ARKit oder ARCore verwendet.
Für die Interaktion des Benutzers mit der Umgebung wurde ein “Peiler” geschaffen. Damit das Framework die Flächen erfassen kann, braucht es genügend Feature Points, die man mit einer horizontalen Kamerabewegung um die angeforderte, zum Erfassen bestimmte Fläche herum gewinnt. Sobald die Fläche erfasst wird, werden Grundlagen für das Koordinatensystem festgelegt, das für die geschaffene 3D-Welt benötigt wird. Der Peiler fixiert sich nach der Flächendetektion auf dem Boden.
Sobald wir die Position auf dem Boden kennen, können wir dort ein beliebiges Objekt hinlegen. In Unity kann fast alles importiert werden. Zur Vereinfachung genügen uns in diesem Fall Grundformen (Kugel: Körper, Halbkugel: Kopf, Zylinder: die Antennen). Der Vorteil von Unity sind hier zum Beispiel vorimplementierte physikalische Eigenschaften, die sich den Objekten zuweisen lassen. Weil wir wollen, dass sich der Roboter auf dem Boden bewegt, ist die Gravitation eine wichtige Kraft. Auf dem Boden muss man eine virtuelle Platte ausspannen (kann unsichtbar sein), die als ein so genannter Collider dient und auf der sich der Roboter bewegen kann. BB8 ist eine Maschine mit einer kugelförmigen Grundlage, die sich in Fahrtrichtung wälzt. Auf der Kugel sitzt der Kopf des Roboters in Form einer Halbkugel mit zwei Antennen. Angesichts der Einfachheit der Konstruktion lässt sich die Wälzbewegung durch eine Rotation der Basis in einem realistischen Tempo in Abhängigkeit von der Länge der Trajektorie simulieren.
Die Berechnung der Bewegung des Kopfes erfordert die Anwendung elementarer Algebra (Winkel der Neigung in Richtung der Bewegung in Abhängigkeit von der Geschwindigkeit), wobei die Arbeit mit der Masse (Gewicht) der einzelnen Roboter-Teile für die Imitation einer realistischen Bewegung unbedingt notwendig ist. Sie muss bei allen kinetischen Bewegungen betrachtet werden. Wer etwas Zeit investiert, kann hier ein ziemlich realistisches Verhalten erzielen. Wir haben den Roboter in Ackee-Farben mit einigen Bildern eingekleidet.
Die Entwickung der AR-Applikationen ähnelt im Grunde der Herstellung der eigentlichen virtuellen Umgebung. Dank der beschriebenen Technologien ARKit und ARCore lässt sich ein beträchtlicher Anteil der Low-Level-Arbeit auf ein absolutes Minimum reduzieren. Durch einen ARInterface-Aufbau kann man sich die Arbeit an der Entwicklung deutlich einfacher machen – allerdings besteht hierbei die Einschränkung, dass das finale Ergebnis (eine App) nur diejenigen Eigenschaften nutzen kann, die beide SDKs bieten. Ansonsten muss für die SDKs zwingend ein spezieller Code geschrieben werden. Für die Bearbeitung von komplizierteren Szenerien, Erkennung von Objekten usw. ist es darüber hinaus besser, auch mit anderen Bibliotheken zu arbeiten, die jedoch keine so geradlinige Implementierung bieten und mit ihrer Komplexität ein eigenständiges Studienfach darstellen.
Falls es Sie beeindruckt, was wir in erweiterten Realitäten erschaffen können, freuen wir uns, wenn Sie sich mit Ihrer AR-Projektidee an uns wenden. Wir sind Experten für die App Entwicklung, UX Design und Digitalisierung von Unternehmensprozessen.