Einrichten und Ausführen der WLT+ASA-Beispiele

Zusammenfassung

World Locking Tools for Unity (WLT) bietet ein stabiles Koordinatensystem, das auf einer lokalen Nachverfolgung (Tracking) basiert. In Kombination mit Azure Spatial Anchors (ASA) kann dieses stabile Koordinatensystem sitzungsübergreifend persistiert und geräteübergreifend freigegeben werden.

Dieses Video vermittelt Ihnen einen Eindruck davon, was Sie bei Ausführung des Beispiels erwarten können.

Was ist in diesem Beispiel enthalten?

Dieses Beispiel stellt Ressourcen und Skripts für folgende Aufgaben bereit:

  1. Konfigurieren des globalen Koordinatensystems von Unity in Bezug auf die physische Umgebung
  2. Veröffentlichen dieser Koordinatensystemkonfiguration in Azure mithilfe von Azure Spatial Anchors
  3. Abrufen der Daten aus Azure, um das Koordinatensystem in späteren Sitzungen oder auf anderen Geräten wiederherzustellen

Aufbau dieses Dokuments

  1. Setup: Installieren und Bereitstellen der Beispielanwendung
  2. Hinweise zum Ausführen der Anwendung sowie empfohlene Schritte
  3. Architekturbeschreibung der unterstützenden Skripts

Setup und getestete Versionen

Dieses Beispiel wurde mit folgenden Komponenten entwickelt und getestet:

  • Unity 2020.3.8f1
  • Azure Spatial Anchors (ASA) v2.9.0–v2.10.2
  • Mixed Reality Toolkit v2.7.2
  • World Locking Tools for Unity v1.4.1
  • FrozenWorldEngine v1.1.1

Sie können WLT und dieses Beispiel entweder über WLT releases .unitypackage oder über das Mixed Reality-Featuretool installieren. Bei der Installation über das Featuretool müssen Sie nicht nur die Abhängigkeit der WLT-Beispiele installieren (automatisch), sondern auch die Beispiele in Ihr Projekt importieren. Weitere Informationen finden Sie unter Installieren von WLT über das MR-Featuretool.

Installieren der Frozen World Engine-DLL im Projekt

Der erste Schritt besteht in der Installation der Frozen World Engine-DLL v1.1.1. Befolgen Sie diese Anweisungen, entweder mit NuGet for Unity oder mithilfe der Befehlszeile „nuget.exe“.

Installieren von ASA

Erstellen von Raumankerressourcen

In diesem Schnellstarthandbuch werden die Schritte zum Erstellen eines Azure-Kontos und der erforderlichen Raumankerressourcen erläutert. Die Konto-ID, die Kontodomäne und der Kontoschlüssel sind zum Ausführen des Beispiels erforderlich. Sie fügen diese in die entsprechenden Felder des Skripts „Spatial Anchor Manager“ für das SpacePinBinder-Objekt in der Szene ein. Es werden auch andere Authentifizierungsmethoden unterstützt, aber Konto-ID/Domäne/Schlüssel bieten die einfachste Möglichkeit für den Einstieg.

Felder für Anmeldeinformationen

Installieren des SDKs

Anschließend installieren Sie Azure Spatial Anchors v2.9.0 über eine der in dieser Anleitung beschriebenen Methoden. Ich habe zur Installation das MR-Featuretool verwendet.

Zusätzliche Einrichtung für die ungefähre Standortbestimmung

Zur Verwendung der ungefähren Standortbestimmung (engl. „Coarse Relocation“) ist bei einer Bereitstellung auf Android oder HoloLens2 ein zusätzliches Setup erforderlich.

Was ist die ungefähre Standortbestimmung?

Die ungefähre Standortbestimmung ist eine Technologie, mit deren Hilfe Sie in Ihrer aktuellen Umgebung nach zuvor erstellten Cloudankern suchen können. Ausführliche Informationen zur ungefähren Standortbestimmung finden Sie im Abschnitt Ungefähre Standortbestimmung der Azure Spatial Anchors-Dokumentation.

