はじめに
前回の記事では、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 の設定をいろいろ変更して、その結果を確認するなど、実験的なことをやっていきたいと思います。
私の備忘録も兼ねた記事になるかと思います。
コメント