roombaプラットフォームとgmappingでマップを作る
ROSさんお手やわらかに:ROS奮闘編
今回は、実際にroombaプラットフォームをリモコンして、室内のマップを作ってみる。
まず、rosbagでセンサやオドメトリのトピックを記録しながらroombaで室内を一周、その後、その記録を再生してgmappingに入力し、マップを作る。
実際の手順は下記のとおり。操作はすべてT61で行う。
roombaを部屋の真ん中あたりに置き、搭載したX61を起動。レーザー測域センサとroombaの電源を入れる。
端末を開き、roombaプラットフォームを起動
$ source ~/catkin_ws/devel/rbsetup.bash
$ roslaunch ~/rb_base.launch
新たに端末を開き、レーザーデータの確認のためrvizを起動
$ source ~/catkin_ws/devel/rbsetup.bash
$ rosrun rviz rviz
各座標系、レーザーデータが表示されることを確認。確認後は終了しても構わない。
新たに端末を開き、rosbagでトピックの記録開始
$ source ~/catkin_ws/devel/rbsetup.bash
$ rosbag record -O mylaserdata /scan /tf
mylaserdata.bagというファイル(homeに生成)を作り、トピックscanとtfを記録する
roombaをゲームパッドで操縦し、壁にそって室内をゆっくり一巡りさせる。
rosbagを起動している端末をcrtl+Cでブレークし、記録を終了する。
(重要) roslaunchを起動している端末をcrtl+Cでブレークし、roombaプラットフォームを終了する。
起動したままだと、scanトピックがパブリッシュされつづけるので、rosbag playを実行したときに、データがコンフリクトしてしまう。
新たに端末を開き、gmappingを起動
$ source ~/catkin_ws/devel/rbsetup.bash
$ rosparam set use_sim_time true
$ rosrun gmapping slam_gmapping scan:=scan ←scanトピック名を指定
rosbagをブレークした端末で(新たな端末でも構わない)、記録したデータを再生
$ rosbag play mylaserdata.bag
終了後、同じ端末でmap_serverを起動し、mapデータを可視化
$ rosrun map_server map_saver
以上の手順でhomeにマップイメージ、map.pgmができる。
マップの右側に、とても深い隙間ができているが、これは誤認識だ。隙間はあるが、そんなに深いものではない。隙間でレーザーが反射を繰り返し、距離を誤認識したのだろうか。
以前、SRIのShakeyを模型化した「シェーキー」で、同様のマップ作成をしてみたが、それに比べて実にスピーディで正確だ。まあ、60年代の技術と21世紀の技術の差といえばそれまでだが。
次はマップデータの中身を見てみたい。
« gmappingを使う準備をする | トップページ | roombaの走行性能を改善する »
「ROSさんお手やわらかに」カテゴリの記事
- 3Dプリンターで作る簡単turtlebot(おしまい)(2017.01.07)
- 3Dプリンターで作る簡単turtlebot(raspberry pi3の取り付け)(2017.01.03)
- 3Dプリンターで作る簡単turtlebot(kinectの取り付け)(2017.01.02)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て2)(2016.12.29)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て1)(2016.12.25)
コメント