カルマンフィルター
出典: フリー百科事典『ウィキペディア(Wikipedia)』
カルマンフィルターは、誤差のある観測値を用いて、ある動的システムの状態を推定あるいは制御するための、無限インパルス応答フィルターの一種である。
目次 |
[編集] 実用例
カルマンフィルターは、 離散的な誤差のある観測から、時々刻々と時間変化する量(例えばある物体の位置と速度)を推定するために用いられる。レーダーやコンピュータビジョンなど、工学分野で広く用いられる。例えば、カーナビゲーションでは、機器内蔵の加速度計や人工衛星からの誤差のある情報を統合して、時々刻々変化する自動車の位置を推定するのに応用されている。カルマンフィルターは、目標物の時間変化を支配する法則を活用して、目標物の位置を現在(フィルター)、未来(予測)、過去(内挿あるいは平滑化)に推定することができる。
[編集] 歴史
このフィルターはルドルフ・カルマンによって提唱されたが、同様の原理はトルバルド・ティエレとピーター・スワーリングによってすでに開発されていた[1]。カルマンがアメリカ航空宇宙局のエイムズ研究センターを訪問した際、この理論がロケットの軌道推定に有用なことに気づき、のちのアポロ計画で用いられた。
[編集] 用いられる動的システム
カルマンフィルターは、時間が離散化された線形動的システムを用いる。すなわち、正規分布ノイズ項を含む一次マルコフ過程線形演算子のモデルである。状態空間は、実数のベクトルで、表される。時間ステップが進むたびに、行列で表される線形演算子によって、状態空間が更新される。必要なら、ここに系を制御する変数を加えることもできる。その際、ノイズの影響が加味される。この状態空間は、観測できないが、別の線形演算子とノイズの組によって、観測量と関連づけられている。
以上を式で表す。時刻 k における真の系の状態は、一ステップ前の時刻 (k − 1) の状態をもとに、次のように決定される。
ここに、
- Fk は、系の時間変化のモデル。
- Bk は、制御変数 uk に対する演算子。
- wk は、時間変化に関するノイズで、共分散行列 Qk かつ零平均の多変数正規分布に従う。
ある時刻 k において、観測量(測定量)zk は、真の(すなわち観測不可能な)物理量 xk と、以下のような関係にある。
ここに、Hk は、観測モデルで、観測誤差 vk は、共分散行列 Rk かつ零平均の多変数正規分布に従う。
系の初期条件とノイズ {x0, w1, ..., wk, v1,..., vk} は、互いに独立であるとする。
このモデルが厳密に成り立たなくても、ノイズ項があるため近似的に適用できる場合が多い。以下に述べる拡張されたカルマンフィルターはさらに応用範囲が広い。
[編集] カルマンフィルター
カルマンフィルターは無限インパルス応答フィルターであり、系の今の観測量とひとつ前の推定量さえ分かれば、今の推定量が得られる。
系の今の(時間ステップ k )の状態は、二つの変数で表される。
- 系の状態の推定値。
- 誤差の共分散行列(推定値の精度)。
カルマンフィルターは、時間ステップをひとつ進めるために予測と更新の二つの手続きを行う。予測の手続きでは、前の時刻の推定状態から、今の時刻の推定状態を計算する。更新では、今の時刻の観測を用いて、推定値を補正してより正確な状態を推定する。
[編集] 予測
- (今の時刻の推定値)
- (今の時刻の誤差行列)
[編集] 更新
- (観測残差、innovation)
- (残差(あるいは innovation)の共分散)
- (最適 カルマンゲイン)
- (更新された状態の推定値)
- (更新された誤差の共分散)
[編集] 不変量
もし、モデルが正確で初期条件 と が正確ならば、全ての推定量は期待値零である。
ここに、E[] は、期待値。また、共分散は、推定値の誤差共分散である。
[編集] 設定例
まっすぐで無限の長さを持つ摩擦の無いレールの上に乗っているトロッコを考えよう。初期条件は、トロッコは位置 0 に静止している。トロッコにはランダムな 力(加速度)が与えられる。Δt 秒ごとにトロッコの位置 x を観測する。ただしこの観測には誤差が混入している。トロッコの位置と速度のモデルを考えると、以下の様に設定すると、カルマンフィルターが用い得る。
制御の必要はないから、Bk と uk は考えない。行列 F、 H、 R、 Q は時間変化しないので添字は付けない。
トロッコの場所と速度は、
で、表される。 は位置の時間微分、すなわち速度である。
時刻 k − 1 と時刻 k の間に加速度 ak がトロッコに与えられる。加速度は平均 0 標準偏差 σa の正規分布をしている。運動の第2法則により、
ここに、
かつ
である。最右辺の共分散は、
- (σa は、スカラーであることを用いた。)
それぞれの時刻に、トロッコの位置を観測する。観測誤差も平均 0 で標準偏差 σz の正規分布と仮定する。
ここに、
かつ
である。
初期条件は
と、正確に
分かっている。 もし、初期条件に誤差があるならば、
と、取るべきである。もし B が大きければカルマンフィルターは、初期条件より、それ以降の観測に重みを置くようになる。
[編集] 導出
[編集] 更新後の共分散行列
時間を進めるための予測と更新の手続きのうち、更新が終わったあとの共分散行列 Pk|k をまず求める。上の定義式、
に、推定値 の定義を代入。
続いて、観測残差 を代入。
そして、観測値 と真の値の関係を代入。
変形して、
観測誤差 vk は、他の項と相関がないから、
となり、さらに変形
して、前述の不変量 Pk|k-1 と、観測誤差共分散 Rk を用いて、
を得る。この式は、 Kk がどんな値であっても成立するが、 Kk が、最適カルマンゲインの時は、以下のようにさらに簡略化される。
[編集] カルマンゲインの導出
カルマンフィルターは、最小自乗誤差推定値である。すなわち、更新後の誤差の推定値は
であり、このベクトルの大きさの自乗の期待値 を最小にするような推定値を与える。これは、更新後の共分散 Pk|k のトレースを最小とすることと同じである。上の式を展開して、
トレースを最小にすべく、行列微分をゼロと置いて、
ここからカルマンゲイン Kk を求める。
[編集] 更新後の誤差共分散行列
カルマンゲインが上述の値を取るとき、更新後の誤差共分散行列は以下のように簡単になる。カルマンゲインの式の両辺の右から SkKkT をかけて、
更新後の誤差共分散行列を展開して、
右の二項は相殺するから、
- .
計算量が少ないため、ほとんどの場合この式が用いられるが、カルマンゲインが上記の最適解の時にしか適用できないことに注意。計算上の桁落ちなどで解の安定性が悪いときやなんらかの理由で敢えて最適でない解を用いるときは使えない。
[編集] 再帰ベイズ推定との関係
観測不可能な真の状態がマルコフ過程のとき、観測されたものは隠れマルコフ過程で扱われる。真の状態は一次のマルコフ過程であり、ひとつ前の時刻の状態にのみ依存して、それより前の状態とは独立である。
同様に、時刻 k での観測値は現在の状態にだけ依存して、過去には依存しないものとする。
これらの仮定を用いると、隠れマルコフモデルの観測が z1, z2, zk と得られる確率は、
で、表される。
一方、カルマンフィルターで状態 x を求めるには現在の系の状態とそれまでの観測だけを用いる。
カルマンフィルターの予測と更新の手続きを、確率を使って表してみる。予測後の状態の確率分布は、時刻 k − 1 から時刻 k への変化に関する確率と、時刻 (k − 1) の状態の積になるから、
時刻 t までの観測は
である。
更新後の確率は観測の起こりやすさ(尤度)と予測された状態の積に比例するから
となる。分母の
は、全確率を 1 にするための因子であまり重要ではない。
他の確率分布関数も
と書ける。
[編集] 非線型カルマンフィルター
ここまでは線形の仮定が成り立つ系をとりあつかってきたが、実際の系の多くは非線型である。時間発展モデルも観測モデルもどちらも非線型になりうる。
[編集] 拡張カルマンフィルター
ここでは時間発展モデル
と、観測モデル
を考える。どちらも微分可能であれば線形である必要はない。関数 f は前の状態から推定値を与え、関数 h は観測値を与える。どちらの関数も直接共分散を求めることはできず、偏微分行列(ヤコビアン)を用いる必要がある。
原理としては、非線型モデルを現在の推定値の回りで線形化する。そのためにそれぞれの時刻で、ヤコビアンを計算する。すなわち、
予測
更新
出てくる行列は次のヤコビアンで定義される。
[編集] Unscented カルマンフィルター
非線型性の強いとき、拡張カルマンフィルターの性能は悪い。理由は平均値だけが非線型性に反映されるからである。unscented カルマンフィルターは、シグマ点とよばれる代表点を平均値の回りで用いて、推定値の共分散を計算する。こうすることにより、真の平均と共分散により近い値が得られることがモンテカルロ法や、テイラー展開によって示される。しかも解析的にヤコビアンを計算する必要がなくなるという利点がある。これは複雑なモデルでは有利である。
予測
拡張カルマンフィルタと同様、 unscented カルマンフィルターの予測手続きは更新手続きと別であり、更新手続きに線形カルマンフィルターや拡張カルマンフィルターを用いたり、その逆を行うことも可能である。推定値と共分散には、予測ノイズの平均と共分散項が加えられる。
シグマ点 2L+1 個は、付け加えた項から計算される。ここに L は付け加えた状態項の次元である。
シグマ点は関数 f で時間発展する。
予測値と共分散は重み付き平均で求められる。
重みは以下のように与えられる。
α = 10-3、β = 2 、κ = 0 といった値がよく用いられる。
更新
予測値と共分散には、上と同様に観測値のノイズの平均と共分散項が加えられる。
シグマ点 2L+1 個は、付け加えた項から計算される。ここに L は付け加えた状態項の次元である。
もし、予測手続きも unscented カルマンフィルターで行われていたならば、以下のような変形も可能である。
ここに、
である。シグマ点は関数 h で観測値に変換される。
重み付き平均で、観測値とその共分散を推定する。
推定値と観測値の相関行列
を用いて unscented カルマンゲイン
を計算する。以下は線形の場合と同様である。