web-dev-qa-db-ja.com

Androidの回転ベクトルセンサーと方向センサーの概念的な違いは何ですか?

Androidは、回転ベクトルセンサーと方向センサーの両方を提供します。ベクトルセンサーには角度の罪があるため、方向センサーには角度があるため、それらは異なるデータを返します。しかし、概念的な違いは何ですか?ドキュメントからは理解できません。 3次元空間でのデバイスの方向を提供するのはどれですか。よくわかりません!

22
user1781028

古いORIENTATIONセンサーは、3つの角度を使用して方向を報告します。この座標系の問題は、「ジンバルロック」の影響を受けることです。実際の方向ベクトルが垂直に近い場合、座標の1つが90度または-90度になり、残りの2つの座標は解釈不能になるか、危険な非正規化になります。

新しいROTATIONセンサーは、クォータニオン座標を使用して方向を報告します。これは、操作がより複雑ですが、ジンバルロックの問題の影響を受けません。クォータニオン座標を使用して方向が報告される場合、方向が何であっても、デバイスの正確な方向を決定できます。

四元数も計算効率が高くなります。ベクトルにクォータニオン回転を適用するために、高価なトリガー関数を呼び出す必要はありません。 w座標が指定されていない場合でも、3つの角度オイラー形式の方向座標に対する3つのsinおよび3つのcos関数呼び出しと比較して、1つのsqrt呼び出しでwを計算できます。

短編:ORIENTATIONスタイルのセンサーが間違っていました。 API 9では、ROTATIONセンサーに置き換えることで修正されました。

44
Robin Davies

ROTATION_VECTORセンサーはAPI 9で導入され、さまざまなセンサー(通常はACCELEROMETER、GEOMAGNETIC_FIELD、およびGYROSCOPE)からのデータを組み合わせて、ACCELおよびGEOMAGNETIC_FIELDセンサーからの生データを使用するのではなく、より正確なデータを提供するいくつかのスマートな計算を行う「仮想」センサーを表します。これは「センサーフュージョン」と呼ばれます。あなたが見つけることができる詳細情報 ここ

ORIENTATIONセンサーは、あまり正確なデータを提供しないため、推奨されていません。ドキュメントでは、代わりにACCELEROMETERセンサーとGEOMAGNETIC_FIELDセンサーの生データを使用することを推奨しています。

残念ながら、現在調査中のため、ROTATION_VECTORセンサーデータの使用例は提供できません:)

生データの使用方法の例が必要な場合に備えて-お気軽に私に質問してください-いくつかの例を掲載しますが、簡単なグーグルでより良い結果を得ることができます;)

18
Pavel Dudka

安いAndroid電話(ハイエンドのiPhoneとは異なります)では、コンパスは電話の向きが水平に近い(つまり、地表面に平行)場合にのみ機能します。

技術的には、優れたコンパス(つまり、浮遊磁気球)はどの方向でも機能しますが、安価なコンパスでは機能しません。したがって、コンパスを使用するには、MAGNETOMETERを使用する前に、ACCELEROMETERを見て、スマートフォンが水平であることを確認してください。将来的には、Googleがより優れた磁力計を使用することを願っています。

0
Vlad

それらは概念的には同じですが、表現が異なるだけです。

方位センサーのコード こちら をご覧ください。方位センサーの関数のパラメーターは回転行列で、これは回転ベクトル(クワット表現)から計算されます。

0
matrixisreal