Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Azure Spatial Anchorsを活用したHoloLens & Androidシェアリングアプリ

731 views

Published on

XR ミーティングで報告した資料。
主にAzure Spatial Anchorsについての整理をしたもの。

Published in: Technology
  • Be the first to comment

Azure Spatial Anchorsを活用したHoloLens & Androidシェアリングアプリ

  1. 1. Azure Spatial Anchorsを活用した HoloLens & Androidシェアリングアプリ ~Azure Spatial Anchorsの使いどころ~ Miyaura – 大阪駆動開発 2019/06/19
  2. 2. こんな人が話します Miyaura Takahiro ◦Twitter @takabrz1 ◦ 某会社でSEしています。 ◦ HoloLensを中心としたXR技術を探求 ◦ Microsoft MVP for Windows Development(2018-2019) ◦ カテゴリ:Mixed Reality ◦ https://qiita.com/miyauraでMixed Reality開発Tips公開中! 2019/6/19 Copyright © 2019 Takahiro Miyaura
  3. 3. MVPパーソナルスポンサーになりたくてサンプル提供 2019/6/19 Copyright © 2019 Takahiro Miyaura スマホとHoloLensの共演!“Azure Spatial Anchors”で実現するSharingアプリ Azure Spatial Anchorsとか使ったら採用されやすいんじゃないのか? という邪な気持ちで提供 結果iOS版のブレイクアウトセッション(CM03) 被ったw 特別な配慮により資料にはサンプル紹介された。 Azure Spatial Anchorsを位置合わせのアンカーとして利用し、 Photonサービスを使ってヘッドポジションの共有をAndroid/HoloLensで実施した。
  4. 4. Azure Spatial Anchor 基本的な機能 2019/6/19 Copyright © 2019 Takahiro Miyaura
  5. 5. Azure Spatial Anchor 超概要 2019/6/19 Copyright © 2019 Takahiro Miyaura アンカー(と呼ばれる情報)をAzure上で格納管理するサービス 空間マッピングが利用できるデバイス間で デジタルコンテンツを共有するためのベースとなる技術 より多彩なアプリケーション/プロダクトの構築が可能
  6. 6. 2019/6/19 Azure Spatial Anchor アンカー(Anchor)について Copyright © 2019 Takahiro Miyaura 空間内の特定の場所にデジタル的な基準点をとることで 同じ空間内で同じ場所にコンテンツを出すことができる。 基準点 = Anchor 空間マッピングできるデバイスで アプリケーション作った場合 アプリケーション起動時の場所が原点 ※起動位置次第でコンテンツがずれる
  7. 7. Anchorは永続化が可能。Anchorにはタグ情報を格納できるので、現実空間の決まったところに情報を配置できる。 例:お店の前にデジタル看板を置く等。 Azureに格納したAnchor同士をリンクすることができる(近いAnchor同士の関連付け)。 これにより屋内の空間情報から生成したAnchorを利用して導線を引くことができる。 同一コンテンツの共有体験。 Anchorにより同じ空間の同じ場所にコンテンツを出力できるようになる。 Azure Spatial Anchor Azureに格納できることで何がうれしいのか 2019/6/19 Copyright © 2019 Takahiro Miyaura より多くのAnchorを設置し共有が可能 空間マッピングが利用できるデバイス間で共有可能 マルチユーザーコンテンツ 道案内(ウェイファインディング) 仮想コンテンツの永続化
  8. 8. Azure Spatial Anchor 機能や構成など 2019/6/19 Copyright © 2019 Takahiro Miyaura 管理できるAnchor情報(CloudSpatialAnchorクラス) AppProperties Anchorに埋め込める情報(辞書形式) Expiration Anchorの寿命 Identifier Azure Spatial Anchors上で管理される一意のID(GUID) LocalAnchor ローカル上で利用できるAnchor情報(Inptr形式のため直接は見えない) VersionTag バージョンタグ。アプリケーションで使い分ける際に利用するっぽい。 実際にはこの情報を用いてAnchorを3Dオブジェクトなどに起こしなおす。 AppPropertiesを使えばAnchorごとの情報を持つことができる。
  9. 9. Azure Spatial Anchor 機能や構成など 2019/6/19 Copyright © 2019 Takahiro Miyaura Azure Spatial Anchors Cosmos DBApp Service Mobile HoloLens Anchorの操作依頼(登録/更新/削除) Anchor情報 Anchor ID管理 IDの永続化 Sharingのために必要 (理由は後でわかる) 永続化のために必要
  10. 10. Azure Spatial Anchor 基本的な処理手順 – Anchorの登録 2019/6/19 Copyright © 2019 Takahiro Miyaura HoloLens Azure Spatial Anchors 1. 空間の任意の座標をアンカーとにする プログラム上はRayを飛ばしてCubeで目印を作る 2. アンカー周辺の空間をスキャンする アンカーを中心に周囲の空間の特徴点を吸い上げて現 実空間での位置を把握する ※スキャンが十分でない場合はAnchorのアップロードに 失敗する 3. Azure Spatial Anchorsにアップロードする アップロード時にアンカーに付加情報をつけることもできる。 Anchor情報 (位置/付加情報) ① ② ③
  11. 11. Azure Spatial Anchor 基本的な処理手順 – Anchorの取得(その1) 2019/6/19 Copyright © 2019 Takahiro Miyaura HoloLens Azure Spatial Anchors 1. 一度設置したAnchorのID(Identifier)を 使ってAzure Spatial Anchorsに問い合わ せる 2. Azure Spatial AnchorsからAnchor情報 をダウンロードする 3. 空間の特徴点に類似した地点に配置 Anchor情報 (位置/付加情報) Anchorの Identifier情報 面倒なポイント:Identifier を何らかの方法で保持しないと引き出せない ⇒App Serviceが必要な理由 お、生えた ① ②③
  12. 12. Azure Spatial Anchor 基本的な処理手順 – Anchorの取得(その2) 2019/6/19 Copyright © 2019 Takahiro Miyaura HoloLens Azure Spatial Anchors 1. Anchorの登録の手順でAnchorの設置を 行う。 2. 1で設置したAnchorを中心に周辺の Anchorがあるかを問い合わせる 3. 存在する場合はダウンロードして設置する 4. 1で作ったAnchorを削除する。 Anchorの登録 実際の利用はこちらの手段が主になりそう ① 周辺のAnchor情報(位置/付加情報) 設置したAnchor情報 ② Anchorの削除③ ④ ④ ①
  13. 13. Azure Spatial Anchor プチまとめ 2019/6/19 Copyright © 2019 Takahiro Miyaura  Anchorは空間に設置できる。  Anchorには付加情報を追加することができる。  AnchorのIdentiferはAzure Spatial Anchorに登録した際に自動採番される  自動採番なので、Identifierを何からの方法で保存しないと、一度設置したAnchorを 決め打ちでもってくることはできない。  (超大事)基本的にはAnchorは永続化できるため掃除を忘れずに! (今はPreviewで無料ですが・・・・)
  14. 14. Azure Spatial Anchor 開発について 2019/6/19 Copyright © 2019 Takahiro Miyaura
  15. 15. Gitからパーツだけ持ってくれば色々は準備できるので楽になると思います。 「https://github.com/Azure/azure-spatial-anchors-samples.git」 Azure Spatial Anchor 開発に使う場合 2019/6/19 Copyright © 2019 Takahiro Miyaura マルチデバイスを考慮してライブラリが構成されておりC++ベース モジュールの呼び出しが大変 Unityフォルダ内の以下のフォルダ全て  AssetsAzureSpatialAnchorsPluginPlugins  AssetsPlugins 3デバイス(iOS,Android,HoloLens)に使えるUnity向けのモジュール ※別途ARCore、ARKitは必要
  16. 16. AndroidのUIスレッド上で動かす必要がある CloudSpatialAnchorSession cloudSession; this.cloudSession = new CloudSpatialAnchorSession(); this.cloudSession.Configuration.AccountKey = @"MyAccountKey"; this.cloudSession.Configuration.AccessToken = @"MyAccessToken"; using (AndroidJavaClass cloudServices = new AndroidJavaClass("com.microsoft.CloudServices")) { cloudServices.CallStatic("initialize", unityActivity); this.CreateNewCloudSession(); } cloudSession.Session = GoogleARCoreInternal.ARCoreAndroidLifecycleManager.Instance.NativeSession.SessionHandle; this.cloudSession.Start(); Azure Spatial Anchor セッションの開始 – 共通 2019/6/19 Copyright © 2019 Takahiro Miyaura 共通的に行う作業としてAzure Spatial Anchorsとのセッションを開く作業は必要 1. 初期化を実施 ・CloudSpatialAnchorSessionのインスタンス化 ・パラメータの設定 ・フレームの設定(ARCore/ARKit) 2. セッションの開始
  17. 17. this.localAnchor = GameObject.Instantiate([Prefab], [position], [rotation]); this.localAnchor.AddARAnchor(); SessionStatus status = await this.cloudSession.GetSessionStatusAsync(); while (status.RecommendedForCreateProgress > 1.0f) { await Task.Delay(330); status = await this.cloudSession.GetSessionStatusAsync(); } CloudSpatialAnchor cloudAnchor = new CloudSpatialAnchor(); cloudAnchor.LocalAnchor = this.localAnchor.GetNativeAnchorPointer(); await this.cloudSession.CreateAnchorAsync(cloudAnchor); Azure Spatial Anchor Acnchorの登録 2019/6/19 Copyright © 2019 Takahiro Miyaura Anchor座標にGameObjectを配置しそれをAzure Spatial Anchorsに送る 1. 任意のAnchorを空間に作成する 現状は空中は難しい気がする。 2. Anchorの登録準備を行う 3. 保存に必要な空間情報を確保する 4. Anchorを保存する
  18. 18. AnchorLocateCriteria criteria = new AnchorLocateCriteria(); criteria.Identifiers = new string[] { @"id1", @"id2" }; this.cloudSession.CreateWatcher(criteria); this.cloudSession.AnchorLocated += (object sender, AnchorLocatedEventArgs args) => { switch (args.Status) { case LocateAnchorStatus.Located: CloudSpatialAnchor foundAnchor = args.Anchor; break; case LocateAnchorStatus.AlreadyTracked: break; case LocateAnchorStatus.NotLocatedAnchorDoesNotExist: break; case LocateAnchorStatus.NotLocated: break; } Azure Spatial Anchor Acnchorの取得(ID指定) 2019/6/19 Copyright © 2019 Takahiro Miyaura Anchor情報をダウンロードし現在の空間情報内で 一致する場所があればイベントが発生するという仕組み 1. 検索条件の指定 2. アンカーの設置を試みる 3. 設置成功の場合はAnchorLocatedイベントが発生 中で追加の処理(GameObjectで表示等)を実施
  19. 19. AnchorLocateCriteria criteria = new AnchorLocateCriteria(); AnchorLocateCriteria nac = new NearAnchorCriteria(); nac.SourceAnchor = nearbyAnchor; nac.DistanceInMeters = DistanceInMeters; nac.MaxResultCount = MaxNearAnchorsToFind; criteria.NearAnchor = nac; this.cloudSession.CreateWatcher(criteria); this.cloudSession.AnchorLocated += (object sender, AnchorLocatedEventArgs args) => { //中身は前ページと一緒 } Azure Spatial Anchor Acnchorの取得(ご近所さん検索) 2019/6/19 Copyright © 2019 Takahiro Miyaura 調査対象のAnchor情報と検索範囲(距離と検出数)をAzure Spatial Anchorsに送信 Anchorが見つかればイベントが発生するという仕組み 1. 検索条件の指定 ・元ととなるAnchorを設定 ・検索範囲(半径〇m) ・最大取得件数 2. アンカーの設置を試みる 3. 設置成功の場合はAnchorLocatedイベントが発生 中で追加の処理(GameObjectで表示等)を実施
  20. 20. Photonについて どちらかというと使った所感 2019/6/19 Copyright © 2019 Takahiro Miyaura
  21. 21. Photonについて 2019/6/19 Copyright © 2019 Takahiro Miyaura https://www.photonengine.com/ja-JP/Photon 煽り文句が わかりやすい クロスプラットフォームの充 実っぷりがいい感じ
  22. 22. Photonについて 2019/6/19 Copyright © 2019 Takahiro Miyaura  位置同期の仕掛けなどはほぼUNETと同じ Transform同期、Rotation同期、Animation同期などコンポーネント追加で制御できる。  オブジェクトの動的生成はResouceフォルダ内にPrefabをおくというルール Unetの場合はリストをコンポーネントで指定していたのでほぼやり方は同じ  今回のAzure Spatial Anchorと組合わせる場合は、 Anchorからの相対位置を同期する必要があるためlocalほげほげパラメータの同期 を行う。
  23. 23. Azure Spatial Anchorsは面白いので、 ハンズオンを作成中 三つ巴のハンズオンできればしたいと思案中 2019/6/19 Copyright © 2019 Takahiro Miyaura
  24. 24. 大阪駆動開発 関西を中心に、IT系のおもしろそうなことを楽しんでやるコミュニティ 2019/6/19 Copyright © 2019 Takahiro Miyaura

×