I have a question about car-like robot localization using only dead-reckoning. Given:

• robot position (at current time step) in the form $\begin{bmatrix}x & y & \theta\end{bmatrix}$ (theta is the heading)
• steering angle
• distance traveled between two time steps

How can I estimate the position of the robot at the next time step?

• This is a possible duplicate of Calculate position of differential drive robot. To achieve dead reckoning, you would just use the technique they describe and keep track of the latest result.
– Ian
Sep 17 '13 at 15:43
• It is not a duplicate. Car-like (ackerman drive) behave differently form differential drive robots.
– cube
Sep 17 '13 at 16:16
• The equations are the same -- distance traveled will be measured instead of commanded, but the relationships between the left/right drive wheel radii, the wheel odometry, and the steering angle still stand.
– Ian
Sep 19 '13 at 16:50
• It was never explicitly stated whether this is an Ackermann steering system. Is it?
– Ian
Sep 23 '13 at 17:03

Assuming that this doesn't count as a duplicate of the math that Daniel Oertwig provided in his question "Calculate position of differential drive robot", the calculations are as follows (for each time step):

First, calculate the distance travelled. $$\Delta d = \frac{\Delta L + \Delta R}{2} = \Delta t * s$$ Where $L$ is the left wheel odometry, $R$ is the right wheel odometry, and s is the vehicle speed.

Next, calculate the change in $x, y$ position. $$\Delta x = \Delta d \cdot cos(\theta) \\ \Delta y = \Delta d \cdot sin(\theta)$$

Where $\theta$ is the orientation angle (in radians) of the robot.

Next, calculate the change in the heading. $$\Delta \theta = \frac{\Delta R - \Delta L}{w}$$

Where $w$ is the distance betweeen the two wheels.

The accuracy of this technique is inversely proportional to the size of the time steps ($\Delta{t}$), and will accumulate error over time. You can improve estimation if you have a compass, as you can detect some slippage of the wheels by comparing the actual vs expected orientation.

With a vehicle with steered wheels the simple approach is to calculate the centre of rotation for the vehicle and then, given the speed of the vehicle, the distance travelled around the arc can be calculated. This results in a change in position and heading.

The centre of rotation can be determined by projecting lines along the axles of the four wheels and finding where they intersect. Normally the rear wheels are non steering so they project a line along the rear axle line. If the steering geometry is 100% Ackermann, the lines projected from the front axles will intersect at the same point on the rear axle line, giving the centre of rotation.

The 'AckerMann Steering Geometry' and 'Slip Angle' entries on Wikipedia cover this quite nicely without getting bogged down in the maths.

Note that this is a simple model which ignores wheel slip, static toe etc

A slightly more complex approach is to calculate the angle of the wheels relative to the motion of the vehicle (aka the slip angle) and then determine the force vector generated by each wheel. Each wheel has a longitudinal force (rolling resistance and driving/braking torque) and a lateral force (generated by the slip) which combine to give the force vector. Each of these forces act upon the vehicle to give a net acceleration (both linear and rotational)

This approach requires knowledge of the wheel loads and, at the least, an estimation of the tyre slip-force curves, although you could assume the force is linearly dependent on slip angle for low speed modelling.

If you want to really simplify matters you can treat the vehicle as a bicycle model i.e. two wheels on the centreline, one steering. The position calculation can then be approximated by using the steering angle to generate a rotation around the centre of gravity (the steering angle is roughly proportional to a force which acts along the axle line of the wheel) and then travel in a straight line using the vehicle velocity over the sampling interval. In some regards this is similar to the calculations required for a tracked vehicle.

I'm reasonably sure the answer to your original question using the steering angle, will involve some hefty calculus. Although I'd like to be proven wrong.

I'd suggest putting encoders on the non steering pair of wheels so you can tell how far each wheel has traveled.

As the non steering wheels are always pointing the same direction you can use the information about how far each wheel has traveled in the same way that you would for a differential drive robot. This does of course assume that the to wheels can rotate independently of each other, as is traditional with cars having a differential to allow for the vehicle turning.

• the difference is the instantaneous center of rotation. a differential drive robot can turn in place but an ackerman one can't. in other words the turning radius is a function of steering angle and the wheelbase of the ackerman robot. that said, the min turning radius of the ackerman robot is nonzero but for the differential one it can be zero. Sep 19 '13 at 4:48
• Robert - could you expand your answer... at the moment it doesn't really add to the discussion.
– Andrew
Sep 19 '13 at 5:51