おひさしぶりです。
ようやくマップができました。
(自宅の地図大公開です。)
上側がキッチン、下がリビングダイニングです。
左側には広大な部屋がたくさんありますが、あまり遠くにいかせてもあれなので、
今回は自宅のごく一部の地図としました。
(本当は段差があるので、段差なしの領域だけとしてみました。)
(本当は部屋を片付けるのが面倒なので、ここだけです。)
ルンバから取得するオドメトリの値は全然実世界と合わないので、
距離は8倍、角度は3倍しました。
するとちょうどよさげです。
謎ですが気にしない。気楽にやります。
なぜ今まで、オドメトリとレーザーをやってきたか、というとgmappingを使ってマップを作るためです。
この二つがあればマップを自動作成することができます。
http://www.ros.org/wiki/navigation/Tutorials/RobotSetup/Odom
をよく読んで自分のロボットのオドメトリをpublishします。
TFの形と、nav_msgs/Odometryの形の2つでpublishします。
Odometryのデバッグはrvizを使いました。
そしてgmappingを使います。
http://www.ros.org/wiki/slam_gmapping/Tutorials/MappingFromLoggedData
基本的にはロボットを動かす前に、
$ rosbag record -a -O map
などとして、トピックをすべて記録。
そして、その状態でロボットを動かします。
で、できたmap.bagファイルをslam_gmappingに食わせます。
$ rosparam set use_sim_time true
して、rosbagでの再生にgmappingを対応させて、
$ rosrun gmapping slam_gmapping
でgmappingを起動。
$ rosbag play map.bag
でトピックを再生します。
rosbagは非常に便利です。テストにも必須な気がします。
gmappinはパラメータがいろいろありますが、デフォルトの設定で一応できたのでよしとします。
再生が終わってから
$ rosrun map_server map_saver
とすると安定版マップがmap.pgm/map.yamlとして取ってこれます。
$ rosrun map_server map_saver static_map:=dynamic_map
とすると、現状の最新マップが取ってこれます。
やっとマップができましたので、次回はこれを使っていよいよ自律移動です!
map.pgm/map.yamlはどこに保存されるのですか?
返信削除