Acoustics
April 2018 - July 2019
One part of the RoboSub competition is listening to and locating an acoustic pinger. These pingers are located at important tasks in the competition. If a robot can know where these pingers are, it makes navigating to tasks much easier.
When I went to the first informational meeting, they told me all about acoustics and what we needed to achieve. Before even joining the team, I started to look into the math and how acoustics works. I knew that it was based on time differences between the microphones, so I modeled the scenario and derived equations to get the exact coordinates of the source of the ping. I even created a simulation program to test as many ping location scenarios as possible to see if the equations failed in any situation. They appeared to work perfectly.
After we talked about the data processing side of things and everyone said they liked my math, we moved on to hardware. We talked to an employee at TI for his advice on how to make the capturing system. They suggested using a specific ADC. No microcontroller was fast enough to pull data from the ADC while it was capturing, so we decided to go with an FPGA. We got a dev board for the FPGA and ADC and got them to communicate with each other. The FPGA needed to store all the data in RAM before it could offload it through the USB port. We had proven the concept enough to go all-in with the design.
We decided to keep using the FPGA dev board rather than making a custom FPGA board. To communicate with the FPGA, we decided to make a breakout board that mounts on to the dev board. This board contained all the ADCs and filter/preamp circuitry. I worked with the digital side of things, and one of my teammates worked on all the analog circuitry.
Once the thing was assembled, we developed the time difference detection algorithm. We then ran some tests, put those time differences into my equations, and ran into imaginary outputs. I reviewed my equations again and again but could not find the problem. It worked in simulation but did not work with real data. After some more experimentation, I realized the equations were not noise resistant. Then I ran the simulation again with a little noise and got an invalid result. I would have to start again from square one.
I initially tried to reduce error in time differences by trying different detection algorithms. The first was an FFT based approach, the second was FFT based but with a little more filtering and math, and the final was a computer vision based approach. If I searched for the waveform of one hydrophone in the other hydrophones, it actually gave a more accurate response than the FFT algorithm.
To remedy the noise issue, I decided to detect the direction of arrival rather than the position of the pinger. Direction only required basic trigonometry and did not need my complicated equation I had calculated earlier. After a few tests, the system was accurately reporting azimuth and altitude. Out of water tests worked, but we ultimately did not finish the project as other projects took higher priority.