introlab / rtabmap

RTAB-Map library and standalone application
https://introlab.github.io/rtabmap
Other
2.77k stars 786 forks source link

Problems with Parameter GridGlobal/FootprintRadius #695

Closed doho6149 closed 3 years ago

doho6149 commented 3 years ago

Hello RtabMap Team, thanks for your great work! We use RtabMap (0.27.0) with ROS on our mobile plattforms for laserbased SLAM (Kinect4Azure pointing front + SickS300) as well as laserfree SLAM (Kinect4Azure pointing front + Intel D455 pointing to the ground) which works really nice!

As we have some problems with wrong measurements from the D455 in certain areas (obstacles detected in freespace - even from different viewpoints, the camera sees the measurements at the same point in our corridor) we wanted to activate the GridGlobal/FootprintRadius, so RtabMap clears out obstacles in areas the robot was driving through while mapping. Do I understand this parameter correctly? Somehow, this does not work: I conducted some experiments (fresh map, mapping with laser, setting the FootprintRadius to 0.5m) and attached a video of the mapping process (left: our robot software MIRA, middle: rviz showing the grid_map_prob, right: RtabMap Visualization) and the corresponding rtabmap.db. First of all: The robot does not clear any obstacles before a loop closure / proximity link is added: Even when I set the FootprintRadius to really high values, without getting back to start, nothing happens. Then, when a loop closure is detected (in the Video at 0:35), somehow the Map is set to unknown (and not "free") and also only in areas, where the loop closures happened. Now my question: Is this intended behavior? Did I configure anything wrong? I thought, that the FootprintRadius just takes all optimized poses from the graph and sets the GridMap to "free" in range of the FootprintRadius for each pose?

Thank you in advance!

Video.tar.gz rtabmap.tar.gz

matlabbe commented 3 years ago

This is fixed in the commit above. A workaround (without the new commit) is to set GridGlobal/OccupancyThr to 0. It should do indeed what you expected, setting empty cells under the whole graph.