Let's Make Robots!

Discussion of object recognition with distance sensors

I would just like to open the floor to any thoughts on the code would take for a robot to do a sweep with a distance sensor and get an idea of what it was looking at overall. We have seen object recognition (edge finding) a couple different ways and code to send a bot to open areas. What I am wondering now is about checking distances at different points of the sweep and (here's the important thing) to figure out what it is looking at.

Now I am looking for broad ideas, here folks. Simply, can a robot (the kinds we make here, programmed in basic) know what a corner is? Can it see that there is a corner of a box jetting out, or an opening? I would figure it could simply store all the numbers in terms of the data from the sensor but it is the comparison of that data that is key. For example, if the bot were to average everything it saw and then went back through all the numbers to find that a few in the middle were a lot high than the average. Or could it notice that the numbers slowly increase/decrease before they go to infinity --thus an outside corner that it is seeing at an angle. Stuff like that.

I am NOT looking for any code here. DO NOT GIVE ME CODE! --I just need a direction to go to start thinking about this.

***Big, nice, overall ideas here, folks***


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Sure it is.

But at the bare minimum it should be able to "see" a doorway for what it is. Remembering which one, would be bonus.

I would always prefer a map of "Things" over a map of "Observations". For a simple picaxed bot, that is.

The distinction is this one: A thing-map indicates where a doorway is, or a a chairleg, or a dog, or a power source.

An observation-map indicates just reflected light measurements, or collisions, or the smell of wet dog hair, or Volt.

The advantages of a thing-map include:

intelligence - knowing what something is makes your bot interact with it smarter.
data density - Rik again with the paint and numbers 8-(

w w w w w w w w
. . c c . . . e
. . . . . . . e
. . . . . . . e
p X . . . d . w
. . . . d . . w
. . . . d d . w
? ? ? ? d d . w

Legend: .=empty, w=wall, e=exit, c=chair, d=dog, p=power, X=me, ?=uncharted

This 8x8 map could be stored in 64 bytes. Each cell in the grid could be coded with 255 different recognised object types, reserving zero for "uncharted". With a little bit of data compression, you could map larger areas, recognising fewer object types.


This is exactly the kind of info I was asking for! -And your example is great. I feel like Johnny 5...

"Need more input!"

I really want to focus on this problem, every robot I have built so far has not stopped. I mean, they all have a "continous drive around and avoid" code. Now that I am starting the brains work on Walter, I would like to stick in some personality. I.e. stop, have a look around, access and then decide which way is "coolest" not just closest, farthest or determined by a preset variable.

-Your one post above has allready doubled what is in my brain on this one.

We seem to be on that page again. Great minds think alike.

I feel there are many more methods though. People, keep on adding to this idea!

Maybe this ought to be called an attempt at "surroundings recognition" or "perimeter profiling" . Not to be confused with all those fancy mapping and localization initiatives. Simultanious or otherwise.


A fingerprint never produces the exact same image twice. But a fingerprint scanner is still capable of differentiating between different prints.

You are posing a similar problem. The issue is one of data aggregation. You pretty much hinted at that already.

One common way of aggregating is differentiation. Like how you would calculate acceleration from speed over time. Not by averaging out all the data points, but by reducing it to "here the speed increased, here it decreased, here it decreased some more, now it was steady" . Let's do a paint by numbers:

Speed data at fixed time intervals:  
3, 5, 5, 5, 5, 5, 6, 7, 8, 120, 120, 0, 0, 0, 3
+, 0, 0, 0, 0, +, +, +,   +,   0, -, 0, 0, +

If you did the same for distances measured at fixed angular intervals, a "+" would indicate a recession (a doorway maybe). A "0" would indicate a continuation (a wall). A "-" would indicate a thingey-closer-by-ation.

Further simplification would make it easier maybe to store these "patterns" in limited memory. Just remove all the repeats. And consider a minor change as zero change"