2

XYZij データ (ドキュメントによると、カメラ空間にデータを格納する) でサンプリングおよび格納された点群をワールド座標系に変換して、それらをマージできるようにしようとしています。Tango リスナーに使用するフレーム ペアにはCOORDINATE_FRAME_START_OF_SERVICE、ベース フレームとCOORDINATE_FRAME_DEVICEターゲット フレームがあります。

これは私が変換を実装する方法です:

  1. asから回転クォータニオンを取得し、TangoPoseData.getRotationAsFloats()asq_rからポイント位置を取得XYZijpます。

  2. 次の回転を適用します。ここq_multで、 は 2 つの四元数のハミルトン積を計算するヘルパー メソッドです (別の数学ライブラリに対してこの方法を検証しました)。

    p_transformed = q_mult(q_mult(q_r, p), q_r_conjugated);

  3. から取得した翻訳を に追加しTangoPoseData.getTranslationAsFloats()ますp_transformed

しかし、最終的には、ポイントはp_transformed常に、位置合わせされマージされたポイント クラウドではなく、部分的にオーバーラップしたポイント クラウドの乱雑になってしまうように見えます。

ここで何か不足していますか?変換に概念上の誤りはありますか?

前もって感謝します。

4

4 に答える 4

1

クォータニオン表記には 2 つの異なる「標準」形式があります。1 つは最初に回転角度 (xijk) を持ち、もう 1 つは最後に回転角度 (xyz w) を持ちます。Tango API ドキュメントには、TangoPoseData::orientation が xyz w としてリストされています。四元数に関するウィキペディアのページには、それらが xij k としてリストされています。製品メソッドでどの表記が想定されているかを確認することをお勧めします。

于 2015-03-30T15:26:10.337 に答える