Dieses Beispiel veranschaulicht das Auffinden von Cloudankern, entweder mithilfe der ungefähren Standortbestimmung oder explizit über die Cloudanker-ID (GUID). Wenn die ungefähre Standortbestimmung („Coarse Relocation“) aktiviert ist, müssen die folgenden zusätzlichen Einrichtungsschritte ausgeführt werden. Wenn die ungefähre Standortbestimmung für Sie uninteressant ist, können Sie sie in der Komponente „Publisher ASA“ für das SpacePinBinder-Objekt deaktivieren.

Deaktivieren einer groben Verlagerung

Zusätzliche Einrichtungsschritte für HoloLens2

Um die ungefähre Standortbestimmung für HoloLens2 zu aktivieren, müssen Sie der Datei „Package.appxmanifest“, die in „ARM/WorldLockingTools/Package.appxmanifest“ generiert wird, eine Berechtigung hinzufügen (sofern Sie den Ordner „ARM“ als Buildziel ausgewählt haben). Wenn es sich um Ihr eigenes Projekt handelt, ersetzen Sie „ WorldLockingTools“ in diesem Pfad durch den entsprechenden Namen. Fügen Sie dem Abschnitt „Capabilities“ die folgende Zeile hinzu:

    <DeviceCapability Name="wiFiControl"/>

Weitere Informationen finden Sie in diesem Posting auf GitHub.

Wenn Sie diesen Schritt auslassen, erreicht der Publisher für „Readiness“ (Bereitschaft) niemals den Status „Ready“ (Bereit), Ihre Framerate wird extrem niedrig sein, und Ihr Protokoll „UnityPlayer.log“ (sofern generiert) wird zahlreiche Ausnahmen dieser Art enthalten:

InvalidOperationException: CoarseReloc: WLAN-Zugriff abgelehnt. Anforderungs-CV: . Antwort-CV: .

Sie müssen Ihrem „Package.appxmanifest“ diese Funktion jedes Mal hinzufügen, wenn die Lösung von Grund auf neu kompiliert wird. Bei nachfolgenden Builds aus Unity bleibt die Funktion jedoch erhalten.

Stellen Sie in den Projekteinstellungen unter „XR Plugin Management“ (XR-Plug-In-Verwaltung) sicher, dass „Windows Mixed Reality“ als ausgewählter Plug-In-Anbieter auf der Registerkarte „UWP“ angezeigt wird (OpenXR wird ebenfalls für WLT mit ASA unterstützt).

Das MRTK-Profil XAmple XRSDK ToolkitConfigurationProfile in „XAmpleApp/CustomProfiles“ ist für die Ausführung in HoloLens2 geeignet.

Zusätzliche Einrichtungsschritte für Android

Um die ungefähre Standortbestimmung unter Android zu aktivieren, befolgen Sie diese Anweisungen zum Konfigurieren der Datei „Assets/Plugins/Android/mainTemplate.gradle“.

Außerdem müssen in der Datei „Assets/Plugins/Android/AndroidManifest.xml“ eine Reihe von Berechtigungen aktiviert werden, um den WLAN-Zugriff unter Android zu ermöglichen. Auch hier gilt: Wenn Sie Elemente dieses Projekts in Ihr eigenes Projekt integrieren, müssen Sie diese Schritte ebenfalls befolgen, um die ungefähre Standortbestimmung zu verwenden. Weitere Einzelheiten zu den erforderlichen Berechtigungen für den WLAN-Zugriff unter Android finden Sie in diesem Posting und den verknüpften Beiträgen.

Beispiele für modifizierte Version von „mainTemplate.gradle“ und „AndroidManifest.xml“ sind im WLT-ASA-Beispielprojekt enthalten, das speziell für die gemeinsame Verwendung von WLT und ASA konfiguriert ist. Sie können direkt in Ihr Projekt kopiert werden, nachdem die Optionen „Custom Main Manifest“ (Benutzerdefiniertes Hauptmanifest) und „Custom Main Gradle Template“ (Benutzerdefinierte Gradle-Hauptvorlage) in den Player-Veröffentlichungseinstellungen gemäß Beschreibung aktiviert worden sind.

