Let's Make Robots!

Autonomous navigation strategy: how to move forward from basic to advanced?

Last week my Rover 5 completed his first tour in our living room avoiding obstacles / no bumping ;-).

The Rover has the following sensors / inputs:

·         2 x IR analog distance sensor (Sharp, 80 cm) - mounted @ front left and right corner

·         1 x Ultrasonic distance sensor (URM37) – mounted @ pan/tilt servo @ front center

·         1 x Tilt Compensated Compass (LSM 303 DLH)

·         1 x encoder @ Rover motor


I implemented a very basic algorithm:

 

Repeat

Motor (forward)

ReadSensors (left, right, centre)

 If CentreDistance < 15 cm 

Then {

Motor (turn 160, right)

Motor(Forward)

}

Else {

If LetDistance <= RightDistance

Then Motor (right)

Else Motor (left)

}

End // Repeat

 

I now want to improve navigation step by step, but I am uncertain about the approach? For the coming days I consider:

a.       Improve “If LetDistance <= RightDistance Then” because the Rover jitters when caught in a corner

b.      Extend the “Motor (turn 160, right)” code:

Motor (turn 180)

Motor (hold)

SweepPanServo (0, 180)

Read FrontSensor (each 10 degrees)

Store values (distance + degrees) @ array

Determine “largest free distance”

Direct Rover in that direction ([Motor (turn, angle] + checking compass heading)

 Is this the right way to proceed or should I choose another approach? Ultimately I want the Rover effortlessly find its way from one side of the room to the other side. Not hopping from one obstacle to another but "directly" from A to B. I also wants it to return to its initial position when the battery power is low. I've googled a few hours and among others found info about mapping, path finding, occupancy grid mapping, http://letsmakerobots.com/node/28840, http://letsmakerobots.com/node/10996, ....

How to go from here? Could you please share your thoughts, tips, suggestions and references with me.

Thanks in advance.

Regards, Ko