Progress
Most of this week has been spent trying to sort out my wireless cam & processing so i can crack on with this.
Im currently working on a laser ranging device that i plan to use for th basis of the mapping but i plan to be able to use other devices such as a ping or other ways to measure distance.
My idea so far is to have the bot gage where in the room it is by using measurements to objects in combination with measuring travel to work out where in relation to other objects it is, the way the map will be built up and formatted for storage and reference is still a little sketchy, this is where i will need help i think.
The maps need to be either small or be easily split into sections so that small microcontrolers can utalise them, but they also need to be accurate and readable as well as easy to form. I think this will develop with time. Id also like to have a set of classes for various chips and languages, that way we could develop a drop in mapping system.
Map criteria
Small
Accurate
Easy to use from both a computer
Maybe a grid format with various scales built in would work, for example it could have a few different sizes of grid, from cm squares, then moving up in tens to 1 meter, then moving up in 5m squares. The map would be orientated around the robot and objects mapped with relative coordinates to the bot.
robot is position 0,0
wall position: 10 meters north 5 meters east (centre position)
wall length: 5 meters
wall angle(from bot): 45 degrees
This could be passed to a function to deal with it after that:
storeObject(5, 10, 5, 45) // x, y, length, angle
The way above would take the position of an object from its centre point (if known), the problem with this is that it depends on whether you know the depth of an object to start with, however this can be solved by assuming ( :D) that the object is flat and has no depth unless otherwise known. The map system would then work out what objects are linked.
The other way would be to define the position of an object with coordinates for all points on it:
A wall would have a start point and a stop point
A square would have 4 points
A box 6 points and so on.
THis might be more accurate but i can see more problems with overly complex layouts. A standard way for all would be good but i cant see defining a line the same as defining a box or a curve. I can see using the centre point of an object to line it up on the grid and then sizing it from there working but i think that might have a few problems. The ability to work in either 2d or 3d would be good too, and probably not that hard to impliment.
The way i have outlined above would eliminate the need for gps or beacons. However i cant see this method working easily on an arduino or pic (if im wrong about that please tell me), i am planning on having either a powerful board on my bot or some form of server that deals with this and the bot jsut sends back data to it. It would be nice to have a way to simplify this so that it could be run on a less powerfull chip.
Wheel encoders scare me so im planning on using way points for travel measurement by either using an object on the map and locking a distance sensor to it while the bot moves, this might need some correcting within the mapping program itself. However im confdent i can make this work.
Most of this is just ideas at first, i need to get my laser ranger working first and then i will have a good test platform to work with.
Id appreciate some input if anyone has any or is interested in working with me on this.