I've seen several examples of SLAM algorithms (EKF SLAM, Graph SLAM, SEIF SLAM) written in terms of the velocity motion model. I have yet to see an example of any SLAM algorithm utilizing the odometry motion model. I wonder if there is an inherent advantage to using the velocity motion model over the odometry model for this problem. Does it have something to do with the fact that odometry sensor information comes after the motion has already taken place, whereas velocity control commands are executed before motion?
I can't think of a reason why a velocity model (based on control commands) would be superior to an odometry model (which uses the actual wheel speeds).
The lecture notes from Freiburg on motion models imply the same:
- Odometry-based models are used when systems are equipped with wheel encoders.
- Velocity-based models have to be applied when no wheel encoders are given.
The timing does not have an influence here. If any, it would affect the latency, but even that I would think is not the case.
The better your model, the better your prediction. Having actual measurements in the model provide you with additional information to improve the model. One thing which is very commonly performed is to use an IMU to estimate the rotational part of your motion model.
Through my reading of this book "Probabilistic Robotics" chapter 5 pp. 120,121. It seems what you thought is right. And this is the reason the authors mentioned.
Many commercial mobile robots (e.g. differential drive, synchro drive) are actuated by independent transnational and rotational velocities, or are best thought of being actuated in this way. The second model assumes that one has access to odometry information. Most commercial bases provide odometry using kinematic information (distance traveled, angle turned). The resulting probabilistic model for integrating such information is somewhat different from the velocity model. In practice, odometry models tend to be more accurate than velocity models, for the simple reason that most commercial robots do not execute velocity commands with the level of accuracy that can be obtained by measuring the revolution of the robot's wheels. However, odometry is only available after executing a motion command. Hence it cannot be used for motion planning.
Hope this helps.
One obvious example of where velocity motion models work better is in robots that don't operate on land: UAVs and AUVs, for instance.
Thinking about whether the information comes before (as in the case of the velocity command) or after (as in the case of the odometry) the motion is a red herring -- it doesn't matter. You are creating a position estimate partly based on what you see and partly based on how you think you moved. Each of those involve uncertainty, so you just need to characterize that uncertainty properly.
In terms of accuracy, sometimes it's more appropriate to consider exact wheel motion, and sometimes it's more appropriate to consider vehicle momentum; it all depends on the vehicle.