Odometry Pose Update
Update a robot's 2D pose given odometry measurements.
In mobile robotics, odometry estimates motion from wheel encoders or visual odometry. The standard 2D motion model is:
where:
- is the current pose (position and heading)
- is the distance traveled forward
- is the change in heading
- is the new pose
This "dead reckoning" accumulates error over time, which is why SLAM also uses landmarks.
Example
odometry_update([0, 0, 0], (1, 0))
[1.0, 0.0, 0]
- Inputs:
poseis the robot's current state : it sits at the origin with heading rad, i.e. facing along the positive -axis.motionis : drive 1 unit forward, then turn by 0 rad. - Splitting the step: the forward distance is projected onto the axes by the heading. With and , all of it goes into : and .
- Heading: , so the robot still faces along .
- Output: the new pose
[1.0, 0.0, 0], each entry rounded to 4 decimal places. The positions are decimals because they came out of the trigonometry; the heading is a plain sum of two whole numbers. - Notice: the step uses the old heading. Had the robot started at (facing up), the same 1-unit move would land at instead, since and .
Constraints
- pose: [x, y, theta] current pose (theta in radians)
- motion: (distance, delta_theta) odometry measurement
- Return new pose [x', y', theta'] rounded to 4 decimal places