Integrating DVL A50 and Ping Altimeter on BlueROV2 Heavy: Position Hold & Custom Distance Hold

Hi everyone,

I am currently working on a research and construction project for an underwater vehicle platform at Bach Khoa University, focusing on fundamental GNC (Guidance, Navigation, and Control) development. We are upgrading our BlueROV2 Heavy by integrating a Water Linked DVL A50 and a Ping Altimeter, and I could use some advice from the community on a couple of operational requirements.

1. DVL A50 Integration for Position Hold Mode We have physically connected the DVL A50 via the Ethernet Switch and accessed the BlueOS interface. To properly activate and use the “Position Hold” mode:

  • Does this require compiling any custom ArduSub firmware, or is it purely parameter-based (e.g., enabling the BlueOS extension and configuring EKF3 in QGroundControl)?

  • If it’s parameter-based, are there any specific “gotchas” when setting up the EK3_SRC1 parameters for External Navigation that we should be aware of?

2. Ping Altimeter for Object Distance Holding (Hybrid Control) In addition to the DVL, we want to use the Ping Altimeter (mounted facing forward) to maintain a fixed distance from a specific underwater object or wall. Our goal is to have the ROV automatically hold this specific distance based on the Ping data, while the operator can still manually override and move the ROV up, down, left, and right using the joystick.

  • Is there an existing flight mode in ArduSub that supports this kind of hybrid control (auto-distance hold on one axis + manual translation on the others)?

  • If not, what is the best practice to achieve this? Should we write a custom Python/Pymavlink script running on the Companion Computer to read the Ping data and send RC_CHANNELS_OVERRIDE or SET_POSITION_TARGET_LOCAL_NED messages to the Pixhawk?

Any insights, documentation links, or Pymavlink snippet examples would be greatly appreciated!

Thanks in advance for your help!

Question 1 is easy: Yes, you can use the current firmware (and many older versions) and the BlueOS WL DVL extension to enable POSHOLD. The extension has an option to set EK3_SRC1 parameters, and the defaults should work.

Question 2 is more challenging. No, there is no existing flight mode that will do this. I recommend using ArduSub’s Lua scripting capability to implement custom modes like this.

For example, this Sub PR includes a Lua script that implements a custom mode:

  1. It implements “cruise control” where the ROV moves forward at a constant speed while giving the pilot control of yaw.
  2. It implements “terrain following” in this mode (like SURFTRAK).

LMK if you have questions.

Hi @trongtri -

Welcome to the forums!

As Clyde mentioned, the existing documentation should be all you need to get position hold or guided modes working. I’m curious if you’ve already reviewed this?

A Lua script is a great staring point to solve your second challenge of using the range finder data for navigation!