コンテンツにスキップ

slam-toolboxでSLAMをしよう

SLAM(Simultaneous Localization and Mapping)は、ロボットの自己位置推定と環境地図作成を同時に行う手法です。
ロボット掃除機などの自律移動ロボットでよく用いられており、現在も盛んに研究されている高度な技術です。

ROSには、このSLAM手法を実装したパッケージが存在しており、誰でも簡単にSLAMを利用することが可能となっています。
ROSでSLAMを実装したパッケージはいくつか存在しますが、ここでは「slam-toolbox」を利用して、SLAMを実行してみましょう。

SLAM(slam-toolbox)サンプルは、ライトローバー上部に取り付けられたLiDARで取得した情報をもとに、自己位置の推定と周囲の環境地図の作成を行います。
ライトローバーの移動は手動で行う必要がありますので、ゲームパッド操作サンプルを一緒に使用します。

LiDARは、周囲に存在する物体の位置を検出することができるセンサです。
レーザー光を発射し、その反射を見て物体の有無を確認しています。
視野が広く、計測精度が高いことから、自律移動台車ロボットなどでよく使用されています。

「slam-toolbox」はROSでメジャーなSLAMパッケージのひとつです。
LRFのデータと、車輪の回転数から移動量を計測するオドメトリの情報を用いてSLAMを行います。
「slam-toolbox」を用いて作成した地図の例を次に示します。

image

図中の黒い部分は障害物が存在する通行不可能な箇所、白い領域は通行可能な場所、灰色は未知領域です。
地図はグリッド状になっており、各グリッドには障害物が存在する確率(占有確率)を示す0~100の値もしくは、未知領域を示す-1の値が与えられます。
この占有確率を用いた地図の表現方法は、ROSの2Dマップ表現方法として標準化されています。

slam-toolboxのセットアップ

次のコマンドでslam-toolboxパッケージをインストールします。

sudo apt install ros-humble-slam-toolbox

slam-toolboxの実行

次のコマンドでslamを実行しましょう。

sudo chmod 777 /dev/ttyUSB0
cd ~/ros2_ws
. install/setup.bash
ros2 launch lightrover_ros lightrover_slam.launch.py

また、ライトローバーの移動は手動で行う必要がありますので、ゲームパッド操作サンプルを一緒に使用します。
「ゲームパッドで走行しよう」を参考に、ゲームパッド操作サンプルを新しいターミナルで実行してください。
slamが起動すると次のようにRvizが起動し画面が表示されます。

image

Rviz上にはLRFが捉えている障害物と、生成される地図がリアルタイムで表示されます。
画面が表示されなかったりLRFのデータが表示されなかったりした場合は、起動中に何らかのエラーが発生した可能性があります。
一度プログラムを終了し、再度実行しなおしてください。

地図が生成され始めたら、ライトローバーをゆっくりと移動させていきましょう。
移動した範囲の地図が徐々に作成されていくはずです。
急発進や急停止、急旋回などを行うと地図が乱れやすいので注意してください。

地図の保存

作成したmapを保存する方法を説明します。
mapの保存にはmap_serverパッケージのmap_saverノードを使用します。
次のコマンドを実行することで、ホームフォルダに地図の画像ファイル(.pgm)とデータファイル(.yaml)が保存されます。
ファイル名は適宜設定してください。

ros2 run nav2_map_server map_saver_cli -f ~/ros2_ws/src/lightrover_ros2/lightrover_navigation/maps/ファイル名