Basically I have a fleet of small ground robots (maybe half a foot long) that will be driving across a flat outdoors area with no obstructions between the robots. I need the robots to communicate locations with each other for precise positioning so they can coordinate formations, for example a line of robots following each other with a gap of maybe a few inches between them. They will be communicating with each other via Xbee, but I need a way of getting each robot's position.
I was looking into GPS for this application, but it seems that the best GPS modules have an accuracy of +/- 2 meters which is way too high. What would be best to use here?
RTK modules seem to be going for ~$250 per unit, which unfortunately isn't feasible given that I want to deploy a fleet of up to 10 of these small robots.
How accurate would accelerometers be in this situation? If I can just get the robot's initial location through GPS or other means (perhaps hardcoding the location of the start point) and then use an accelerometer to track all movement from then on, would that work?
Consumer grade accelerometers are completely useless, unfortunately. They are too noisy, and you have to have a very accurate 3D orientation to subtract off the gravity component of the total measured acceleration.
I should mention that getting an absolute GPS position isn't necessary, I just need the robots to know their locations relative to each other (eg how many cm away is robot x from robot y and robot z).
You could try sonic beacons. Maybe coordinate them via radio, and tell each one in turn to beep at certain times, and as each one does that, any others in earshot note the delay from the nominal time to when they hear it. (Sound travels about a foot per millisecond.) It would be interesting to think of the robots mapping their locations when they can't all hear each other, but each of them can still hear their closest neighbors.
If you don't need a super high refresh rate you might be able to do something like this:
Place a diffused bright LED on top of each robot. I am thinking to place it in something like a ping pong ball so that if you look at it with a camera, it will show up as a circle in the image from all angles.
Place a camera on each robot as well. This camera would work best if it had a filter that only allows IR light to pass.
Have radios on the robots so that they can talk to one another.
Send a message that tell all robots to turn off their LEDs. All robots take a photo and save it away as the background image.
Send a message to tell Robot A to turn on their LED. All robots (I guess robot A doesn't need to do this) take an image. If they subtract the previous image from this one then robot A should really stand out in the image if it is visible at all.
The pixel diameter of the circle seen will give you an estimate of the distance to that robot.
The angle to the robot should also be easy to calculate based on where the center of the circle is located as each pixel subtends a known number of degrees (horizontal field of view / horizontal pixel count).
The robots can report the positions that they calculated so that the robots in front can know where the ones behind it are located.
Repeat for each robot.
I think Playstation used something like this for tracking controller location at one point.
I remember looking into this some time ago. The idea was to do distance measuring using ultrasonics similar to how Loran worked. Basically Loran uses the idea that the time difference between synchronous pulses from two transmitters forms a Line of Position (LoP) that is shaped like a hyperbola. With three transmitters, you should be able to get two LoP's. Their intersection point is the location of the receiver.
I didn't get very far because the reflections indoors would prevent it from working, but could be feasible outdoors. However, I've never seen an implementation.
I'm sure that with cheap hardware these days it would be possible. Any takers?
I did something like that with these Cricket sensors over a decade ago. I modified it so that the moving robot was the one making the pings and the 3+ stationary sensors collected the ping times to calculate the robot's position. It did work but as you mention reflections were a bit of a problem sometimes. When it did work it had cm accuracy.