AMCLについての概要はここが日本語でわかりやすい
https://robo-marc.github.io/navigation_documents/amcl.html#parameter
ここを読んだうえで、AMCLのパラメータを調整しようとしたが、パラメータが具体的にどういう挙動をするのかがわからない。
そこでソースコードを読んで各パラメータの意味を深追いしようと思いました。
AMCLの実装(ビームモデル)
ビームモデルはL144-L213に記述があります。
大雑把に以下の3ステップをレーザー点ごとに繰り返して、スコアを計算します。
1.レーザーの距離と、最近傍障害物との距離の差を計算する (実装上はz)
2.尤度(実装上はpz)を計算する。
3.尤度の3乗をスコアとして、サンプルのスコアに加算します。
以下がコメントアウトされていることから、尤度pzの積を最終スコアとして、確率として扱ってもうまくいかなかったのではないかと推測されます。
// p *= pz;
結局サンプリングの分散を決めるスコアですし、確率的に扱っているというよりは、ヒューリスティックにサンプリングを行っているように見えます。
AMCLが確率モデルだというのは幻想
自分の勝手な勘違いでしたが、勉強になりました。
統計的な単語について、語句や意味の誤りがあったら申し訳ありません。指摘いただけたら助かります。
以上
こっから雑多な感想です。
AMCLのパラメータ調整について
ヒューリスティックなパラメータだったらどうしようもない。
タートルボットより大きなロボットだからこのパラメータを大きくしようとか、そういう調整ができなくはないが運ゲー。
ググってみたけど、調査能力が足りず?初心者向けチューニングは見つからなかった。
AMCLの確率計算について
確率分布を使ってますが、事後確率を求めたりしているわけではなく、スコア計算の関数に、確率分布を利用しているように見えます。
事後確率をきちんと求めるようとすると、
ビームモデルに従って作った独自の分布(各レーザ点ごとに違う分分布)について積分したりしないといけないので、自分には計算できる気がしませんでした。