Odometry is one form of dead reckoning position finding used with robots and other vehicles. It is based on the idea of relative positioning which is to have a known starting point and then use sensors to measure how far and in what direction movement has occurred to keep an idea of the new location. This can be an imprecise due to robot systematic and non-systematic errors (Types of errors) but it is the easiest way to do position estimation.
Systematic Error - Systematic error is caused by the kinematic properties of the vehicle. Two major odometery systematic errors are unequal wheel diameters and uncertainty about the effective wheelbase. These errors can be adjusted for in code.
Non-Systematic Error- Errors not directly caused by the kinimatic properties of the vehicle. An example of this would be irregularities in the surface be traveled on. These will be different from location to location, thus cannot be programmed for.
For more on systematic and non-systematic errors as they pertain to mobile robots, see Measurement and Correction of Systematic Odometry Errors in Mobile Robots
The responsibility of this class is to maintain a current estimate of the robot location and the direction in which it is heading. The robot heading uses Cartesian coordinates, with angles in degrees; 0 degrees is the direction of the positive x axis, 90 degrees is the positive y axis. The heading and x and y coordinates are stored in a Pose object. The API for Pose is here.
The only constructor for this class is:
OdometryPoseProvider(MoveProvider mp) //it registers the new pose provider object as a listener with the MoveProvider.
The only methods you are likely to need to use are:
void setPose(Pose aPose) //used to set the initial Pose.
Pose getPose() //if this method is called while the robot is moving, the pose provider will call getMovement() on the move provider. //this guarantees that the pose is current.
When a movement starts of ends, the information needed to update the estimated posse is provided automatically by the Move Controller by calling one these methods:
void moveStarted(Move move, MoveProvider mp)
void moveStopped(Move move, MoveProvider mp)
The odometry data is contained in a Move object. The API of this data carrier class is here.
Author
David Alejandro Trejo Pizzo. IEEE Member and researcher @ AIGROUP, working in the FIC Project. Student @ Universidad de Palermo.