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.
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 respect.
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 path planning.
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.
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 web site
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 rp1/rossum
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 real world.
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 work.
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 radius.
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 required.
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.