Author: Christian Scheiderer (email@example.com)
- License: MIT
This stack enables the merging of maps. Primary use is the exploration with a multi-agent system where the relative position of the agents is unknown. The challenge is to combine multiple individual maps to one big map, thus revealing which areas were already explored by any agent. By finding the transformation between the coordinate systems of the maps, it is also possible to deduce the relative positions of the agents. This is crucial for further coordination and optimization of the exploration process.
As of now, the agents names (or better: the namespaces used by the different agents) have to be known in advance. The cs_merge_controller node is then able to listen to the different map topics. When a new map data is available, it will be stored to insure robustness against loss of communication. A registration algoritm is then used to determine the optimal transformation between the own and other agents map. The node executing the registration algorithm is contacted via a service, which makes it easy to change to a different method. Once the optimal transformations for all maps are found, they are evaluated by the cs_merge_controller node. The reason behind this is to keep the option open of using different registration methods and comparing the results with one evaluation algorithm. If the transformations are better than the currently used ones, the total map is rebuild from the individual maps. Else, each map is added with the old transformation, which results in the total map being extended by newly discovered areas. Lastly, for stability reasons, the cs_merge_publisher node will request the total map and publish it under the topic /namespace/world.
This stack includes four implemented registration algorithms.
cs_icp_gradient: This Iterative Closest Point (ICP) algorithm is based on this paper.
cs_icp_svd: This approach is a 2D version of the ICP algorithm described in this paper, which uses the Singular Value Decomposition (SVD).
cs_hough_ccr: This algorithm calculates the cross-corellation (CCR) between the Hough Spectra of the maps, which is based on this paper.
cs_hough_corner: Using the Hough Transformation, this algorithm detects and overlays the corners with the same angle in both maps, in order to find an optimal transformation.