Skip to content

RobInLabUJI/multi_turtlebot_sim

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

multi_turtlebot_sim

Introduction

This package is meant to be an example on how robots needs to be configured in order to support simulating multi robots in the same environment.

Platform

ROS 2 Version: Humble

Notes

TF

  • One /tf topic is expected to be published for any number of robots
  • Each frame should have a prefix to know which robot they belong to

ROS

  • Topics should be namespaced.
    • <robot_prefix>/robot_description
    • <robot_prefix>/joint_states
    • <robot_prefix>/cmd_vel
    • <robot_prefix>/odom
    • <robot_prefix>/scan
  • Nodes should be namespaced.
    • robot_state_publisher: Reads robot description and:
      • Publishes <robot_prefix>/robot_description topic.
      • Publishes transforms to /tf. Transforms should be prefixed for the robot.
      • Subscribes to joint_states. Topic should be prefixed for the robot.
    • Gazebo related nodes
      • gazebo_ros_diff_drive plugin: Should be namespaced.
      • gazebo_ros_joint_state_publisher plugin: Should be namespaced.

Try it!

  • Create a workspace, clone this repository and build the package
mkdir -p ros2_ws/src
cd ros2_ws/src
git clone https://github.com/RobInLabUJI/multi_turtlebot_sim
cd ..
source /opt/ros/humble/setup.bash
colcon build
  • Launch the standalone simulation, no robot is spawned
source /opt/ros/humble/setup.bash
source ros2_ws/install/setup.bash
ros2 launch multi_turtlebot_sim standalone_world.launch.py

Note: By default the empty world is used, you can also use world_name:=turtlebot3_world.world.

  • Spawn a robot using a robot_prefix in a particular x_pose and y_pose.
source /opt/ros/humble/setup.bash
source ros2_ws/install/setup.bash
ros2 launch multi_turtlebot_sim spawn_turtlebot3.launch.py robot_prefix:=robot1 x_pose:=0.5 y_pose:=0.5

The robot_prefix will affect both the ros namespace and the tf prefix for that robot

  • Spawn another robot in a different position
source /opt/ros/humble/setup.bash
source ros2_ws/install/setup.bash
ros2 launch multi_turtlebot_sim spawn_turtlebot3.launch.py robot_prefix:=robot2 x_pose:=-0.5 y_pose:=-0.5

Check how the tf tree is conformed:

source /opt/ros/humble/setup.bash
ros2 run tf2_tools view_frames
  • The tf tree of each robot aren't connected therefore both robots in rviz can't be seen. As the simulation is starting the odom frame for each robot in the {0,0} world position we can add a static transform between both odometry frames to achieve the full tf_tree all connected.
source /opt/ros/humble/setup.bash
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 robot1/odom robot2/odom

About

Multi turtlebot3 simulation

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 92.7%
  • CMake 7.3%