パラメータ設定
$\hat{x}^- = F\hat{x},\quad P^- = P + Q$
更新ステップ
$K = P^- H^T / (HP^-H^T + R)$
$\hat{x}= \hat{x}^- + K(z - H\hat{x}^-)$
$P = (1-KH)P^-$
F=H=1(1次元等速モデル)
ノイズまみれの観測データから真の状態を推定するカルマンフィルターを可視化。プロセスノイズ Q と観測ノイズ R を調整してフィルタ特性を直感的に理解できます。
GPSナビゲーション・位置追跡:衛星からの信号にはマルチパスや電離層の影響でノイズが含まれます。単純なGPSの位置情報は数メートル単位でブレますが、カルマンフィルターに車速センサーやジャイロの情報(プロセスモデル)を組み合わせることで、サブメートルレベルの滑らかで正確な位置推定を実現しています。
航空機・宇宙機の姿勢・軌道制御:ジャイロスコープや加速度センサーはドリフト誤差が、星センサーは瞬間的なノイズがあります。複数のセンサー情報を統合(センサーフュージョン)し、機体の運動モデルと照合しながら最適な姿勢・位置を推定。これがなければ安定した自動航行は不可能です。
ロボットの自己位置推定(SLAM):移動ロボットが、内部のオドメトリ(車輪の回転数から計算した位置)と、LiDARやカメラからの環境観測情報を融合させます。オドメトリは累積誤差が、観測は外乱を受けますが、カルマンフィルターを用いることで、地図内での自身の位置を長時間にわたり高精度に保ち続けることができます。
経済・金融データの分析:株価や為替レートなどの時系列データから、トレンドや周期性などの「状態」をノイズの中から抽出するために応用されます。観測値である市場価格の変動(R)と、経済モデルに基づく予測の不確かさ(Q)をバランスさせながら、潜在的な真の価値を推定するツールとして利用されています。
まず、「カルマンフィルターは万能の魔法ではない」ということを肝に銘じておこう。一番多い誤解は、どんなデータを放り込んでも自動的にうまくいくと思ってしまうことだ。このシミュレーターで使っている「等速直線運動モデル」は、あくまで例題。実務では、対象の物理を正しく表す「状態遷移モデル」と「観測モデル」を自分で設計する必要がある。例えば、バネマスダンパ系の振動を推定したいなら、状態量に速度や加速度を含め、運動方程式に基づいたモデルを組まなければならない。
次に、パラメータQとRの決め方。シミュレーターではスライダーで直感的に動かせるが、実問題ではどう決めるか?実は、R(観測ノイズ)は比較的決めやすい。使用するセンサーのデータシートに「誤差±何mm」と書いてあれば、そこから分散を計算できる。問題はQ(プロセスノイズ)だ。「モデルがどれだけ外れるか」を数値化するのは難しい。一つの実践的な方法は、「想定される最大のモデル誤差」を考慮して決めること。例えば、車の等速モデルで、1秒間に想定しうる最大加速度が0.3G(約3 m/s²)だとすると、その分散を参考にQを設定する。最初は大きめに設定して、後からフィルタの応答を見ながらチューニングするのがコツだ。
最後に、発散(Divergence)という落とし穴を知っておこう。これは、フィルタの推定誤差共分散行列Pが計算上で小さくなりすぎ、新しい観測値を全く信用しなくなって推定が実際の値から大きく外れ、二度と戻ってこなくなる現象だ。原因は、モデルの誤りや不当に小さなQの設定など。シミュレーターで「観測ノイズR」を極端に小さく、「プロセスノイズQ」をほぼゼロに設定して、急に真の軌道(赤線)を曲げてみると、緑の推定値が全く追従できずにズレたままになる様子を再現できる。これを防ぐため、実装ではPがある値以下にならないようにする「下限設定」などの工夫が必要になる。
GPS搭載ドローンの位置推定を想定します。Q=0.05(プロセスノイズ)、R=2.0(GPS誤差)、P0=1.0、周波数0.5Hzで実行した場合、カルマンゲインは約0.87に収束し、実測値の±3m誤差を±0.4m以下に削減します。一方Q=0.5に増加させると、ゲインは0.95に上昇してモデル不確実性に適応し、突風などの外乱応答が速くなります。自動車の速度推定(エンコーダー+加速度計)でR=0.8を設定した場合、推定遅延は約50msとなり、制御系の応答性が向上します。