Homework 3

Michael Edelson

medelson@andrew

Changes from previous obstacle input methods. The image files are now set to be a black background with blue for obstacles, green for start and red for goal. The program also now takes a second argument which is another picture of a robot. The pixels are the same size between the two images. So with an input image that is 480x480 for obstacles and a robot that is 32x32, the robot is 32/480 the width of the world. The robot is drawn in black on a white background.

Sample Robot (shown in successful navigation)

Sample Obstacle Field (obstacles in blue, start is green dot, goal is red dot)

The program flips the robot image along both the x and y axes and then traces the obstacles to produce the buffer zones. These are shown in magenta when the program is running (pure blue + pure red). With the two robots chosen (drawn in yellow when the program runs), the center of the robot is fairly easy to estimate. That is the point that cannot touch the magenta.



Potential Field:
I implemented an attractive/repulsive potential field. For the attractive gradient I used a combine quadratic-linear attraction. Thus if the robot was further away than a fixed value (5 meters in my case) it had a constant gradient towards the goal. If the robot was closer than 5 meters, the potential was quadratic with respect to the distance to the goal, so the gradient was linear.

This is the potential function

This is the potential gradient

The repulsive potential from an obstacle is calculated with

Unfortunately since my program takes in discretized obstacles, it is often hard to decide what is or isn't part of the same obstacle without serious computation. Therefore my program actually counts each pixel of an obstacle as a seperate obstacle, and thus ends up with the gradient coming from a uniform distribution over the whole obstacle when the summation of each repulsion vector is taken. This means that a very small scalar is needed for the repulsive force. or else the robot will fly away from obstacles faster than should be possible. If the robot is at an area with a gradient of 0, it checks if it is at the goal. If it is, it turns green, if not it turns red (local minima).

The tuning factors of the robot were just the constants in these equations:
The attractive scalar ? (Ended up being around 3. Simply how much the goal attracts the robot)
The attractive distance threshold d* (where the attractive potential switches from quadratic to linear)
The repulsive scalar ? (became very small (0.0000001-ish)
The repulsive distance threshold Q* (effectively the sensor range of the robot. Was around 10 meters since the robot itself is around 3 meters wide) I changed the shape of the robot between the two worlds to show how the obstacle buffers change.

Successful navigation

Failed navigation