View Full Version : Arc Driving
maniac_2040
21-01-2007, 15:45
Say I have a robot with car-like steering and I want to drive in a circle. At what angle would I have to turn the steering wheels in order to drive in a circle/arc of radius r?
maniac_2040
21-01-2007, 19:29
Say I have a robot with car-like steering and I want to drive in a circle. At what angle would I have to turn the steering wheels in order to drive in a circle/arc of radius r?
Perhaps I wasn't quite clear. I would like for our robot to be able to drive in a circle of any specified radius. So, my question is, given a radius of the circle that I would want my robot to drive in, what angle would the steering wheels have to be, relative to the front of the car/robot, in order to drive in that circle? Pretty much I'm looking for a function f(x), where x is the radius of the circle I want to drive, and the output is the angle the steering wheels need to be.
Thanks in Advance.
Dan Zollman
21-01-2007, 19:59
I could give you a function that would work in theory with a perfect set of wheels, but the function depends on the distance between the front and back wheels, and you'd also have to account for any friction between the wheels and the floor that would resist turning. Third, are you actually rotating the wheels, or translating this into differing wheel speeds? In the latter case, this would also depend on the distance between the left and right sides. Finally, I think a robot would be harder to control if you were inputting radius instead of turning angle.
That said, this is what I can come up with:
f(x) = sin-1(d/x)
where d is the average distance between front and back wheels, and x is the arc radius.
maniac_2040
21-01-2007, 21:32
I could give you a function that would work in theory with a perfect set of wheels, but the function depends on the distance between the front and back wheels, and you'd also have to account for any friction between the wheels and the floor that would resist turning. Third, are you actually rotating the wheels, or translating this into differing wheel speeds? In the latter case, this would also depend on the distance between the left and right sides. Finally, I think a robot would be harder to control if you were inputting radius instead of turning angle.
That said, this is what I can come up with:
f(x) = sin-1(d/x)
where d is the average distance between front and back wheels, and x is the arc radius.
Thank you, this is what I was looking for, but I would like to know how/where you got that from.
I am actually rotatin the wheels, yes.
Of course it would be harder to control if you were inputting radius to control the robot. I didn't want this for regular joystick control. For that, yes, I will be inputting the turning angle. I want that function for a more specific purpose, and probably precalculated.
Ben Margolis
21-01-2007, 22:34
Sounds like autonomous.
Sounds like autonomous.
Perhaps motivated by Kevin's drawing? :rolleyes:
Dan Zollman
21-01-2007, 22:54
I thought a bit more about that equation and realized that the equation is incorrect. I should withdraw what I posted because I'm not sure if my method was correct.
I now think that the equation should use inverse tangent instead of inverse sine, but please don't use it at all until someone can provide a second opinion. Sorry if it misled you.
I'll come back to it tomorrow when I'm less tired and see if I can come up with a more solid solution.
maniac_2040
21-01-2007, 23:33
Perhaps motivated by Kevin's drawing? :rolleyes:
heh...;)
TimCraig
22-01-2007, 00:16
Say I have a robot with car-like steering and I want to drive in a circle. At what angle would I have to turn the steering wheels in order to drive in a circle/arc of radius r?
The steering system in cars is called Ackerman steering. The front wheels have to turn at slightly different angles such that the if lines drawn perpendicular to the plane of each wheel and through the center of the wheel all meet at a single point, the center of the turn. This is a pretty good article:
http://www.rctek.com/handling/ackerman_steering_principle.html
Kevin Watson
22-01-2007, 01:09
Perhaps motivated by Kevin's drawing? :rolleyes:Perhaps it's presumptious of me to assume that you're referring to the drawing I posted, but in case it is, Ackerman steering won't work very well because the strategy counts on the 'bots ability to do a turn-in-place, which Ackerman can't do very well. Actually, I had in mind a tank-drive setup, which can do a nice turn-in-place (with suitable wheels/tires) and driving arcs can be achieved by just driving each side at a different velocity.
If it's not my drawing you're referring to, then never mind <grin>.
-Kevin
maniac_2040
22-01-2007, 12:53
Perhaps it's presumptious of me to assume that you're referring to the drawing I posted, but in case it is, Ackerman steering won't work very well because the strategy counts on the 'bots ability to do a turn-in-place, which Ackerman can't do very well. Actually, I had in mind a tank-drive setup, which can do a nice turn-in-place (with suitable wheels/tires) and driving arcs can be achieved by just driving each side at a different velocity.
If it's not my drawing you're referring to, then nevermind <grin>.
-Kevin
heh, the strategy in the picture did give me ideas;). It happens to work perfect for our forklift drivetrain(easier to drive in an arc).
- Not going with Ackerman steering, so turns in place will be just fine.
The steering system in cars is called Ackerman steering. The front wheels have to turn at slightly different angles such that the if lines drawn perpendicular to the plane of each wheel and through the center of the wheel all meet at a single point, the center of the turn. This is a pretty good article:
http://www.rctek.com/handling/ackerm...principle.html
That is very good information, however it doesn't help me with my problem as I am not using ackerman steering. Also, it doesn't give any mathematcal equations which is what I was looking for. Thanks anyway.
I think the math works out very simply if you work in radians. If you want to follow a curve of radius R through an ARC of angle A (in radians), then the inside track of the robot will travel a distance of R*A. since the outside track of the robot is at a fixed distance from the inside (by the width of the robot W), the distance traveled by the ouside would be (R+W)*A.
Distance inside of curve : Di
Distance outside of curve : Do
Di = R*A
Do = (R+W)*A = R*A + W*A = Di + W*A
You can use simiar math to compute the robot's heading change based on the distances traveld by the right and left sides of the robot and the width of the robot.
Note that by using radians you can avoid the need for trig functions.
Dan Zollman
22-01-2007, 13:37
I'm pretty sure that f(x) = tan-1(d/x) would work.
If you draw lines through the front and back wheels (basically, through their axles) as TimCraig said, I am assuming that the intersection of those lines would be the center point of the arc. The line from the point between the two back wheels to the point between the front wheels gives you d (I'll call it line D). Line D is perpendicular to the line drawn from the back wheels to the center of the circle/arc (line B). Thus lines D and B make a right triangle with hypotenuse drawn from the front wheels to the center of the circle.
The tangent function is described as the ratio of length d to length b. b is the arc radius. Angle A is the angle between b and the hypotenuse.
tan(A) = d/x
A = tan-1(d/x)
I don't think it matters if the front wheels don't share an axle, because the lines are drawn from the midpoint between the two wheels.
Dan Zollman
22-01-2007, 13:48
I think the math works out very simply if you work in radians. If you want to follow a curve of radius R through an ARC of angle A (in radians), then the inside track of the robot will travel a distance of R*A. since the outside track of the robot is at a fixed distance from the inside (by the width of the robot W), the distance traveled by the ouside would be (R+W)*A.
Distance inside of curve : Di
Distance outside of curve : Do
Di = R*A
Do = (R+W)*A = R*A + W*A = Di + W*A
You can use simiar math to compute the robot's heading change based on the distances traveld by the right and left sides of the robot and the width of the robot.
Note that by using radians you can avoid the need for trig functions.
This would work for computing the distance traveled if you know the angle traveled and the arc radius, but an inverse trig function would still be necessary to determine what angles the wheels have to be in order to achieve that arc radius. The angle of the wheels are independent from the angle through which the vehicle travels.
maniac_2040
22-01-2007, 20:13
I'm pretty sure that f(x) = tan-1(d/x) would work.
If you draw lines through the front and back wheels (basically, through their axles) as TimCraig said, I am assuming that the intersection of those lines would be the center point of the arc. The line from the point between the two back wheels to the point between the front wheels gives you d (I'll call it line D). Line D is perpendicular to the line drawn from the back wheels to the center of the circle/arc (line B). Thus lines D and B make a right triangle with hypotenuse drawn from the front wheels to the center of the circle.
The tangent function is described as the ratio of length d to length b. b is the arc radius. Angle A is the angle between b and the hypotenuse.
tan(A) = d/x
A = tan-1(d/x)
I don't think it matters if the front wheels don't share an axle, because the lines are drawn from the midpoint between the two wheels.
Thanks, I will test this to see if it works out. Sounds right, but could you perhaps maybe post a picture? It's hard to visualize what you are saying.
vBulletin® v3.6.4, Copyright ©2000-2017, Jelsoft Enterprises Ltd.