Android は、回転ベクトル センサーと方向センサーの両方を提供します。ベクトルセンサーの場合は角度の罪があり、方向センサーの場合は角度があるため、それらが異なるデータを返すことはわかっています。しかし、概念的な違いは何ですか?ドキュメントからは理解できません。3 次元空間でのデバイスの向きを提供するのはどれですか? よくわかりません!
4 に答える
古い ORIENTATION センサーは、3 つの角度を使用して方向を報告します。この座標系の問題は、「ジンバル ロック」が発生することです。実際の方向ベクトルが垂直に近い場合、座標の 1 つが 90 度または -90 度になり、残りの 2 つの座標が解釈不能になるか、危険なほど非正規化されます。
新しい ROTATION センサーは、操作がより複雑なクォータニオン座標を使用して向きを報告しますが、ジンバル ロックの問題はありません。クォータニオン座標を使用して向きが報告されると、向きが何であれ、デバイスの正確な向きを判断できます。
クォータニオンは、計算効率も向上します。ベクトルにクォータニオン回転を適用するために高価な三角関数を呼び出す必要はありません。w 座標が指定されていない場合でも、1 回の sqrt 呼び出しで w を計算できます。これは、3 角オイラー形式の方向座標に対する 3 回の sin 関数と 3 回の cos 関数の呼び出しとは異なります。
短編小説: ORIENTATION スタイルのセンサーが間違っていました。これらは API 9 で修正され、ROTATION センサーに置き換えられました。
ROTATION_VECTOR センサーは API 9 で導入され、さまざまなセンサー (通常は ACCELEROMETER、GEOMAGNETIC_FIELD、および GYROSCOPE) からのデータを結合し、ACCEL および GEOMAGNETIC_FIELD センサーからの生データを使用するのではなく、より正確なデータを提供するためにスマートな計算を行う「仮想」センサーを表します。これを「センサーフュージョン」と呼びます。ここで見つけることができる詳細情報
ORIENTATION センサーはあまり正確なデータを提供しないため、非推奨です。ドキュメントでは、代わりに ACCELEROMETER および GEOMAGNETIC_FIELD センサーからの生データを使用することを提案しています。
残念ながら、現在調査中のため、ROTATION_VECTOR センサー データの使用例を提供することはできません :)
生データの使用方法の例が必要な場合に備えて-お気軽にお問い合わせください-いくつかの例を投稿しますが、単純なグーグルがあなたをより良くするのに役立ちます;)