About the poor odometry in ROS nav stack from my own experience.
Both gmapping and amcl need the odom message from the robot hardware.
and the /map->/odom tf relation should be static all the running time.
So if the dynamic map generated by the gampping has a drift when robot doing a inplace rotation,
I suppose that means the /map->/odom tf relation has been polluted by the real robot angular odometry output,
even though the /map->/odom tf is published by the gammping or amcl module,
but still need to debug the git source code to confirm the real root causes.
As well as the draft local costmap when playing with the amcl + static map.
As for the poor translation odometer, I guess a shifting map/local costmap will be its friends.
I do not have any solution about how to improve the hardware odom output via a software mean.
Poor Odometry means large error in translation and rotation of robot. this helps more http://groups.csail.mit.edu/drl/courses/cs54-2001s/odometry.html
@bvbdort Thank you for sharing the link.