ROSさんお手やわらかに:ROS青雲編
コンパチ機でマップを使った自律移動に成功した。基本的にチュートリアルのこことここにある手順にしたがっただけだ。
うちの間取りが単純過ぎるので、写真のようにフリースペースの真ん中にゴミ箱を置き、また、車輪が滑ってオドメトリの狂いやすい「魔のカーペット」を越えてキッチンの先までマッピングすることにした。(ロボットの重量バランスがテールヘビーになったせいか、カーペットを巻き込まずに乗り上げることができるようになった。)

作成されたマップをrvizで見たものがこれだ。
マップ以外の情報も表示されているので、ちょっと見にくいが、ウチの居間がきちんと取り込まれているようだ。
このマップ情報を使って自律移動もテストした。rvizでのロボットの位置入力の操作にちょっととまどったが、任意の場所に実にスムーズに自律移動できることを確認した。さすがは最新の確率モデルを使ったamclアルゴリズムだ。明らかに滑っているカーペット上でもさほど誤差を発生していないようだ。かなり正確に自己位置推定ができている。オドメトリの精度にこだわってこんなのを作っていたのは時代錯誤だったのか。
マッピング、自律移動の操作手順を下記に示す。
■gmappingでマップを作るには
1・turtlebotの起動
リモコンでroombaの電源を入れる。
12V系の電源を入れ、kinectが動作できるようにする。
X61にsshでログイン、下記でロボットを立ち上げる。
roslaunch turtlebot_bringup minimal.launch
2・マッピング用のアプリを起動
X61にsshでログイン、下記でアプリを立ち上げる。
roslaunch turtlebot_navigation gmapping_demo.launch
3・ワークステーションでrvizを起動
T61で端末を開き、下記でrvizを立ち上げる。
roslaunch turtlebot_rviz_launchers view_navigation.launch
大きなウィンドウが開くので、見やすいように調整する。
4・ジョイスティックで探索
T61にジョイスティックを接続し、新しい端末で下記を実行。
roslaunch turtlebot_teleop logitech.launch
ジョイスティックはパソコン用の一般品、使っているのはバッファローのもの。5のボタンを押しながら左側のアナログスティックで操縦。
5・マップの保存
(マッピングアプリは止めない、新しいウィンドウで作業する)
X61にsshでログイン、下記でマップファイルを保存。
rosrun map_server map_saver -f /tmp/my_map
ファイルはロボットに搭載したX61のtmpにmy_map.yamlとして保存される。tmpなので再起動すると消去されることに注意。
■マップを利用して自律移動
マッピングから続けてやる場合はマッピングアプリをCtrl+cで停止、同じウィンドウで「ナビゲーションアプリ」を起動するだけで良い。minimal.lanchやT61のrvizはそのまま使い回す。起動の必要はない。
1・turtlebotの起動
リモコンでroombaの電源を入れる。
12V系の電源を入れ、kinectが動作できるようにする。
X61にsshでログイン、下記でロボットを立ち上げる。
roslaunch turtlebot_bringup minimal.launch
2・ナビゲーション用アプリを起動
X61にsshでログイン、下記でアプリを立ち上げる。
roslaunch turtlebot_navigation amcl_demo.launch map_file:=/tmp/my_map.yaml
これはマップとしてロボットに搭載したX61の/tmp/my_map.yamlを使用する。マップを作成してからパソコンを再起動するとtmpフォルダなので消去されていることに注意。固定的に使用する場合はホームディレクトリなどにマップを置くこと。
3・ワークステーションでrvizを起動
T61で新しい端末を開き、下記でrvizを起動。
roslaunch turtlebot_rviz_launchers view_navigation.launch --screen
画面にはロボットとマップが表示される。
4・ロボットの現在位置を指定
・rvizの画面上部の"2D Pose Estimate"ボタンをクリック。
・マップ画面上のロボットの現在位置(大体でよい)でマウスボタンを押し、そのままドラッグすると矢印が出るので、それを現在のロボットの向いている方向(正面の向いている方向)に合わせる。独特の操作なので少々練習が必要かも。
5・目的地まで自律移動
・rvizの画面上部の"2D Nav Goal"ボタンをクリック。
・現在位置の指定同様、目的地をマウスでポイントし、ドラッグで停止時の方向を指定。
・ロボットの動きを観察。
6・テレオペレーション
キーボードやジョイスティックでのテレオペレーションは自律行動に優先する。立ち上げておくと経路の修正などに役立つ。
roombaにレーザースキャナを乗せたオリジナルロボットを何とか自律移動させようとして頑張ってきたが、ラジオの入門にキットを使うのがよいように、きちんと動くロボットでまず体験するのが近道のようだ。なんだかややこしかったamclの使い方が見えてきた。丸一年くらいを無駄にした感じだ。