Looking for sonar simulation advice

This is more of a general sonar question than an ROS question, however I am guessing there are some smart folks here who may be able to help. I simply need to simulate sonar returns as sound, ideally through ray-tracing or other forms of close-to-reality simulation. I am looking to simulate, not emulate.

I have an application in which an advanced underwater sensing system will be needed, perhaps a novel one. I have a background in machine learning, and I think there is a big opportunity to develop a machine learning based solution as a low cost alternative to current sonar systems. To that end I have been trying to design a sonar simulator that can produce a data set large enough to pre-train and prove out a neural network before it is fine-tuned in the real world.

I have been trying to understand the work by Dr. Reilly on WaveQ3d, a sonar simulation library. GitHub - campreilly/UnderSeaModelingLibrary: The Under Sea Modeling Library (USML) is a collection of C++ software development modules for sonar modeling and simulation. I did manage to get it to build, no easy task (seriously, how do you C devs live with this much library management tech debt?). I created a container with all dependencies ready to roll if anyone else would like an easy build environment.

I think it will be possible to get the data I need out of this library with a lot of work. Again, I simply need the recorded sound of simulated returns.

Has anyone else here already done this work who would be willing to share, or know of any project that gets closer than WaveQ3d?

Thank you!

This paper might be helpful:

It’s not exactly what you’re looking for, but it might be a place to start.

1 Like

@Val_Schmidt Thanks!

@Forrest_Allison the source code is at

The work was attempting to implement physical aspects of the multi-beam sonar which is not included in ‘image processing’ fashion of methods including machine learning approach. I wonder if there’s way to implement physics in machine learning to resolve diffractions and interference between beams.

1 Like

Hi @Forrest_Allison,

you could also take a look at HoloOcean (Welcome to HoloOcean’s documentation! — HoloOcean 0.5.0 documentation). They implemented multiple different simulated sonar sensors. HoloOcean has a straightforward Python API similar to OpenAI Gym and it is based on HoloDeck which was designed for training machine learning models.

Note: we are currently working on a ROS2 interface for HoloOcean, we will announce it here when it is ready.

Kind regards,

1 Like

Maybe this Gazebo community meeting is also relevant:

This is the recording:


Hi @Forrest_Allison,

As promised, we just released the initial ROS2 Bridge for HoloOcean with ImagingSonar simulation support: