非表示
Project Tango

参照フレーム

3D空間内の位置について話すには多くの異なる方法があります。このページでは、プロジェクトのタンゴがモーショントラッキングデータ扱う方法と、一般的な3Dエンジンでそのデータを使用するときに注意を払うことを説明します。

物体の位置と向き、つまり姿勢を記述する場合、参照フレームが何であるかを指定することが重要である。たとえば、「ボックスは3メートル先にあります」と言っては十分ではありません。何から3メートル?原点(0,0,0)はどこ?」と尋ねる必要があります。原点は、アプリケーションが最初に起動した時のデバイスの位置かもしれませんし、机の角、建物の正面玄関、またはギニア湾の中かもしれません。情報を意味のあるものにするために、何か他のものに関してモノの位置と方向を定義する必要があります。その結果、プロジェクトタンゴのAPIが姿勢の要求を特定するために、座標系のペアシステムを使用しています。

座標系のペア

プロジェクトタンゴAPIはの柔軟なターゲットフレームと基準フレームのセットに基づいてモーショントラッキングデータを提供しておりユースケースに最適な座標系を選択することができます。高レベルでは、外部座標系とデバイス間やデバイスとその様々な構成要素間の参照の様々なフレームを提供しています。異なる座標系のペアを選択することで、領域記述の原点や、サービスの開始点、デバイスの姿勢、個々の要素のオフセットを含む、システムのすべての部分の位置と方向を取得することができます。

ターゲットフレームにCOORDINATE_FRAME_DEVICEを使用しているペアでは、更新はデバイスがサポートしている姿勢推定レートで利用できます。ターゲットフレームをCOORDINATE_FRAME_START_OF_SERVICEに、基準フレームをCOORDINATE_FRAME_AREA_DESCRIPTIONのにするとドリフト補正またはローカリゼーションが発生するたびに更新されます。要素のオフセットは固定で、一度だけ取得する必要があります。

プロジェクトタンゴはSTART_OF_SERVICEとAREA_DESCRIPTIONの座標系に右手系ローカルレベルの座標系を使用しています。この規則ではZ軸重力に沿い、Z軸+が上で、XY平面は、局所的には地面と同じ高さで、重力に対して垂直です。 DEVICE座標系はアンドロイドセンサ座標系と同じように定義されています。デバイスがデフォルトの向きに保持されると、X軸は水平で右向きであり、Y軸は垂直で上向きで、Z軸はスクリーン面の外向きです。このシステムでは、スクリーンの後ろ側の座標が負のZ値となります。これはあなたのレンダリングエンジンに合わせて規則のいくつかまたはの全てを変換するのに便利であることがわかるでしょう。座標系とその変換の詳細については座標システムの表記参照してください。

Target Frame Base Frame
COORDINATE_FRAME_DEVICE COORDINATE_FRAME_PREVIOUS_DEVICE_POSE
COORDINATE_FRAME_DEVICE COORDINATE_FRAME_START_OF_SERVICE
COORDINATE_FRAME_DEVICE COORDINATE_FRAME_AREA_DESCRIPTION
COORDINATE_FRAME_START_OF_SERVICE COORDINATE_FRAME_AREA_DESCRIPTION
COORDINATE_FRAME_DISPLAY COORDINATE_FRAME_DEVICE
COORDINATE_FRAME_IMU COORDINATE_FRAME_DEVICE
COORDINATE_FRAME_RGB_CAMERA COORDINATE_FRAME_DEVICE
COORDINATE_FRAME_DEPTH_CAMERA COORDINATE_FRAME_DEVICE
COORDINATE_FRAME_MOTION_CAMERA COORDINATE_FRAME_DEVICE

This is similar to processing the x and y deltas from a typical desktop mouse—although the absolute position of the mouse is unknown, giving users visual feedback of the device's relative tracking is sufficient for many applications. ターゲットフレームがCOORDINATE_FRAME_DEVICEで基準フレ ​​ームCOORDINATE_FRAME_PREVIOUS_DEVICE_POSEの場合、前回の更新の時のデバイス位置に対するデバイスの位置を提供します。完全な仮想環境でカメラを制御するなどのように、現実の世界の座標系に対する動きをしっかりマッチさせるのに関心がなければ、モーショントラッキングのこのモードをお勧めします。これは典型的なデスクトップのマウスの絶対位置は不明であり、xとyのデルタを処理することに類似しており、多くのアプリケーションにはユーザーにデバイスの相対的な追跡の視覚的なフィードバックを与えることで十分です。この座標系のペアには、ドリフト補正やローカライゼーションが含まれていません。

