ROV navigation with GPS on sub firmware

Hi,

I’m currently facing an issue with navigating my ROV similar to blue boat waypoint navigation on QGC.

Whenever I attempt to navigate, the ROV dives deeper. I’ve tried adjusting the altitude, but even with minimal depth, it still descends. Additionally, I lose GPS signal when it moves. Are there any parameters available that can help me navigate my ROV on the surface of the water like a boat?

Any insights or suggestions would be greatly appreciated. Thanks in advance!"

Hi @Sakthivelj,

  1. What kind of positioning sensor(s) are you using?
  2. What version of ArduSub are you running?

I believe this should work without particular parameter configuration, assuming the vehicle has a valid position estimate, and has been given mission waypoints that specify the altitude as 0m.

Hi @EliotBR, Today I have the opportunity to experiment again. I have used GPS and depth sensors. The Ardusub version is 4.5.0.

I tried it at 0m, but the same issue occurred. Once I started auto mode, the ROV began to go down instead of moving forward. As it descended, I lost the GPS signal.

I want to give a waypoint and move the ROV to that point like how blue boat with rover firmware. I don’t want to move depth just floating surface enough. How to archive this?

Hi @Sakthivelj -

What depth were the waypoints you’ve setup the mission with set to? Setting this to 0 should result in the vehicle navigating at the surface as you desire…

Hi @tony-white,

Yes, I am setting it to zero only. I have tried multiple times, but it’s the same issue once the auto mode starts going down. When it descends to water, GPS signal loss occurs, which you can see in the depth of the attached video.

A video for your reference.

Thanks

Hi @Sakthivelj -
Have you verified the depth of the waypoint before that? You may want to delete the takeoff mission entry.
You also seem to go to guided before auto mode?
What version of QGC are you using?

Hi @tony-white, thank you for your quick reply.

Yes, I verified all waypoint depths are 0.

Sure, I delete the takeoff and try.

No, I only started the Auto mode.

I have tried two versions: V4.2.8 and V4.4.3 and both are facing the same issues. Could the QGC version be related to this issue?

Thanks

Hi @tony-white,

Today, I attempted waypoint navigation using the cockpit but encountered the same issue. When I initiated auto mode, the ROV descended to a depth even though the altitude was set to ‘0.’

I also tested the SILT simulator, and waypoint navigation did not work as expected.

The system seems to operate only under specific conditions:

  • The takeoff value must be negative.
  • The second waypoint must be located deeper than the first waypoint.

For example, if waypoint 1 is at -1 and waypoint 2 is at -2, the ROV will travel from waypoint 1 to waypoint 2 successfully. However, after reaching waypoint 2, it moves toward waypoint 3 but gets stuck. It doesn’t proceed to additional waypoints beyond this point, regardless of how many waypoints are defined.

Interestingly, the system never officially registers that it has reached the third waypoint; it just stops close to it.

Let me know your thoughts or if you need more details.

Do I need to change any param value is required?

“For example, if waypoint 1 is at -1 and waypoint 2 is at -2, the ROV will travel from waypoint 1 to waypoint 2 successfully. However, after reaching waypoint 2, it moves toward waypoint 3 but gets stuck. It doesn’t proceed to additional waypoints beyond this point, regardless of how many waypoints are defined.”

Could this be because it is navigating in 3d space, and the third waypoint is >2 meters above the ROV’s position? What is your navigation waypoint range value set to?

1 Like

Hi,

I have a question about the proper way to connect a surface GPS to ROV.

Should I use a serial port or an NMEA injector?

Previously, I connected the GPS to the navigator’s serial port 3 and adjusted the parameters as follows:

  • SERIAL3_PROTOCOL = GPS
  • SERIAL3_BAUD = 4800
  • GPS_TYPE = UBlox

With this setup, I was able to receive GPS signals. However, waypoint navigation wasn’t functioning as expected.

To work around this, I wrote a Python script to read GPS data via USB, publish it over a UDP port, and send it to the system through NMEA injection. This setup enabled waypoint navigation.

Here’s the script I used:

import serial
import socket

SERIAL_PORT = "/dev/ttyUSB0"
BAUD_RATE = 9600
UDP_IP = "localhost" 
UDP_PORT = 27000

ser = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

def forward_data():
    while True:
        line = ser.readline()
        if line:
            decoded_line = line.decode('ascii', errors='ignore').strip()
            if (decoded_line.startswith("$GNGGA") or
                decoded_line.startswith("$GNRMC") or
                decoded_line.startswith("$GNGLL") or
                decoded_line.startswith("$GNGNSS")):
                sock.sendto(line, (UDP_IP, UDP_PORT))
                print(f"Forwarded sentence: {line.decode('ascii', errors='ignore').strip()}")

if __name__ == "__main__":
    print(f"Starting GPS data forwarding from {SERIAL_PORT} to UDP {UDP_IP}:{UDP_PORT}")
    forward_data()

This setup enabled waypoint navigation.

Could you please let me know if there is any reason for this?

Thanks