Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   Arc Driving (http://www.chiefdelphi.com/forums/showthread.php?t=52451)

maniac_2040 21-01-2007 15:45

Arc Driving
 
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

Re: Arc Driving
 
Quote:

Originally Posted by maniac_2040 (Post 561938)
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

Re: Arc Driving
 
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

Re: Arc Driving
 
Quote:

Originally Posted by worldbringer (Post 562115)
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

Re: Arc Driving
 
Sounds like autonomous.

DanDon 21-01-2007 22:54

Re: Arc Driving
 
Quote:

Originally Posted by Ben Margolis (Post 562234)
Sounds like autonomous.

Perhaps motivated by Kevin's drawing? :rolleyes:

Dan Zollman 21-01-2007 22:54

Re: Arc Driving
 
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

Re: Arc Driving
 
Quote:

Originally Posted by dhoizner (Post 562251)
Perhaps motivated by Kevin's drawing? :rolleyes:

heh...;)

TimCraig 22-01-2007 00:16

Re: Arc Driving
 
Quote:

Originally Posted by maniac_2040 (Post 561938)
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/ackerm...principle.html

Kevin Watson 22-01-2007 01:09

Re: Arc Driving
 
Quote:

Originally Posted by dhoizner (Post 562251)
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

Re: Arc Driving
 
Quote:

Originally Posted by Kevin Watson (Post 562326)
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.

Quote:

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.

ericand 22-01-2007 13:36

Re: Arc Driving
 
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

Re: Arc Driving
 
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

Re: Arc Driving
 
Quote:

Originally Posted by ericand (Post 562547)
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

Re: Arc Driving
 
Quote:

Originally Posted by worldbringer (Post 562548)
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.


All times are GMT -5. The time now is 17:41.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi