2016-05-17 11 views
1

ロボットの横向きのGoogle Project Tangoデバイスを搭載し、onPoseAvailable()イベントリスナーから見出しを取得したいとします。私はフレームワークがAPIに記述されているように四元数を返すことを知っています。四元数から度(0〜360°)の回転から

クォータニオンを度単位の測定値に変換するのに多くの努力をしました。興味のある方向軸はyhttps://developers.google.com/project-tango/overview/coordinate-systems#project_tango_coordinate_systems)で、私のロボットの見出しを決定します。

私の最初のアプローチは、TYPE_ROTATION_VECTOR,TYPE_GYROSCOPEまたはTYPE_ORIENTATION(depricated)を使用することでした。しかし、結果の値は使用できませんでした。後で私はタンゴが磁気センサーに大きな問題を抱えていることを読む(How to detect an absolute rotation of an android device

タンゴ自体から姿勢データに切り替える理由はこれでした。しかし、ここでも同じです。適切な結果を得るためにはロケット科学、タンゴには大きな問題があります。私はすべてのstackoverflowの記事と私がインターネットで見つけたほとんどすべてを読んだ。私が見つけたほぼすべてのコードを再実装しました。しかし、私の現在のシナリオでは、期待通りの作品はありませんでした。他の軸の他の動きについては、それは!

私は次のことを試してみた:

かでありますロボットアプリケーションのローテーションを決定するもう1つの方法はありますか? (ちょうど見出し)。私が達成したいのは、あらかじめ定義された角度(度単位)で回転させることだけです。ほとんど私はちょうど右または左(90°)を回したいと思う。

誰かが(Google Project Tangoデバイスをターゲットにした)作業コードを提供できる場合は、非常に役に立ちます。これでもう忘れてしまった。他のAndroid搭載端末については、私はすぐに解決策を見つけました。除外されるべきではない、そのデバイスには他の大きなバグがあります。

答えて

2

このコードを試してください。計算された方位は、サービス開始時のデバイス方位に関連していることに注意してください。

double orientationRoll = Math.toDegrees(Math.atan2(
      2.0 * (rotation[TangoPoseData.INDEX_ROTATION_X] * rotation[TangoPoseData.INDEX_ROTATION_Y] + rotation[TangoPoseData.INDEX_ROTATION_W] * rotation[TangoPoseData.INDEX_ROTATION_Z]), 
      Math.pow(rotation[TangoPoseData.INDEX_ROTATION_W], 2) + Math.pow(rotation[TangoPoseData.INDEX_ROTATION_X], 2) - Math.pow(rotation[TangoPoseData.INDEX_ROTATION_Y], 2) - Math.pow(rotation[TangoPoseData.INDEX_ROTATION_Z], 2) 
    )); 
+0

ありがとうございました...まさに私が探していたものです。私自身でこの公式を推論する機会はなかった。 – dannyyy

関連する問題