Azure Spatial Anchorsの調査①

はじめに

HoloLens 2をマーカーレスで使いたいというニーズがあるため、Azure Spatial Anchorsを使うことで、どの程度それが実現可能であるか調査および技術検証します。Azure Spatial Anchorsの調査結果を数回に渡って投稿することとし、本記事は1本目です。

Azure Spatial Anchorsとは [1]

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

物理空間とアンカーの座標マップの仕組み [2]

2つの方法で、空間座標を保存します。

  1. 特定の位置の空間座標を保存
    人の認識と同じくカメラに写る画像の特徴点分析により場所を特定します。大雑把にいうと床の広さや壁の位置、周辺にあるものの形や色などの情報も使っています。そのため、10秒ほど周辺をカメラでスキャンし、場所を特定します。HoloLens、ARKit、ARCoreすべて共通です。
  2. 相対的な空間座標を保存
    空間アンカーと別の空間アンカーにはリレーションを設定でき、空間アンカー間の相対位置を参照できます。そのため、1つのアンカーからリレーションを張られた他のアンカー位置を特定できます。相対座標はジャイロセンサーなどを使って6Dofと呼ばれる座標位置を取得し計算され、導き出されます。この機能により、「今居るところから北北東に5Mのところに次のアンカーがある」といったことが実現できます。

Azure Spatial Anchorsの動作原理 [3]

Azure Spatial Anchors は、複合現実/拡張現実トラッカーに依存しています。 これらのトラッカーはカメラで環境を認識し、空間内を移動するデバイスを 6 自由度 (6DoF) で追跡します。
6DoF トラッカーで構成される Azure Spatial Anchors では、実際の環境内で関心のある特定のポイントを、”アンカー” ポイントとして指定できます。 たとえば、アンカーを使用して、現実世界の特定の位置にコンテンツをレンダリングすることができます。
アンカーを作成すると、そのポイントの周辺の環境情報がクライアント SDK によってキャプチャされて、サービスに送信されます。 別のデバイスがその同じ空間内でアンカーを検索した場合、同様のデータがサービスに送信されます。 そのデータは、以前に格納されている環境データと照合されます。 その後、デバイスを基準としたアンカーの位置が、アプリケーションで使用できるように返送されます。

Azure Spatial Anchorsに格納されるデータ [3]

アンカーが作成または特定されるとき、デバイス上で環境の画像が処理されて派生形式(≒特徴点)になります。この特徴点データがAzure Spatial Anchorsに送信・格納されます。
例として、下図のように画像が処理されて特徴点に変換されます。
特徴点の各点に対してハッシュ化されます。ハッシュはピクセルデータから派生したものですが、ピクセルデータは含まれません。

対応プラットフォーム

  • HoloLens 1, 2
  • ARKit対応のiOS端末
  • ARCore対応のAndroid端末

HoloLensとの統合 [3]

Azure Spatial Anchorsでは、HoloLensのネイティブトラッキング機能が利用されます。HoloLens でアプリを構築するための Azure Spatial Anchors SDK が提供されています。 SDK は HoloLens のネイティブ機能と統合されて、追加の機能を提供します。 このような機能を利用して、アプリ開発者はマネージド クラウド サービスにアンカーを保持することができ、アプリでは、サービスに接続するだけで、それらのアンカーを再び検索することができます。

HoloLensにおける空間認識で使用されるセンサー [4]

  • 深度カメラ
  • ヘッドトラッキングカメラ(4台)
  • IMU(慣性計測装置)
  • (RGBカメラ)←使われていない
    • CapabilityのWebCamがチェックオフで正常動作する
    • ASAを使用しながら、RGBカメラで動画撮影可能

iOS(ARKit)・Android(ARCore)との統合 [3]

Azure Spatial Anchors では、ARKit および ARCore のネイティブ トラッキング機能が利用されます。 さらに、Microsoft の iOS および Android 用 SDK でも、マネージド クラウド サービスでのアンカーの保持などの機能が提供され、アプリではサービスに接続するだけで、それらのアンカーを再び検索することができます。

スマホにおける空間認識 [5]

ARCoreの公式ドキュメントを参考にしています。スマホというデバイスの特性上、ARKitとも仕組み自体に大差はないということを前提とします。

  • モーショントラッキング
    • スマホが現実空間を移動するとき、ARCoreはSLAMと呼ばれるプロセスを使用して、スマホが周囲の環境との相対的な位置を把握します。 ARCoreは、キャプチャされたカメラ画像内の特徴点と呼ばれる視覚的に異なる特徴を検出し、これらの点を使用して位置の変化を計算します。視覚情報は、デバイスのIMU(慣性計測装置)からの慣性測定値と組み合わされて、時間の経過に伴う現実空間に対するカメラのポーズ(位置と向き)を推定します。
  • 環境理解
    • ARCoreは、特徴点と平面を検出することにより、実世界の環境に対する理解を絶えず向上させています。
      ARCoreは、テーブルや壁などの一般的な水平面または垂直面にあるように見える特徴点のクラスターを探し、これらの面を平面としてアプリで使用できるようにします。 ARCoreは、各平面の境界を決定し、その情報をアプリで利用できるようにすることもできます。この情報を使用して、平らな面に仮想オブジェクトを配置できます。
      ARCoreは特徴点を使用して平面を検出するため、白い壁などのテクスチャのない平らな表面は正しく検出されない場合があります。
  • 深さの理解
    • ARCoreは、サポートされているデバイスのメインRGBカメラを使用して、特定のポイントからのサーフェス間の距離に関するデータを含む画像である深度マップを作成できます。デプスマップによって提供される情報を使用して、仮想オブジェクトを観測面と正確に衝突させたり、実世界のオブジェクトの前または後ろに表示したりするなど、没入型でリアルなユーザーエクスペリエンスを実現できます。

使用されるセンサー

上記の内容からスマホにおける空間認識には以下のセンサーが使用されることが分かります。

  • RGBカメラ
  • IMU(慣性計測装置)
  • (深度センサー)搭載していれば

参考資料