In the environment, I have two robots and a couple of fixed obstacles. In order to detect obstacles I am using ultrasonic sensors. For robots, they need to detect each other and from which side other robot is coming (front, left, right or back), and do this during the motion. For this purpose, I cannot use PIR sensors, because robots are constantly moving. Also, I need to differentiate between moving robots and stationary obstacles, so ultrasonic sensors are also not helpful.

So I came up with idea to somehow mark the robots with some property unique to environment, so when we detect object with that property, we know that it is a robot, and not another obstacle. One of ideas might be to put lasers on one robot, and on other robot put four laser sensors, one for each side, so we precisely can say from which side the other robot came from. Another option might be to use IR transmitters on one robot and four IR receivers on other robot? What do you suggest, is there any other type of sensors that might help?

  • $\begingroup$ Are the robots allowed to communicate with each other? What budget do you have? Is a global position of the robots known? $\endgroup$ – mactro Jan 31 '17 at 9:33
  • $\begingroup$ Robots do not comunicate with each other. Budget is not the problem, and robots do not know their position relative to envitonment. $\endgroup$ – nevres jahic Jan 31 '17 at 19:20

My solution disadvantages/limitations are:

  • Needs computation/processing power
  • Robots should move slowly
  • Robots scan environment quickly as possible as you can

Here are the steps:

  1. Create a radar like system with a servo and two ultrasonic distance sensor or use 360 deg. servo and a ultrasonic. (http://www.instructables.com/id/Arduino-HC-SR04-Ultrasonic-Rover/)
  2. Add a compass sensor for deciding absolute angle of ultrasonic sensor.
  3. detect the environment by scanning.
  4. after the scan, you have signal which have a size of 360 in each robot. Because of static obstacles, the scan signals should have similarities. you can compare scans with correlation / convolution. delay gives you distance vector of your robot. (https://www.mathworks.com/help/signal/ref/xcorr.html)
  5. also you can compare the the scan signals and decide where is the other moving robots. Moving robots creates difference in correlation and you can detect it.
  • $\begingroup$ Thank you for your reply. But your solution would need some computations that I would not like to have in my implementation. I think that with lasers or some other implementation I would not have this much computational tasks. $\endgroup$ – nevres jahic Jan 31 '17 at 19:28
  • $\begingroup$ It can be implemented on a microcontroller. at least, correlation can be minimized as multiplication of arrays. But, as I mentioned it needs some computation and processing power. $\endgroup$ – acs Feb 3 '17 at 22:34

First: You have said that robot do not communicate with each other. But can they communicate with a third party (not necessarily a robot). Then you can mark your robots - objects with some kind of code (Like QR) and put a camera (Observer) on top of the environment. Then send the message to each robot about their relative position to each other. (Since there is only one way communication: Master -> Slave this will be a simpler network then creating a network between all robots.)

If they can not communicate in high level at all, lets think about all the mediums and signals that can deliver some data and from your description this data should indicate the ID of robot, not just identify it as robot.

  1. There is light as you have guessed. Other then what you have suggested already (IR sensors) you can put camera on each of them and mark objects and robots (with their different sides) but both material and computation is costly. There are various ways to do it and a lot of challenges you need to face. Even with IR sensors you need to make sure data from different source will not mix (may be use time dividing).

  2. There is sound: Sound Localization : You can combination of Frequency Modulation and Sound Localization. If all robots (and object can too but may seem unreasonable) continuously produce a sound in a unique frequency. Then each robot will get two (or more) microphones. You can use Time-to-Frequency Domain transformations (like fourier) to filter unrelated sounds and identify different sources and their stregths. Then use differential signal strength or phase from all microphones to approximately locate direction and distance of other robots. It is mechanically simple, requires some computation (FT is not that costly). You may even find-design digital circuit to process the signals instead of programming.

  3. There is electromagnetic waves: Many RF devices provide information on signal strength from unique sources, and there are really cheap RF modules in market. It will not give you idea about direction but only distance. And since the electromagnetic waves travel way more faster then sound, it is really hard to differentiate difference between signals (you need very accurate hardware) so we can not use a technique easily like sound localization.

Of course there must be more ways but right now these are all i can think of on top of my head.


I would mark each robot with an AprilTag or anyone of the fiducial markers available. Than with an "easy" openCV program and a camera observer you can track the movements and the orientation for each robot distinguishing each one form the others relying on the tag id detected.


Use a Lidar system and then elaborate the data using a point cloud libray( i've never done this but i just want to tell you that it's a possible solution)

  • $\begingroup$ elcome to Robotics BlueJay. On Stack Exchange we are are looking for comprehensive answers that provide some explanation and context. Very short answers cannot do this, so please edit your answer to explain why it is right, ideally with citations. Answers that don't include explanations may be voted down as not useful or even deleted. $\endgroup$ – Mark Booth Feb 8 '17 at 14:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.