【自作ロボットROS2化】ROS2 slam_toolboxを試す
ROS2のslam_toolboxを動かしてみたので備忘録です。
これまでのROS2化の作業は以下ブログを参照ください。
【自作ロボットROS2化】Raspberry Pi5+ROS2 JazzyでRplidarを動かす
【自作ロボットROS2化】Raspberry Pi5(Ubuntu24.04)+ROS2 JazzyでUART通信を動かす
目次
slam_toolbox
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パッケージということでかなり使えそうです。
ノードの構成やパラメータなどまだまだ不明点が多いので随時整理していこうと思います。
それでは!
スポンサーリンク