ROS2ハンズオン3-3:地図を作ろう!

今回は,SLAMを使って地図を作成します.教科書 [第4章 ナビゲーション] の[4.3.8節 ROS2での地図作成法 (p.123)]に相当します.

ROS2 Foxyの標準SLAMパッケージはslam_toolboxです.この使い方についてざっと学びます.詳しい使い方は参考リンクをご覧ください.
 

1. シミュレータの起動
端末を開き,次のコマンドでGazeboシミュレータを起動しましょう.ここでは,Turtlebot3 House環境を使います.

  • export TURTLEBOT3_MODEL=happy_mini
  • ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py

2. Slam_toolboxノードの起動
slam_toolboxにはasync_slam_toolbox_nodesync_slam_toolbox_nodeの2種類があります.ロボットを動かしながらリアルタイムで地図を作成するときはasync_slam_toolbox_nodeノード,rosbag2などで保存したセンサデータから品質の高い地図を作成するときはsync_slam_toolbox_nodeノードを使います. 実際にコマンドを実行するときはローンチファイルを使います.リアルタイム(オンライン)で地図を生成するときはonline_async_launch.py,オフラインで品質の高い地図を作るときはoffline_launch.pyを使います. 端末をもう1つ開き3分割します.上段の端末で次のコマンドを実行してasync_slam_toolbox_nodeを起動します.

  • export TURTLEBOT3_MODEL=happy_mini
  • ros2 launch slam_toolbox online_async_launch.py

3. 遠隔操作ノードの起動

 ロボットをキー操作により制御するために,中段の端末でコマンドを入力し,遠隔操作ノードを起動しましょう.

  • export TURTLEBOT3_MODEL=happy_mini
  • ros2 run turtlebot3_teleop teleop_keyboard

4.  Rviz2の起動

  地図の生成をリアルタイムで見るためにRviz2を起動します.下段の端末に次を入力します.地図情報は/mapトピックで送られてきます.

  • rviz2

 そのままでは地図が表示されないので,左下の[Add]をクリックして,Mapを選択して,そのTopic名を”/map”とすると下図のように地図が表示されます.

   遠隔操作ノードのキー操作により部屋を移動させると地図がどんどん生成されます.地図の生成にはLIDARの情報が使われます.コツとしては,ところどころでロボットを1回転させて部屋全体の情報をLIDARで取得することです.
 
5. 地図の保存
  キー操作によりロボットを動かし環境の地図を作成できたら,次のコマンドで地図を保存しましょう.”-f”のオプションで地図名をします.
この例では~/mapとしたのでホームディレクトリ(~はホームディレクトリの意味)にmap.pgmとmap.yamlが保存されます.なお,既に同じファイル名がある場合は,上書きされずにtimeoutと表示されてエラーになるので注意してください.

  • $ ros2 run nav2_map_server map_saver_cli -f ~/map

ホームディレクトリのmapディレクトリに以下のようなmap.pgmファイルとmap.yamlファイルが保存されたら成功です.

map.pgmファイルは下図のような画像ファイルです.
 
map.yamlファイルは下図のように地図の設定などが書かれています.
ハンズオン

  • 上の説明に従って実際に地図を作ってみよう!
  • チャレンジ4.7 (p.126) をやってみよう!

 

参考リンク

 

終わり

コメント

タイトルとURLをコピーしました