Open8

Geospatial APIのAREarthManagerについて調べる

イワケンイワケン

背景

Geospatial APIを使う際、緯度経度などの情報はこのAREarthManagerクラスから取得する。なのでどんな中身か調べたい

イワケンイワケン

Summary

ARCoreExtensionsConfig.GeospatialMode must be GeospatialMode.Enabled in order to make use of the Geospatial API. Not all devices support GeospatialMode.Enabled, use AREarthManager.IsGeospatialModeSupported to find whether the current device supports enabling this mode.

AREarthManager.CameraGeospatialPose should only be used when AREarthManager.EarthTrackingState is Tracking, and otherwise should not be used. If the EarthTrackingState does not become Tracking, then AREarthManager.EarthState may contain more information on this failure.

ARCoreExtensionsConfig.GeospatialMode は、Geospatial API を使用するために GeospatialMode.Enabled である必要があります。すべてのデバイスが GeospatialMode.Enabledをサポートしているわけではないので、現在のデバイスがこのモードを有効にすることをサポートしているかどうかを調べるには AREarthManager.IsGeospatialModeSupportedを使用してください。

AREarthManager.CameraGeospatialPoseAREarthManager.EarthTrackingStateTrackingの時のみ使用されるべきで、それ以外は使用しないで下さい。EarthTrackingStateTrackingにならない場合、AREarthManager.EarthStateにこの失敗に関する詳細な情報が含まれている可能性があります。

つまり

  1. AREarthManager.IsGeospatialModeSupportedで、現在のデバイスがGeospatialModeをサポートしているか調べる
  2. GeospatialMode.Enabledになっているか調べる
  3. AREarthManager.EarthTrackingStateがTrackingになっているか調べる
  4. AREarthManager.CameraGeospatialPoseを取得することができる
イワケンイワケン

Inheritance (継承)

Inherits from: UnityEngine::MonoBehaviour

MonoBehaviourを継承。
なので、何かのGameObjectにアタッチする必要がある。

イワケンイワケン

AREarthManagerのプロパティ

プロパティ名 内容
CameraGeospatialPose GeospatialPose. 最新のフレームにおけるカメラの GeospatialPoseを取得し、デバイスの地理的な位置を記述します。
EarthState 最新フレームのGoogle.XR.ARCoreExtensions.EarthStateを取得します。
EarthTrackingState 最新フレームにおける地球のトラッキング状態を取得します。

AREarthManagerの関数

関数名 内容
IsGeospatialModeSupported(GeospatialMode mode) 提供された GeospatialMode がこのデバイスでサポートされているかどうかを確認する。
イワケンイワケン

CameraGeospatialPose

GeospatialPose CameraGeospatialPose

最新のフレームにおけるカメラの GeospatialPoseを取得し、デバイスの地理的な位置を記述します。

ポーズの位置はデバイスのカメラに位置し、向きはディスプレイの向きに密接に近似しています。

注意:このポーズは、EarthTrackingState が TrackingState.Tracking の時のみ有効で、それ以外の場合は使用しないでください。

Google.XR.ARCoreExtensions.GeospatialPose

https://developers.google.com/ar/reference/unity-arf/struct/Google/XR/ARCoreExtensions/GeospatialPose#structGoogle_1_1XR_1_1ARCoreExtensions_1_1GeospatialPose

地球からの相対的な位置、標高、コンパスの方位を記述する。

Summary

以下の構成になっています

  • Latitude(緯度)・longitude(経度)は度数で指定し、正の値はWGS84仕様で定義された赤道より北、本初子午線より東を意味する。
  • Altitude(標高)はWGS84楕円体からの高さで、海抜メートルとほぼ等しい値で指定します。
  • Heading (方位)は北から時計回りの度で指定します。詳しくはGeospatialPose.Headingを参照してください。
  • 緯度、経度、高度、方位の精度は信頼区間の数値で見ることができ、数値が大きい(信頼区間大)ほど信頼度が低く、数値が小さい(信頼区間小)ほど信頼度が高いことを示します。

GeospatialPose は AREarthManager.CameraGeospatialPose から取得することができる。

Public attributes (publuc変数)

