I've been asked to take a look at algorithms for treating
an Ackerman steering system for a robotics path-planning
application. Although I've done web searches and found
thousands of references, few of them have been very useful
to me. Perhaps I've missed the good stuff... Anyway,
I was wondering whether anyone could recommend a web
resource or a good book that would cover the kinematics
of Ackerman steering. While I lack ready access to a
technical library, I can get many books through an
inter-library loan if I have a title.
My main problem is that I have basically zero experience
with real mechanics. So far, I've worked out a solution
where I "fake it" by assuming that the wheels
are somehow set to the correct geometry and ignoring
the mechanical linkages that make it happen...
the solution is easy enough, but I
suspect that it will prove too inaccurate when we start
adapting it to a real robot.
Anyway, thanks in advance for your help.
At about the time of 10/14/2004 5:46 PM, G.W. Lucas stated the following:
To my knowledge, there is not a whole lot of information out there on
Ackerman steering even though it is used extensively in cars, trucks,
and other 4 wheel riding vehicles. I've looked for it myself once.
The geometry is everything because it works on angles. Straight ahead
is not a problem, but when you turn, the wheel on the inside must turn
in slightly tighter than the outside wheel. The angle difference is
based on the degree of turn and the distance between the two wheels. If
the angle on the two wheels are the same, then one wheel (usually the
inside one due to lateral weight) gets drug across the ground
significantly increasing the wear of the wheel.
Here's a good website that I found that explains it better than I can.
The key fact you need to know is when turning, the lines through all
three axles (rear and two front stub axles) meet at a single point,
which is the centre of the turning circle. That way all four wheels
are following the circumference of circles around the same point.
Actually the condition applies when not turning too, but the point is
infinitely far away :-).
Assuming that the linkage is correct, these conditions will apply and
you should be able to work out the rest from there.
Or did you want to know how to design the linkage? I worked it out
once. On the plan view, you draw an imaginary line from each king-pin
through the opposite rear wheel's contact patch. The pivots on the
Ackerman linkage must be on these two lines. That's it, simple!
one of the reason you won't find much practical information on it for
robotics, is because it's not used much in robotics. path planning is
harder since it's more restricted in how it can move. I.e. to turn
around you usually have to make a 3 (or more) point turn, depending on
how much space you have. differential drive is much easier in that
it might be easier to find information on this when you look up
autonomous vehicle research when applied to automobiles and trucks.
I.e. how to make a car/truck drive itself. even then, the topics are
more about how to follow a road (line/course following) than general
how big is your robot ?
See ya, -ingo
Hi Gary, did you find anything on Ackerman steering?
I'm now looking at Ackerman steering for a "drive to a point" problem.
Here's the best I've come up with so far (but have yet to see the result
of implementation). Just read the rear wheel encoders and treat them as
if they were a "normal" differential steering robot. Use the axle width
and count differences between counts to compute the angle changes. I
think this will work as long as you have a rear differntial drive, and
no "posilock" action.
Hi Randy, good to hear from you.
I pretty much struck out on the specific thing for
which I was looking, but I did find plenty of
references on Ackerman steering. I was interested
in modeling and understanding the internal linkages and
how they relate to the steering angles of the two
wheels. I'd received a request asking if I could
represent an Ackerman steering system in my RP1
mobile robot simulator and wanted to see if I could do
a halfway reasonable job with the thing. I shelved
the Rossum Project a couple of years ago when it became
clear that it wasn't going anywhere. But the request
was interesting enough that I dusted off the
simulator code and set out to add the Ackerman
steering to it.
The results are now available on the Rossum Project
Anyway, I think you're right. As long as your
rear wheels maintain traction, and your robot
is operating under "moderate" velocities and
forces, it seems perfectly reasonable to treat
the rear axle as if it were a differential steering
system (at least in terms of performing
navigation computations based on encoder readings
from the real wheels). If the vehicle is going
straight, the computations are pretty much self
evident. When an Ackerman-steering vehicle turns,
it follows a circular path with the center of
the circle lying on a line extending through
the rear axle... so again it looks like a differential
steering system, as least as far as your dead-reckoning
computations are concerned. I just treat the center
of the rear axle as the origin of the robot's
frame-of-reference coordinate system.
Now I gather that what you're trying to
do is, given the coordinates for a point in the
robot's frame of reference, steer a course to
that point. In the old simulator implementation,
there was a function called "getMotionRequest" that would
do just that for a differential steering system.
I meant to implement the same thing for the Ackerman,
but looking at the code I see I left it out.
I'm not sure how that happened, because it's not
much harder to do. The main difference between
the Ackerman and Differential Steering systems is
that the Ackerman has a fixed minimum turning
radius based on the wheel base length, track width,
and maximum steering angle of the inner wheel
(again assuming modest velocities and forces).
So all the computation would have to include
is a computation for the turn radius and
logic to make sure that the request doesn't
result in too small a turn radius.
If you download the RP1 code, take a look at
the following files in the folder
If you can give me a few more details on what
you're trying to accomplish, I can flesh out the
code to support you and maybe even write up the
math (so you can see where I go wrong). Doing
so would be interesting for me because
I could see how well my models match up with the
If you want to see the Ackerman simulation at work,
I've got a very simple-minded demo
a. download, install, and configure the RP1 code
b. run the following command
java rp1.Server -p ackerman.ini
" firstname.lastname@example.org" wrote in
message news: email@example.com...
It's obvious that the linkages work. It is not terribly obvious how they
The linkages seem to form the essense of a mechanical computer that take
a steering wheel input and output two angles for the front wheel. It's a
pretty fascinating thing to consider.
Sorry to hear you feel it wasn't going anywhere. I used it and am glad
to have had access to it. In what sense do you mean it wasn't going
anywhere? No one joining in in the development, or what?
I'll have to have a look.
Okay, I'm trying. I don't have much experience with Java, so I'm a
little nervous about this. Arghhh. Lots to learn to get going.
Yes, that is how I see it as well.
Yes. Specifically converting a GPS point to the robots system, then
drive to it.
Well, in my differential steering, I slow, and even reverse the inside
wheel depending on the amount of angle between the current heading and
desired heading. There's no sense in which the Ackerman steering can be
made to do the same thing.
Well, the obvious problem is when the goal is inside the minimum turning
There the robot cannot be purely reactive, but has to drive away from
the goal to attain a circle that will then allow approach to the goal.
Or, the system has to execute a complex 2 or three point turn to alter
direction so as to point at the goal.
Interestingly, here is a case where the purely reactive models of Brooks
subsumption need to be extended to state based responses. Or in terms
used by Joe Jones, servo responses won't do, and ballastic responses are
A differential steering robot can always reach its goals using servo
responses, while a Ackerman steering robot cannot.
Well, you might want to talk to Dr. Brian Huff of UTA - ARRI. He's the
owner of this modified 4-wheel drive vehicle. I'm helping his students
on this and a tracked vehicle in attaining GPS waypoints.
It's not that hard. The idea of Ackerman steering is
that the axle lines through both fromt wheels and the
the rear wheels all intersect in a single point.
This requires a four-bar linkage in the steering, so
that the inside front wheel has a larger steering angle
than the outside front wheel.
One problem is that the relationship between
steering shaft position and steering angle isn't
perfectly linear. The obvious relationship between
steering angle and turning radius doesn't quite hold.
But you can probably assume that it does.
So, to a first approximation,
turningradius = wheelbase / sin(steeringangle)
Note that this goes to infinity for zero steering angle.