Augmented Reality mit Xamarin und Wikitude

Augmented Reality (AR) oder auch die erweiterte Realität vermischt Realität und virtuelle Inhalte. Im Gegensatz zur virtuellen Realität, bei welcher der Nutzer komplett in eine virtuelle Welt eintaucht, steht bei der erweiterten Realität das Überlappen von Realität mit zusätzlichen Informationen im Vordergrund. Daraus ergeben sich zum Beispiel komplexere Anforderungen an die Positionsbestimmung bzw. die Verfolgung der Position.

AR auf dem Smartphone

Auf mobilen Endgeräten, wie dem iPhone, ist die erweitere Realität bereits 2009 angekommen und erfährt durch wachsende Hardwarefähigkeiten immer mehr Möglichkeiten. Da aber für jedes mobile Betriebssystem eine andere Implementierung einundderselben AR Anwendungen notwendig ist, befasst sich dieser Artikel mit den Möglichkeiten der Implementierung einer AR Anwendung, mittels der Multi-Plattform Entwicklungsumgebung Xamarin.

teaserXamarin

Die Entwicklungsumgebung Xamarin ist eine auf Mono und somit auf der Programmiersprache C# basierendes Software Development Kit (SDK). Xamarin ermöglicht das Entwickeln von Anwendungen (Apps) für die Plattformen Microsoft Windows Phone, Apple iOS und Google Android. Apps die mit Xamarin geschrieben worden sind, können auf alle nativen Funktionen der jeweiligen Plattform zugreifen.

Der Programmcode wird bei iOS in nativen Objectiv-C Code umgewandelt und übersetzt. Bei Android wird die App compiliert und mit Hilfe einer Mono Laufzeitumgebung ausgeführt. Windows Phone nutzt C# als native Programmiersprache und kann die Anwendung daher direkt ausführen. Der große Vorteil dieses Vorgehens ist, dass mit Xamarin entwickelte Programme auf gleichem Funktions- und Leistungsniveau, wie nativ entwickelte Programme sind.

Die Entwicklungsumgebung steht unter einer kommerziellen Lizenz zur Verfügung. Die Kosten variieren je nach Leistungsumfang. Für Studenten wird seit Ende 2014 eine kostenlose Lizenz mit dem Leistungsumfang „Indi“ angeboten.

Xamarin.Forms

Um mit nur einem Quellcode einheitliche Benutzeroberflächen zu erstellen, bietet Xamarin die Möglichkeit an „Xamarin.Forms“ einzusetzen. Dadurch hält eine App das spezifische Betriebssystemlayout ein und ist dabei trotzdem über alle Plattformen portabel. Dieses Feature erlaubt es somit eine für den Nutzer im Layout gewohnt dargestellte App zu kreieren.

Xamarin.Forms ist vom Funktionsumfang nicht so mächtig wie die native Programmierung einer Benutzeroberfläche. Es genügt aber um alle Basiselemente der Benutzeroberfläche zu erzeugen. Die App kann später um systemspezifische Funktionen erweitert werden. Hierfür sind dann extra Codepfade, die sogenannten PageRenderer, je Plattform nötig.

Augmented Realtity Frameworks

Es existiert eine Vielzahl an AR Frameworks. Diese auch Software Development Kit genannten Programme, vereinfachen die Integration von Funktionalitäten für die Entwickelung einer AR Anwendung. So übernehmen die SDKs den Umgang mit Webcam oder Kamera sowie das Verfolgen im Raum. Einige SDKs bieten auch weitere Tools an um eigene Inhalte, wie 3D Objekte, in der virtuellen Realität zu platzieren und zu verarbeiten.

Auf der Internetplattform „SocialCompare“ werden in einer ausführlichen Tabelle aktuell 69 verschiedene Frameworks gelistet. Die gelisteten Frameworks bieten unterschiedliche Funktionsumfänge und Zielplattformen. So sind einige für mobile Betriebssysteme wie Android oder iOS ausgelegt und andere für Windows oder OSX Systeme.

