I've tested slam_toolbox producing life-long environment mapping, and not quite satisfied with the results.

Below you can see a fragment of the mapping. I used a 1x0.5m case to test the changing map of the environment. In the first iteration, I moved the lidar laser to the area where the 1m side of the case was facing the scanner. Then, moved the laser away from the scanner.

In the second iteration, I moved the case so that the laser will be facing the 0.5m side of the case. Then, the scanner was moved to the area. In this case, I was expecting that the old footprint would disappear and would be replaced with the 0.5m side of the case. But, as you can see in the pic below, it didn't happen?

Interesting enough, I came to conclusion that the new obstacles are being added to the map, but the old ones are not being removed?

enter image description here

I experimented with two slam_toolbox modes: online_async and lifelong. Both showed the same result.

Please share if you had similar experience. Am I missing something here?

The slam_toolbox repo clearly tells that the life-long mapping is intended, though it mentions that it's kind of experimental.

https://github.com/SteveMacenski/slam_toolbox - Slam Toolbox for lifelong mapping and localization in potentially massive maps with ROS


1 Answer 1


They are removed, but it takes some data to do so. We store a set of hit vs misses for each cell in the grid. If you went over it and laser scans saw it in lets say 10 iterations, it would take at least 10 iterations to remove so that probabilistic speaking the ratio of hits to misses reaches back below a threshold that we should clear that particular cell.

Its not immediate, nor would you want it to be, or else the map quality would drop substantially due to minor delocalization creating repeating parallel walls / obstacles due to minor deviations.

I believe the ratio is 0.65, so you need to see hits/(misses + hits) to be lower than that for a given cell to be marked as free if previously marked as occupied.

  • $\begingroup$ Thank you, Steven! Everything makes sense, though I need to make it much more dynamic else I'll need to find a different approach. Is there any way to do it through config parameters? I've looked at mapper_params_online_async.yaml, couldn't find anything close, nor I could find the 0.65 ratio coefficient if there is such. $\endgroup$
    – nigeno
    Commented Mar 30, 2022 at 14:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.