When working with a FastSlam2.0 algorithm, ICP Scan Matching is supposed to give more accurate measurements than odometry.
The problem is, that given some noisy measurements from the laser scanner, when the robot is stationary, or doing relative small movements, the dispersion from the ICP scan matching is greater than the dispersion from the odometry, especially if working with grid maps instead of landmarks.
In a set of tests I have performed with a simulated laser scanner and a grid map, this is true even for not noisy data. A relatively small movement (0.1m) changes all the points in the scan cloud, and the ICP algorithm can diverge from the expected result. The odometry behaves better in this case.
However, when working with relative big movements from step to step (1m), scan matching will perform better than odometry.
The question is, what is the typical time interval o distance interval to perform the FastSlam2.0 algorithm? If that interval is small, or the robot makes small distance increments, how is it possible to avoid this problem?
To illustrate better the problem, here are 2 simulations.
Cyan dots represent the odometry different hypotheses without scan matching. Red dots represent the odometry different hypotheses with scan matching. Green dot represents the odometry readings. Black line (straight) represents the robots real movement (this is the particle that generate the simulated scans for the scan matching).
First one with simulated speed = 1 m/s and simulated time step = 0.5 s.
Second one, simulated speed = 1 m/s and simulated time step = 0.1 s.
Performance of the scan matching with time step = 0.5 is really good, whereas the performance of the scan matching with time step = 0.1 behaves way worse that just odometry.
If there is no way to solve this, then, what are the typical time steps for a real FastSlam 2.0 Application?
In the end, the best approach I have found is to apply scan matching if the displacement is high enough. If not, apply only odometry.