Evalyn Berleant, Kelly Duan
This FAQ section assumes understanding of creating TF listeners/broadcasters, using the TF tree, namespacing, and launching of multiple robots. This tutorial also relies on the ROS gmapping package although different SLAM methods can be substituted.
Gmapping will require namespaces for each robot. If you want to use the launch file turtlebot3_gmapping.launch
from the package turtlebot3_slam
, be sure to pass values to the arguments set_base_frame
, set_odom_frame
, and set_map_frame
to use the robot namespaces. For instance, if the default value is base_footprint
, the namespaced value will be $(arg ns)/base_footprint
. You can also directly call the node for slam_gmapping inside the namespace (below it is $(aarg ns)
) with
First navigate to the ros documentation for multirobot_map_merge. Install depending on the version (newer ROS versions may need to clone directly from the respective branches of m-explore).
catkin_make
If not using initial poses of robots, simply use map_merge.launch
as is. In the initial file, map_merge
has a namespace but by removing the namespace the merged map will be directl published to /map
.
If using initial poses of robots, you must add parameters within the robot namespace named map_merge/init_pose_x
, map_merge/init_pose_y
, map_merge/init_pose_z
, and map_merge/init_pose_yaw
.
Using merged map for cost map
The current map merge package does not publish a tf for the map. As such, one must create a TF frame for the map and connect it to the existing tree, making sure that the base_footprints of each robot can be reached from the map, before using things such as move_base.
Maps can be saved directly through the command line, but multiple maps can also be saved at once by creating a launch file that runs the map_saver
node. If running the map_saver
node for multiple maps in one launch, each node will also have to be namespaced.
When using map_saver
, be sure to set the map parameter to the dynamic map of the robot (will look like namespace/dynamic_map
, where namespace
is the name of the robot’s namespace), instead of just the at namespace/map
topic.
Example:
will set the map to be saved as the one specified in the parameter, meanwhile the argument -f $(find swarmbots)/maps/robot$(arg newrobots)
will set the save destination for the map files as the maps
folder, and the names of the files as robot$(arg newrobots).pgm
and robot$(arg newrobots).yaml
.
To save a map merged by the map_merge package, do not namespace the map_merge launch file and instead have it publish directly to /map
, and map saver can be used on /map
.