ROS2 Tugbot Gazebo で 3D LiDAR の SLAM を試してみた。
ROS2 Gazebo for Tugbot が使えるようになったので、本題の 3D LiDAR の SLAMのサンプルを試してみた。
3D LiDAR の SLAMのサンプルは、
@fishros/LeGO-LOAM-ROS2
開発環境
PC: Ubuntu Mate 24.04
ROS2 Jazzy
Gazebo Hramonic
1. ビルド。
$ cd ~/colcon_ws-jazzy/src
$ git clone https://github.com/fishros/LeGO-LOAM-ROS2.git
$ cd ..
$ colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-select lego_loam_sr
$ . install/setup.bash
2.Run。
# term1
$ sudo ufw disable
$ ros2 launch tugbot_gazebo_my warehouse.launch.py
# term2
$ ros2 launch lego_loam_sr run.launch.py
で、問題なければ、動くはず。
ただし、手直ししないと動かなかったので、メモして置きました。
3. 手直し。
1) LeGO-LOAM/config/loam_config.yaml の修正
下記のように、一部修正しました。
2) LeGO-LOAM/CMakeLists.txt を一部修正。
jazzy 対応が入っていなかったので、入れました。
3) run.launch.py を自分用にアレンジ。
LeGO-LOAM/launch/run_nishi.launch.py を自分用に作成しました。
4. 正式に run
# term1
$ sudo ufw disable
$ ros2 launch tugbot_gazebo_my warehouse.launch.py
# term2
$ ros2 launch lego_loam_sr run_nishi.launch.py RVIZ:=False
# term3
$ ros2 launch lego_loam_sr run_nishi.launch.py RVIZ:=True
3. control
1) Teleop keyboard
$ ros2 run turtlebot3_teleop teleop_keyboard
これで、一応試せるようになった。
Teleop keyboard の操作で、Tugbot を動かしながら、Rviz2 の表示を確認する。
2D Map のようなものが、Rviz2 の Ground Plane に出てくる。
だが、障害物はよいのだが、床も同じように白くなるので、区別が出来ない。
Tugbot が移動するにつれて、最初の情報が消えて行く。
Local_cost_map みたいな感じか。
$ ros2 topic info --verbose /ground_cloud
ただし、map topic では無いので、自分で変換しないと、Map 作成にはならないのではないか?
現状、Gazebo の Tugbot の向きと Rviz2 の向き がすこしずつずれるみたい。
注) これは、動かしていると、周囲の 3D Lidar の情報からうまく自己位置を算出して、Gazebo 上の位置と、うまく一致するみたい。
これを、rtabmap_ros の様に使うにはどうすればよいのか?
いまは、YouTube の映像と異なるので、まあ、設定が不十分なんだろう。
YouTube の映像だと、スタート位置からのデータが残っていて、最後にクロージャされているみたい。
本来は、このようにならないといかんのかも。
兎にも角にも、tf のリンクが不明なので、ここをなんとかしないといかんのかも。
base_link が、バッティングしているからどうするか?
下記を、変更を、lego_loam_sr の時だけ一時的に行う。
i) src/tugbot_my/tugbot_gazebo_my/models/tugbot.sdf
Gazebo から、 tf-odom -> tf-base_footprint を出さないようにする。
ii) LeGO-LOAM/launch/run_nishi.launch.py を下記に変更。
tf-map -> tf-camera_int -> tf-camera -> tf-basefoot_print にする。
これで、YouTube で見られるのと同じ動きをするみたい。
Map Cliud(/laser_cloud_surround) がずっとのこるみたい。
これが、クロージャーするのかも知れない。
よく観察していると、倉庫の中の周囲を判定して、Gazebo の位置とうまく一致するみたい。
すごい!!