Wenn Sie auf Build & Ausführen klicken und ihr Build mit einem Shaderfehler im MRTK_Standard Material fehlschlägt, versuchen Sie es einfach erneut mit Build & Ausführen. Beim zweiten Versuch hat es bei mir funktioniert. Hierüber gibt es einige Informationen in den Issues zu MRTK, aber diese sind nach meinem Verständnis nicht korrekt.

Stellen Sie in den Projekteinstellungen unter „XR Plugin Management“ (XR-Plug-In-Verwaltung) sicher, dass „ARCore“ als ausgewählter Plug-In-Anbieter auf der Registerkarte „Android“ angezeigt wird.

Das MRTK-Profil XAmple AR ToolkitConfigurationProfile eignet sich für die Ausführung auf Mobilgeräten. Vergessen Sie nicht, nach dem Wechsel zu Android oder iOS das Skript Mixed Reality/Utilities/UnityAR/Update Scripting Defines auszuführen.

Funktionen der Schaltflächen

Bereit

  • Toggle Pins (Pins umschalten): Wenn die SpacePins nicht aktiv sind, werden die Handles für ihre Bearbeitung möglicherweise ausgeblendet.
  • Publish (Veröffentlichen): Speichern Sie die aktuelle Konfiguration, sodass sie in einer späteren Sitzung oder auf anderen Geräten abgerufen werden kann.
  • Load Oracle (Oracle laden): Verwenden Sie zuvor gespeicherte Bindungen, um eine räumliche Konfiguration wiederherzustellen.
  • Clear Oracle (Oracle löschen): Löschen Sie alle unterstützenden Ressourcen, insbesondere Azure Spatial Anchors, und löschen Sie die Oracle-Bindung.
  • Search (Suchen): Ermitteln Sie alle Azure-Raumanker in der unmittelbaren Umgebung, und stellen Sie mit ihrer Hilfe die räumliche Konfiguration wieder her.
  • Purge (Löschen): Ermitteln Sie alle Azure-Raumanker in der unmittelbaren Umgebung, und löschen Sie sie.
  • Reset Pins (Pins zurücksetzen): Setzen Sie alle SpacePin-Bearbeitungen zurück. Es werden keine Azure-Raumanker gelöscht.

Das Menü auf Mobilgeräten sieht etwas anders aus, aber die Positionen und Bedeutungen der Schaltflächen sind identisch.

Exemplarische Vorgehensweise: Veröffentlichung aus HoloLens2

Platzieren der Szene mithilfe von SpacePins

Wenn Sie das Beispiel starten, wird das Koordinatensystem auf Grundlage der Head-Tracking-Position beim Start positioniert und ausgerichtet. Das heißt, es ist recht willkürlich gewählt. Im ersten Schritt muss das Koordinatensystem auf einen gewünschten Referenzzustand eingestellt werden.

Das Sofa in der PinTestSofa-Szene ist 2,18 m lang, 0,78 m hoch und 1,0 m tief. Die SpacePin-Handles an beiden Enden der oberen Rückenlehne des Sofas sind daher 2,18 m voneinander entfernt und befinden sich 0,78 m über dem Boden. Es wird empfohlen, temporäre Markierungen in einem Abstand von 2,18 m und in geeigneter Höhe zu platzieren. Alternativ können Sie die Szene auch an Ihre räumlichen Gegebenheiten anpassen.

Nachdem Sie die Anwendung erstellt und auf einem HoloLens2-Gerät bereitgestellt haben, warten Sie, bis der Status im unverankerten Menü „Ready“ (Bereit) lautet. Hinweis: Die Statuszeile wechselt von rot zu weiß, wenn die Anwendung bereit ist.

Nicht bereit.

Greifen Sie nacheinander jeden der SpacePin-Handles (die weißen Drahtgitterkugeln), und ziehen Sie sie in eine Position relativ zu Ihren Referenzmarkern.

Nachdem Sie alle Marker in Position gebracht haben, sollte die Szene so angepasst worden sein, dass die Rückseite des Sofas relativ zum SpacePin ausgerichtet ist. Die Objekte in der Szene werden nicht verschoben, sondern der gesamte Koordinatenraum wird so angepasst, dass sich die ursprünglichen Koordinaten der SpacePins an der Position in der physischen Welt befinden, an die Sie sie gezogen haben.

