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, https://www.robotshop.com/letsmakerobots/node/28840, https://www.robotshop.com/letsmakerobots/node/10996, ....
How to go from here? Could you please share your thoughts, tips, suggestions and references with me.
Thanks in advance.
Regards, Ko