Help us understand the problem. What is going on with this article?

Azure Spatial Anchors を使って、アンカー情報の共有を行ってみた。【 HoloLens, Google Pixel 3 編 】

はじめに ( ※執筆途中 )

MWC 2019 Microsoft 基調講演 ( Mobile World Congress @ Barcelona )で発表された、
Azure Spatial Anchors 」を使って、HoloLensGoogle Pixel 3 のアンカー情報を共有してみる。


Azure Spatial Anchors ( Preview ) | Microsoft Azure ( 公式サイト )

目次

1. What's Azure Spatial Anchors !?
2. 本記事を読んで実現できること
3. 前提条件 ( 開発環境 )
4. HoloLens 単体サンプル 動作確認 ( Unity )
5. アンカー共有サービス ( ASP.NET ) をデプロイする
6. HoloLens , Google Pixel 3 で仮想オブジェクトの配置情報を共有する ( Unity )
7. 終わりに

1. What's Azure Spacial Anchors !?

現実空間をトラッキングしたデータ ( 空間情報 ) をクラウド上で管理・複数端末間で共有できるサービスです。
本サービスを利用することで、アンカー情報 ( 空間トラッキング + 仮想オブジェクトの配置位置 ) を、
複数端末で、永続的に (再)利用することが可能
になります。


Tutorial: Sharing across sessions and devices with Azure Spatial Anchors 」より抜粋。

拡張現実 (AR) プラットフォームでは、"アンカー" は、 複数のユーザーが同じ物理的な場所にデジタル コンテンツを配置できるようにするための共通座標系 です。さまざまなデバイスで、環境を基準に同じ位置と向きでコンテンツを表示できます。Azure Spatial Anchors を使用すると、アンカーの永続性とアクセス許可を追加し、ユーザーが近くのコンテンツを見つけることができるように、アプリケーション内でアンカーに接続できます。「 Azure Spatial Anchors 」より抜粋。

クロスプラットフォーム対応

Azure Spatial Anchors は、以下、クロスプラットフォームのマルチデバイスに対応しています。

2. 本記事を読んで実現できること

Microsoft HoloLensと、Google Pixel 3 の2つのデバイス間で、空間情報を共有する。

[ 動画 ] を張り付ける!

想定されるユースケース ( Azure Spatial Anchors )

  • マルチユーザーエクスペリエンス
    ー ( マルチユーザー、マルチデバイスでの体験共有 )
  • 道案内
    ー ( アンカー情報のリレーションシップ作成 )
  • 仮想オブジェクトの現実世界での永続化
    ー ( 配置した仮想オブジェクトの配置位置データを記録 )

Azure Spatial Anchors overview 」より、抜粋。


【 参考 】 Google Pixel 3 ( XL ) で、「 Azure Spatial Anchors 」を試してみた!

会社の先輩の Google Pixel 3 XL を無理やりパクリ、以下Android端末 2台で動作検証してみました。

  • Google Pixel 3 ( 検証用端末 )
  • Google Pixel 3 XL ( @torisankanasan の私物 )

3. 前提条件 ( 開発環境 )

  • Surface Book 2 ( Windows 10 Pro )
  • Azure アカウント ( 発行済み )
  • デプロイ端末
    • Android端末 ( ex. Google Pixel 3 )
    • Windows端末 ( ex. HoloLens )
    • iOS端末 ( ex. iPhone XS )

4. HoloLens 単体サンプル 動作確認 ( Unity )

本章では、以下、公式チュートリアルに従い、作業を進めます。

開発環境

  • 開発環境

    • Windows 10 Pro ( 開発者モード オン )
  • デプロイ端末

    • Microsoft HoloLens ( Windows 10 - Build xxx )

(1) Spatial Anchors リソースを作成する ( Azure Portal )

リソース作成」ボタンを押下し、「Spatial Anchors」を検索する。

画面左下に表示される「作成」ボタンを押下する。

*リソース名」「*サブスクリプション」「*リソースグループ」「*リージョン ( 場所 )」を指定します。
※ リージョンに関しては、現時点で「East US 2 ( 米国東部 2 ) 」のみ選択可 (2019/03/27)

アカウントID ( = Account ID ) 」と「プライマリキー ( = Accout Key ) 」をメモします。
※ 後で、Unity上で使用します。

以上で、Azure Portalでの作業は終了です。

(2) Unity上で、サンプルプロジェクトを開きます。

VSCode ターミナルより、git cloneを実行する。

git clone https://github.com/Azure/azure-spatial-anchors-samples.git

クローンができたら、Unity上でプロジェクト ( Unityフォルダ ) を読み込みます。
このサンプル自体が、Unity 2018.3.6f1 で開発されているため、アラートが表示されますが、
「 Continue 」 ボタンを押下し、次に進みます。

File > New Scene より、以下シーンファイルを開きます。
Assets/AzureSpatialAnchorsPlugin/Examples/AzureSpatialAnchorsBasicDemo.unity

AzureSpatialAnchors にアタッチされている「 AzureSpatialAnchorsDemoWrapper 」に以下、値を入力します。

  • Spatial Anchors Id ( = Account Id )
  • Spatial Anchors Key ( = Primary Key )

シーンの保存が終われば、次はUWP用のビルド設定を行います。
Ctrl + Shift + B にて、「Build Settings」タブを開き、
プラットフォームを「UWP」、ターゲットデバイスを「HoloLens」に変更し、
Switch Platform」ボタンを押下します。

※ プラットフォームをUWPに変更した途端、シーン選択領域が狭くなります、、。汗

エクスポート先のディレクトリ「UWP」を新規作成し、ビルドを実行します。

