非表示
Project Tango

Poses

プロジェクトタンゴAPIは姿勢を通して3D空間内の位置を記述し、姿勢は他の座標系に対する1つの座標系の向きと位置として定義されます。このページでは、より詳細に姿勢データについて説明し、それらの状態のライフサイクルについて説明します。

Pose data(姿勢データ)

姿勢データは2つの形式で要求することができます。TangoService_getPoseAtTime()を使用して姿勢を問い合わせることができ、これは与えられたタイムスタンプに最も近い姿勢(基準座標系からターゲット座標系への)を返します。また、姿勢データが利用可能になったら姿勢の更新を受信するためにコールバックonPoseAvailable()TangoService_connectOnPoseAvailableを()にアタッチすることができます。どちらのケースでも TangoPoseData受信します。

typedef struct TangoPoseData {
 
int version;
 
double timestamp;
 
double orientation[4];
 
double translation[3];
 
TangoPoseStatusType status_code;
 
TangoCoordinateFramePair frame;
 
int confidence;
 
float accuracy;
} TangoPoseData;

Pose Status(姿勢状態)

TangoPoseDataTangoPoseStatusTypeによって定義される状態を含み、姿勢推定システムの状態に関する情報を提供します。TangoPoseStatusTypeは次のとおり利用できます。

typedef enum {
  TANGO_POSE_INITIALIZING
= 0,
  TANGO_POSE_VALID
,
  TANGO_POSE_INVALID
,
  TANGO_POSE_UNKNOWN
} TangoPoseStatusType;

INITIALIZINGは、モーション·トラッキング·システムが開始中または無効な状態から回復中で、姿勢データを使用してはならないことを意味します。VALIDは、システムが返す姿勢が有効で、使用できることを意味します。INVALIDは、システムがなんらかの困難に遭遇したことを意味し、姿勢推定が正しくない可能性があります。UNKNOWNは、システムが未知の状態にあることを示します。

Lifecycle of Pose Status(姿勢状態のライフサイクル)

図1:プロジェクトタンゴの姿勢データのライフサイクル

TANGO_POSE_INITIALIZINGのステータスコードはプロジェクトタンゴのフレームワークが初期中で、姿勢データがまだ利用できないことを示します。コールバックを使用している場合は、フレームワークが初期化されている間は、TANGO_POSE_INITIALIZINGがステータスコードに設定され、一回のみ姿勢が更新されます 

初期化が終了すると、姿勢はTANGO_POSE_VALIDの状態になります。コールバックを使用している場合は、利用可能な最大の頻度で更新を受信します。

システムが困難に遭遇してTANGO_POSE_INVALIDの状態になった場合、回復方法は初期化時の設定によって異なります。config_enable_auto_recoveryTrueに設定されている場合、システムは直ちにモーショントラッキングシステムをリセットし、TANGO_POSE_INITIALIZINGの状態に入ります。config_enable_auto_recoveryFalseが設定されている場合、姿勢データがTANGO_POSE_INVALIDの状態になったままとなり、TangoService_resetMotionTracking()を呼び出すまで更​​新は受信されません。

Using Pose Status(姿勢状態の使用)

あなたは姿勢データの内で返される状態に注意し、それに応じて、アプリケーションの応答を持つ必要があります。たとえば、あなたのアプリケーションでインタラクティブな機能を開始する前に、有効になっている姿勢データまで待たなければなりません。姿勢が無効になっている場合は、システムの初期化が完了して再び有効になるまでインタラクティブな機能を一時停止する必要があります。アプリケーションによって、システムの「回復」後に何をするかが異なります。モーショントラッキングを単独で使用している場合は、単純にあなたのアプリケーションを再開することができます。領域学習やADFを使用している場合は、デバイスがローカライズできるまで動き回るようにユーザに指示する必要があるかもしれません。