Autopilot testing:


In the attached video, there is a test of an Autopilot algorithm working on a Ship's Dynamics Simulator which belong to a GMDSS/VTS whole simulator.

The upper form, is the dynamics simulator and equipment (GPS, ECDIS, ARPA, AIS, NAVTEX, RADIO XT/RX, ....) control. The lower, when opened, contains the under test Autopilot controls and parameters.

The simulated ships responds to engine and rudder, as a real one would do under still water/no wind conditions.

As I wanted the ship to have significant inertia effects, I implemented a tanker ship, with 120 m LOA.

The autopilot works on the rudder only, taking the steering wheel under it's control,

The algorithm is based on a classical PID where an Inertia factor has been included, allowing the Autopilot to anticipate the ship "over turn".

Not sure if the video is going to be attached :-(

NOTE: As I am the software author, no rights are required for publishing the video.

599-AutoP.avi (1.37 MB)


Don't know how to edit the text above :-(

Anyway, hope this could be useful for the ROV control.

I've checked that, sometimes, heading error is below the minimum rudder correction threshold, resulting in a periodic sistematic error. It can be solved by increasing the time sampling, allowing the integrator factor for reaching a bigger value.

AutoP window.

Kp Proportional factor

Ki Integrator factor

Kd Differential factor

K inerc Inertia factor (0 at this simulation)

All Ks to be adjusted for any particular ship/sub

It Time sampling rate (1 second)

Act -> Actual heading

Prg -> Required heading

Err, Pp, Pi, PD -> Error and Correction factors

Red graph: Ship's response against time.



Very cool!



Thanks Erik:

I'm into so many things that I don't know when I'll have one of the projects finished.

Im trying to develop a new ROV design, not based on the fluid friendly idea, but on the 6 DOF manouverability and vision angles improvement, togheder with deeper range.

At the same time, working on the laser telemetry concept (developing on C++)

I want to develop a C++ library for OpenROV autopilot and navigation.


Can OpenROV easily handle C++ libraries ?

Could standarized NMEA 0183/2000 protocol be useful for OpenROV project ?

We've found that providing a NMEA in/out link in our models (I mainly work on mathematical models) results very useful as it allows for real world navigation equipments data sharing.(RADAR, AIS, ECDIS). Hence real navigation equipments can be used by the system.

When I saw your surface wifi data link unit at Tahoe lake, I directly thought on providing a real Marine systems link (UHF/VHF). It would even be possible to use real DSC Radio Beacoms for ROV location into real VTS equipments for A1 navigation area.

This is a typical Beacom received data stream NMEA formated ITU compliant.


Location, identification and weather datas are packed into the stream.

This could be a typical ROV transmision(answer)


Identification/Navigation status/SOG/Location/COG/True heading and working channel packed inside the chain.

Both include transmision errors controls. And repetition request.

The test shown in the video is perfomed by one approach to the ROV autopilot I have under work.

The main improvement to the standard PID is the 3D ROT (2D in this approach) change with respect to time, d(ROT)/d(t) calculation, and the future turn calculation that allows for inertia compensation.

I know inerta effects in a little device are almost negligible, but general solutions are always more useful than particular ones.




You are interested in some pretty cools stuff! I don't have as much software capability knowledge as many people on our forum, however I believe that everything you're talking about is completely possible.

I'm really excited to see what you come up with- keep us posted!



Thanks for answering Erik.

I use my spare time for all posted above, so, it goes slowly :-(

As you, I've been more into the hardware than into the software side stuff, but .... as we say here "If you want a fried egg as you like, fry it yourself".

I'll keep you all posted, of course.