Wikitude

Das Wikitude Framework ist eine Augmented-Reality-SDK des österreichischen Unternehmens Wikitude GmbH. Das Framework kann standortbezogene AR Objekte mit Hilfe des Bildschirms eines Mobilgerätes anzeigen. Dabei wird die Position über GPS, Kompass und Bewegungssensor berechnet. Zusätzlich beherrscht das Wikitude AR-SDK die markerbasierte AR. Hierzu können nicht nur QR Codes sondern auch komplexe Bilder als Marker verwendet werden.

Wikitude besitzt aktuell als einziges Framework die Unterstützung für Xamarin. Das SDK wird unter einer kommerziellen Lizenz angeboten. Eine kostenlose Trail Version sowie eine kostenlose Studentenversion ist auf Anfrage verfügbar.

Wikitude Project Files

Dieses Format wird vom Wikitude Framework genutzt, um die AR Funktionalität zu implementieren. Inhalt eines Projekt Files sind die Initialisierungs- HTML Datei, der dazugehörige JavaScript, die Objekte, die in die reale Welt eingefügt werden sollen und der Marker im Wikitude eigenem Format. Ein einmal erzeugtes Project File benötigt zum Ausführen keine Internetverbindung.

Die Projektdateien können mit Hilfe der Webanwendung Wikitude Studio erzeugt werden.

iBeacon

Der iBeacon Technologiestandard wurde durch Apple begründet. Ein so genanntes iBeacon ist ein kleiner Bluetooth 4.0 Low Energy Sender, welcher ein dem iBeacon Standard entsprechendes Signal sendet. Die Abbildung von hugeinc.com zeigt den Inhalt eines Signals, welches alle 50ms bis 10s gesendet wird, dargestellt. Die UUID ermöglicht die Identifizierung eines iBeacons. Außerdem können durch das Major- und Minor-Feld des Signals weitere Informationen übertragen werden. Die Kommunikation geschieht dabei immer nur in eine Richtung vom iBeacon zum Empfänger.

Um die Technologie nutzen zu können muss, ein Bluetooth Low Energy-fahiges Smartphone ab iOS7 oder Android 4.3 zur Verfügung stehen.

Beispielanwendung

Im Folgenden wird eine Multi-Plattform AR App vorgestellt, die mittels Xamarin.Forms und dem Wikitude SDK entwickelt wurde. Die Positionsbestimmung innerhalb von Gebäuden ist durch iBeacon’s realisiert.

Der Quellcode für die Demoanwendung kann auf Github eingesehen werden.

Szenario

Das Programm soll in einer Galerie die darin ausgestellten Fotografien um zusätzliche Informationen bereichern. Der Nutzer wird am Eingang der Galerie darauf hingewiesen, dass eine App für iOS (Version ≥7) oder Android (Version ≥4.3) im seinem AppStore angeboten wird. Die App bereichert die ausgestellten Fotografien um zusätzliche Informationen. Zum Beispiel kann die Realität über das Display des Mobilgerätes um Bilder, Textbeschreibungen, Videoinhalte oder 3D Modelle erweitert werden. Die Fotografien sind alle mit einem iBeacons ausgestattet, welche der App mitteilen wie dicht sich der Nutzer an der jeweiligen Fotografie befindet. Startet der Nutzer die App und steht vor einer Fotografie, wird durch die Verknüpfung von iBeacon und Wikitude AR Inhalt die richtige Komponente innerhalb des Programms geladen. Dem Nutzer werden mittels der im Mobilgerät vorhandenen Kamera weitere Informationen auf dem Display, als Realwelt-Overlay angezeigt. Eine Interaktion mit den Inhalten ist durch Bewegen des Mobilgerätes oder durch Berühren der Objekte auf dem Display des Gerätes möglich.

Programmstruktur

Das im Folgenden ARArt genannte Programm ist wie in nachfolgender Abbildung aufgezeigt aufgebaut.

