ArduSub's first GPS positioning at depth!

Last month, two engineers from Water Linked visited Blue Robotics in Torrance, CA to test and integrate their underwater GPS positioning system with ArduSub and the BlueROV2. During our testing we were able to operate with a ‘GPS fix’ at depth. This was a first for ArduSub, and a huge milestone in our development!

Positioning underwater is a difficult (and expensive!) task. I’ve tested GPS with ArduSub in the past with a USB GPS plugged into a Raspberry Pi companion computer. The GPS outputs NMEA 0183 sentences on a serial port, and the Raspberry Pi forwarded the raw data to the Pixhawk over the existing telemetry channel with a repurposed DGPS MAVProxy module. Once arriving at the pixhawk, a subclass of the standard NMEA driver consumed the data without hesitation. The only difference in the subclass was that it grabbed all of it’s raw data from mavlink GPS_INJECT_DATA messages originating from the GCS rather than from a dedicated UART.

I was able to implement position hold and auto waypoints very quickly thanks to the groundwork already being laid with ArduCopter’s navigation libraries and flight mode implementations. Unfortunately, we were still constrained to the surface of the water using conventional GPS; I mounted the USB GPS on a 1 meter mast in order to operate at shallow depths. Here are some of the results from testing ArduSub with GPS last summer:

BlueROV1 Position Hold with awful GPS drift

BlueROV1 mission at ~30cm depth

The Water Linked positioning system combines a short baseline (SBL) acoustic positioning system with a traditional GPS unit and compass to provide absolute global position. The vehicle’s position relative to the boat is triangulated using acoustic pulses, then the relative position offset is added to the GPS position of the boat to yield the absolute position of the vehicle underwater.

The GPS position of the boat and the ROV were output to the Ground Control Station computer on different UDP ports as json-encoded python dictionaries. A MAVProxy module packed the GPS position of the ROV into GPS_INPUT messages and sent them to the autopilot, where they were handled by the GPS_MAV driver. Another MAVProxy module handled the GPS position of the boat, and acted as a standalone MAVLink vehicle, sending heartbeats, GPS postition, and heading to QGC under a unique SYSID in order to view the boat position separately from the ROV position in the map. Yet another MAVProxy module extracted depth and temperature data from the ROV’s telemetry stream and forwarded that data to the Water Linked system in order to improve the position estimation calculations.

The resulting complete system functioned very well. We were able to quickly navigate to wrecks that had previously been spotted on side-scan sonar, and we were also able to perform autonomous missions. We had good positioning information at 100 meters depth, as well as 100 meters laterally, even at shallow depths/angles. Here are some videos of our testing over the course of the week:

BlueROV2 Position Hold in a Tank with Underwater GPS Positioning:

BlueROV2 Autonomous Navigation with Underwater GPS Positioning:
This is ArduSub’s first autonomous mission at depth! We had much better results after tuning the navigation parameters, but unfortunately did not capture the video from those subsequent tests!

BlueROV2 Manually Piloted to a Wreck at a Known GPS Coordinate:

We were all very pleased with the extent of our success in the short amount of time we were able to spend together! The Water Linked system offers a very precise positioning solution at a fraction of the cost of current systems on the market, and it performed very well. We think this will be a valuable option that will provide marine professionals, enthusiasts and researchers with the underwater positioning information required for many operations. With this system they will also be able to utilize the excellent and ever-expanding positioning-enabled capabilities afforded by the ArduPilot project and ArduSub.

You can read more about the BlueROV2 and Waterlinked’s product in our blog post here.


Fantastic breakthrough!

PS. hope it’s ok, I captured an image from the last video and put it at the top to make it a bit more eye catching on the front page.

This is a awesome achievement!

Yet another reason to buy a BlueROV2 for underwater survey work! Is it possible to mount the GPS in a buoy or remote controlled boat and make the system “un-tethered” from the GCS and user by using a surface based wifi AP system?

Absolutely! If you put the GPS on a buoy or boat, then the SBL positioning system would have to be attached to the same platform as the GPS. The greater the separation between the SBL receivers at the surface, the better performance you get.

A smaller/easier approach would be to just put a WiFi AP on the buoy for communication, and leave the GPS, SBL system, and everything else as-is.

Ok that’s cool.

So the SBL receivers are the sonar transponders? How far do they need to be separated to get good results down to 100m depth and about 100m working radius? What is the maximum range under water that the system will work to at roughly what accuracy? I suppose the depends on the distance between the transponders on the surface?

I suppose it should be possible to use more than one ROV using the SBL system on the surface if one synchronizes the separate signals from each ROV?


At the other end of the spectrum, we use Ultra Short Baseline (USBL) positioning systems for ROV navigation during our deepwater maintenance operations on Ocean Networks Canada’s cabled ocean observatories. We normally see position accuracies of 0.1 to 0.5% of water depth (3-13 m at our deepest sites). In the USBL system, all of the transducers are in a single head with only a few cms between the elements. iXblue GAPS is a good example of a commercial USBL system.

Congrats! You are doing amazing work guys.

Great work! Could you share an APM log of any of your mission? I would be really interested about the sensor and control performance?!

Hello, We do not have any logs available right now. Perhaps we will do another post when we are able to do an in depth log analysis.