私は、電話がスポットオブインタレストに面しているときにテキストビューを視覚化する拡張現実アプリを作成しています(GPS位置は電話に保存されています)。テキストビューは、画面内の関心のある場所にペイントされます。
それは問題なく動作します。問題は、コンパスと加速度計が非常に「変化」し、センサーの不正確さのためにテキストビューが常に上下に移動していることです。
それを解決する方法はありますか?
私は、電話がスポットオブインタレストに面しているときにテキストビューを視覚化する拡張現実アプリを作成しています(GPS位置は電話に保存されています)。テキストビューは、画面内の関心のある場所にペイントされます。
それは問題なく動作します。問題は、コンパスと加速度計が非常に「変化」し、センサーの不正確さのためにテキストビューが常に上下に移動していることです。
それを解決する方法はありますか?
私たちの問題も同じです。単純な拡張現実プロジェクトを作成するときにも同じ問題が発生しました。解決策は、指数平滑法または移動平均関数を使用することです。以前の値を1つだけ保存する必要があるため、指数平滑法をお勧めします。サンプルの実装は以下から入手できます。
private float[] exponentialSmoothing( float[] input, float[] output, float alpha ) {
if ( output == null )
return input;
for ( int i=0; i<input.length; i++ ) {
output[i] = output[i] + alpha * (input[i] - output[i]);
}
return output;
}
アルファは平滑化係数です(0<=アルファ<=1)。alpha = 1に設定すると、出力は入力と同じになります(スムージングはまったくありません)。alpha = 0に設定すると、出力は変更されません。ノイズを除去するには、加速度計と磁力計の値を単純に平滑化することができます。
私の場合、加速度計のアルファ値=0.2と磁力計のアルファ値=0.5を使用します。オブジェクトはより安定し、動きはかなりいいです。
さらに一歩進めたい場合は、方向データまたはセンサーフュージョン用のローパスフィルターを確認する必要があります。
あなたのアプリで頑張ってください。
JQCorreia
簡単なトリックで解決しました。これにより結果が少し遅れますが、コンパスと加速度計の不正確さを確実に回避できます。
最後の値の履歴を作成しN
ます(したがって、値を配列に保存し、N
再びゼロから開始したときにインデックスをインクリメントします)。次に、保存された値の算術平均を使用するだけです。
ジャイロスコープセンサーの読み取り値を統合すると、方向の最終的な推定の安定性が大幅に向上します。デバイスにジャイロスコープが搭載されている場合は、安定したコンパスアプリケーションをご覧ください。ジャイロスコープが搭載されていない場合は、ビデオをご覧ください。
ジャイロスコープの統合は、補完フィルターを使用してかなり簡単な方法で行うことができます。