projectstruc

Die unterste Ebene von ARArt stellt der Xamarin.Forms- Bereich da. Dieser ist für die Benutzeroberfläche verantwortlich. Darauf folgen die Implementierungen für die iBeacon-Funktionalität und den Aufruf der Wikitude Bibliothek für iOS und Android. Anschließend folgen die nativen Implementierungen von Wikitude für die jeweilige Plattform. Die letzte Ebene ist das sogenannte Wikitude Project File. Es enthält den Marker sowie die Objekte, die der Realität virtuell hinzugefügt werden sollen.

Komponenten

Das Programm ARArt ist, wie im Teil zur Programmstruktur beschrieben, in mehrere Teilkomponenten unterteilt. Auf die wichtigsten Komponenten wird nachfolgend detailliert eingegangen.

Xamarin.Forms Komponente

In der Xamarin.Forms Komponente wird für alle Plattformen eine einheitliche Benutzeroberfläche definiert. Außerdem wird die Klasse Beacon mit ihren Eigenschaften erzeugt.

public class Beacon{
 public string Name{ get; set; }
 public string Uuid{ get; set; }
 public int Major{ get; set; }
 public int Minor{ get; set; }
 public double Accuracy{ get; set; }
 public int Rssi{ get; set; }
 public string Proximity{ get; set; }
 public Beacon(){}
 }

Das Layout beschränkt sich auf eine Aktivitätsanzeige für die Suche nach iBeacons bzw. Fotografien. Außerdem wird das Interface IBeaconLocater mit den Methoden: List GetAvailableBeacons(), void PauseTracking() und void ResumeTracking() definiert. Auf IBeaconLocater setzten später die plattformspezifischen Implementierungen auf.

 Screenshot_2015-02-15-13-19-01Screenshot_2015-01-22-17-28-22

Des Weiteren wird eine View generiert in der die Wikitude Komponente gestartet wird. Da dieses bei Android und iOS unterschiedlich ist, wird hier eine leere Klasse namens ARPage als Platzhalter erstellt, die im weiteren Verlauf durch native Views ersetzt wird.

Native Xamarin Komponenten

Um native Schnittstellen wie Bluetooth ansprechen zu können, muss in Xamarin ein Extracodepfad für das in Xamarin.Forms angelegte Interface IBeaconLocater je Plattform angelegt werden. Auch werden zur Anzeige der Wikitude Komponente jeweils eine unterschiedliche Implementierung benötigt, die durch die Klasse ARPage abgedeckt wird.

Xamarin.iOS

Es wird die Klasse BeaconLocateriOS erzeugt, in der sämtliche Logik zum Empfang von iBeacon Signalen untergebracht ist. Die Klasse implementiert das Interface IBeaconLocater.

Um die Wikitude Komponente anzeigen zu können, muss ein eigener PageRenderer für die View ARPage definiert werden. Dieser erzeugt eine iOS spezifische View und verweist in dieser auf die Wikitude Komponente.

Xamarin.Android

Da unter Android der Umgang mit iBeacons etwas umständlicher ist, müssen zusätzlich zur Interfaceimplementierung BeaconLocaterAndroid noch die Klassen MonitorNotifer und RangeNotifer erstellt werden. Diese informieren den BeaconLocaterAndroid über Entfernungsänderungen vom Android Gerät zum iBeacons.

Auch hier muss die Wikitude Komponente durch einen eigenen PageRenderer für die View ARPage aufgerufen werden. Der ARPageRenderer benötigt außerdem eine passende Android Layout XML Datei die ebenfalls erzeugt werden muss.

Die Sicherheitsrichtlinien von Android schreiben vor, dass Berechtigungen beim Erzeugen der App in der AndroidManifest.xml Datei angegeben werden. Die App benötigt Zugriff auf Bluetooth, Kamera, Kompass, Internet, Ortung und Beschleunigungssensor um zu funktionieren. Außerdem muss der Service für die Erkennung von iBeacons innerhalb des Feldes eingetragen sein (siehe Codelisting).

