We have Ping360 on our ROV. It works fine, but maximum distance to strong object, such as ship or wall, is about 10m (30ft). We can’t see anything on bigger distances. I don’t have pictures yet, but i will take it. Water is fresh and very clear, so no problems of acoustic absorbtion.
In protocol description i read that acoustic data have only 8 bits. Is any signal compression, such as logarithm, or TVG userd in sonar? Is sonar tested on long ranges?
I did a quick range test of my own and got about 120 feet for my max range. The frequency and ping duration will affect the max range and the quality of the image.
Hi @Kost, welcome to the forum
Our Ping360 technical details specify a maximum range of 50m (165ft), and it’s expected that large objects should be detectable at that range, assuming enough of the transmitted beam is reflected back towards the sonar (dependent on target visibility and reflectivity, and angle of incidence between the transmitted beam and the target, as discussed in our scanning sonar guide).
As an example consider the visibility for a ship in the water:
Consider also that at large distances the sensor size as a proportion of the return signal becomes very small, especially for areas that aren’t perpendicular to the beam, so the measured return signal is much weaker than for a closer target.
For improving the long-distance performance more generally, I’d suggest you look at the Ping360 Device Settings section of our PingViewer documentation. That should provide you with an idea of what each parameter does and how to better tune them to specific operating conditions (in particular for long-distance consider the receiver gain and transmit duration).
Brian, thanks or video, our pictures looks not so good.
Eliot, good explanation, but i know, how hydroacoustics works. And can’t understand, why we doesn’t see very strong ojects like vertical wall at 15m (45ft), but Brian’s sonar can see angled bottom at 30m (100ft) distance. We try to adjust a frequency and gain, no luck. For pulse duration we use that code:
def adjustTransmitDuration(distance, samplePeriod, speedOfSound, _firmwareMinTransmitDuration=5): # type: (float, float, int, int) -> float """ @brief Adjust the transmit duration for a specific range Per firmware engineer: 1. Starting point is TxPulse in usec = ((one-way range in metres) * 8000) / (Velocity of sound in metres per second) 2. Then check that TxPulse is wide enough for currently selected sample interval in usec, i.e., if TxPulse < (2.5 * sample interval) then TxPulse = (2.5 * sample interval) (transmit duration is microseconds, samplePeriod() is nanoseconds) 3. Perform limit checking Returns: float: Transmit duration """ duration = 8000 * distance / speedOfSound transmit_duration = max( 2.5 * getSamplePeriod(samplePeriod) / 1000, duration) return max(_firmwareMinTransmitDuration, min(transmitDurationMax(samplePeriod), transmit_duration)) def transmitDurationMax(samplePeriod, _firmwareMaxTransmitDuration=500): # type: (float, int) -> float """ @brief The maximum transmit duration that will be applied is limited internally by the firmware to prevent damage to the hardware The maximum transmit duration is equal to 64 * the sample period in microseconds Returns: float: The maximum transmit duration possible """ return min(_firmwareMaxTransmitDuration, getSamplePeriod(samplePeriod) * 64e6)
I believe that code is anywrere from Bluerov github.
Are you using PingViewer or your own code? If you’re using your own code you’ll need to make sure you’re applying any relevant time/distance scaling correctly or your distance estimates could be incorrect.
Also make sure you’re orienting the Ping360 correctly. In PingViewer if you turn off Heading Integration the top of the polar plot corresponds to the direction the arrow on the bottom of the Ping360 points (cable at the back). From memory in code the arrow points to angle 200, with the 0/400 gradians direction being where the cable penetrator is.