(3) 実機確認 ( HoloLens )

では、実機で動作確認してみましょう。

【 サンプルアプリ処理フロー 】
Next: Create Azure Spatial Anchors Session
Next: Configure Azure Spatial Anchors Session
Next: Start Azure Spatial Anchors Session
Tap a surface to add the Local Anchor
Next: Save Local Anchor to cloud
Saving local Anchor to cloud...
Next: Stop Azure Spatial Anchors Session
Next: Create Azure Spatial Anchors Session for query
Next: Start Azure Spatial Anchors Session for query
Next: Look for Anchor
Looking for Anchor...
Next: Delete Anchor
Next: Stop Azure Spatial Anchors Session for query
Next: Restart demo

Azure Portal 画面上からも、正常に動作していることが確認できます。

5. アンカー共有サービス ( ASP.NET ) をデプロイする。

マルチデバイス間で、アンカー情報をやり取りするためのWebアプリをデプロイします (サンプル)

(1) Visual Studioを開き、「Sharing\SharingServiceSample」フォルダーを開きます。

(2) 「SharingService.sln」をダブルクリックします。

(3) 「Azure App Service」を発行します。 ( Azure ログイン済み )

発行先を「 App Service 」に選択し、発行ボタンを押下。

(4) 「App Service」のリソース、サブスクリプション等を指定し、作成ボタンを押下する。

※ 基本は、デフォルトのままでOK!

(5) 作成ボタンを押下すると、アプリが発行されます。(1~2分)

(6) アプリの発行が終わると、ブラウザ上でアプリが起動します。

※ 後で、こちらのURLを使用するので、メモしておくこと。

https://sharingservice-xxxxxxxxxxx.azurewebsites.net/index.html

6. HoloLens , Google Pixel 3 で仮想オブジェクトの配置情報を共有する ( Unity )

本章では、HoloLens と、 Google Pixel 3 のデバイス間で、アンカー情報の共有をしてみたいと思います。

(1) 必要な作業項目

  • Azure Spatial Anchors 作成 ( Azure Portal ) ※ 作成済み
  • Azure App Service ( Web Apps ) 作成 ※ 作成済み

( --- 以下、新たに作業が必要となります --- )

  • GitHubサンプル 「 AzureSpatialAnchorsLocalSharedDemo.unity 」 を実機へデプロイ
    • Android向けアプリをデプロイ ( Google Pixel 3 )
    • UWP向けアプリをデプロイ ( HoloLens )
    • iOS向けアプリをデプロイ ( iPhone XS ) ※TBD

6-1. Android向けアプリをデプロイ ( Google Pixel 3 )

【 Unity 】Android 開発環境の構築手順 を参考に、Andoroid向けのビルド環境を整える。

【 環境構築 ( 手順 ) 】

  • Android Studio インストール
  • Java JDK ( Java Development Kit ) インストール
  • Android NDK ( Native Development Kit ) セットアップ

後述の理由にて、なかなかAndroidアプリがうまく動作しなかったので、
まずARCoreのサンプルプログラムで、「 Hello AR 」をしてみた。


【 参考 】 ARCore で、「 Hello AR 」してみた!

Google Pixel 3 で、ARCore に入門してみた! ( 動画 )


Hello World できた瞬間は、いつだって嬉しいですね。笑


Unity上で、サンプルコードを開きます。

[ Azure-Spatial-Anchors-Samples ] > [ Unity ]

サンプルシーンを開き、各種値を入力します。

Unity\Assets\AzureSpatialAnchorsPlugin\Examples\AzureSpatialAnchorsLocalSharedDemo 」を開き、
以下、3つの値を追加します。

  • ※ Base Sharing Url
  • Spatial Anchors Account Id ( = Account Id )
  • Spatial Anchors Account Key ( = Primary Key )

※ Base Sharing Urlは、5.で発行したWebアプリのURLの末尾を、
「index.html」から「api/anchors」に修正したものを入力します。
https://sharingservice-〇〇〇〇〇.azurewebsites.net/api/anchors

ARCoreをインポートし、ビルドセッティングをAndroidにセット。

省略


6-2. UWP向けアプリをデプロイ ( HoloLens )

6-3. iOS向けアプリをデプロイ ( iPhone XS ) ※TBD

(2) 実際にアプリを起動し、検証してみる!

7. 終わりに

最後までお読みいただき、ありがとうございましたー! いやー、長かった。。
記事を書きながらなので、進捗出すのに苦戦しましたが、記事に残しているからこそ、思考の深掘りができ、
「 Azure Spatial Anchors 」への理解が、少し深まったような気がします!

参考文献

皆さま、情報公開ありがとうございます!

キーワード ( 解説 )

Spatial ( スペーシャル )

【 形容詞 】: 空間の、空間に存在する、空間的広がりのある、空間的な

Anchor ( アンカー )

【 名詞 】: ≪海事≫ いかり
【 自動詞 】: いかりを下ろす、投錨する
【 他動詞 】: 〔船を〕いかりで固定する、~をしっかりと固定する

ASP.NET

マイクロソフトが開発・提供しているWebアプリケーションフレームワークで、
動的なウェブサイトやWebアプリケーションやXML Webサービスの開発や運用を行う。

Gradle ( 読み : グレードル )

Gradleは、進化系のビルド自動化ツールです。Gradleは、ソフトウェアパッケージはもちろん、その他様々な形式のプロジェクト ( 例えば自動生成された静的Webサイトやドキュメント等 ) のビルド・テスト・ ( ライブラリ等の ) 公開・デプロイ・その他を自動化します。「 Gradle入門 」より引用。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away