Turtlebotで部屋の好きな場所に移動する(1)

出村です!今日もよろしくお願いします!
今出村はTeam IcARusというエンジニアチームで本物のドローンを使った現実融合(Augumented Reality)型空中対戦ゲーム「Drone Space Defence」を開発中です!
今週の金曜,4/24に東京のお台場で開かれる世界的なイベント「SLUSH ASIA」でゲーム「Drone Space Defence」を展示します!国際的なドローンパフォーマ・芸人とのコラボもします!
最先端の技術が体験できます!よろしければ体験しに来てください!
dsd
SLUSH ASIA
Team IcARus HP

Turtlebotで部屋の好きな場所に移動する

部屋の好きな場所に移動できるロボットを作ってみたいと思ったことはありませんか?
KinectというデバイスとSLAMという技術を使えば可能です!
Kinectはジェスチャー認識デバイスとして有名ですが、Kinectの中にはRGBカメラ(普通のカメラ)とデプスカメラ(深さを測るカメラ)が入っています。
kinect_pic
この画像はkinect V1で撮ったものです!左が深さ画像、右がRGB画像になります。
SLAM(Simultaneous Localization and Mapping)はロボット等の地図生成と自己位置推定を同時に行うことのできる技術です!SLAMをするために必要なものは地図を生成するための情報と自己位置推定をするための情報で、この情報をKinectとTurtlebotだけで補うことができます!

今回の開発環境はUbuntu 14.04,ROS Indigo, Kinect V1, Turtlebotです。

Turtlebotの動作確認

まず、今回はTurtlebotを動かすためにROS(Robot Operating System)というロボットミドルウエアを使用します!
ROS環境をまだ構築していない方はROSを使用したCRANE+の動かし方の1〜4章を見て下さい!
Turtlebotを動かすためのROSパッケージは入っているでしょうか?入っていない場合はFamily&Robotics勉強会にTurtlebotパッケージの入れ方があるので下記のfamily&Robotics勉強会のURLを参考にしてください!
family&Robotics勉強会資料 Turtlebotパッケージの入れ方
turlebotを起動します!turtlebotの接続ケーブルをPCのUSBにつないで下さい!
[php]
$ roslaunch turtlebot_bringup minimal.launch
[/php]
このとき音がなればturtlebotとPCとの接続が確立しています!

Ubuntu 14.04にkinect V1 driverを入れる

Ubuntu 14.04ではkinect V1のドライバーがaptで入るパッケージ(PPA含む)だけでは上手く動作しません。
以下のサイトの説明にしたがってkinect V1のドライバーを入れて下さい!このインストール方法で入るのは新型のKinectドライバーではないのですが、これしかドライバーをUbuntu 14.04に入れる方法が見つかりませんでした!(ソースインストール+aptパッケージ)
Kinect V1をUbuntu 14.04で使えるようにする
また、kinect V1の接続ケーブルのランプは緑色に光っているでしょうか?光っていない場合はkinect V1への電源が供給されていないもしくは断線しています。
IMG_20150417_170706
ドライバがPCに認識されているかどうかは以下のコマンドで確認できます。
[php]
$ lsusb | grep "Xbox"
[/php]
kinect_driver
この3つのデバイスが認識されていたら成功です!Xbox NUI Motorだけが認識されている場合は正しく認識していません。
次にROSのTurtlebot PackageがKinectを使用できるようにします。以下のコマンドでROSから使用できるようになります。
[php]
$ echo "export TURTLEBOT_3D_SENSOR=kinect" >> ~/turtlebot/devel/setup.sh
$ source ~/turtlebot/devel/setup.bash
[/php]
Kinectセットアップ完了です!

Turtlebotを操縦する

Turtlebotを操縦してみましょう!Turtlebotの移動にはキーボードかPS3コントローラを使います!

キーボードで操縦する場合

[php]
$ roslaunch turtlebot_teleop keyboard.launch
[/php]
このコマンドを入力したターミナルが選択されているとき(最後にクリックしたものがコマンドを入力したターミナル)だけキーボード入力を受け付けます!

PS3コントローラを使いたい場合