ターゲットフレームCOORDINATE_FRAME_DEVICEに対する基準フレームCOORDINATE_FRAME_START_OF_SERVICEは、プロジェクトタンゴサービスが最初に正常に初期化されたときに、初期化位置に対するデバイスの位置を提供します。このモードでは、サービスが開始してからの時間に対するデバイスの動きを蓄積します。モーショントラッキングが失敗した場合、サービスはそれを検出できます。この期間中、システムが不正な姿勢を提供します。TangoService_resetMotionTracking()が呼び出されるか、自動リセットがサービスの設定で有効になっていると、システムは、追跡を再初期化しようとします。再初期化に成功した後、サービス開始時の座標系に対するデバイスの最後の既知の良い姿勢を復元し、中断したところからまた始めるよう最善を尽くします。詳細については、姿勢状態のライフサイクル見てください。この座標系のペアは、ドリフト補正やローカライズが含まれていません。アプリケーションがドリフト補正やローカライズを使用していない場合は、領域学習モードを無効にしてADFをロードしないことにより、処理要求を下げることができます。

ターゲットフレームCOORDINATE_FRAME_DEVICEに対する基準フレームCOORDINATE_FRAME_AREA_DESCRIPTIONは、領域記述情報に基づいて修正を含めたデバイスの位置を提供します。このモードでは、領域学習モードがオンになっているか、以前に作成したADFがロードされている必要があります。ADFをロードせずに学習モードをオンにした場合、領域記述の基準フレームの原点は、サービス開始の初期位置と同じです。学習モードであってもなくても、ADFをロードした場合、領域記述の基準フレームの原点は、ADFに格納された原点であり、デバイスがローカライズされた後にのみデータを受信します。構成設定によっては、このモードは常に使用できません。詳細については、学習モードとロードされた領域記述ファイルの使用を参照してください。COORDINATE_FRAME_DEVICEと COORDINATE_FRAME_AREA_DESCRIPTIONペアが有効となる前に、モーショントラッキングを使用する必要がある場合、暫定的に基準フレームにCOORDINATE_FRAME_START_OF_SERVICEまたはCOORDINATE_FRAME_PREVIOUS_DEVICE_POSEを使用することができます。

ターゲットフレームCOORDINATE_FRAME_START_OF_SERVICEに対する基準フレームCOORDINATE_FRAME_AREA_DESCRIPTIONは、ローカリゼーションイベントやドリフト補正が発生したときだけ更新を提供します。これには領域学習モードがオンになっているか、以前に作成したADFがロードされている必要があります。ADFがロードされている場合、領域記述基準フレームの原点は、ADFに格納された原点です。フレーム間の動きの増分からデバイスの姿勢の調整を分離することで、ユーザーエクスペリエンスの中断を最小限にするために、アプリケーション内でいつ、どのように姿勢の調整を組み込むかを決めることができます。

 基準フレームCOORDINATE_FRAME_DEVICEに対する様々な構成要素ターゲットフレ ​​ームを使用すると、特定のデバイスのレイアウトを知らなくても参照のデバイスに対する個々の要素の相対オフセットを照会することができます。一部のアプリケーションでは、動き追跡カメラ、RGBカメラ、深度カメラのような複数のデータソースの正確な位置合わせを必要とします。レンダリングカメラからの仮想イメージをディスプレイの中央に整列したいこともあるかもしれません。2つの構成要素間の相対オフセットは外部パラメータと呼ばれることもあります。アプリケーションの要件に応じて、これらの変換を必要としない場合もあります。データ上のモーショントラッキングの参照フレームとタイムスタンプと組み合わせることで、これらのオフセットにより、一緒に複数のデータソースを位置合わせしたり、合成するために必要な空間と時間の両方で様々なセンサ入力をより完全な理解できるようになります。

デバイス座標系の利用

COORDINATE_FRAME_DEVICEの基準フレームは、デバイスの内部構成要素の全てに共通の基準点を提供する。この基準フレームの原点は、必ずしもいずれかの特定のコンポーネントに対応する必要はなく、デバイス間で異なる場合があります。他のAndroidのセンサと同様に、デバイス座標系の軸は、製造業者によって定義されるデバイスの自然な(デフォルト)の向きと整列しています。デバイスの製造元で定義された自然な向きは、あなたのアプリケーションの所望の向きと一致しない場合があります。将来の互換性を最大にするために、プロジェクトタンゴ準拠のデバイスは、ランドスケープやポートレートのいずれかである自然な向きを有することを仮定していません。その代わりに、画面の回転を決定するためAndroidのgetRotation()メソッドを使い、センサー座標をスクリーン座標にマッピングするためにremapCoordinateSystem()メソッドを使います。詳細についてはセンサ座標系のAndroidのドキュメントを参照してください。