GeospatialPoseの変数名 内容
Altitude double WGS 84楕円体からの高さでのポーズの高度(単位:メートル)
Heading double ポーズの方位(単位:度数)
HeadingAccuracy double 推定方位精度(単位:度数)
HorizontalAccuracy double 緯度・経度に対する水平精度の推定値(単位:メートル)
Latitude double ポーズの緯度(単位:度数)
Longitude double ポーズの経度(単位:度数)
VerticalAccuracy double 水平精度の推定値(単位:メートル)

Altitude (高度)

WGS 84楕円体からの高さでのポーズの高度。

Heading (方位)

ポーズのヘディングを度数で示す。

Headingは真北から時計回りで指定され、デバイスが向いている方向を近似する。北向きの場合は 0°、東向きの場合は 90°、南向きの場合は +/-180°、西向きの場合は -90° が返されます。

ヘディングの近似は、デバイスの現在のオリエンテーションモード(すなわち、縦または横)での回転とピッチに基づきます。例えば、デバイスが垂直または直立に保持されている場合、方位はカメラ光軸に基づきます。デバイスが水平に保持され、下を向いている場合、方位は、オリエンテーションモードに関して、デバイスの上部に基づきます。

HeadingAccuracy (方位の精度)

推定方位精度を度単位で表示します。

低いほど精度が高い

Heading精度はHeadingを中心とした68%信頼度の半径と定義しています。言い換えると、真のHeadingHeadingAccuracyの範囲内にある確率は68%です。値が大きい程、精度が低いことを示します。

例えば、推定されたheadingが60°でHeadingAccuracyが10°の場合、真のヘディングが50°から70°の間にある確率は68%です。

HorizontalAccuracy (水平精度)

緯度・経度に対する水平精度の推定値(メートル)。

つまり、円の半径の精度。低いほど精度が高い

水平精度は、推定された水平位置の周りの68パーセンタイル信頼度の半径と定義しています。つまり、緯度と経度を中心とし、水平精度と同じ半径の円を描くと、68%の確率で真の位置が円の内側にあることになります。数字が大きくなるほど精度は低くなります。

例えば、緯度が10°、経度が10°で、返されたHorizontalAccuracy値が15であれば、真の位置が(10°, 10°)の緯度経度座標から15m以内にある確率は68%であることを示しています。

VerticalAccuracy (垂直精度)

緯度・経度に対する垂直精度の推定値(単位:メートル)。

つまり、高さの精度。低いほど精度が高い

垂直方向の精度を、推定高度を中心とした68%信頼度の半径と定義します。言い換えれば、真の高度がこのAltitudeの出力値(メートル単位)以内である確率は68%です(上か下か)。数値が大きいほど精度が低いことを示します。

例えば、Altitudeが100メートルで、VerticalAccuracyが20メートルの場合、真の高度が100メートルから20メートル以内 (高度80m ~ 120m)にある確率は68%です。

Latitude (緯度)

ポーズの緯度(度)。

正の値は、WGS84仕様で定義された赤道より北にあることを意味する。

Longitude (経度)

ポーズの経度(度数)。

正の値は、WGS84仕様で定義された本初子午線より東である。

イワケンイワケン

EarthState

EarthState EarthState

最新フレームの Google.XR.ARCoreExtensions.EarthStateを取得します。

Google.XR.ARCoreExtensions.EarthState

https://developers.google.com/ar/reference/unity-arf/namespace/Google/XR/ARCoreExtensions#earthstate

地球ローカライゼーションの現状を説明します。

AREarthManager.EarthTrackingStateがTrackingState.Trackingにならない場合、EarthStateはこの失敗の原因を含む場合があります。

EarthStateのプロパティ

EarthStateのプロパティ名 内容
Enabled 地球ローカライズは有効であり、問題は発生していない。AREarthManager.EarthTrackingStateを確認し、Geospatial APIが使用可能かどうかを判断してください。
ErrorGeospatialModeDisabled このセッションでは、地球のローカライズが無効になっています。このセッションで作成されたすべての ARGeospatialAnchor は、TrackingState が None に設定され、破棄されるはずです。
ErrorInternal 地球のローカライズは内部エラーに遭遇しました。アプリはこのエラーから回復しようとしないでください。詳細については、アプリケーションログを参照してください。
ErrorNotAuthorized アプリケーションから提供された認証は有効ではありません。(API Keyなど確認)
ErrorPackageTooOld パッケージが対応バージョンより古い。
ErrorResourcesExhausted Google Cloudプロジェクトに割り当てられた割り当て枠を使い果たしたアプリケーション。