Pepperが歩いたわ! 〜SLAMトレーニングに行ってきた〜


ソフトバンクロボティクス主催の、「SLAMトレーニング」に出て、Pepperの自律歩行をちょっとだけかじったので私に分かる範囲でまとめ。

前提

書いてる人の属性

  • Pepperアプリの開発はするけど、モーションとかは殆ど触ってない
  • もちろん歩かせたことなどない
  • でも本当は「ロボットは移動してなんぼだよね」と思っている

トレーニングの内容

SoftBank Robotics EuropeのNavigation Software Engineerが直々にSLAMについて教えてくれるよ!
詳しくは → https://pepper.doorkeeper.jp/events/61547

SLAMってなーに?(超ざっくり)

Simultaneous Localization and Mapping の略。別にPepperの用語ではなくロボット的には一般的な言葉らしい。
じゃあ Simultaneous Localization and Mapping ってなに?というと

  • Simultaneous → 同時に
  • Localization → 位置を特定する
  • And → と
  • Mapping → 地図作成

てことなので、つまり、地図を作りつつ自分の位置も特定するよ!ということ…らしい。

余談だけど、私が Localization の意味を理解したのはトレーニングが終わってこの原稿を書いたとき(つまり今)。いや、なんとなく話の内容的にそんな感じかなぁとは思ったけど。この辺の基礎用語は調べとくべきだった。

本題に戻る。そんなわけでSLAMてのはどうやら「地図を作って自分がその地図の中のどこにいるのか」を行う仕組みのことらしい。一番頭のSimultaneousが気になるんだけど、少なくとも今時点のPepperにおいてはこれは「同時」ではない、という認識で良さそう。この辺は後ほど。

SLAMは何が嬉しいの?

…ということを考えるためには、「SLAMでないもの」について考える必要がある。トレーニングで使った資料においては、SLAMと比較されている手法はオドメトリ(Odometry)という奴。
これは何かというと、「タイヤで動くロボット」に(多分)限定した話なんだけど、つまりはタイヤがどっちの方向を向いて何回転がったかがわかったら、元々の位置からの相対的な位置がわかるよね、というコンセプト。
オドメトリは考え方がシンプルなのはいいのだけど、そんなに理想的に現実はできていないわけで、主にタイヤの滑りが問題になるっぽい。資料では Odometry Driftと表現されていた。
つまり、タイヤの回転数と方向から自分の位置を推定する場合、ちょっとちょっとの誤差が蓄積していくので、A地点とB地点を往復するような運動をすると、だんだん位置がずれていってしまう。

でも、SLAMは、最初に自分で地図を作って、自分がその中のどこにいるのかを地図の中の特徴点(壁とか障害物の類。多分動かないことを前提にしている。これは後で重要な意味を持つ。)との位置関係から判断するので、2地点を往復してもズレがでないのが嬉しいところ。だということになっている。

PepperにおけるSLAMの実績

2017年のPepperWorldでSLAMの実演をしていたんだけど(私も見たけどすごかった←小並感)、1日10時間稼働、2日間の運用で、クラッシュ(物理的な?ソフト的な?)もスワップ(こっちは多分物理的な交換…というか代打への交代かな)も発生しなかったと。ほほぅ…。

実際どうするの?

ここからがトレーニング前半の本題。
そして私が本当にわかってるのかどうかとても怪しい部分(なので間違ってたらどなたか詳しい方ツッコんで下さい)。

SLAMは

  • 地図を作る過程 → explore(探索)
  • 地図を読む過程(つまり探索の結果としての地図は保存しておける)
  • 読み込んだ地図の中で自分がどこにいるのかを指定する過程 → relocalization(日本語訳難しい)
  • ナビゲーションする過程

のようなプロセスを踏むみたいなんだけど、少なくとも現時点のPepperにおいてはこれらは同時に実行するのではなく、それぞれ別個のプロセスとなるっぽい。

で、大変にお恥ずかしい話なんだけど、具体的に各プロセスで使うアプリの開発についての技術的なとこは今回は追っかけきれなかった。個人的には今回は「Pepperを自律歩行させてみる」ことに重きをおいていたので、https://github.com/aldebaran/naoqi_navigation_samples にあるサンプルアプリ(を今回のトレーニング用に改変したもの)をそのまま実行してみて、上記のプロセスを実際に手を動かしてみる、というところまでとなった。

サンプルアプリについては、おそらく

  • 3つのアプリをすべてインストールする
  • explore を実行して地図を作る
  • patrol を実行して地図を読み込んでrelocalizationしてナビゲーションする

という手順を踏めば問題なく実行できる。
最後の「ナビゲーションする」がまさに自律歩行の部分で、「こうやって歩いていってね」という指示はない。あくまでも行き先を指定するだけ。ショートカットできるなら勝手にするし、障害物を検知すれば一生懸命避けようとする。これはなかなかすごい。

知らなかったこと(1)

現時点のPepperは、目で(カメラで)見た映像から地図を作っているのではなく、足元のレーザーセンサーを使っている。
このため、おそらく机みたいな「足元はスカスカで腰高に張り出している障害物」は認識できない気がする。あと、透明な壁は見えず、その先にある障害物を検出する(…とNicolasさんが言ってた)。

で、赤外線は比較的低い位置から斜めに照射されている関係で、あんまり遠くにあるものは認識できないとのこと。で、SLAMは障害物を目印にするしくみなので、例えばなにもないだだっ広い部屋みたいなところでは使えないらしい。オフィスの廊下みたいな、両側に壁がしっかり生えているものがお好みっぽい。

知らなかったこと(2)

これが一番衝撃的だったんだけど、「スタート時点で自分が地図のどこにいるか」は現時点では「手作業で」指定してやる必要がある。確かに、障害物しか見えていない事を考えたうえでPepperの気持ちになればそりゃそうなんだけど、とはいえ、Pepperが生成したフワフワした地図の中で「キミは今ここにいるのよ」と教えてあげるのはなかなか難易度高いし未来度低いw この辺はきっと今後進化するはず。

まとめ

そんなわけで、今の時点でPepperが一人でひょいひょい歩けるようになったのかというとそうではない。そりゃそうだ。まだSLAM機能はβ版だしね。で、アプリ側での実装も今の時点ではなかなか難しそう。
ただ、実際にアプリを実行して、Pepperがなんとかして歩こうとしている(そしてまがりなりにもちゃんと歩けている)のはすっごく感動する。未来感ある。ていうか「Pepperが歩いたわっ!」みたいな気持ちになる。いずれちゃんと自分の目で見て地図が作れたりするようになるともっとスムーズに歩けるようになるんだろうなぁ。あとは、ご家庭版PepperでSLAM試せるように早くなるといいなぁと思う次第。