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***

 

do it like biometric sensors do

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
Acceleration:
+, 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"

Thanks, Rik

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.

one the same page

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.

Rik

I agree, Rik…But…
I dig the “surroundings recognition” stuff, a lot, but I really don’t have a problem with the robot drawing a map along the way. I do want to avoid the “robot’s in a maze with only 90 degree walls, and a MIT student, and GPS and crap” kind of mapping. --Maybe just, “Oh yeah, I allmost ran into that last time through”…

pattern recognition

Hmmm, don’t pattern recognising gizmo’s exist that could be hacked into a picaxe project? Like a speach recognition module via i2c. I doubt it would object against working on very different data, as long as it were properly trained.

You could go crazy even and have it analyze the echoes from the room.Just feed it an audio sample off of a mic after sending some pulse. Like an omnidirectional SRF, but with recognition, rather that ToF calculations. BatBot?

Just an extra wild thought.

Mapping is cool too

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.

This is a tricky question.

This is a tricky question. different sensors react differently to objects. Like if you put a box in a room, you could move around that box just fine, it appears solid. But if you put that box on it’s side with an opening now in the way of a bot, how will it know what it is? It no longer appears to take the same space. if you point an ir sensor it would most likely be able to navigate the box a bit easier than a ping sensor(ping bounces off angles all over the inside of a box), especially at an angle.

I know this doesn’t help, but it was just a thought when reading the replies…

I don’t see how this could be done without mapping of some sort, even it it’s just wheel encoders. I mean. stick yourself in a room and blindfold yourself. have someone spin you around and start walking forward. you’ll hit something but if you counted your steps, you’d know how to get back to your point of origin. Without mapping you’d be gong blind all the time and wouldn’t be able to recognize objects that you’ve come across.

What is the minimal set of components were you looking at using? This would help to generate ideas.

 

 

Very big topic.So I think I

Very big topic.

So I think I will approach it with Very General questions.
Do you know what you want Walt-bot to do, or How do you want the bot to interact with its environment?
The famous quote “Form follows function”, by Louis Sullivan has alot of clout even in robotics, or algorithms.
I imagine some of these questions can be answered by the limitation of sensors. ie. I have a PICAXE, a SRF05 and a servo, how can I recognise a beer?

From the last part of your comment, it seems like you are interested in mapping? Minivelt has already done this, although I know he offloads some of it to a computer. I too am doing ranging, and hopefully with mapping - but I’m an oddball here, since I use a computer with wireless (and at some point compas, GPS & googlemaps etc etc)

I would think with your memory extension you should be capable of creating a map by recording the movments of your bot, at the most rudementary level - by 1 = open space , 0 = not open space

For recognising a beer you will need more values :slight_smile:

I would always prefer a map

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.

8ik

Not me

That was the CRUM bot of Big Face! (brilliant work BTW)

https://www.robotshop.com/letsmakerobots/node/2558

I havent done any kind of mapping and I consider using a PC as a "remote brain" as cheating. If you want to make an autonomous bot, it should carry everything around by itself, including all processing power.

Learning

Perhaps it is possible to make it learn using the aggragation that Rik proposed. You put your robot in front of an object or situation (for example a cup or the corner of a room) and let the robot scan it by sweeping the sensors from left to right and back or by spinning around its axis.

Store the data in aggregated form such as:

nothingness, sharp edge, slowly decreasing distance, sharp edge, nothingness.

it won’t help storing the raw data, because the distance to the object wil vary in the field. Better to stick to condition changes.

Also you could add some extra info like the quality if the readings. Read the sensors a couple of times in the same position and report how much difference or noise there is between readings. That would tell something about the surface texture or the surface angle the bot is seeing.

move the bot or the object so that the bot is looking at a different angle and get new readings

store the aggregated datasets as “readings of Object A”

Now if you did this for a couple of objects, you can further train it by having it classify one of the known objects. If the bots reports it it seeing object B while its looking at object A, you have to correct it, so that it can store the aggregated data as “readings of Object A” and as “these readings are not Object B”.

In other words. instead of simply identifying objects, you can optimize it to distinquish between different known objects or situations.

 

** I suggest: Designing**

 

I suggest: Designing Autonomous Mobile Robots by John Holland

Very interesting.

 

 

 

Thanks! Your right of

Thanks!

Your right of course, must’ve been half asleep…

Cheating? I understand your point if its a personal goal, but I for one can not find my way around the city without a google map. So, I have surrendered the fact that part of my brain is on some googleplex machine out there. So I guess nature “cheats”… So, I can find a grocery store now.

It works for me, however, I understand this dependency has can have some disadvantages. For example if the googleplex machine was unplugged, I would starve - and you would be eating high on the hog.

Geeze, I hope they don’t unplug it, I’m hungry already :stuck_out_tongue:

cheating

Its a personal goal. It sorta falls in the category of whether to call the remote controlled demolishing machines of robotwars actual robots.

If there was no person

If there was no person behind a joystick my definition of “robot” would be satisfied.

And my money would be on the one which has “Borg’ed” out telementry going to the Dept. Of Defence mainframe :slight_smile:

SF
OK you got me. There is something strangely cool in a SF kind of way to have a remote brain. Still; my goal is to get the tiniest simple chip and squeeze all the processing power out of it in order to get a bot going.

RESPECT!

Sir,
I humbly kowtow to your uber techy skills and noble quest of assembly enlightenment. <o:p></o:p>

Just wanted to suggest remote brain through telemetry as an option, especially for those of us who are not as skilled in the micros as yourself (i.e. me) and need a big fat canvas of memory and processing power to support the weight of my bloated code!<o:p></o:p>

(humbly leave room with much genuflecting)<o:p></o:p>

Sorry :wink:

Don’t be mad. I know CRUM is autonomous, but GroG gave me credit for something you built (mapping) and accused me of something I wouldn’t do (offloading the mapping to be done by the PC)

Anyway. I wonder if the ideas posted on this page will lead to some algorithm where the bot can determine its position by looking around. For example. If you take CRUM, provide him with a map he’s just made and place him at a random position on that map and have him try to figure out where he is.

He’d be able to remember 'wait a minute: i’ve been here before"

Interesting,How will you be

Interesting,

How will you be using this map data? Are you going to label the rooms, so that you can say "Crum, go to the kitchen" and it will obey?