Veröffentlichen des Koordinatenraums

Nachdem Sie den gewünschten Raum festgelegt haben, können Sie ihn nun veröffentlichen, damit er in späteren Sitzungen und auf anderen Geräten zur Verfügung steht.

Wenn Sie die ungefähre Standortbestimmung verwenden, ist es ratsam, zu diesem Zeitpunkt alle zuvor erstellten Cloudanker zu entfernen. Klicken Sie auf die Schaltfläche „Purge from Search“ (Aus Suche löschen), und warten Sie, bis der Vorgang abgeschlossen ist.

Klicken Sie nun im unverankerten Menü auf die Schaltfläche „Publish“ (Veröffentlichen), und warten Sie auf den Abschluss des Vorgangs.

Bereit

Exemplarische Vorgehensweise: Nutzung über HoloLens2 mit ungefährer Standortbestimmung

Starten Sie die Anwendung erneut, entweder auf einem anderen HoloLens2-Gerät oder auf demselben Gerät, nachdem Sie die vorherige Sitzung beendet haben. Wenn der Status „Ready“ (Bereit) angezeigt wird, klicken Sie auf die Schaltfläche „Load from Search“ (Aus Suche laden). Nach Abschluss des Vorgangs ist das globale Unity-Koordinatensystem wieder auf die physische Umgebung ausgerichtet, die in der vorherigen (veröffentlichten) Sitzung verwendet wurde.

Exemplarische Vorgehensweise: Nutzung über HoloLens2 mit IBindingOracle (SpacePinBinderFile)

Wenn die Bindungen auf einem Gerät veröffentlicht oder aus der Suche wiederhergestellt werden, werden sie in einem IBindingOracle aufgezeichnet. Dieses Beispiel verwendet sehr einfachen Oracle-Code, bei dem die Bindungen einfach in eine Textdatei geschrieben werden.

Starten Sie die Anwendung in einer neuen Sitzung neu. Wenn dasselbe HoloLens2-Gerät verwendet wird, von dem aus die Veröffentlichung durchgeführt wurde, ist noch eine Bindungsdatei von der Veröffentlichung vorhanden. Wenn es sich um ein anderes HoloLens2-Gerät handelt, aber eine erfolgreiche Suche in einer früheren Sitzung durchgeführt wurde, dann ist noch die Bindungsdatei aus dieser Sitzung vorhanden.

Klicken Sie auf die Schaltfläche „Load from File“ (Aus Datei laden), um die zuvor aufgezeichneten Bindungen zu laden und den entsprechenden Koordinatenraum wiederherzustellen.

Exemplarische Vorgehensweise: Nutzung über Android mit ungefährer Standortbestimmung

Die Benutzeroberfläche sieht unter Android etwas anders aus, funktioniert aber in der gleichen Weise. Der Hauptunterschied besteht darin, dass die Umgebung im Vergleich zu HoloLens2 beim Start etwas eingehender gescannt werden muss, bevor ASA einsatzbereit ist.

Wenn das System den Zustand „Ready“ (Bereit) anzeigt, können Sie auf die blaue Schaltfläche (3. von rechts) klicken, um nach den zuvor veröffentlichten Bindungen zu suchen und das Koordinatensystem wiederherzustellen.

Exemplarische Vorgehensweise: Nutzung über Android mit IBindingOracle (SpacePinBinderFile)

Nach dem erfolgreichen Ausführen von „Load from Search“ (Aus Suche laden) verbleibt eine Bindungsdatei auf dem Gerät. In späteren Sitzungen können Sie einfach auf „Load from File“ (Aus Datei laden) klicken, um das Koordinatensystem wiederherzustellen.

Alternativ können Sie auch einfach die Textdatei mit den Bindungen von dem für die Veröffentlichung genutzten Gerät auf das aktuell verwendete Gerät kopieren. Die Textdatei mit den Bindungen wird standardmäßig am folgenden Speicherort abgelegt:

HoloLens2: Benutzerordner/LocalAppData/WLT-ASA/LocalState/BinderFile.txt

Android: Interner freigegebener Speicher/Android/data/com.WorldLockingTools.WLTASA/files/BinderFile.txt

Weitere Informationen