I have to develop an underwater positioning system which has to determine the position of a ROV.

Four buoys will be placed on each corner of a swimming pool. Each one of these buoys will be equipped with an hydrophone and a transducer (which emits acoustic signals). Both devices will be connected to a Raspi for performing DSP.

The ROV will also contain the same equipment (transducer, hydrophone, Raspi).

I was wondering which could be the best way to determine the distances between the ROV and the buoys for triangulating the position.

At first glance I have tought with the next ways to achieve it:

  • Signal Strength: Every buoy will emit a beacon signal with the same power, but at different frequency for each one. The ROV could determine its position be means of comparing the power received.

  • Ping: The ROV emits a ping and inicialices a counter, when the buoys receive the ping they respond immediately. When the ROV receives the ping back stops the counter and calculates the distance.

I think that the second approach can be much more accurate. The first method that comes in my mind in order to achieve it is to use a certain frequency for emitting the ping (let's say 2khz). The buoys would be in recepcion mode, awaiting for receiving this ping. They would detect the ping by means of frequency analysis (Goertzel's algorithm). The same algorithm would be used in to ROV for receiving the ping.

The main drawback is that the system needs to be really precise. An error of 1ms means 1.4m of deviation. I don't really know if that is doable and if is the best way to achieve it.

Which method would you use?

  • $\begingroup$ Which device needs to determine the position, the one on the buoy or the one on the ROV. $\endgroup$
    – hotpaw2
    Apr 8, 2014 at 2:53
  • $\begingroup$ Both. But no worries about that, because I have another channel to transmit information between the buoys and ROV. So I don't care if the 'ping' is done by the buoys or by the ROV, because the position information will be shared later. $\endgroup$
    – Seitam
    Apr 8, 2014 at 9:03

1 Answer 1


I have worked with this kind of a positioning system before (NOT underwater, but still sound based), and I hope I can help. Your first option is probably not the best idea, even in a controlled environment there are many factors which can change your signal's amplitude and therefore making it unreliable information.

I think your second option is a better way to go. It could be even better if you can embed some time information to your transmitted signal as well (a timestamp like GPS). With a timestamp containing information about when the signal was fired, you can calculate the time difference without ping-back, which would save you some distance error. Or you would have two methods to determine the position and you can perhaps use some sort of filtering depending on a set of initial results (to decide which one works better).

Another method that I would like to suggest is an array configuration. If you can make sure that your transmitters will transmit at ABSOLUTELY at the same time (with respect to each other), you can use the phase differences of the received signals in your boat to determine the range and the respective angles(with some ambiguity). So again you wouldn't need to ping back your signal. But in this configuration the absolute positions of your transmitters must remain the same, and the positioning of your receivers in your boat must remain the same as well.

When we used the ping method, our biggest problem was echo. I don't know exactly how echo works underwater but if it exists, I would suggest you to be careful about it. In our project we had only used the ping without any extras that I suggested to you, and I must admit it wasn't very reliable.

Good luck with your project, I hope you do better than us, and I would like to hear about the results.

  • $\begingroup$ Thanks for the response. Initially synchronizing the four buoys and the ROV by GPS was my main idea. The ROV would broadcast a beacon indicating with a timestamp when it was transmitted. Then the buoys would demodulate and decode the signal, compare the value with his internal clock and calculate the position. Unfortunately my data acoustic link is only reliable at 50bps and the demodulation/decodifying process takes a long time (seconds). With that setup I can't use this approach anymore. I will take a look at the phase detection that you have proposed. $\endgroup$
    – Seitam
    Apr 8, 2014 at 10:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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