確率ロボティクス2016第11回
Tue Dec 20 08:43:18 JST 2016 (modified: Fri Nov 29 17:21:21 JST 2019)
views: 1077, keywords:
確率ロボティクス
第11回
上田 隆一
2016年12月21日@千葉工業大学
本日の内容
- SLAM
SLAM
- SLAM(simultaneous localization and mapping)
- 自己位置推定と地図生成を同時に行う方法
- 移動の誤差を考慮しなくても良い場合のアルゴリズム
SLAM問題
- 次のような地図[latex]m^*[/latex]を求める問題
- [latex]m^* = \\text{argmax}_m P(m |x_{0:t}, u_{1:t}, z_{1:t})[/latex]
- [latex]x_{0:t}[/latex]: 行動のシーケンス[latex](x_0,x_1,x_2,...,x_t)[/latex]
- [latex]u_{1:t}[/latex]: センサ情報のシーケンス[latex](u_1,u_2,u_3,...,u_t)[/latex]
- [latex]z_{1:t}[/latex]: センサ情報のシーケンス[latex](z_1,z_2,z_3,...,z_t)[/latex]
- (面倒なのでベクトルも細字で書いてます)
- [latex]m^* = \\text{argmax}_m P(m |x_{0:t}, u_{1:t}, z_{1:t})[/latex]
SLAMの基本手続き
- これで地図ができる (2次元の例, 距離センサを想定)
- 最初のロボットの位置[latex]x_0[/latex](絶対座標)を[latex] (x,y,θ) = (0,0,0)[/latex]とする
- 以下の繰り返し
- センサで障害物の位置を計測
- 障害物の位置を絶対座標に変換して記録
- ロボットを動かしてロボットの座標を更新
- 問題
- 移動誤差、センサの雑音
実際の例
- 日経Linux 2015年11月号の上田の記事より
誤差への対応
- とりあえず、まずセンサの誤差を考える
- 占有格子地図(occupancy grid map)による確率表現
- 地図を区切って各区画に障害物が存在する確率(の対数オッズ)を入れる
占有格子地図の作成方法
- 空間を格子状に区切る
- 価値反復の際と同様に
- ただし向きの次元はない
- 格子に持たせる値
- 確率、対数オッズ等
占有格子地図を使った地図作成方法
- 本日は二つ紹介
- オンライン手法
- ロボットが動いている最中に逐次的に地図を作る
- オフライン手法
- ロボットが動いた後に地図を作る
- ロボットは動いている時はひたすらデッドレコニング情報とセンサ計測値を蓄積
- ロボットの計算機で地図を作る必要もない
- 占有格子地図を使わないSLAMもオフライン/オンライン手法に大別される
- オンライン手法
オンライン手法
- 手順(2次元、距離センサを想定)
- 最初のロボットの位置(絶対座標)を[latex](x,y,θ) = (0,0,0)[/latex]とする
- 格子の中に壁のある確率を[latex]0.5[/latex]に初期化
- 以下の繰り返し
- A: センサ計測
- B: センサの計測対象となったセルを抽出
- C: 各セルの対数オッズを更新
- 最初のロボットの位置(絶対座標)を[latex](x,y,θ) = (0,0,0)[/latex]とする
対数オッズ(ロジット)
- 確率(0から1の値)を[latex]-\\infty[/latex]から[latex]+\\infty[/latex]に拡張
- [latex]\\ell = \\log \\frac{P(x)}{1-P(x)}[/latex]
- 確率が1の時に[latex]+\\infty[/latex]
- 確率が0の時に[latex]-\\infty[/latex]
- [latex]\\ell = \\log \\frac{P(x)}{1-P(x)}[/latex]
セルの更新に必要な式
- [latex]P(m_i | x,z)[/latex]
- 姿勢[latex]x[/latex]でセンサ値が[latex]z[/latex]のとき、[latex]m_i[/latex]である確率
- [latex]m_i[/latex]: 占有格子地図の中の一つのセルに障害物があるかどうかのバイナリ(ある: 1, ない: 0)
- 「逆計測モデル」と言われる
- 因果が逆: 障害物があってセンサの値が決まる
- 姿勢[latex]x[/latex]でセンサ値が[latex]z[/latex]のとき、[latex]m_i[/latex]である確率
- 逆計測モデルの求め方
- 統計を取る/学習/適当に
セルの対数オッズの更新
- [latex]\ell_i \longleftarrow \ell_i + \log \frac{P(m_i | x,z)}{1-P(m_i | x,z)}[/latex]
占有格子地図の例
- 注意: ちゃんと地図を作るには来週、再来週の手法が必要
オフライン手法
- 最大事後確率(maximum a posterior)推定を利用
- これまでのセンサ入力や制御出力を最もよく説明できる地図を作成
- 逆計測モデルは用いなくて良い
- 地図を先に用意して、それに対してセンサ値が得られるかどうかを評価して、地図を書き換えていく
- ソナーのように壁の位置がピンポイントで決まらないセンサで特に有効
- 理由: 逆計測モデルを利用すると、廊下の交差点等が実際より狭い地図ができる
手順
- 初期化
- 各セルを0(=壁がない)に (0が「壁がない」、1が「壁がある」)
- センサ値と地図の比較(収束するまで繰り返し)
- 各セルの値を0か1に入れ替えた地図[latex]m_{m_i=0},m_{m_i=1}[/latex]二つに対して次の値を比較
- [latex]\\sum_{t=1}^T \\log P(z_t|m_{m_i=0}, x_t)[/latex]
- [latex]\\sum_{t=1}^T \\log P(z_t|m_{m_i=1}, x_t)[/latex]
- 0と1のうち、上記の合計値の大きい方を選ぶ
- 各セルの値を0か1に入れ替えた地図[latex]m_{m_i=0},m_{m_i=1}[/latex]二つに対して次の値を比較