Shiraishi-Shodai / AR-ReactNative-App

1 stars 0 forks source link

オブジェクトをAR空間に地理座標で固定 #6

Open Shiraishi-Shodai opened 1 week ago

Shiraishi-Shodai commented 1 week ago

オブジェクトを座標で固定する方法

2つの位置情報

  1. デバイスのローカル座標系で、ここでは「AR空間」と呼ぶ。 Viroでは、これはアプリケーション起動時のユーザーの初期位置を中心としたもので、単位はメートルです。
  2. 地理座標(緯度と経度)

オーバーレイを配置するには、コンテンツを地理座標からAR空間に変換する必要がある。 これは2段階のプロセスだ。 まず、球状の地理座標を2D平面に投影する。 次に、投影された座標をデバイスの初期投影位置で変換する。 デバイスの初期投影位置は、その初期地理位置を投影することで導き出すことができる。 Viro Reactでは、Geolocationモジュールを使用して、ユーザーがアプリを起動したときにこれを取得できます。 最後に、ユーザーの方位についても同様の変換を行う必要があります。コンパス方向からAR空間内のデバイスの向きに変換します。 これをうまく機能させるためには、不正確なジオロケーション・ルックアップをどう扱うかを考えなければならないだろう(例えば、デバイスから取得した位置情報が不正確だった場合にどうするか)。 最後の部分である情報カードの作成は、Viroを使えば簡単です。テキスト付きの画像をあらかじめ焼いておいてViroImageを使うか、カードをよりダイナミックにする必要があればViroFlexViewを使うことができます。

ARCore Geospatial API を使用して、グローバル規模の臨場感あふれる位置情報ベースの AR エクスペリエンスを構築 Augmented Reality with React Native

Shiraishi-Shodai commented 6 days ago

語句のまとめ

シーン

ARビューによってレンダリングされるエンティティのコレクションを保持するコンテナ。

アンカー

デバイスに追跡させたい空間上の特定の点のこと オブジェクトの位置と向きを空間内で固定する。 アンカーにはローカルアンカー、Cloud Anchors、地理空間アンカーがある。

アンカーを作成する際は、現在のフレームのワールド空間の推定値を基準とする位置と向きを表すポーズを使用します。 このアンカーには、1 つ以上のオブジェクトを取り付けます。アンカーとそれに接続されているオブジェクトは、ワールド内の同じ位置に留まるように見えます。アンカーのポーズが各フレームのワールド空間の更新に適応するため、それに応じてオブジェクトのポーズが更新されます。 複数のオブジェクトを同じアンカーにアタッチすると、アンカーのポーズが調整されても、オブジェクトの相対的な位置と向きを維持できます。

様々なアンカー

地理空間アンカー

3Dコンテンツを現実世界の特定の位置に配置できるARのアンカーの一種

  1. WGS84 アンカー: WGS84アンカーを使用すると、任意の緯度、経度、高度に3Dコンテンツを配置できます。
  2. 地形アンカー: 地形アンカーを使用すると、緯度と経度だけを使って、その位置の地形に対する高さを指定してコンテンツを配置できます。 高度はVPSが把握している地面または床からの相対値で決定されます。
  3. 屋上アンカー: 屋上アンカーを使うと、緯度と経度だけを使って、その位置の建物の屋上からの相対的な高さでコンテンツを配置できます。 高度は、Streetscape Geometryで知られているように、ビルの屋上からの相対値で決定されます。 これは、建物の上に配置されていない場合、デフォルトで地形の高度になります。

VPS

画像情報を利用した位置特定システム。向きや方位を含む位置情報を取得できる。マーカーが不要。GPSよりも正確 VPSとは?高品質なAR体験を実現するVPSの仕組みと活用事例~ソニーのVPSを活用~

ARCore Geospatial API

ARCore Geospatial APIを使用すると、Googleストリートビューでカバーされている任意のエリアにコンテンツをリモートでアタッチし、世界規模でAR体験を作成することができます。 デバイスのセンサーとGPSデータを使用してデバイスの環境を検出し、その環境の認識可能な部分をGoogleのVPS(Visual Positioning System)が提供するローカリゼーションモデルにマッチングさせて、ユーザーのデバイスの正確な位置を特定します。 このAPIはまた、ユーザーのローカル座標とVPSからの地理座標をマージし、単一の座標系で作業できるようにします。 ユーザーのデバイスがGeospatial APIにリクエストを出すと、ニューラルネットワークがピクセルを処理して、ユーザーの環境の認識可能な部分を見つけ、VPSのローカリゼーション・モデルと照合する。 その後、コンピュータ・ビジョン・アルゴリズムがデバイスの位置と向きを計算し、これまでGPSだけで可能だったものよりはるかに正確な位置情報を提供します。 Geospatial APIは、WGS84仕様に従ってアンカーの水平位置(緯度経度)と垂直位置(高度)を提供する。 Geospatialアンカーは、指定された緯度、経度、高度であれば、手動で地図を作成することなく、世界中のほぼどこにでも配置することができます。

ワールド空間

ポーズ

Shiraishi-Shodai commented 6 days ago

ARCore Geospatial API: 緯度、経度、高度(WGS84座標系)を使用します。緯度と経度は度単位、高度はメートル単位 viro-react: 3D空間の座標系(x, y, z)を使用します。すべてメートル単位 座標の変換

Geospatial APIとViro-reactの座標系には以下のような主な違いがあります:

  1. 座標系の種類:
  1. 単位:
  1. 原点と方向:
  1. スケール:
  1. 高さの扱い:

これらの違いにより、Geospatial APIで取得した座標をViro-reactで使用する際には適切な変換が必要となります。具体的には:

  1. 緯度・経度を平面座標(x, z)に変換する
  2. 高度をViro-reactのy軸に対応させる
  3. 全体のスケールを調整してARシーンに適した大きさにする

この変換により、実世界の位置情報をARシーン内の適切な位置に配置することが可能になります。

Citations: [1] https://zenn.dev/drumath2237/articles/c6c0241b9ba2ae [2] https://webar-lab.palanar.com/news/geospatial-api-terrain/ [3] https://www.esrij.com/gis-guide/coordinate-and-spatial/coordinate-system/ [4] https://note.com/st_one/n/n059ba08efb75 [5] https://www.mlit.go.jp/plateau/learning/tpc14-3/ [6] https://tech.fusic.co.jp/posts/2024-03-01-unity-arcore-geospatial-api/ [7] https://developers.google.com/ar/develop/java/geospatial/anchors?hl=ja [8] https://developers.google.com/ar/develop/ios/geospatial/anchors?hl=ja