PS3コントローラを使用するときはBluetooth内蔵PCが推奨されます。Bluetoothがある場合は無線でPS3コントローラが動かせます。
PS3コントローラのドライバーパッケージを入れます。
[php]
$ sudo apt-add-repository ppa:falk-t-j/qtsixa
$ sudo apt-get update
$ sudo apt-get install sixad
[/php]
PS3コントローラをUSB経由でPCと接続します。そしてこのコマンドを入力してください。
[php]
$ sudo sixpair
[/php]
PS3コントローラをUSBケーブルから外し、
[php]
$ sixad –start
[/php]
でPS3コントローラのPSボタンを押し続けると認識されます。
DUALSHOCKコントローラでは認識時に振動します。SIXADコントローラでは認識時にPS3のユーザーを示すLEDがぐるぐる回るだけです。
[php]
$ roslaunch turtlebot_teleop ps3_teleop.launch
[/php]
L1がデッドロックになっています。L1を押しながらでないと入力を受け付けません。
L1 + 左ジョイスティックを上にかたむけると前進、L1 + 左ジョイスティックを左に傾けると左に回り、L1 + 左ジョイスティックを右に傾けると右に回ります。

TurtlebotでSLAM

SLAMには2Dマップと3Dマップの2種類があります。今回は2DマップのSLAMを使用します。

Turtlebotで地図生成

今回は地図生成にGmappingというアルゴリズムを使用します。以下のコマンドを入力して下さい!
[php]
$ roslaunch turtlebot_bringup minimal.launch
$ roslaunch turtlebot_bringup 3dsensor.launch
$ roslaunch turtlebot_navigation gmapping_demo.launch
[/php]
これでSLAMプログラムが起動しました!
[php]
$ roslaunch turtlebot_rviz_launchers view_navigation.launch
[/php]
これで地図生成の可視化をします!
PS3コントローラやキーボードでTurtlebotを移動させてみましょう!
すると、地図がどんどん生成されていくではないでしょうか!
ロボットを移動するほど地図が生成されます。

地図を保存したい場合

地図を保存したい場合は下のコマンドを入力して下さい!
[php]
$ rosrun map_server map_saver -f ~/Pictures/rosmap
[/php]
このコマンドではファイルはPicturesにrosmap.pgmというファイル名で保存されますが任意の場所に任意のファイル名で保存したいときは
[php]
$ rosrun map_server map_saver -f /パス名/ファイル名
[/php]
と入力して下さい!
生成された地図を見てみます!gimpという画像エディタがlinuxでは使いやすいのでインストールを推奨します。以下のコマンドを入力するとインストールできます!
[php]
$ sudo apt-get install gimp
[/php]
そして以下のコマンドで生成された地図を見ることができます!
[php]
$ gimp ~/Pictures/rosmap.pgm
[/php]
どうでしょうか。下の画像のような地図が生成されたでしょうか。
RTMap

Turtlebotを部屋の好きな場所に移動させる

では生成した地図データを元にTurtlebotを部屋の好きな場所へ移動させましょう!今回はロボットの位置推定にAMCL(Adaptive Monte Calro Localization)という2Dマップのアルゴリズムを使用します。
まず生成した地図データを指定します。以下のコマンドで指定できます。
[php]
$ export map_server map_saver -f ~/Pictures/rosmap.yaml
[/php]
任意のファイル名で地図を保存した場合は
[php]
$ export TURTLEBOT_MAP_FILE=/パス名/ファイル名
[/php]
そして以下のコマンドを入力してください!
[php]
$ roslaunch turtlebot_navigation amcl_demo.launch
$ roslaunch turtlebot_rviz_launchers view_navigation.launch
[/php]

するとこのような画面が開きます!
部屋の好きな場所に移動するためには2つの操作をする必要があります!

estimation

1.現在地の指定
rvizアプリケーションの上のタブの”2D Pose Estimate”をクリックして、現在地をrvizのマップ上でクリックして指定してください!
2.目的地の指定
rvizアプリケーションの上のタブの”2D Nav Goal”をクリックして、目的地をrvizのマップ上でクリックして指定してください!

するとロボットが目的地に向かって移動します!
これでマップに載っている場所なら部屋の好きな場所のどこにでも行くことが可能です!
turtlebot_3dmapping

今回はGUIで現在地と目的地を指定しました。ですが、テキストファイルに現在地と目的地を記載して場所を指定したり、ウエイポイント走行をすることも可能です!
また、SLAM技術には色々なアルゴリズムがあります。今回は2Dマップでしたが、3Dマップを生成して3Dマップの情報を元に位置推定を行うことも可能です!
次はRGB-DのSLAM,ウエイポイント走行や、画像追跡について書きます!