WLT + ASA サンプルの設定と実行
まとめ
World Locking Tools for Unity (WLT) は、ローカル トラッキングに基づく安定した座標系を提供します。 Azure Spatial Anchors (ASA) と組み合わせると、その安定した座標系をセッション間で永続化して、デバイス間で共有できます。
このビデオを見ることで、サンプルを実行するときの想定内容についてのヒントが得られる可能性があります。
このサンプルの内容
このサンプルには、次の目的でアセットとスクリプトが含まれています。
- 物理環境に対して Unity のグローバル座標系を構成します。
- Azure Spatial Anchors を使用して、その座標系構成を Azure に公開します。
- Azure からデータを取得して、後のセッションまたは他のデバイスで座標系を復元します。
このドキュメントの構造
- セットアップ - サンプル アプリケーションをインストールしてデプロイする方法。
- アプリケーションの実行に関する注意事項と推奨される手順。
- サポートするスクリプトのアーキテクチャの説明。
セットアップとテスト済みバージョン
このサンプルは、以下を使用して開発およびテストされています。
- 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
WLT とこのサンプルは、WLT リリース .unitypackage または Mixed Reality Feature Tool からインストールできます。 Feature Tool からインストールする場合は、WLT サンプルの依存関係 (自動) をインストールするだけでなく、サンプルもプロジェクトにインポートする必要があります。 詳細については、「 MR Feature Tool からの WLT のインストール」を参照してください。
Frozen World Engine DLL をプロジェクトにインストールする
最初のステップは、Frozen World Engine DLL, v1.1.1 をインストールすることです。 ここでの手順では、NuGet for Unity またはコマンドライン nuget.exe のいずれかを使用します。
ASA をインストールする
空間アンカー リソースの作成
このクイック スタート ガイドでは、Azure アカウントと必要な空間アンカー リソースを作成する手順について説明します。 サンプルを実行するには、アカウント ID、アカウント ドメイン、およびアカウント キーが必要です。 シーン内の SpacePinBinder オブジェクトの「Spatial Anchor Manager」スクリプトの適切なフィールドにこれらを追加します。 他の認証方法もサポートされていますが、開始する際の最も簡単な方法はアカウント ID /ドメイン/キーを使用することです。
SDK のインストール
次に、これらの手順で説明されている方法の 1 つを使用して、Azure Spatial Anchors v 2.9.0 をインストールします。 ここでは、MR Feature Tool メソッドを使用しました。
粗い再局在化のための追加のセットアップ
粗い再局在化を使用する場合、Android または HoloLens2 にデプロイするときに追加の設定が必要になります。
粗い再局在化とは
粗い再局在化は、現在のアンカーの近くで以前に作成されたクラウド アンカーを検索できるようにするテクノロジーです。 粗い再局在化の詳細については、Azure Spatial Anchors のドキュメントの「粗い再局在化」セクションを参照してください。
このサンプルでは、粗い再局在化によって、またはクラウド アンカー ID (GUID) によって明示的にクラウド アンカーを検索する方法を示します。 粗い再局在化が有効になっている場合は、次の追加のセットアップ手順が必要です。 粗い再局在化に関心がない場合は、SpacePinBinder オブジェクトの「Publisher ASA」コンポーネントで無効にすることができます。
HoloLens2 の追加のセットアップ手順
HoloLens2 で粗い再局在化を有効にするには、ARM/WorldLockingTools/Package.appxmanifest に生成された Package.appxmanifest ファイルにアクセス許可を追加する必要があります (ビルド ターゲットとして ARM フォルダーを選択していると仮定)。 このプロジェクトが独自のプロジェクトである場合は、そのパスの WorldLockingTools の部分を適切な名前に置き換えてください。 次の行を [機能] セクションに追加します。
<DeviceCapability Name="wiFiControl"/>
詳細については、github に関するこの投稿を参照してください。
この手順を実行しないと、Publisher の「Readiness (準備中)」が「Ready (準備完了)」状態に移行せず、フレームレートが非常に低くなり、UnityPlayer.log (生成されている場合) は次の形式の例外でいっぱいになります。
InvalidOperationException: CoarseReloc: WiFi access has been declined. Request CV: . Response CV: .
ソリューションがクリーンから構築されるたびに、その機能を Package.appxmanifest に追加する必要があります。 ただし、Unity からの後続のビルドでは機能が保持されます。
プロジェクト設定/XR プラグイン管理の [UWP] タブで Windows Mixed Reality が選択されたプラグイン プロバイダーであることを確認します (OpenXR は ASA を使用する WLT でもサポートされています)。
XAmpleApp/CustomProfiles の MRTK プロファイル XAmple XRSDK ToolkitConfigurationProfile
は、HoloLens2 での実行に適しています。
Android の追加のセットアップ手順
Android で粗い再局在化を有効にするには、 次の手順に従って Assets/Plugins/Android/mainTemplate.gradle ファイルを構成します。
また、Assets/Plugins/Android/AndroidManifest.xml では、Android で Wi-Fi にアクセスできるようにするために、多くの権限を有効にする必要があります。 この場合も、このプロジェクトの要素を独自のプロジェクトに組み込む場合は、粗い再局在化を使用するために、これらの手順も実行する必要があります。 Android で Wi-Fi にアクセスするために必要な権限の詳細については、この投稿と、リンク先の投稿をご覧ください。
変更された mainTemplate.gradle と AndroidManifest.xml のサンプルは、WLT と ASA を一緒に使用するために専用に構成された WLT-ASA サンプル プロジェクトに含まれています。 説明に従って、プレーヤーの公開設定で [Custom Main Manifest (カスタム メイン マニフェスト)] と [Custom Main Gradle Template (カスタム メイン Gradle テンプレート)] を有効にすると、プロジェクトに直接コピーできます。
[ビルドと実行] をクリックすると、MRTK_Standardマテリアルでシェーダー エラーが発生してビルドが失敗した場合は、ビルドと実行をもう一度試してください。 再試行によって成功する場合があります。 MRTK の問題ではこれに関するいくつかの情報がありますが、現時点では、そこにあるすべての情報は正しくありません。
プロジェクト設定/XR プラグイン管理の [Android] タブで、ARCore が選択されたプラグイン プロバイダーであることを確認します。
MRTK プロファイル XAmple AR ToolkitConfigurationProfile
は、モバイルでの実行に適しています。 Android または iOS に切り替えた後は、必ず Mixed Reality/Utilities/UnityAR/Update Scripting Defines
スクリプトを実行してください。
ボタンの機能
- Toggle Pins (ピンの切り替え) - SpacePin がアクティブでない場合、操作ハンドルが非表示になっている場合があります。
- Publish (発行) - 現在の構成を保存し、後のセッションまたは他のデバイスで取得できるようにします。
- Load Oracle (Oracle の読み込み) - 以前に格納されたバインドを使用して、空間構成を復元します。
- Clear Oracle (Oracle のクリア) - すべてのバッキング リソース、特に Azure 空間アンカーを削除し、バインド oracle をクリアします。
- Search (検索) - すぐ近くにあるすべての Azure 空間アンカーを見つけて、それらから空間構成を復元します。
- Purge (パージ) - すぐ近くにあるすべての Azure 空間アンカーを見つけて、クリアします。
- Reset Pins (ピンのリセット) - スペース ピンの操作を元に戻します。 Azure 空間アンカーはクリアされません。
モバイルのメニューは形式が若干異なりますが、ボタンの位置と意味は同じです。
チュートリアル - HoloLens2 から公開
SpacePins を使用してシーンを配置する
サンプルを起動すると、座標系は起動時のヘッド トラッカーのポーズに基づいて位置と方向が決まります。 つまり、これはかなり恣意的です。 まず、座標系を目的の参照状態に調整します。
PinTestSofa シーンのソファは、長さ 2.18 m、高さ 0.78 m、奥行き 1.0 m です。 したがって、ソファの背面上部の両端にある SpacePin ハンドルは、互いに 2.18 m 離れており、地面から 0.78m 離れています。 都合の良い高さで、一時的なマーカー 2.18 m を測定して配置することをおすすめします。 または、物理的なスペースに合わせてシーンを調整することもできます。
アプリケーションをビルドして HoloLens2 デバイスにデプロイしたら、フローティング メニューのステータスが [Ready (準備完了)] と表示されるまで待ちます (ヒント - 準備ができると、ステータス行が赤色から白色に変わります)。
一度に 1 つずつ、各 SpacePin ハンドル (白いワイヤーフレームの球体) をつかみ、参照マーカーに対して相対的な位置にドラッグします。
各マーカーを所定の位置で離すと、シーンがシフトし、SpacePin を基準にしてソファの背面が復元されます。 シーン内のオブジェクトは移動されず、SpacePins の元の座標がドラッグ先の物理的な世界の場所に配置されるように座標空間全体が調整されます。
座標空間を公開する
必要なスペースを確立したら、そのスペースを公開して、後のセッションや他のデバイスで使用できるようにすることができます。
粗い再局在化を使用している場合は、この時点で以前に作成したクラウド アンカーをすべてクリアすることをおすすめします。 [Purge from Search (検索から消去)] ボタンをクリックして、完了するまで待ちます。
次に、フローティング メニューで、[Publish (公開)] ボタンをクリックして、完了するまで待ちます。
チュートリアル - 粗い再局在化を使用して HoloLens2 から実行する
別の HoloLens2 デバイスか、前のセッションを閉じた後に同じデバイスでアプリケーションを再起動します。 状態が [Rready (準備完了)] と表示された場合は、[Load from Search (検索から読み込む)] ボタンを押します。 操作が完了すると、Unity のグローバル座標系は、前の (公開済み) セッションの場合と同様に、物理環境に再調整されます。
チュートリアル - IBindingOracle (SpacePinBinderFile) を使用して HoloLens2 から実行する
バインドがデバイスで公開されるとき、または検索から復元されるとき、バインドは IBindingOracle に記録されます。 このサンプルには、バインドをテキスト ファイルに書き込むだけの最も基本的な Oracle が含まれています。
アプリケーションを再起動して新しいセッションを開始します。 公開が実行されたデバイスと同じ HoloLens2 である場合、公開時から残っているバインド ファイルがあります。 このデバイスが別の HoloLens2 でも、以前のセッションで検索が正常に実行された場合、その時点からバインド ファイルが残されます。
[Load from File (ファイルから読み込む)] ボタンをクリックして、以前に記録したバインドを読み込み、その座標空間を復元します。
チュートリアル - 粗い再局在化を使用して Android から実行する
UX が Android では少し異なりますが、まったく同じように機能します。 主な違いは、ASA が続行する準備が整う前に、HoloLens2 と比較して、起動時に環境をもう少しスキャンする必要があることです。
システムに「Ready (準備完了)」と表示されたら、青いボタン (右から 3 番目) をクリックして、以前に公開されたバインドを検索し、座標系を復元できます。
チュートリアル - IBindingOracle (SpacePinBinderFile) を使用して Android から実行する
[Load from Search (検索から読み込む)] が正常に完了すると、バインド ファイルがデバイスに残ります。 後のセッションで、[ Load from File (ファイルから読み込む)] をクリックするだけで座標系を復元できます。
または、バインド テキスト ファイルを公開デバイスから実行デバイスにコピーすることもできます。 バインド テキスト ファイルの既定の場所は次のとおりです。
HoloLens2: [ユーザー] フォルダー/LocalAppData/WLT-ASA/LocalState/BinderFile.txt
Android: 内部共有ストレージ/Android/data/com.WorldLockingTools.WLTASA/files/BinderFile.txt