Hi,
I am looking for an approach that will allow multiple robots to be able to locate each other by detecting an IR emitter. The idea being that each emitter will have a specific frequency that will allow them to "identify" each other from a decent range.
I assume the frequency that you're mentioning is a "carrier frequency"/modulation.
What do you call "a decent range"?
Just using a carrier will be a weak approach for several reasons.
- Integrated IR receivers are made for a relatively narrow frequency band (eg. 36kHz, 38kHz and 40kHz).
- Most of them will shut down their AGC, seeing a continuous wave as noise (you'd need those made for security curtains on heavy machinery (and they're harder to come by than the "TV variety").
- If a receiver can concurrently see two signals, they will blend to sum and difference frequencies.
If you use a short coding with just slightly more than the bits needed, you can use one receiver each 'bot. It will still be garbage if it sees two signals at once - this goes for any technique you apply.
The remedy is to keep the message short (say 10ms max. each second) and to keep some randomness in when in each second the code is sent - this way, if you have a (data) collision, the next code will be sent at different times from the previously clashing 'bots.
To assure you're reading it right, each coed can be followed by its inverse (quick to check) or a checksum/parity/whatever and if it doesn't check out, discard the code and wait for the next emission.
Has something like this been done before?
Yes, in many ways but with varying results.
Are their better ways to do that?
As stated above.
However, if you need to know it's relative position, you'd need receivers around the entire robot, in a way so that at least two receivers sees the signal. If the 'bots are allowed to touch, the position could be determined that way as well and a single (wide angle) receiver would do (mounted on top of the 'bot, pointing up and with a silvered dome above it for 360° vision).
Short range radio modules would be another possible solution.