Mittwoch, 10. März 2010
Jetzt neu: Onlinezugriff auf das digitalisierte Archiv des Entwickler Magazins + Sonderhefte für nur 1,50 € mehr im Monat

Artikel

Februar 2008 | Artikel

Realitätserweiterung

(Link zum Artikel: http://www.entwickler-magazin.de/cod//001529)

Augmented Reality verknüpft die virtuelle mit der realen Welt

Text: Michael Kuhn, Jan Schlink
Die Zeiten, in denen die "erweiterte Realität" eine utopische Spielerei war, sind vorbei. Zugegeben, Arnold Schwarzeneggers immersive Sonnebrille im Film "Terminator" war cool. Aber es bleibt fraglich, ob wir so eine "Killer-Applikation" – im wahrsten Sinne des Wortes – überhaupt brauchen oder wollen. Denn was heutzutage mit Augmented Reality (siehe Definition am Ende des Artikels) schon alles möglich ist, sei es in der Industrie, in der Medizin oder bei Location-based Services, sollte genügen, um der Kreativität freien Lauf zu lassen.

Genau wie die Virtual Reality der 90er Jahre hat Augmented Reality (AR) ihren eigenen kleinen Hype-Cycle durchgemacht. Beflügelt von der Vorstellung, über Head-Mounted-Displays (HMD), Datenhelme, die virtuelle Informationen direkt in das Blickfeld eines Menschen einblenden, die Sicht der Dinge und den Lauf der Welt zu verändern, wurde die Revolution der Computervision ausgerufen. Die unbegrenzten Möglichkeiten, die sich durch eine Echtzeit-Erweiterung der Realität um virtuelle Informationen am Horizont abzeichneten, wurden jedoch schnell von einer ganz anderen Realität eingeholt. Hardware-Latenz könnte man wohl dazu sagen. Denn die Anzeigegeräte hinken der Geschwindigkeit der Software-Entwicklung nach wie vor hinterher. Außer zumeist unheimlich anmutenden Prototypen gibt es bis heute kein stabiles, leichtes und vor allem serienfähiges System, bei dem Augmented Reality über HMDs eingesetzt wird. Aus der Traum?

Reality Check
Keineswegs, denn AR gehört laut dem renommierten Marktforschungsinstitut Gartner nach wie vor zu den zehn wichtigsten strategischen Technologien weltweit – auch für 2008. In Bezug auf das so genannte "Real World Web", bei dem virtuelle Informationen aus dem Internet in den jeweiligen zeitlichen oder räumlichen Kontext eines mobilen Nutzers eingebunden werden, kann AR eine gewichtige Rolle als Querschnittstechnologie spielen. Denn es gibt mobile Geräte, bei denen die Hardware-Entwicklung aufgrund des gigantischen Markts sehr schnell fortschreitet. Handys werden in absehbarer Zukunft mit AR-Features ausgerüstet sein. Ein Handy-Navigationssystem beispielsweise, das Informationen wie zum Beispiel eine Google-Map, Sehenswürdigkeiten oder Veranstaltungshinweise direkt innerhalb der realen Welt anzeigt, wird die Power von Augmented Reality recht bald auf die Straße bringen.
Und jetzt?
Neben dem Zukunftsszenario "Mobile AR" gibt es jedoch schon heute Szenarien, in denen die erweiterte Realität produktiv zum Einsatz kommen kann. So stand auch die diesjährige ISMAR (International Symposium on Mixed and Augmented Reality) unter dem Motto, den aktuellen Einfluss von Augmented Reality auf Industrie und Handel aufzuzeigen. Beispiele dafür sind:

  • AR für die industrielle Planung und Fertigung: in der Automobilindustrie werden Fertigungsstraßen mit virtuellen Modellen überlagert und dadurch effizienter geplant oder Techniker mit virtuellen Informationen unterstützt.
  • Pervasive Gaming und immersives Marketing: Spiele werden in die reale Umgebung integriert oder virtuelle Produkte und Zusatzinformationen in der Umwelt des Kunden angezeigt.
  • AR in den Bereichen E-Learning und Crossmedia: die Technologie erlaubt intuitive und spontane Interaktion mit 3D-Inhalten. Daher ist Augmented Reality besonders geeignet für Kinderbücher oder eine anderweitige Vereinigung von klassischen Printmedien und 3D-Anwendungen.

Fest steht: Augmented Reality funktioniert auch sehr gut über andere Anzeigesysteme als HMDs. In einigen Bereichen sogar viel besser. Denn für den Vertrieb von Endverbraucheranwendungen ist eine Basierung auf Standardkomponenten sogar essentiell. Kein Mensch kauft sich für 10.000 Euro einen "Datenhelm". Eine Webcam wohl schon eher und ein PC steht in fast jedem Haushalt. AR ist auf dem Sprung zur Massentauglichkeit. Das gilt auch für die Entwicklung. Denn es gibt inzwischen sogar ein SDK, mit dem nahezu jeder Augmented-Reality-Anwendungen selber entwickeln kann.

Augmented Reality einfach gemacht
Zur lagegerechten Überlagerung von 3D Inhalten mit der Realität werden in der Augmented Reality so genannte Trackingverfahren eingesetzt. Eine Kamera nimmt dabei die Realität auf und das Trackingsystem berechnet zum Beispiel anhand optischer, in der Szene sichtbarer Marker die Position und die Orientierung der Kamera.

Die Firma Metaio bietet das Augmented Reality Software Development Kit Unifeye SDK in der Version 3.0 an. Darin können unter anderem nur die mitgelieferten 3D-Modelle geladen werden. Generell lassen sich mit Hilfe dieses SDKs in kurzer Zeit unterschiedliche Augmented-Reality-Anwendungen realisieren, da der Funktionsumfang des SDKs viele gängige Anforderungen in diesem Umfeld abdeckt und die Funktionalität über eine leicht zu integrierende ActiveX-Komponente zur Verfügung steht. Für die Entwicklung eigener Anwendungen mit dem Unifeye SDK kann zum Beispiel auf Visual Studio 2005 zurückgegriffen werden.

Unifeye SDK-Architektur
Wie in der folgenden Abbildung dargestellt ist, wird der Funktionsumfang des SDKs über eine ActiveX-Schnittstelle bereitgestellt. Die ActiveX-Komponente vereinigt dabei die Hauptkomponenten Capturing, Tracking und Rendering.

Die Capture-Komponente dient der Ansteuerung von Bildquellen, wobei Bilder von Digitalkameras, Videodateien und Live-Bilder beispielsweise von Webcams verwendet werden können. Außerdem dürfen die Eigenschaften wie Bildgröße oder Framerate angeschlossener DirectShow-Kameras verändert werden. Die Capture-Komponente verfügt zudem über einen Framedropping-Mechanismus, der bei drohender Überlastung des Systems (zum Beispiel zu hohe Auflösung bei schwachem PC) automatisch einzelne Kamera-Frames verwirft.

Eine weitere Funktionalität der Capture-Komponente ist die Einrechnung von so genannten intrinsischen Kameraparametern in die Bilder. Diese Parameter beschreiben im Wesentlichen die Brennweite der verwendeten Kamera sowie deren Verzerrungswerte. Insbesondere für ein genaues Tracking und eine genaue Überlagerung sind diese Parameter wichtig. Zur Ermittlung der Kameraparameter verfügt Unifeye über ein Werkzeug zur Kamera-Kalibrierung (Sextant), das diese in einer XML-Datei speichert, die anschließend im Unifeye SDK verwendet werden kann.

Die Tracking-Komponente dient der Ansteuerung verschiedenster Sensoren beziehungsweise Trackingsysteme. Dabei kann es sich sowohl um optische Trackingsysteme, zum Beispiel Markertracking oder Infrarot-Tracking, als auch um nicht-optische Trackingsysteme wie Beschleuningungssensoren handeln. Das am einfachsten einsetzbare Verfahren ist das Markertracking, das spezielle Muster als Marker verwendet, die auf ebenen Flächen in der Umgebung angebracht werden und einfach auf Papier auszudrucken sind.

Jeder Marker verfügt über eine ID, die in den Matrixcode des Markers codiert ist. Das optische Markertrackingsystem erkennt in dem von der Capture-Komponente bereitgestellten Bilddatenstrom diese optischen Marker und berechnet die Position und Rotation (Pose) der Kamera relativ zu den Markern. In der Standardkonfiguration definiert jeder Marker ein Koordinatensystem. An diese Koordinatensysteme können später geladene 3D-Geometrien gebunden werden.

Die Rendering-Komponente erhält den Bilddatenstrom aus der Capture-Komponente. Gleichzeitig erhält sie aus der Tracking-Komponente die berechnete Kamerapose relativ zu allen sichtbaren und definierten Koordinatensystemen beziehungsweise Markern. 3D-Geometrien können geladen und an Koordinatensysteme gebunden werden. Intern verwaltet ein Szenengraph die geladenen Geometrien, die Trackingdaten und das aktuelle Bild. Die Rendering-Komponente kann nun basierend auf diesen Daten die Bilddaten inklusive der Geometrien rendern, wobei die Geometrien aufgrund der berechneten Trackingdaten lagegerecht in die Bilddaten eingefügt werden. Das gerenderte Bild wird anschließend auf dem Bildschirm ausgegeben, und das mit virtuellen Objekten überlagerte reale Bild wird dargestellt.

Einsatzgebiete
Augmented Reality hat vielfältige Einsatzgebiete im industriellen, kommerziellen und Endverbraucherumfeld. Im industriellen Umfeld können wie beschrieben beispielsweise bestehende Fertigungsstrassen auf die Verträglichkeit mit neuen Produktmodellen getestet werden.
Auch im Endkundenbereich finden sich insbesondere im Bereich der Produktpräsentation diverse Anwendungsgebiete. Im Folgenden werden die zwei Szenarien Einrichtungsplaner und Magic Book beispielhaft verwendet, um die Umsetzung solcher Anwendungen mit dem Unifeye SDK zu erläutern.

Interaktive Produktpräsentation von Möbeln
Stellen Sie sich vor, Sie planen für Ihr Wohnzimmer die Anschaffung neuer Möbelstücke. Problematisch dabei ist, dass Sie ohne die neuen Möbel direkt aufzubauen, schwer abschätzen können, ob sie zur bestehenden Einrichtung passen. Durch den Einsatz von Augmented Reality bietet sich allerdings die Möglichkeit, die Möbel schon vor dem Kauf in Ihr Wohnzimmer einzublenden. Es muss lediglich ein Marker ausgedruckt und im Zimmer platziert werden. Anschließend schießen Sie mit einer Digitalkamera Aufnahmen des Raumes mit Marker.

Diese Beispielanwendung kann auf Basis des Unifeye SDK einfach und schnell umgesetzt werden. Sie greifen hierbei auf die Integration in eine HTML/JavaScript-Webseite zurück, wobei die Unifeye SDK ActiveX-Komponente direkt (unter Verwendung des Internet Explorers) verwendet werden kann. Die ActiveX-Komponente wird dabei über die ClassID integriert (Listing 1).

Listing 1: ActiveX integrieren

  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <object id="UnifeyeCtrl" height="480" width="640"
  6. classid="clsid:26FC2BE0-A1CC-4013-B780-E76695CFA82F" viewastext>
  7. </object>
  8. </body>
  9. </html>

Einzelne Funktionen der ActiveX-Komponente können dann direkt beispielsweise über JavaScript angesprochen werden. Zum Laden eines Bildes mit Marker wird die Unifeye SDK-Funktion setImageSource(string pathToFile) verwendet.

Listing 2: Bild Laden Funktionalität

  1. <html>
  2. <head>
  3. …<script type="text/javascript">
  4. ……function setImageSource(imageSource)
  5. ……{
  6. ………UnifeyeCtrl.setImageSource(imageSource);
  7. ……}
  8. </script>
  9. </head>
  10. <body>
  11. <object id="UnifeyeCtrl" height="480" width="640"
  12. classid="clsid:26FC2BE0-A1CC-4013-B780-E76695CFA82F" viewastext>
  13. </object>
  14. …<ul>
  15. …<li>
  16. …Input file: <input type="file" name="txtSetImageSource" size="30"><br />
  17. …<a href="javascript:setImageSource(txtSetImageSource.value)">setImageSource(file)
  18. </a>
  19. …</li>
  20. …</ul>
  21. </body>
  22. </html>

Listing 2 zeigt ein Beispiel, das dem Benutzer erlaubt, ein Bild auszuwählen und zu laden. Die JavaScript-Funktion wird dabei durch Anklicken eines HTML-Links aufgerufen. Um das Seitenformat des Bildes korrekt darzustellen, muss dabei gegebenenfalls die Darstellungsgröße des ActiveX-Controls (width, height) an das Seitenverhältnis des geladenen Bildes angepasst werden. Die Dimensionen des geladenen Bildes können mit getPixelSizeImageSourceX() und getPixelSizeImageSourceY() ermittelt werden. 3D-Geometrien werden im VRML97-Format verarbeitet, wobei die Demoversion lediglich die mitgelieferten Modelle laden kann. Zum Laden einer Geometrie existieren grundsätzlich zwei Funktionen:

  • long loadGeometry(string path) lädt die angegebene Geometrie und bindet sie an das erste Koordinatensystem (in der Standardkonfiguration der Marker mit der ID1)
  • long loadDragableGeometry(string path), die zusätzlich ein Verschieben der Geometrie mit der Maus erlaubt, wobei standardmäßig in der x-y Ebene verschoben wird

Beide Funktionen liefern im Erfolgsfall eine ID größer gleich Null zurück, über die die Geometrie später in der Szene angesprochen werden kann. Um Geometrien an andere Koordinatensysteme beziehungsweise Marker zu binden (wenn diese sichtbar sind) wird die Funktion bindSceneToCos(long geometrieID, long COSID) verwendet. Geometrien können durch Aufrufen der Methode unloadGeometry(long id) wieder aus der Szene gelöscht werden (Listing 3).

Listing 3: Geometrien laden und löschen

  1. <script type="text/javascript">
  2. …function loadGeometry(geometryPath)
  3. …{
  4. ……var loadedGeometryID = UnifeyeCtrl.loadDragableGeometry(geometryPath);
  5. ……if (loadedGeometryID == -1)
  6. ………alert('Could not load geometry: ' + geometryPath);
  7. ……else
  8. ………alert('Geometry ID is: ' + loadedGeometryID);
  9. …}
  10. …function unloadGeometry(geometryID)
  11. …{
  12. ……UnifeyeCtrl.unloadGeometry(geometryID);
  13. …}
  14. <script>

Die Eigenschaften geladener Geometrien können zur Laufzeit verändert werden. Dazu zählt zum Beispiel die Rotation des Modells. Diese wird wie in VRML üblich durch die Definition einer Rotationsachse und des Winkels im Bogenmaß definiert. Ein Aufruf der Funktion setMoveRotation(1, 0, 0, 1, 1.57) setzt die Rotation des Objektes mit der ID 1 auf einen Wert von Pi/2, wobei um die z-Achse rotiert wird. Eine sehr mächtige Funktion zur Geometriemanipulation ist setVRMLField(). Diese erlaubt das Verändern definierter Knoten der geladenen Geometrie. Dazu müssen die Knoten vorher in der VRML-Datei per DEF eindeutig bezeichnet worden sein. In den mitgelieferten Möbelmodellen können zum Beispiel die Texturen über das VRML-Feld: TEXTURE1 verändert werden (siehe Listing 4).

Listing 4: Verändern von Texturen

  1. <script type="text/javascript">
  2. function setTexture(geometryID)
  3. {
  4. ……UnifeyeCtrl.setVrmlField(geometryID, "TEXTURE1", "url", "./textur1/03.jpg");
  5. }
  6. </script>
  7. Listing 4
  8. Aktivieren der ersten Kamera
  9. private void button1_Click(object sender, EventArgs e)
  10. {
  11. int numOfCams = axAS_AR_Control1.getNumberOfCamsAvailable();
  12. if (numOfCams > 0)
  13. {
  14. axAS_AR_Control1.activateCamera(0);
  15. }
  16. }

Zur Abfrage, welche Knoten in der Geometrie mittels DEF bezeichnet sind, wie sie benannt sind und von welchem Typ sie sind, werden die Funktionen getNumberOfNamedNodes(), getNameOfNode() und getTypeOfNode() verwendet.

Im Internet kann eine Online-Beispielanwendung des Einrichtungsplaners betrachtet werden. Diese verwendet eine besonders schlanke Variante des Unifeye SDK sowie einen automatischen Installer.

Magic Book: Reales Buch mit virtuellen Inhalten
Ein weiteres beliebtes Szenario ist das sogenannte Magic Book. Dabei wird ein reales Buch mit 3D-Inhalten angereichert. Im einfachsten Falle werden auf die Buchseiten Marker aufgebracht, die dann zum Beispiel von der Webcam des Benutzers erfasst und für die lagegerechte Einblendung von 3D-Geometrien in die Buchseite sorgen. Für die Erstellung einer solchen Anwendung kann das Unifeye SDK beispielsweise in eine C#-Forms-Anwendung integriert werden, was im Folgenden unter Verwendung von Visual Studio 2005 erläutert wird.

Zur Integration muss das Unifeye-ActiveX-Control zunächst zur Toolbox hinzugefügt werden (rechte Maustaste auf die ToolBox, Element auswählen, COM-Steuerelemente/AS_AR_Control Light Plus anhaken). Dann kann das Unifeye-Icon per Drag&Drop auf ein Windows-Form gezogen werden.

Über die Funktionen long getNumberOfCamsAvailable() wird die Anzahl der verfügbaren DirectShow-kompatiblen Kameras am System zurückgemeldet. Eine Kamera kann dann per activateCamera(long index) aktiviert werden, wobei index nullbasiert zu verstehen ist. Diese Funktionalität kann beispielsweise auf den Eventhandler eines Buttons gelegt werden. Durch Aufrufen der Funktionen showPinPropertiesOnActivatedCamera() und showPropertiesOnActivatedCamera() können außerdem die Eigenschaftsseiten der aktivierten Kamera aufgerufen werden. Darin können zum Beispiel Auflösung und Framerate angepasst werden. Auch bei Kameras gilt, dass für eine genaue Überlagerung eine Kamerakalibrierung verwendet werden sollte. Diese wird mit dem Sextant-Werkzeug erstellt und mit der Funktion loadStandardCameraCalibration() geladen.

Um Geometrien bei Programmstart zu laden, empfiehlt sich folgendes Vorgehen: Der Load-Event des Forms sollte abonniert werden: this.Load += new System.EventHandler(this.Form1_Load);

Im Eventhandler kann dann der Application.Idle event abonniert werden, der das erste Mal auftritt, nachdem das Laden und Initialisieren der Anwendung abgeschlossen ist:

Listing 5

  1. private void Form1_Load(object sender, EventArgs e)
  2. {
  3. Application.Idle += new EventHandler(Application_Idle);
  4. }

Beim ersten Auftreten des Idle-Events wird die Abonnierung des Events wieder rückgängig gemacht. Außerdem werden dann die Geometrien geladen und an Marker oder Koordinatensysteme gebunden.

Einige der mitgelieferten Modelle benötigen für eine korrekte Darstellung eine Grafikkarte, die mindestens das DirectX Shader Model 3.0 unterstützt. Zudem muss die Render-Komponente zuvor in den DirectX-Modus geschaltet werden: axAS_AR_Control1.setRenderMode("DirectX");

Anschließend ist ein Neustart der Anwendung nötig, um die Render-Komponente neu zu initialisieren.

Fazit
Es wird noch ein Weilchen dauern, bis Augmented Reality ein bekannter Begriff ist, bis Touristen audiovisuell unterstützte Stadtspaziergänge mit ihrem Handy erleben können oder Chirurgen mit schlanken, leistungsfähigen Datenbrillen alle relevanten Informationen in ihrem Arbeitsfeld angezeigt bekommen. Oder bis Mütter aufatmen, weil ihre Kinder zum Spielen endlich wieder an die frische Luft gehen. Nichtsdestoweniger ist aus der Invention Augmented Reality längst eine Innovation geworden. Es gibt funktionsfähige Systeme und Produkte, die das Beste aus zwei Welten vereinen. Und wenn die Entwicklung so weiter geht, wird es ganz sicher noch viel zu entdecken geben. Einen Hype braucht es dazu gar nicht.


Definition: Augmented Reality (AR)

Augmented Reality (deutsch: "erweiterte Realität") ist eine Form der Mensch-Maschine-Interaktion, bei der menschliche Sinneswahrnehmungen in Echtzeit mit Computermodellen überlagert werden. Azuma definiert ein AR-System mit folgenden charakteristischen Merkmalen:

  • Kombination von realer und virtueller Welt
  • Echtzeitfähigkeit und Interaktivität
  • Registrierung in drei Dimensionen
Ein AR-System besteht aus fünf wesentlichen Komponenten: ein Rechner mit Software inklusive Rendering-Engine, ein Trackingsystem, die Aufnahmesensorik, Eingabe- oder Interaktionsgeräte und ein Anzeigesystem mit Display.


Jan Schlink arbeitet im Marketing und Michael Kuhn in der Entwicklung bei metaio in München. Sie interessieren sich aus jeweils völlig unterschiedlichen Blickwinkeln für Augmented Reality. Was sie eint, ist die Begeisterung für die faszinierenden Möglichkeiten dieser Technologie.

  1. metaio GmbH
  2. Bitmanagement Software GmbH
  3. Ronald T. Azuma: "A survey of Augmented Reality"
  4. VRML97 Standard
  5. Online-Einrichtungsplaner mit AR
  6. Magic-Book-Beispiel

Kommentare