<service android:enabled="true" android:name="com.radiusnetworks.ibeacon.IBeaconIntentProcessor">
<meta-data android:name="background" android:value="true"/>
 <intent-filter android:priority="1">
  <action android:name="com.PolyTJSearch.Android.DID_RANGING"/>
  <action android:name="com.PolyTJSearch.Android.DID_MONITORING"/>
 </intent-filter>
</service>

Wikitude Komponente

Die Wikitude Komponente muss über einen Verweis in die darüber liegende Komponente eingebunden werden. Ist dies geschehen, kann in der iOS oder Android Komponente die Klasse Wikitude.Architect aufgerufen werden. Diese Klasse wird initialisiert und kann anschließend Wikitude Poject Files verarbeiten.

Evaluation

Zur Evaluation wurden eine, um AR Inhalte zu erweiternde Fotografie, aus dem 1930 Jahren abfotografiert und das Digitalbild durch das Wikitude Studio in einen Marker umgewandelt.

maerkisches-museum-1

Als AR Inhalte wurden ein Bild, ein 3D Objekt, eine Schaltfläche und ein Text gesetzt.

Screenshot_2015-01-23-12-02-37

Der zu erkennende Marker wurde unter unterschiedlichen Bedienungen zuverlässig erkannt. So sind Tests in der Ausstellung mit dem Originalbild, Test mit dem durch einen Monitor angezeigten Digitalbild und Test mit einer einfachen schwarz/weiß Fotokopie des Originalbildes durchgeführt worden.

Außerdem wurde die App mit verschiedenen Geräten getestet. Zum Einsatz kamen ein Samsungs Galaxy Nexus, ein Acer Nexus 7, ein iPhone 6 und ein iPad mini. Auf allen Geräten arbeitete die App wie vorgesehen. Es zeigte sich aber, dass eine schlechte Abbildungsqualität der Kamera einen negativen Einfluss auf die Markererkennung hat.

Ergebnis

Nicht jedes Bild eignet sich als Marker. So sind Bilder mit harten Kanten besser geeignet als Gemälde mit fließenden Übergängen. Wie in Abbildung [fig:Augmented-Reality-Anwendung] zu sehen ist, verhält sich die ARArt Anwendung sehr stabil. Selbst die verwendete schwarz/weiß Fotokopie inkl. der Spiegelungen lassen die AR Objekte zuverlässig erscheinen. Es hat sich aber gezeigt, dass die Qualität der Kamera eine Rolle spielt. So funktioniert die AR Anwendung bei einem Asus Nexus 7 und iPad mini zuverlässiger, als bei einem mit schlechter Kamera ausgestatteten Samsung Galaxy Nexus.

Screenshot_2015-02-15-13-20-05

ARArt ist auf Android und iOS Geräten lauffähig und sieht dank des Einsatzes von Xamarin.Forms auf beiden Plattformen identisch aus.

Es zeigte sich, dass das Wikitude SDK ein sehr umfangreiches Werkzeug für Augmented Reality Anwendungen ist. Das SDK kann Texte, Bilder, Schaltflächen, HTML Widgets, 3D Modelle und Videos einbinden. Auch lassen sich mehrere Objekte gleichzeitig anzeigen. Mit den Objekten kann sogar in begrenzten Rahmen interagiert werden. Innerhalb der ARArt App ist zum Beispiel der Aufruf von Internetlinks möglich. Es ist jedoch nicht auszuschließen, dass in einer späteren Version, Aufrufe abfangen und anderweitig innerhalb der Anwendung auswertet werden können.

Die Integration in Xamarin ist aktuell etwas umständlich gestaltet. Schön wäre es wenn Wikitude Project Files direkt in Xamarin.Forms aufrufbar wären. Außerdem wird Windows Phone noch nicht von Wikitude innerhalb des Xamarin Frameworks unterstützt.

Edit 26.02.17: github link hinzugefügt.