Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Hi,

In your setup, the memory management of rtabmap is enabled:

<param name="Rtabmap/TimeThr" type="string" value="700"/>

That means that when the map update takes more than 700 ms, some oldest locations would be transferred to its long-term memory to keep the algorithm online, splitting the map so that the oldest part is not shown anymore (unless you come back in that area). However, the global map is still available at the end of the run: rtabmap should be paused first then we call publish_map (params: global, optimized, graphOnly) service with global parameter set to 1:

$rosservice call /rtabmap/pause
$rosservice call /rtabmap/publish_map 1 1 1

The graphOnly parameter can be set to 0 to make rtabmap node republish all data (point clouds) on the mapData topic (if rtabmapviz or MapCloud rviz plugin has already cached all the previous clouds, you can only republish the global graph).

To reconstruct the global map offline, you can open the database in rtabmap standalone application, and just click "Edit->Download all clouds".

Note on simulation

You said that there is no loop closure in your path, does that mean you assume perfect odometry? In that case (you need only to assemble the point clouds), you could even disable loop closure detection of rtabmap, thus saving some computational time:

<param name="Kp/WordsPerImage" type="string" value="-1"/>

However, if you plan to work on a real robot, you may have to plan your path with loop closures so that odometry errors can be corrected.

cheers