プロジェクトタンゴAPIは2つの参照フレーム間の移動としてX、Y、Zの値で姿勢を返します。これは、X、Y、Z軸がデバイスと環境のどこに関連しているかを理解することは重要です。このページには、一般的な座標系のいくつかについて説明します。
座標系
全ての図において、矢印は軸の正の向きを表します。円の中に「x」はあなたからページに向けた矢印と定義します。円の中にドットはページからあなたに向けた矢印と定義します。座標系は、そのデフォルトの方向で保持されたデバイスを表し、ユーザが直面する画面、あなたからページ方向へ向いたバックカメラを示しています。
この文書では、基準座標系からターゲット座標系への変換を表現するために、次の表記法を使用しています。
プロジェクトタンゴの座標系
プロジェクトタンゴはローカルレベルの右手座標系をSTART_OF_SERVICE
とAREA_DESCRIPTION
の座標系に使用します。この規則ではZ軸重力に沿い、Z軸+が上で、XY平面は、局所的には地面と同じ高さで、重力に対して垂直です。このローカルレベルの規則はlocal east-north-up (ENU) earth-
based coordinate
systemの変形です。真の北の方向が常に容易には取得できないので、プロジェクトタンゴは、サービスが初期化された時の、ユーザーからデバイスを指す方向をY軸+、右方向をX軸+として利用します。START_OF_SERVICE
またはAREA_DESCRIPTION
のいずれかをAPIの基準座標系として使用する際には、このローカルレベルの座標系の規則を使用します。
プロジェクトタンゴはDEVICE
座標系を、Androidセンサー座標系と同じように定義しています。デバイスがデフォルトの向きに保持されている時、X軸が水平で右向き、Y軸が垂直で上向き、Z軸はスクリーン面外向きです。このシステムでは、スクリーンの後ろの座標が負のZ値となります。
OpenGLの座標系
OpenGLの世界座標は右手座標系を使用しています。Y軸は重力に沿って定義され、Y軸+は上向き、Z軸+はユーザーの方向に定義します。
OpenGLのカメラフレームも右手座標系を使用しています。X軸は水平右向き、Y軸は垂直上向き、Z軸はカメラの方向です。このシステムでは、カメラは負のZ軸を見下ろします。
Unityの座標系
ユニティの世界座標はは、左手座標系を使用しています。Y軸+は、重力に沿って上向き、Z軸+ユーザーから離れる方向に定義します。ユニティカメラフレームも左手座標系を使用しています。
Unityカメラフレームも左手座標系を使用しています。X軸は水平右向き、Y軸は垂直上向き、Z軸はカメラの視野方向です。このシステムでは、カメラが正のZ軸を見下ろします。
座標系変換
このセクションでは、プロジェクトタンゴのローカルレベル座標系に対して表現された姿勢データを以下に示すようなOpenGLとUnityカメラなどの一般的な座標系と相互に変換する方法を説明します。
OpenGLとUnityの両方はシーンの原点を定義するワールド座標系と、ビューポートカメラをアタッチし、典型的にはプロジェクトタンゴデバイスと移動するカメラ座標系を使用します。
プロジェクトタンゴAPIは、ターゲット座標系としてデバイス(D)、基準座標系としてSTART_OF_SERVICE(SS)を使用して、この表記法によってデバイスの姿勢を報告することができます。
プロジェクトタンゴの姿勢データをOpenGLの座標システムへ変換
プロジェクトタンゴの姿勢データをOpenGL座標系(Y軸+が上方向で重力に沿う)に変換するためには、変換のペアを利用します。最初の変換は、OpenGLの世界座標系(OW)からプロジェクトタンゴのSTART_OF_SERVICE(SS)に変換します。
第2の変換は、プロジェクトタンゴデバイス(D)座標系からOpenGLカメラ(OC)座標系に変換します。OpenGLのカメラ(OC)座標系とプロジェクトタンゴデバイス(D)座標系は同じであるため、これは単位行列です。
この順に変換を乗算することにより、APIから返された姿勢を変換してをOpenGLのワールド基準座標系(OW)からOpenGLカメラ(OC)のターゲット座標系への変換を表す単一の変換行列を得ることができます。
ここに示すようにタンゴの姿勢に対して左から を掛けて、右から を掛ける必要があります
これはAPIサンプルコードで提供されています。は恒等変換行列で、それは実際には省略することができることに注意してください。ここでは完全を期すために示しています。
プロジェクトタンゴの姿勢データをUnityの座標システムへ変換
OpenGLと同様にUnity座標系の変換を扱うことができます。最初の変換はUnityワールド座標系(UW)からプロジェクトタンゴのSTART_OF_SERVICE(SS)への変換を扱います。
第2の変換は、プロジェクトタンゴデバイス(D)座標系からUnityカメラ(UC)座標系への座標変換を扱います。OpenGLとは違い、Unityは左手座標系を使用しているため、これは単位行列ではありません。
左から最初の変換を掛け、右から第2の変換を掛けて、Unityワールド座標系(UW)からUnityカメラ(UC)座標系に変換する姿勢データを取得します。
デバイス上の座標系
Each component on the device has it’s own coordinate frame, from the IMU, the cameras, to the display. The device itself also has a coordinate frame which aligns with the default Android Device coordinate frame. You can represent the position and orientation offset between each component also as a transformation matrix. You can get the camera extrinsics using the Project Tango APIs.デバイス上の各コンポーネントにはIMUから、カメラ、ディスプレイまでそれぞれの座標系がある。デバイス自体は、デフォルトのAndroidデバイス座標系と位置の合った座標系を持っています。各コンポーネント間のオフセット位置と方向も変換行列として表すことができます。プロジェクトタンゴAPIを使用して、カメラの外部パラメータを得られます。