yotiky Tech Blog

とあるエンジニアの備忘録

Azure Spatial Anchors と HoloLens 単体で利用した話

Azure Spatial Anchors については、こちらの記事が非常に詳細にまとめられている。

qiita.com

全体を一度読むことをおすすめするが、Azure Spatial Anchorsの概要だけであれば「空間アンカー(Spatial Anchors)は何ができるのか?」と「物理空間とアンカーの座標マップの仕組み」を読むと良い。

目次

まとめ記事の補足

バイス単体で動かすには、チュートリアルにあるAzure Spatial AnchorsのIDとKeyだけあればOK。

CloudAnchorSessionを使ってAnchorデータを保存するとIdentifierが発行されるので、そのIdentifierを保持しておかないとAnchorデータを読み込んだり削除したりできない。Identifierの一覧を取得するような機能はないようだ。

バイス間で共有するには、このIdentifierをお互い知る必要がある。そのためサンプルプロジェクトには、ASP.NET Core Web アプリが入っている。このWebアプリはIdentifierと自動採番した数字を紐づけて辞書として保持する機能だけが含まれる。Identifierを登録、登録時に採番された番号で再度Identifierを引き出せるというわけ。

さらに、メモリにIdentifierをキャッシュするコードと、CosmosDBに保存して永続化するコードの2種類が用意されている。 (永続化するのにCosmosDBである必要はなさそう。)

AzureSpatialAnchors-HoloLens

サンプルプロジェクトは、AndroidiOS、HoloLens全てに対応するコードが含まれたUnityプロジェクトである。

Azure Spatial AnchorsをHoloLens単体で動かすサンプルプロジェクトを作ってみた。

github.com

プロジェクトを作るに当たりこちらの記事を参考にさせて頂いた。

mtaulty.com

公式チュートリアルに従ってAzure Spatial Anchorsを設定し、IDとKeyを埋めれば動くはず。

なお、他のデバイスと共有するコード、およびシェアリングサービスのコードは含まれていない。

f:id:yotiky:20190517171732p:plain 雑な実装なので簡単な使い方だけ。

  • Sessionボタンでセッションの開始と終了
  • Local Clearボタンでローカルで作成したCubeを削除
  • DownloadボタンでAzureにあるAnchor情報を取得してCubeを表示
  • Cloud ClearボタンでAzureにあるAnchor情報を削除
  • セッション開始したあと、Spatial Mappingのメッシュに対してエアタップするとCubeを作成(ローカル&Azureへ保存)

Azure Spatial Anchorsを使うために必要なコード自体は大したことがなく、ポイントは以下の通り。

  • Sessionを開始、終了する
  • AddARAnchor() でGameObjectにアンカーを追加する
  • CloudSpatialAnchorを生成し、GetNativeAnchorPointer()で取得したポインタとその他必要な設定をする
  • 空間スキャンが足りているか確認する
  • AzureサービスにAnchorを保存し発行されたIdentifierをローカルで保持する
  • AzureサービスからIdentifierを指定してAnchorを取得する

※まだ公式ドキュメントに手順が公開されていないため、正式な手法ではないことはご理解ください。

料金

Azure Spatial Anchors の価格はまだ公表されていない。現在プレビューでこのサービス自体は無料で試せる。

参考までに今回の検証でかかった費用は以下の通り。Azure Spatial Anchors 以外にかかった費用ということになるだろう。

リソースグループを2回ほど作り直したのでCostは3段になっている。CosmosDBのチュートリアルを実施していないので、合計でも1円未満。

f:id:yotiky:20190520111357p:plain

その際のトランザクション数だが、最新のリソースグループでの過去1週間のCreatedの数はこんな感じ。合計108?

f:id:yotiky:20190520111409p:plain