もちろんゼロから「発明」する必要はありません。GPS/INS フュージョンは文献でよく取り上げられているトピックです。よく知られている本は次の 2 つだけです。
他の人が指摘しているように (例: Kalman Filter for Android )、Java / for Android にもカルマン フィルターの実装があります。
特定のケースでのカルマン フィルター処理の問題は、カルマン フィルターを実装するためのいくつかの要件を満たす必要があることです*。理論的には、ノイズ (モデル化されていない測定誤差) が白く、常に無相関であることを確認する必要があります。問題は、内部受信機から生の GPS 測定値を取得するのではなく (ほぼ白と見なすことができます)、フィルター処理済みのソリューション (確実に時間相関を示します) を取得することです。
もう 1 つの問題は、カルマン フィルターでは何らかの調整を行う必要があることです。つまり、測定ノイズなどのパラメーターを設定する必要があります。このようなパラメータは、使用するセンサーの品質に依存するため、デバイスによって異なります。これにより、一部のデバイスでは推定の品質が低下する可能性があります。
そうは言っても、いくつかの解決策があるかもしれません:
速度を使用して、位置更新間の位置を推定します。(Android ではこれを行っていませんが、この質問は速度を取得するのに役立つ場合があります。) ユーザーの速度が (位置の更新頻度と比較して) あまり頻繁に変化しない場合、ほとんどの場合、これはうまく機能するはずです。
完全なカルマン フィルターを実装する: 絶対位置測定と加速度計を組み合わせることは、安価な MEMS グレードの慣性センサーであっても、上記の本で指摘されているようにかなり一般的です。Acc センサーによって引き起こされる誤差を減らすために、これらをカルマン フィルターの状態ベクトルで推定します。通常、カルマン フィルターは、1 つのフィルターで位置、速度、姿勢、および Acc/ジャイロ バイアスを推定します。これらが十分に知られていると仮定したい場合は、姿勢とジャイロを削除できます。センサーがさらに多くのエラーを示す可能性がありますが、多くの場合、バイアスの推定は、位置更新間の推定には十分です。
完全なカルマン フィルターを実装することは、たとえばシュミット カルマン フィルターと呼ばれる手法を使用して、測定値の時間相関を考慮することも意味します (上記の書籍を参照)。これは、適応カルマン フィルター処理を使用してフィルターのいくつかのパラメーターを推定し、さまざまなデバイスのさまざまなセンサーを説明することも意味する場合があります。ただし、このような操作にはナビゲーションの分野で少し経験が必要であることに注意してください。実装は通常簡単です。数行の行列演算だけですが、調整には時間がかかる場合があります。しかし、それはあなたがそれを試してはいけないという意味ではありません!
- 上記のフィルターのバイアス推定のみを使用します。Acc バイアスを推定すると、加速度計の測定値で速度を外挿することによって、最初の方法 (速度で位置を外挿する) を改善できます。
*理論的な観点からは、いつでも理論を無視して試すことができます。時々それはまだ動作します:-)