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