2012-04-24 23 views
2

私は基本的にコンパスを作成するためにTYPE_MAGNETIC_FIELD/TYPE_ACCELEROMETERセンサーを使用しています。Androidセンサーの回転角度

私は軸を交換するgetRotationMatrix、その後、(いつもランドスケープ)remapCoordinateSystemを呼び出し、その後getOrientationはその後、私は軸を取り、私は現在、インデックス0を必要とし、その後、私はtoDegreesを呼び出してから、私はそれを0から360の範囲で作る

ヴァル=(val + 360)%360;

私は検索の神(google)に行き、ローパスフィルターtheresを割り振って、ほとんどがあまりうまく動作しないが、私はほとんど動作するものを見つけた。

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

アルファ程度0.2-0.5

だから今、それはすぐに0にジャンプし、それは181(-179回転)に行くが、私は、フィルタを削除する場合、それはこれをしない180(回転-180)で、 。

フィルタに問題がありますか、これをどのように修正できますか?

アンドロイド2.2ありませんのでTYPE_LINEAR_ACCELERATIONまたはTYPE_ORIENTATION(非推奨)

おかげ

+0

このような問題に直面した場合、問題を含む期間にわたってフィルタに入力されたサンプルとフィルタ出力の両方を記録することが有益です。結果を表にフォーマットして熟考すれば、ラップアラウンドや本当に野生のサンプルデータで問題があるかどうかを理解するのに役立ちます。それを修正することはもう少し難しいかもしれません...問題について考えてみると、スプレッドシートは "もしあれば..."というシナリオを立てるのに役立ちます。 –

+0

こんにちは。私はそれをエクセルに追加し、180度後に0にジャンプすると判断したグラフを作成しました。ホワイトボード上に描画しても、それは理解できません。まず、私はそれがそれを乱して小数のためだと思った...ありがとう – Pintac

+0

彼らは180を少し超えて回転されたとき、入力はどのような価値がありますか? 180の後に期待される次の値は何ですか? 180と-180が同等である場合、問題は、フィルタがこれらの2つの値をゼロにすることです。 –

答えて

0

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

関連する問題