カルマンフィルタの気持ちをわかるために
仕事で教える必要が出てきたので、カルマンフィルタの勉強をしています。目標は SLAM (Simultaneous Localization And Mapping) を理解してチューニングしながら使うことです。
実は、カルマンフィルタがちゃんと理解出来れば、SLAM は80%ぐらいは理解したことになりますが、カルマンフィルタをちゃんと理解するのが結構難しい。
「何が分からないのか」と聴くと、「何をやっているのか分からない」という答えが返ってきます。
カルマンフィルタが分からない理由は、いくつかあるような気がしています。
- いきなりイノベーションとかカルマンゲインとか言われてもわけがわからない。
- それぞれの変数が、確率変数なのか、観測なのか、真の値なのかわからない。
- 「不確実性を伝搬する」という気持ちがわからない。
- 行列の微分が分からない。
- なまじ理解しなくてもとりあえず使えるので、理解する必要が無い。
ロボット位置の「ぼんやりとした情報」 \bar{x} と、観測 y
別々の情報源を合成する
カルマンゲイン K の決定方法
としてみましょう。もし \sigma_y^2 に対して \sigma_x^2 が大きい(=観測のほうが信頼できる)ならば、K は大きくなり、推定値は y に近くなります。
誤差分散の最小二乗基準
K の決め方は、まだあります。その一つが「最終的な予測の誤差の分散を最小化する」という基準です。つまり、情報を統合した後の「不確実性=分散」が最小になるように K を調整するという方法です。
そんなことがどうやったら可能なのでしょうか。ここは、ノートにちゃんと式を書いて考えながらやってください。
\bar{x}^\prime = (1-K) \bar{x} + K y
これが カルマンゲイン K の気持ちでした。つまり、\bar{x}^\prime (情報を統合したあとの予測)は、\bar{x} と y との信頼度を元に決まる、というものです。今、真の値は x ですので、予測値 \bar{x}^\prime との誤差は、
\bar{x}^\prime –x = (1-K) \bar{x} + Ky -x
です。今、y=x+w_y だったことを思い出すと、
\bar{x}^\prime –x = (1-K) (\bar{x}-x) + Kw_y
になります。この分散を計算するには、少し確率変数の知識が必要ですが、\bar{x} とw_y は独立ですので、右辺の分散は単に足し算になって、
\mathbb V[ \bar{x}^\prime –x ] = (1-K)^2 \mathbb V[\bar{x}-x] + K^2 \mathbb V[w_y]
です。\mathbb V[\cdot] は、分散を表します。\bar{x} の分散は \sigma_x^2, w_y の分散は \sigma_y^2 でした。左辺を {\sigma_x^2}^\primeと書くことにすると
{\sigma_x^2}^\prime = (1-K)^2 \sigma_x^2 + K^2 \sigma_y^2
となります。今やりたいのは左辺の分散を最小にすることですので、右辺を K で微分してゼロと置くと・・・
\displaystyle K_{optimal} = \frac{\sigma_x^2}{\sigma_x^2 + \sigma_y^2}
先ほどと全く同じカルマンゲインが出てきました。これが、「最適カルマンゲイン」と呼ばれるものです。
最適カルマンゲインを使った予測値
この最適カルマンゲインを使った予測値は、今までの式を使って
\displaystyle \mathbb E[\bar{x}^\prime] = \frac{ \sigma_y^2 \mathbb E[\bar{x}] + \sigma_x^2 y}{\sigma_x^2 + \sigma_y^2}= \frac{ \sigma_y^2 \mu_x+ \sigma_x^2 y}{\sigma_x^2 + \sigma_y^2}
となります。式を見ると、見事に \bar{x} と y の信頼度に応じて、値が調整されるようになっています。\sigma_y^2 が小さい場合は?またその逆の場合は?等を考えてみてください。
また、予測値の分散は、
\displaystyle {\sigma_x^2}^\prime = \frac{\sigma_x^2\sigma_y^2}{\sigma_x^2 + \sigma_y^2} \leq \sigma_x^2
で、\bar{x}, y のそれぞれの分散よりもより小さくなっています。これは、2つの情報を統合したことで、より信頼性の高い情報になった、ということを示しています。
SLAMの理解に向けて
カルマンフィルタのコアであるカルマンゲインの気持ちと、その導出方法(天下り的なものと、誤差の分散の最小化)を説明しました。
カルマンフィルタの基本的なアイデアはこれだけです。これに加え、普通は
- プロセスノイズが加わる場合
- 多次元の場合
- 非線形の場合 (Extended Kalman Filter, Unscented Kalman Filter)
とカルマンフィルタの講座は進みますが、今回は SLAM を理解するのが目的です。SLAM の本質は
- 観測が相対的に与えられること
- 予測するものが、マップとロボットの位置の2つあること
です(僕はそう思ってます)。上で説明したカルマンフィルタに加わる要素はこれだけで、カルマンゲインもマップとロボットで2つ出てきますが、ほとんど同じ条件で最適カルマンゲインを求めることが可能です。
No comments:
Post a Comment