2

基本的にコンパスを作成するために TYPE_MAGNETIC_FIELD/TYPE_ACCELEROMETER センサーを使用しています。

getRotationMatrix を呼び出してから remapCoordinateSystem (常にランドスケープ) を呼び出して軸を交換し、次に getOrientation を呼び出してから、現在インデックス 0 が必要な軸を取得し、toDegrees を呼び出して、0 ~ 360 の範囲にします

val= (val+ 360) % 360;

少し変動することを除いて、すべてがうまく機能するので、God(google)を検索してローパスフィルターを検索し、ほとんどがうまく機能しませんでしたが、ほとんど機能するものを見つけました。

newval = oldVal + ALPHA * (newval-oldVal);

アルファ 約 0.2 ~ 0.5

したがって、180(回転で-180)ですぐに0にジャンプしてから181(-179回転)になりますが、フィルターを削除すると、これは行われません。

フィルターの何が問題なのか、またはこれを修正する方法を教えてください。

Android 2.2 であるため、TYPE_LINEAR_ACCELERATION または TYPE_ORIENTATION はありません (非推奨)

ありがとう

4

1 に答える 1

0

方向角が周期的であるという問題があります。180 度の回転は -180 度 (指摘されているように) と同じであり、540 度などと同じでもあります。したがって、ローパス フィルターの演算は変化しませんが、必要な数値フィールドは周期的でなければなりません。良い答え。向きを表す回転行列が与えられ、これらの行列は完全に優れた数体系になります。したがって、回転行列に対してすべてのフィルター演算を行い、最後に角度に変換するだけであれば、フィルターは問題なく機能します。

于 2012-11-08T19:30:30.713 に答える