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.