確率ロボティクスと移動ロボットの行動生成
第4回
上田隆一
本日の内容
• センサ情報をパーティクルに反映する
処理の実装
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 2
前回からの補遺
• 第一種過誤(偽陽性)と第二種過誤(偽陰性)
– 「ないのに見えてしまう」「あるのに見落とす」というよ
うな状況を表す時に使う統計用語
– 議論をしているとたまにどっちの話をしているのか
わからなくなることがあるので注意
– 英語
• type I error, false positive
• type II error, false negative
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 3
地図を持たせる
• 自己位置推定
– 与えられた地図の中でどこにいるか推定
– 地図をロボットに渡す必要がある
• 想定する環境
– マイクロマウスの迷路
• 1区画: 180mm
• 壁の厚さ: 12mm
• 左下のXY座標の原点に
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 4
Y
X
ロボットのセンサ
• 4つの赤外線距離センサ
– 光量を計測するタイプのもの
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 5
センサの特性
• 0〜4000の値
• 右図: センサ-迷路の
壁間の距離と値の関係
– ある条件で1度だけ計測
• 雑音や値の偏りの要因
– 壁のコンディション
– 指で動かすとセンサの位置や向きが変化
– 環境の明るさ
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 6
地図の実装例
• コード
• 右図のようなテキストを
読み込ませる仕様
– 壁のある場所を1、
ない場所を0で書く
– ロボットが到達できない
箇所は全て壁があるものとしておく
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 7
$ cat map
1 1 1 1 #一番上の横向きの壁
1 1 1 1 1 #その下の縦向きの壁
1 1 1 1 #...
1 1 1 1 1
0 1 0 1
1 0 0 0 1
1 0 1 0
1 1 1 1 1
1 1 1 1
プログラムの構造
• Map: 地図のクラス
• Room: 一区画のクラス
– データ
• 四方の壁のデータ
• 区画の中心の座標
• Mapが16のRoomを持つ
• プログラムを実行すると
__mapというファイルに読み込んだ
地図が描画されるようになっています
• ※もしかしたらこのように
構造化せず、一つの格子地図に
したほうが楽かもしれません
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 8
class Room
{
…
private:
vector<bool> m_wall;
double m_x_origin_mm;
double m_y_origin_mm;
};
(m_x_origin_mm, m_y_origin_mm)
m_wall[0]
m_wall[1] m_wall[2]
m_wall[2]
ベイズ推定の実装
• とりあえず前方の壁の
有無情報を利用して
尤度を作ってみましょう
• とりあえず迷路の1区画
だけに注目
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 9
「何も前方にない」という情報の利用
• 何回か環境を変えて試したところ、次のことが成立した
– 前を向いている2つのセンサの値が両方500以下
→ロボットの前方に、その区画の壁は存在しない
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 10
• 「壁がない」を「陰性」と表現することにしましょう
– (一般的にこう言うわけではないので注意)
• 尤度
– L(姿勢xの前方に同一区画の壁が存在 | 陰性) = 0
– L(姿勢xの前方に同一区画の壁がない | 陰性) = 1
– L(任意のx | 陰性でない) = 1
– 陰性でない
• 前方を向いたセンサの値が 1つ以上500以上
• 「陽性」ということではない
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 11
尤度を使った処理の流れ
1. 距離センサの値を取り込む
2. 前を向いているセンサの値が両方500以下なら
1. 各パーティクルの姿勢で前方に壁があるか計算
2. 壁があったら重みをゼロにする
• 本当に0にすると処理がややこしくなるので実際は0.000001等
を元の重みにかける
• 壁との衝突判定のコード、書いてみましょう。
• 重みの合計は1に正規化する必要があるが・・・
– 来週やります
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 12
実験
• 写真の姿勢から1度だけセンサの値を
パーティクルに反映
• パーティクルの数: 1000
• 各パーティクルの
変数の初期値
– 姿勢: ランダム
– 重み: 1/1000
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 13
計測
結果
• 迷路の外のパーティクルは消える
(外には全部壁があると地図で仮定しているので)
• 部屋状になっている区画のパーティクルは
全て出口の方を向く
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 14
更新前 更新後環境
「前方に壁がある」という情報の利用
• 「陽性」の情報
• 次のような条件の場合、現在ロボットがいる
区画の壁が必ず存在
– 4つの距離センサ
全ての値が500以上
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 15
• 尤度
– L(姿勢xの前方に同一区画の壁が存在 | 陽性) = 1
– L(姿勢xの前方に同一区画の壁がない | 陽性) = 0
– L(任意のx | 陽性でない) = 1
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 16
実験
• 写真の姿勢から1度だけセンサの値を
パーティクルに反映
• 諸条件は先ほどと同じ
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 17
計測
結果
• 壁がない方を向いているパーティクルの重みが減る
– しかし他の情報と組み合わせないとよく分からない
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 18
更新前 更新後
(灰色: 重みが減ら
されたパーティクル)
環境
さらに情報を重ねる
• 環境の内・外
– 尤度は省略
• 陽性の情報との重ね合わせ
• 陰性の情報と重ね合わせるにはロボットが
動く必要がある
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 19
更新前 更新後
これまでのまとめ
• 3種類の情報を使って尤度を設計
– 前方に壁がない(陰性)
– 前方に壁(陽性)
– 環境の内・外
• どちらも2値の尤度にした
– 条件が成立する限りはキャリブレーション不要
– ただし精度は期待できないかもしれない
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 20
議論: 他者や障害物の存在
• 環境に壁以外の障害物がある場合、先ほどの
情報のうち、使えないものはあるだろうか?
= 偽陽性、偽陰性が起こる場合は?
– 地図上にない固定物
– 人の手
– 同じロボット(同じ原理の距離センサを持つ)
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 21
議論: センサの取付け位置
• 「壁がない」という条件はロボットの形状を
ちょっと変えるだけで成立しなくなる
– センサの位置が悪いと壁に接近しすぎた場合に
壁に反応しなくなる
• センサの取付位置を変えて、さらに有用な情報が
得られるように工夫することはできるだろうか?
• 動物の感覚器の位置にはどんな
理由があるだろうか?
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 22
議論: パーティクルの重さの偏り
• センサ情報をパーティクルの重みにどんどん
反映していくと、いずれわずかなパーティクル
を除き、重みがほぼゼロに
– どんな悪影響があるだろうか?
– 回避する方法は?
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 23
次回
• リサンプリング
• リセット
Oct. 7, 2015 確率ロボティクスと移動ロボットの行動生成 24

確率ロボティクス第四回