mapping info

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

mapping info

zlacelle
Sorry if this info exists somewhere, but I've been unable to find it.  If it does, please point me to it and I'll start reading!

As far as I can tell, there are a few map topics published:
* cloud_map - This includes PointCloud2 of the full map, as well as separated into ground and obstacles.
* octomap - This does normal OctoMap mapping (nicer ray-tracing)
* proj_map - This publishes a 2D flattened map (DEPRECATED for grid_map)
* grid_map - This publishes a 2D flattened map
* scan_map - This publishes a pointcloud of obstacles (DEPRECATED for cloud_map)

My questions:
1) proj_map vs grid_map - Do they use different algorithms, or simply different topic names?  They seem identical.
2) proj_map flattens obstacles to the ground. Does it use Z=0 ground plane, or does it use the ground pixels calculated from the Z normals?
3) scan_map vs cloud_map - Do they use different algorithms, or simply different topic names? They seem identical.
4) Is the pipeline disparity/RGBD -> cloud_map -> grid_map / octomap?

Thank you!
Reply | Threaded
Open this post in threaded view
|

Re: mapping info

matlabbe
Administrator
Hi,

1) grid_map and proj_map are now exactly the same topic, old name "proj_map" kept for backward compatibility.
2) grid_map is computed depending on "Grid" parameters:
$ rtabmap --params | grep Grid/
...
Param: Grid/NormalsSegmentation = "true"                   [Segment ground from obstacles using point normals, otherwise a fast passthrough is used.]
If "Grid/NormalsSegmentation" is true (default), normals are used to segment the ground. If false, passthrough filter is done on z plane, with maximum height of "Grid/MaxGroundHeight" (i.e., everything under "Grid/MaxGroundHeight" is ground).

3) Same as 1), they are same topic.
4) Not exactly. For each node added to map's graph, a local occupancy grid is created using "Grid/" parameters. For grid_map, these local occupancy grid maps (2D or 3D) are assembled depending on the current graph, creating the global occupancy grid. If Grid/3D is true, obstacle and ground points are projected on z plane before assembling grid_map. For cloud_map, local occupancy grids are assembled directly (one point per cell). For OctoMap, each 3D local occupancy grids ("Grid/3D" must true) are appended to OctoMap, doing ray tracing for each of them. So it more like:
Disparity/RGBD -> local occupancy grids (2D or 3D) -> grid_map / cloud_map / octomap

cheers,
Mathieu