ロボットプログラミングⅡ-2021:ROS2演習9 – SLAM

この記事は金沢工業大学 ロボティクス学科で2021年後学期開講中のロボットプログラミングⅡ用です.
今回のテーマはSLAMです.ROS2 Foxyの標準SLAMパッケージはslam_toolboxです.この使い方についてざっと学びます.詳しい使い方は参考リンクをご覧ください.
参考リンク

準 備

  • happy_miniを使う場合は,次のGithubのサイトからHappy Mini TurtleBot3 Simulationsパッケージを次のコマンドでクローンしておく必要があります.turtlebot3  burger,  waffle,waffle_piを使う場合は必要ありません.
    • $ cd ~/colcon_ws/src
    • $ git clone https://github.com/demulab/happy_mini_turtlebot3_sim.git
    • $ cd ~/colcon_ws
    • $ colcon build --symlink-install
  • Navigation2のインストール
    • $ sudo apt -y install ros-foxy-navigation2
    • $ sudo apt -y install ros-foxy-nav2-bringup
  • slam_toolboxのインストール
    • $ sudo apt -y install ros-foxy-slam-toolbox

シミュレータの起動

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

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

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を使います.

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

遠隔操作ノードの起動

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

  • $ export TURTLEBOT3_MODEL=happy_mini
  • $ ros2 run turtlebot3_teleop teleop_keyboard

 

Rviz2の起動

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

  • $ rviz2

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

遠隔操作ノードのキー操作により部屋を移動させると地図がどんどん生成されます.地図の生成にはLIDARの情報が使われます.コツとしては,ところどころでロボットを1回転させて部屋全体の情報をLIDARで取得することです.

地図の保存

キー操作によりロボットを動かし環境の地図を作成できたら,次のコマンドで地図を保存しましょう.このように”-f”のオプションをつけると指定したディレクトリにmap.pgmとmap.yamlが保存されます.つけないと実行したディレクトリに保存されます。

  • $ ros2 run nav2_map_server map_saver_cli -f ~/map


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

map.yamlファイルは下図のように地図の設定などが書かれています.

終わり

コメント

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