2016/12/02

SLAMの起こりとアルゴリズムの種類

SLAMの名著に「probabilistic robotics」がある
自己位置推定の基本から色々なSLAMアルゴリズムまで順々にレベルアップして詳しく述べられている
SLAM初期の発展がわかり、現在の基礎にもなっている
今回はこの名著に従ってSLAMの発展を見ていく





[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]
PROBABILISTIC ROBOTICS(H) [ SEBASTIAN THRUN ]
価格:10575円(税込、送料無料) (2016/12/3時点)


日本語訳の「確率ロボティクス」も最近再販したので手軽に読めるようになった(内容は手軽じゃないかも)



アルゴリズム興味ない人はSLAMのはじまりくらい見ていただけたら

・SLAMのはじまり

昔はものの位置を知る必要のあるロボットといったら工場とかみたいに組み立てラインで流れてくるものを加工していくロボットとかでした

どこにどうものが流れてくるかはわかっているのでものの位置は確実性高くわかります
もっと汎用的に、現実で扱うとなるとセンサでものの位置を捉える必要がある

しかしセンサを使うと誤差が発生がつきもの
内部モデルとかアルゴリズムの近似とかでも誤差は発生する

ものの位置は本質的に不確実なのです

じゃあ確率で表現しよう
これが確率ロボティクスであり、その中でもSLAMは基本的な問題になります

ここからしばらくはこの本ではSLAMのための基礎知識が続きますが、いきなりSLAMアルゴリズムにいってしまいましょう

アルゴリズムに興味がないなら見なくてもいいです

・EKF SLAM
(extended kalman filter SLAM)

最初期かつ今でもセンサフュージョンに必須のEKF(extended kalman filter)を用いたSLAM

自己位置は現在位置はわかるものの過去の軌跡は考慮しない=オンラインSLAMの一種

KF(kalman filter)は線形の動きにしか対応しないのでこれ拡張したのがEKF
1000点程度のマップならばリアルタイム動作可能

・graph SLAM

ロボットの現在位置だけでなく、軌跡も計算する=完全SLAMの一種
使うフィルタはEIF(extended information filter)です
軌跡まで考慮するのでEKFより正確ですが、データが大きくなると計算に時間がかかります

グラフを疎で扱うとEIFではなくSEIF(sparse EIF)となり、計算が早くなる

・Fast SLAM

初期のSLAMの完成系といえる

自己位置推定にPF(particle filter)を用いた完全SLAM

そのままやると計算時間が膨大なので地図でマップに反映する点はロボット姿勢のもと、条件付き独立としてRao-Blackwillized PFを用います

簡単にいうとparticleそれぞれが推定自己位置、推定地図をもち、正しいっぽいやつが生き残って正しくないっぽいのは消えて行くっていう手法です

もう少し概念を具体的に言うと
①それぞれがロボット姿勢の候補であるparticleをばらまく
②particle filterそれぞれが自分の姿勢にとっての地図をEKFで計算し
 それに従って重みをつける
③重みの大きさに比例した確率でparticleがいくつか選ばれる(重複あり)
④制御命令(前へ進めとか)通りにparticleを移動させる
⑤それぞれのparticleにとっての地図をEKFで計算
⑥繰り返し
※particleがへってきたら適当にparticleをばら撒きます

で、ここには変な問題があって

センサの精度が制御命令に対して良すぎちゃうと
particleのばらつきかたが狭くなっちゃって
正しいparticleが消えちゃう可能性が増えすぎちゃう
そこで制御命令でparticleを動かすときにも観測結果を反映してそれに対応したのが

Fast SLAM2.0です

次回、センサによるSLAM

0 件のコメント:

コメントを投稿