ROS2 Gazebo for Tugbot を作ってみた。
3D LiDAR の SLAM サンプルの、
@fishros/LeGO-LOAM-ROS2
Gazebo で試せないかと思ったので、作って見ました。
一応出来たのだが、3D LiDAR の PointClouds2が、Rviz2 でうまく確認できない。--> 一応対応した。
作るにあたっては、下記の2サイトを参考にさせてもらったぞね。ありがとう!!
@ROBOTIS-GIT/turtlebot3_simulations
@/porizou/tugbot_ros2_pkgs
turtlebot3_simulations/turtlebot3_gazebo が、Gazebo 利用の FrameWork みたになっているので、これのファイル構成を流用させてもらいました。
tugbot_ros2_pkgs は、urdf sdf を参考にさせて貰いました。
開発環境
PC: Ubuntu Mate 24.04
ROS2 Jazzy
Gazebo Hramonic
github に公開しました。
@tosa-no-onchan/tugbot_my
1. ビルド。
$ cd ~/colcon_ws-jazzy/src
$ git clone https://github.com/tosa-no-onchan/tugbot_my.git
$ cd ..
$ colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-select tugbot_gazebo_my
$ . install/setup.bash
2. Run
$ sudo ufw disable
# term1
$ ros2 launch tugbot_gazebo_my warehouse.launch.py
# term2
$ rviz2
add tf and etc.
# term3
control
Teleop keyboard
$ ros2 run turtlebot3_teleop teleop_keyboard
Rviz2 で、3D LiDAR の PointClouds2 が見えない件。
Rviz2 で下記ログが出ていた。
[rviz2-3] [WARN] [1760170286.510263623] [rviz2]: topic '/scan_omni/scan' has more than one types associated,
rviz will arbitrarily use the type 'sensor_msgs/msg/LaserScan' -- all types for the topic: 'sensor_msgs/msg/LaserScan' 'sensor_msgs/msg/PointCloud2'
どうやら、'/scan_omni/scan' トピックに2種類の message type を割り当てていたみたい。
早速、該当場所をチェックチェック。
tugbot_my/tugbot_gazebo_my/params/tugbot_bridge.yaml
の記述みたい。
不要な記述をコメントにする。
これで、Rviz2 で '/scan_omni/scan/points' の 表示が見えだした。
すごい!!
4. これで、本題の
@fishros/LeGO-LOAM-ROS2
が、Gazebo で試すことができるぞね。!!
少し試してみたが、自分で手直ししないと、うまく動かないみたい。
5. 構成ファイルについて、ちょっとメモ。
turtlebot3_simulations/turtlebot3_gazebo の、Gazebo 利用の FrameWork の構成になっているので、ちょっとだけメモしちょきます。
1) Gazebo World の sdf
worlds/warehouse_depot.world
これで、Gazebo 上の warehouse の world sdf を定義。
2) Gazebo Model の sdf
models/tugbot.sdf
これで、Gazebo 上の Tugbot の model sdf を定義。
この中の情報で、Tugbot のセンサー類のプロパティが指定できる。
Topic の Frame id 等...
scan_omni の 有効距離は、下記記述で決まる。
3) ROS2 での Model の urdf
urdf/tugbot.urdf
このなかで、ROS2 Rviz で参照される、パーツや、tf の link が記述される。
4) gz - ros2 間の topic の関連付け。
params/tugbot_bridge.yaml
このなかで、
$ gz topic -l で表示される topic を、
$ ros2 topic list で表示される topic に関連付ける。
5) launch ファイル。
i) launch/warehouse.launch.py
起動用の launch.py ファイル
ii) launch/spawn_tugbot.launch.py
Gazebo 内に、Tugbot model sdf を読み込ませる。
models/tugbot.sdf
params/tugbot_bridge.yaml も読み込ませる。
iii) launch/robot_state_publisher.launch.py
ROS2 に、urdf/tugbot.urdf を読み込ませる。