デバイスの向きに応じてImageViewを配置する必要があるアプリケーションを作成しています。磁場センサーと加速度センサーの値を使用して、デバイスの向きを計算します。
SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerValues, magneticFieldValues)
SensorManager.getOrientation(rotationMatrix, values);
double degrees = Math.toDegrees(values[0]);
私の問題は、ImageViewの配置が向きの変化に非常に敏感であるということです。imageviewを常に画面上でジャンプさせます。(度が変わるため)
これは、私のデバイスが磁場の読み取りに影響を与える可能性のあるものに近いためである可能性があることを読みました。しかし、これが唯一の理由ではありません。
いくつかのアプリケーションをダウンロードしてみたところ、「3Dコンパス」と「コンパス」の読み取り値が非常に安定していることがわかりました(ノイズフィルターを設定した場合)。アプリケーションでも同じ動作をしたいと思います。
「ローパスフィルター」を追加することで、測定値の「ノイズ」を微調整できることを読みましたが、これを実装する方法がわかりません(数学が不足しているため)。
誰かが私のデバイスでより安定した読み取りを作成するのを手伝ってくれることを願っています。デバイスへの少しの動きが現在の向きに影響を与えることはありません。今、私は小さなことをします
if (Math.abs(lastReadingDegrees - newReadingDegrees) > 1) { updatePosition() }
ノイズのビットをフィルタリングします。しかし、それはあまりうまく機能していません:)