tags:

views:

145

answers:

3

I have a field filled with obstacles, I know where they are located, and I know the robot's position. Using a path-finding algorithm, I calculate a path for the robot to follow.

Now my problem is, I am guiding the robot from grid to grid but this creates a not-so-smooth motion. I start at A, turn the nose to point B, move straight until I reach point B, rinse and repeat until the final point is reached.

So my question is: What kind of techniques are used for navigating in such an environment so that I get a smooth motion?

The robot has two wheels and two motors. I change the direction of the motor by turning the motors in reverse.

EDIT: I can vary the speed of the motors basically the robot is an arduino plus ardumoto, I can supply values between 0-255 to the motors on either direction.

+1  A: 

My initial thoughts on this(I'm at work so can't spend too much time):

It depends how tight you want or need your corners to be (which would depend on how much distance your path finder gives you from the obstacles)

Given the width of the robot you can calculate the turning radius given the speeds for each wheel. Assuming you want to go as fast as possible and that skidding isn't an issue, you will always keep the outside wheel at 255 and reduce the inside wheel down to the speed that gives you the required turning radius.

Given the angle for any particular turn on your path and the turning radius that you will use, you can work out the distance from that node where you will slow down the inside wheel.

ben
+4  A: 

You need feedback linearization for a differentially driven robot. This document explains it in Section 2.2. I've included relevant portions below:

The simulated robot required for the project is a differential drive robot with a bounded velocity. Since the differential drive robots are nonholonomic, the students are encouraged to use feedback linearization to convert the kinematic control output from their algorithms to control the differential drive robots. The transformation follows:

Transformation

where v, ω, x, y are the linear, angular, and kinematic velocities. L is an offset length proportional to the wheel base dimension of the robot.

Jacob
@Jacob: Good Reference
Arkapravo
Thanks! Think I'll repost it here instead of linking to the cached copy.
Jacob
+2  A: 

One control algorithm I've had pretty good results with is pure pursuit. Basically, the robot attempts to move to a point along the path a fixed distance ahead of the robot. So as the robot moves along the path, the look ahead point also advances. The algorithm compensates for non-holonomic constraints by modeling possible paths as arcs.

Larger look ahead distances will create smoother movement. However, larger look ahead distances will cause the robot to cut corners, which may collide with obstacles. You can fix this problem by implementing ideas from a reactive control algorithm called Vector Field Histogram (VFH). VFH basically pushes the robot away from close walls. While this normally uses a range finding sensor of some sort, you can extrapolate the relative locations of the obstacles since you know the robot pose and the obstacle locations.

John Wang