Gmappingを使って地図を生成する

このページではTurtlebotとgmappingを用いてGazeboシミュレーション内の地図を生成する方法について扱います。

Worldファイルを作る

Gazeboを起動してWorldファイルを作ります。 すでにあるWorldファイルを使う場合はこの手順は必要ありません。

今回はGazeboモデルデータベース(http://models.gazebosim.org/)にあるWillow Garageモデルを利用します。 Willow GarageモデルはInsertタブから追加することができます。 モデルはデータベースから自動でダウンロードされますが、ダウンロードされるまでにしばらく時間がかかります。

以下のようなワールドを作り、Worldファイルとして保存します。

../_images/willow_garage1.png

地図を作る

SLAM Map Building with TurtleBot を参考にして地図の作成を行います。

必要なパッケージをインストールする

sudo apt install ros-kinetic-turtlebot-teleop \
                 ros-kinetic-turtlebot-gazebo \
                 ros-kinetic-turtlebot-bringup

必要なノードを起動する

今回はGazebo内のモデルの地図を作成するので、シミュレータを起動します.

roslaunch turtlebot_gazebo turtlebot_world.launch world_file:=$HOME/catkin_ws/src/px4_sim_pkg/worlds/willow_garage.world

Teleopノードを起動します。 使用するコントローラに適したLaunchファイルを使ってください。 キーボードを使うときはkeyboard_teleop.launchファイルを使います。

roslaunch turtlebot_teleop logitech.launch

地図作成用のノードを起動します。 今回は gmapping を使って地図を作成します。

roslaunch turtlebot_navigation gmapping_demo.launch

地図を保存する

Rvizで作成される地図を確認しながら作業を行うと良いでしょう。

roslaunch turtlebot_rviz_launchers view_navigation.launch
../_images/mapping.gif

Turtlebotを走らせて一通り地図ができたら、map_server を使って地図を保存します。 以下のコマンドを実行するとホームディレクトリ以下に次の2つのファイルが生成されます。

my_map.pgm

グリッドの占有状態を示す画像ファイル

my_map.yaml

マップのメタデータが記述されているファイル

rosrun map_server map_saver -f ~/my_map

マップファイルのフォーマットについては Map Format を参照してください。

参考

How to Build a Map Using Logged Data - ROS Wiki

gmappingを使って自己位置推定用の地図を作る