[Documentation] [TitleIndex] [WordIndex

Package Summary

Merging multiple 3D maps, represented as pointclouds, without knowledge of initial positions of robots.

  • Maintainer status: developed
  • Maintainer: Jiri Horner <laeqten AT gmail DOT com>
  • Author: Jiri Horner <laeqten AT gmail DOT com>
  • License: BSD
  • Source: git https://github.com/hrnr/map-merge.git (branch: lunar-devel)

Package Summary

Merging multiple 3D maps, represented as pointclouds, without knowledge of initial positions of robots.

  • Maintainer status: developed
  • Maintainer: Jiri Horner <laeqten AT gmail DOT com>
  • Author: Jiri Horner <laeqten AT gmail DOT com>
  • License: BSD
  • Source: git https://github.com/hrnr/map-merge.git (branch: melodic-devel)

Use GitHub to report bugs or submit feature requests. [View active issues]

Overview

This package provides a 3D global map for multiple robots and the respective transformations between robots. It merges robots' individual maps based on the overlapping space in the maps and requires no dependencies on a particular SLAM or communication between the robots.

screenshot.jpg

The ROS node can merge maps from the arbitrary number of robots. It expects maps from individual robots as ROS topics and does not impose any particular messaging between robots. If your run multiple robots under the same ROS master then map_merge_3d may work for you out-of-the-box, this makes it easy to setup a simulation experiment.

In the multi-robot exploration scenario your robots probably run multiple ROS masters and you need to setup a communication link between robots. Common solution might be multimaster_fkie. You need to provide maps from your robots on local topics (under the same master). Also if you want to distribute merged map and tf transformations back to robots your communication must take care of it.

Architecture

map_merge_3d finds robot maps automatically and new robots can be added to the system at any time. 3D maps are expected as sensor_msgs/PointCloud2, other map messages are not supported.

architecture.svg

Recommended topics names for robot maps are /robot1/map, /robot2/map etc. However the names are configurable. All robots are expected to publish map under <robot_namespace>/map, where topic name (map) is configurable, but must be the same for all robots. For each robot <robot_namespace> is of cause different, but it does not need to follow any pattern. Further, you can exclude some topics using robot_namespace parameter, to avoid merging unrelated point clouds.

Estimation

Transformations between maps are estimated by feature-matching algorithm and therefore it is required to have sufficient amount of overlapping space between maps to make a high-probability match. If maps don't have enough overlapping space to make a solid match, merger might reject those matches.

Estimating transforms between maps is cpu-intesive so you might want to tune estimation_rate parameter to run the re-estimation less often.

ROS API

map_merge_node

Provides map merging services offered by this package. Dynamically looks for new robots in the system and merges their maps. Provides tf transforms.

Subscribed Topics

<robot_namespace>/map (sensor_msgs/PointCloud2)

Published Topics

map (sensor_msgs/PointCloud2)

Parameters

NODE PARAMETERS
Parameters affecting general setup of the node. ~robot_map_topic (string, default: map) ~robot_namespace (string, default: <empty string>) ~merged_map_topic (string, default: map) ~world_frame (string, default: world) ~compositing_rate (double, default: 0.3) ~discovery_rate (double, default: 0.05) ~estimation_rate (double, default: 0.01) ~publish_tf (bool, default: true)
REGISTRATION PARAMETERS
Parameters affecting only registration algorithm used for estimating transformations between maps. These parameters should be defined in the same namespace as normal node parameters. ~resolution (double, default: 0.1) ~descriptor_radius (double, default: resolution * 8.0) ~outliers_min_neighbours (int, default: 50) ~normal_radius (double, default: resolution * 6.0) ~keypoint_type (string, default: SIFT) ~keypoint_threshold (double, default: 5.0) ~descriptor_type (string, default: PFH) ~estimation_method (string, default: MATCHING) ~refine_transform (bool, default: true) ~inlier_threshold (double, default: resolution * 5.0) ~max_correspondence_distance (double, default: inlier_threshold * 2.0) ~max_iterations (int, default: 500) ~matching_k (int, default: 5) ~transform_epsilon (double, default: 1e-2) ~confidence_threshold (double, default: 0.0) ~output_resolution (double, default: 0.05)

Provided tf Transforms

worldmapX_frame

Tools

Alongside ROS node map_merge_3d provides command-line tools to work with point cloud maps saved in pcd files. Both tools accept any of the #REGISTRATION PARAMETERS.

The tools use PCL command-line parsing module. PCL command-line parsing has some limits (PCL users won't be surprised): it supports only --param value format, --param=value is not accepted. Unknown options are ignored. Options may be arbitrarily mixed with filenames. There are no short versions for parameters.

map_merge_tool

Tool for merging maps offline. Produces output.pcd with merged global map. This tool can merge arbitrary number of maps.

Usage

rosrun map_merge_3d map_merge_tool [--param value] map1.pcd map2.pcd [map3.pcd...]

For example to use SHOT descriptors with 3 maps:

rosrun map_merge_3d map_merge_tool --descriptor_type SHOT map1.pcd map2.pcd map3.pcd

registration_visualisation

Visualises pair-wise transform estimation between 2 maps. Uses PCL visualiser for the visualisation.

Usage

rosrun map_merge_3d registration_visualisation [--param value] map1.pcd map2.pcd

After one step of the estimation a visualisation window appears. You can freely navigate the point cloud, save a screenshot or camera parameters (press h to see all shortcuts). After the window is closed, estimation continues with the next phase and the next visualisation window appears. Details about estimation progress are printed to stdout.

Acknowledgements

This package was developed as part of my master thesis at Charles University in Prague.


2019-10-12 12:48