ロボット研究開発、ソフトウェア開発、コンテンツ制作配信

【自作ロボットROS2化】ROS2 slam_toolboxを試す

ROS2のslam_toolboxを動かしてみたので備忘録です。
これまでのROS2化の作業は以下ブログを参照ください。

スポンサーリンク

slam_toolbox

slam_toolboxとは・・・ROS2でよく使われるSLAMのパッケージ。SLAMとは、地図生成と自己位置推定を同時に行う手法のこと。
ROS1では、gmappingを使ってました。今回ROS2にしたことで一番有名なslam_toolboxを使ってみようと思います。

ホイールオドメトリの通知が必要

現在開発中のロボットの車両は、自作の「RasPiPicoUartMotorBase※」を使っています。
※raspiPICO+KITRONIK-5331を使ったDCモーター制御車両ベースです。
GitHub(RasPiPicoUartMotorBase)

RasPiPicoUartMotorBaseは、UART通信でモーターの回転数が取得できるようにしていますので、回転数からホイールオドメトリを計算し、トピック通知するようにしました。

slam_toolboxのインストール

raspberryPI5 (Ubuntu24.04+ROS2 Jazzy)にslam-toolboxをインストールします。
ソースコードから入れます。

cd ~/ros2_ws/src
git clone https://github.com/SteveMacenski/slam_toolbox.git
cd slam_toolbox/
git checkout jazzy
cd ~/ros2_ws
colcon build

ビルドすると、色々パッケージが不足しておりエラーが発生しました。
以下のインストールを行いました。

sudo apt update
sudo apt install ros-jazzy-bond-core
sudo apt install libboost-all-dev
sudo apt install libsuitesparse-dev
sudo apt install libcereal-dev
sudo apt install libceres-dev
python3 -m pip install empy
python3 -m pip install empy==3.3.4
python3 -m pip install catkin_pkg
python3 -m pip install lark

再度ビルドします。無事にビルドが通りました。

cd ~/ros2_ws/
colcon build
source ~/ros2_ws/install/setup.bash

slam_toolboxを動かしてみる

以下の手順でslam_toolboxを動かしてみました。

1.slliderノードを起動

2Dライダーから/scanトピックを発行するため、以下ノードを起動します。

ros2 launch sllidar_ros2 sllidar_a1_launch.py

2.モーター駆動用ノード、オドメトリ発行ノードを動かす

モーター駆動用のノードと、ホイールオドメトリ用のノードを起動します。(自作のノードです)
ご自身のロボットのオドメトリを通知するノードに置き換えて起動してください。
※まだ自作のノードは公開できてませんが、そのうち整理して公開しようとは思っています。

ros2 run inobo_dcmotor motor_node
ros2 run inobo_odom odom_publisher

3.laserフレームのTFを出力

ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 base_footprint laser

4.slam_toolboxを起動

slam_toolboxのonline_async_launch.pyを起動します。

ros2 launch slam_toolbox online_async_launch.py

5.teleopを動かす

キーボードでロボットを動かすため、teleop_twist_keyboardを起動します。

ros2 run teleop_twist_keyboard teleop_twist_keyboard

6.rviz2を起動

別のubuntuPCからrviz2を起動してみます。

rviz2

そして、TFとMAPをADDします。
teleopでcmd_velを出すと、ロボットが動き出し、地図が生成されていきます。

実験時の動画です↓

パラメータ設定について

slam_toolのパラメータファイルは以下にありました。
src/slam_toolbox/config/mapper_params_online_async.yaml

当初、ロボットを回転させると地図が崩れまくっていたので、パラメータを色々変えましたが、根本原因がホイールオドメトリの精度の悪さが原因でしたので、もしかしたらデフォルトでもそれなりに動くかもしれません。
※パラメータについては、まだ調べきれていないのでまた別途調査します。

作成した地図を保存する

slamで作成した地図を保存してみます。以下コマンドを実行しました。
ホームディレクトリに、map.pgmとmap.yamlが作成されました。

ros2 run nav2_map_server map_saver_cli -f ~/map

最後に

自作ロボットでROS2のslam_toolboxを動かしてみました。
ホイールオドメトリの精度が上がれば、かなりきれいに地図も生成されていきました。
さすがROS2で一番有名なSLAMパッケージということでかなり使えそうです。

ノードの構成やパラメータなどまだまだ不明点が多いので随時整理していこうと思います。

それでは!

スポンサーリンク

いいね!を押すと、
最新記事をお届けします。

Twitter で
関連記事(一部広告含む)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


ページトップボタン