SLAM (自己位置推定) のための Localization ~Map作成完結編~ (ROS2-Foxy)

ROS2
スポンサーリンク

スポンサーリンク

はじめに

前回の記事では、SLAM を実行して Gazebo 上の障害物を LIDAR で検知し、Rviz2 で /map トピックをサブスクライブして画面上に地図を表示しました。

今回は teleop_twist_keyboard パッケージを利用して Gazebo 上のロボットを動かしながら Map が作成されている様子を観察しながら、完成した地図の見方を説明できればと思います。

前提条件

前提条件は、以下の通りです。

  • Rviz2 で、Map トピックを表示できている

前回の記事を見てもらえれば、既に前提条件はクリアできていると思います。

Rviz2 で Map トピックの確認

早速、Localization と SLAM それぞれの launch ファイルを起動していきます。

cd ~/ros_ws
ros2 launch ros2_first_test first_localization.launch.py

別のターミナルを開き、以下を実行します。

cd ~/ros_ws
ros2 launch ros2_first_test first_slam.launch.py

このように、グレースケールで Rviz2 上で表示されていれば準備完了です。

ロボットを動かして Map を作成する

ここまで来たら、あとは teleop_twist_keyboard を実行します。

ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args --remap cmd_vel:=/first_robot/cmd_vel

上記を実行すると、キー入力でロボットが動くようになります。

  • “i” を押すと前進
  • “k” を押すと停止
  • “j” を押すと左回転
  • “l” を押すと右回転

です。これを利用して world 内をくまなく走査します。(時間かかります…。)

以下のような地図が作成されていると思います。

ここまできたら、保存まではあと一息です。
launch ファイルは停止せずに、そのまま以下の項目を進めてください。

Rviz2 上で作成した Map の保存

以下のコマンドを実行すると ros2_first_test/map フォルダに map.pgm と map.yaml が作成されます。

cd ~/ros_ws/src/ros2_first_test
mkdir map
ros2 run nav2_map_server map_saver_cli -f ./map

nav2_map_server の公式の説明はこちらにあります。
github はこちらにあります。

nav2_map_server は、navigation2 のパッケージに map 情報を提供するパッケージです。

作成された map.yaml を確認してみましょう。

image: ./map.pgm
mode: trinary
resolution: 0.05
origin: [-4.58, -11.8, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

yaml ファイルの mode の説明は、ソースコードを見ないと分からないと思います。
探しても見つかりませんでした。ソースコードはこちらです。
マップファイルは nav_msgs/OccupancyGrid の型で作成されます。こちらに説明があります。

  • image … .pgm ファイルの保存場所
  • mode … Trinary, Scale, Raw から選択されます。
    Trinary : lightness = 100(侵入不可), 0(通行可能), -1(不明) から構成されます。
    不明は、LIDAR の届かない部分が、該当します・
    Scale : alpha(透過度), lightness(明るさ?) から構成されます。alpha = -1 で不明です。
    lightness は 0 – 100 で、直線補間されます。0 は通行可能、100 は侵入不可です。
    Raw : lightness = 0(通行可能), 100(侵入不可), >=101(不明) で構成されています。
    lightness = 0 – 100 は直線補間されます。
  • resolution … resolution の説明はこちらにあります。
           map resolution [m/cell] なので、グリッドの 1 セル当たりが、何m を表しているとなります。0.05 m/cell = 1セル当たり 0.05m
  • origin … マップの原点の位置です。The origin of the map [m, m, rad]で表されます。
  • negate … 表示される Map の白黒を反転するかどうかを示しています。1 = True で反転です。
  • occupied_thresh … この値よりも大きいピクセルの値は、侵入不可とみなされます。
  • free_thresh … この値よりもピクセルの値が低いと、通行可能とみなされます。

特別なことをやろうとしない限り、手動で変更する必要はありません。

Map.pgm ファイルを VSCode で確認する

続いて、作成された map.pgm ファイルを VSCode で確認していきます。
拡張機能の検索欄に pgm と入力すると、以下の機能が表示されるので、インストールしてください。

インストールした状態で、map.pgm を開くと、以下のように表示されます。

こんな簡単に確認できるので、是非インストールしてみてください。

おわりに

今回は map の作成方法と、その確認方法、yaml ファイルが何を表しているかを説明しました。
基本的には、デフォルトの設定で問題なく使用できます。

次回は、SLAM, Localization の設定をいろいろ変更して、その結果を確認するなど、実験的なことをやっていきたいと思います。
私の備忘録も兼ねた記事になるかと思います。

コメント

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