Let's Make Robots!

"May I Go?" Navigation

So I have coded Walter, when in RC mode, to do a sonar sweep and put the results on my LCD screen. At each servo position, the distance sensed is displayed as sort of a bar graph. There are 16 servo steps on the sonar sweep corresponding to 16 charicter spaces on the display. This is exactly the same system as Frits' "See what robot sees" just with a lcd screen instead of on the pc screen. This system now allows me to drive around and point Walter at different situations, a doorway, a chair, straight into a wall etc. and see exactly what the sonar is seeing.

On to step 2:

I am thinking of a new approch to navigation... "May I go" instead of a system of constant driving with a "if you hit something, turn away from it". In "May I go", the drive part of the code has to wait for permission in order to make a move. I.e. the sonar makes a sweep, it is determined the path is clear for a given distance and the drive system is allowed to move that much. In addition, if different situatuions come up (the sonar sees a doorway or hall, etc.) the drive system is allowed/ told to/ give a choice to go that way.

Step 3 and the question:

I now have 16 chunks of data that my human eye and brain can see on a screen. I also have these 16 chunks of data (forming an electronic picture) say, stored on an EEPROM or scratchpad memory.  ...And the $64,000 question is coding and algorithms for the robot to now go through this data and determine paths, openings etc. This is a bit madening, I can see the dip in the bargraph, which is obviously a doorway, but how do I tell the robot that the 5 sonar steps in the middle of the sweep (the ones with really far distance readings) is a door? Really this just comes down to a bunch of comparisons but really, 16 variables? --Gotta be a better way.

This should be a very open question/answer and I expect some non-specific answers, just some ideas on directions to go. --consider this a thought excercise.


I will post a video of the system I am using as soon as Kari gets home with the digital...

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
As I am reading your response rik, I feel like we have discussed this before... I love your answer but I feel like I asked this question before. Huh.
I do not remember that one. Maybe you are thinking of the whole octagonal LDR eye thing? Also deals with series of values like this.

This is similar to things that've been chugging in my mind lately. I'll be storing occupied areas of a grid map, likely on an SD card.

Something like occupancy grids may work for you. Just store the spots that are occupied. Instead of asking "may I go" first, the data will explicitly hold "you may not go here" things. Walter could then be on the lookout for contiguous blocks of unused space, knowing that 3 wide is too small to fit through, 4 wide is maybe, 5+ wide is no problem. A wavefront algorithm is good for determining the path to take through an occupancy grid map.

An added lookup table could provide "5 wide hole = doorway", "1 wide hole = doggie door", etc... Although that would not be able to _prove_ something's a doorway, or anything else for that matter, it could be used to allow Walter to "guess" what things might be.

Fantastic Rudolph,

This is exactly what I needed to start thinking. Not to mention, I have been working on different systems of mapping routes... It looks like these two problems/ projects will go hand in hand. Thanks for the links!