### Author Topic: Spiraling Robot  (Read 792 times)

0 Members and 1 Guest are viewing this topic.

#### robonerd137

• Jr. Member
• Posts: 18
##### Spiraling Robot
« on: July 02, 2013, 11:20:40 AM »
I have a robot that is setup so that when I set the wheels going at the same speed in opposite directions the robot spins in a circle but the center of the axle does not move. The wheels are separated by 100 cm and I would like to write an algorithm to make the robot travel in an archemedian spiral (eg. r = theta) for searching a field. your help is much appreciated.

#### Mastermime

• Supreme Robot
• Posts: 314
##### Re: Spiraling Robot
« Reply #1 on: July 02, 2013, 11:43:42 AM »
Whats the question?

#### robonerd137

• Jr. Member
• Posts: 18
##### Re: Spiraling Robot
« Reply #2 on: July 02, 2013, 03:09:17 PM »
Basically I have a robot with two wheels and I would like the center of the axle of the two wheels to travel on a path that looks like the path in the image below.

#### waltr

• Supreme Robot
• Posts: 1,943
##### Re: Spiraling Robot
« Reply #3 on: July 02, 2013, 05:13:25 PM »
Hint: As the robot spirals outward, the curve becomes closer to a straight path.
Hint2: How do you make the robot go in a circle? How about a larger circle? Then a straight line.
Figure that out and you are 80% there.

#### robonerd137

• Jr. Member
• Posts: 18
##### Re: Spiraling Robot
« Reply #4 on: August 01, 2013, 11:29:01 AM »
That is exactly how I started the problem, but then I came upon a math problem that I need help with. Here is the setup:

Let MAX_SPEED be the max speed of the wheel in either direction.

I set the right wheel to spin at a speed of SPEED_RIGHT = MAX_SPEED
Then I realized that the speed of the left wheel describes the radius of the robot.
I thought of the following situations:

If SPEED_LEFT = -MAX_SPEED
Then the robot will spin with a radius of 0, the center of the spin being in the center of the axle.

If SPEED_LEFT = 0
Then the robot will spin with a radius of HALF_AXLE_LENGTH, the center of the spin being where the left wheel touches the ground.

If SPEED_LEFT = MAX_SPEED
Then the robot will spin with a radius of INFINITY, the center of the spin being undefined.

Then I had to make a function of time that would increase the left wheel speed from -1 to +1, but I still am not sure of the function I should use to do this increase. When I solved this problem originally I made an algorithm that adjusts the wheel speed, but the algorithm requires a lot of calculations. Does anyone know of a function of time that could help me? Maybe an algorithm that relates SPEED_LEFT with radius?

#### jwatte

• Supreme Robot
• Posts: 1,343
##### Re: Spiraling Robot
« Reply #5 on: August 01, 2013, 02:51:57 PM »
How precise does it need to be?

You could start with something that sets right speed to max, and sets left speed to min, and then run this algorithm:

Code: [Select]
`forever() {  float time = elapsed_seconds * SCALING_FACTOR;  LEFT_SPEED = (1 - (2 / time)) * MAX_SPEED;}`
the SCALING_FACTOR depends on how "tight" you want the spiral, and how fast the robot travels. Start with it somewhere in the 1-3 range, perhaps.

This is not a "perfect" solution to your problem, but it will likely get you to scan the area in the approximate pattern that you want.

#### robonerd137

• Jr. Member
• Posts: 18
##### Re: Spiraling Robot
« Reply #6 on: August 07, 2013, 12:22:07 PM »
@jwatte:
Does the equation you suggest make the robot cover equal area? Some spirals (for example r = e^theta) make the distance between the spirals increase, and others (for example r = ln theta) make the distance between the spirals decrease. For the spiral, r = theta, the distance between the spirals is constant. Which category does the algorithm you gave me fit into?

#### jwatte

• Supreme Robot
• Posts: 1,343