SLAMでPepper 〜Pepper、うまくやれよ〜


この記事はたぶん、この記事の続きになりそうな気がします。

東京都内の中央区の奥深く、
とある鉄とコンクリートで出来たビルの中に、
Pepper the Robotというロボがいました。
彼は誰かに勉強を教えてもらったとかそういうわけではないんだけど、
歩くのだけはまるで人間のように上手だったのでした・・・

ずいぶん前、NaoqiOS ver. 2.5.5がリリースされた際に、新機能であるSLAM(Simultaneous Localization and Mapping)をちょっと使ってみようとしてそのままにしてしまっていましたが、ようやくSLAMについてまぁまぁ理解したので、そのずいぶん前に書いたBlog記事の続きを書こうと思います。

さて、NaoqiOS ver. 2.5.5にて、ベータ版ではありますがSLAM機能がPepperに搭載されたことで、Pepperが探索・自己位置の測定ができるようになり、自立走行ができるようになりました。

ということは、次のような事ができるようになるわけですよ。

  1. Pepperが自分のいる場所を探索・自己位置を測定する
  2. Pepperが探索結果を画像にしてディスプレーに表示
  3. 利用者がディスプレーからPepperに移動して欲しい場所を指示
  4. Pepperがそこに移動
  5. 「3」と「4」を繰り返してPepperが巡回

というわけで、この流れを実現してみましょう!

なお、今回の記事を書く、実際にアプリを作るにあたり、下記サイトとアルデバラン公式Githubにあるデモアプリを大変参考にしています。

で、最終的にこんな感じになります。

 

1. Pepperが探索・自己位置を測定する

探索・自己測定位置はこんな感じで行います。

今回もいつものようにChoregrapheでやってますので、みなさま適時、Choregrapheで動くように補完してください。

「ALNavigation.explore(探索する範囲)」で、Pepperが「探索する範囲内で、今自分がどこにいて、どこまで移動できるか」の調査を開始します。
Pepper、動き回ります。マジで。この時点で結構感動します。

で、Choregrapheというか、Pepperは基本非同期じゃない(意図的にそうしているとドキュメントに書いてあります。)ので、「ALNavigation.explore(探索する範囲)」が終わるまでは次の処理に進まず、探索が終了したら次の処理に進みます。

次の処理は、「ALNavigation.navigateToInMap([x, y, theta])」です。このプログラムでは、探索が終わったら初期位置に戻るようにしています。

注意点としては、OS2.5.5のSLAM機能はベータ版であるため、「theta」は対応していないという点でしょうか。この場合だと、出て行ったPepperが出て行った時と同じ向きで戻ってくるのはできないという事になります。個人的には「それくらい別にいいじゃん。ロボットなんだし。」と思いますが(笑)

さて、探索が終わったら、探索結果を「ALNavigation.saveExploration()」で探索結果を保存します。「ALNavigation.saveExploration()」は、戻り値として保存先のパスを返してくれますので、パスを取得しましょう。後で使います。

これで、「1. Pepperが探索・自己位置を測定する」は終わりです。探索結果はPepperの中に「.explo」という拡張子のファイルで保存されます。このファイルを読み込んで、Pepperのディスプレーに表示する画像を生成します。

 

2. Pepperが探索結果を画像にしてディスプレーに表示

「1.」の探索で得た結果を画像にして、Pepperのディスプレーに表示しましょう。コード的にはこんな感じです。

最終的に、Pepperが探索して取得した周辺情報(地図)を読み込んで生のPNGデータを生成、ついでにファイルにして保存しています。保存先はこのアプリの「html/img」フォルダ内です。

ここで、声を大にして言いたい事があります。取得した周辺情報を読み込んで画像データ化したら、左右を反転してください!!

これ、実際にやってみて気づいたことですが、Pepperは人間から見たら左右反転した状態で周辺情報を取得し、「.explo」ファイルとして保存します。そういえば、Pepperのカメラも人間の目で見ると左右反転した映像を取得していたので、もしかしたらPepper的・・・というか、機械、ロボット的にはこれが正しい情報なのかもしれません。ただ、人間的にはあまり正しくない情報なので、可視化したら左右反転させて、「人間的に見れば正しい状態」に変換してあげてください。

プログラムを書き終わったら早速探索開始!「Go Go! Go Pepper Go!!」

Pepperが執務室内を探索

探索が終わったらこんな感じで画像が表示されます!
(弊社執務室を探索させました)

執務室内の探索完了

ついでに探索結果のPNGファイルです。

画像はこんな感じで出力

こんな感じでPepperが歩き回って周辺情報を取得し、画像化することができます。

次回はこの画像を元に、行って欲しい場所を設定して歩き回らせます。お楽しみに!!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です