← Back
Home › Systems › Transport, logistics and mobility

dynamic-positioning

thruster station-keeping of vessels and rigs: position-reference fusion, wave-filtered observer, thrust-allocation QP, DP2/DP3 redundancy and FMEA

Kongsberg K-Pos, Wärtsilä, Marine Technologies

Open the dynamic-positioning pagedynamic-positioning Gain scheduled control lawscontrol: Interpolate controller gains over flight condition (airspeed, altitude) from precomputed design points to keep performance across the envelopeAlarm managementembedded: Turn raw process limits into a few actionable operator alarms with delay, deadband, acknowledge and shelving states, plus flood measurement.›Fault detection isolationrecoveryembedded: Monitor/response tables, fault isolation and safe-mode recovery hierarchies for autonomous systemsFault tree analysisembedded: Write the unwanted top event as AND/OR logic over component failures, reduce it to minimal cut sets, then compute its probability and each failure's share.›Fixed-rate control loopembedded: Run a controller at an exact period using absolute deadlines and a fixed dt, so jitter never accumulates and the math stays valid.›Hot-standby redundancyembedded: A second, always-current controller shadows the primary and takes over within a few cycles of silence; epochs stop the old primary from fighting back.›Modbus protocolembedded: Modbus RTU/TCP registers and function codes with polling and CRCReal time fieldbusembedded: Deterministic cyclic fieldbuses (EtherCAT, PROFINET IRT): on-the-fly frames, distributed clocksRedundancy votingembedded: N-modular redundancy and MooN voting (2oo3, TMR) with discrepancy detectionSafety monitor architectureembedded: Independent doer/checker safety monitor that forces a safe state when the main channel misbehavesTime triggered schedulingembedded: Static cyclic schedules where every task and message has a precomputed time slotWatchdog timerembedded: A hardware down-counter that resets the chip unless software proves, in time and in a plausible pattern, that it is still healthy.›Quaternion rotationsgeometry: Unit quaternions as 3D rotations: 4 floats, cheap composition, no gimbal lock, plus the conversions, interpolation choices and numerical care needed in practice.›Quadratic programmingoptimization: Convex QP solvers (active-set, interior-point, ADMM) for constrained optimizationComplementary filterrobotics: Blend high-passed gyro integration with low-passed accelerometer/magnetometer attitude (Mahony/Madgwick)Control allocation mixingrobotics: Map desired thrust and torques to actuator commands via mixer matrices with saturation handlingExtended Kalman filterrobotics: Kalman filter for nonlinear motion and measurement models: linearize f and h with Jacobians at the current estimate each step. The default estimator in robot navigation.›Kalman filterrobotics: Optimal recursive estimator for a linear system with Gaussian noise: fuses a motion model with noisy measurements into a state estimate plus its covariance.›Model predictive controlrobotics: Each tick, solve a small optimization over a predicted horizon, apply only the first input, repeat. Handles constraints and multiple inputs that a PID loop cannot.›PID controllerrobotics: Drive a measured value to a setpoint with three terms on the error: proportional, integral, derivative. The default feedback loop for motors, heaters, drones and gimbals.›Sensor fusionrobotics: Combining IMU, GNSS, camera, lidar and radar estimates with Kalman-type filters and time alignmentSystem identificationrobotics: Fit dynamic models (ARX, state space) from measured input and output dataIIR and FIR filterssignal-processing: Two ways to shape a sampled signal's spectrum: FIR (finite taps, always stable, exact linear phase) or IIR (feedback, a few coefficients, cheap but phase-distorting).›Pseudorange least squarespositioningsignal-processing: Iterative least-squares position and clock bias from pseudoranges with atmospheric correctionsDebouncing throttlingsystems: Coalescing rapid events: debounce (wait for quiet), throttle (max rate), and cancelling stale in-flight requestsHierarchical state machinesystems: Nest states so a substate inherits its parent's reactions and only overrides what differs, with ordered entry and exit actions along the path.›BFS and DFSgraphs: The two basic graph traversals; BFS gives hop distances and levels, DFS gives discovery/finish order for cycles, components and topological order.›Binary decision diagramsoptimization: A reduced ordered BDD stores a Boolean function as a shared DAG that is unique per variable order, so equivalence is one integer compare and counting is one pass.›Dma transfersembedded: DMA controllers: descriptors, circular buffers, cache coherence for zero-CPU data movementPWM generationembedded: A timer's counter, period and compare registers draw the pulse train; preload, dead time and DMA make duty changes glitch-free, shoot-through-free and cheap.›Primary-backup replicationdistributed: One node orders all writes and ships them to standbys; the acknowledgement rule (none, one, all) sets what a crash loses, and an external arbiter decides who takes over.›End to end protection e2eembedded: Per-message counter, ID and CRC over a black channel to detect loss, repetition, corruption, delayMemory protection unitembedded: A handful of base/size regions with permissions, checked on every access by the CPU, give microcontroller tasks isolation and stack-overflow traps without an MMU.›Sparse matrices (CSR)numerics: Compressed sparse row stores only nonzeros as row pointers, column indices and values; SpMV streams them once, so it is memory-bandwidth bound.›Interior-point method(primal-dual, Mehrotra)optimization: Follows the central path with Newton steps on the perturbed KKT system, one sparse Cholesky per iteration; Mehrotra's predictor-corrector makes it fast.›Finite differencesnumerics: Replace derivatives with weighted differences of grid values; simple stencils plus a stability condition (CFL) turn PDEs like heat, advection and waves into array loops.›+ 10 moreLeasesdistributed: A lock that expires on its own: bounded-time ownership that survives crashes and partitions, given bounded clock drift and fencing tokens on writes.›Write-ahead logstorage: Append each change to a checksummed sequential log and fsync it before touching data pages; the basis of crash durability in nearly every database.›Health checkingsystems: Decide per backend whether to route to it using probes and real-traffic errors, with consecutive-count hysteresis, capped ejection and a panic fallback.›Sparse direct solvernumerics: Solve sparse Ax = b exactly by reordering, symbolic analysis, numeric LLᵀ/LU and triangular solves; fill-in, not flops per entry, decides the cost.›Explicit Eulernumerics: Step an ODE forward by its current slope, y += h·f(t, y); first-order, one evaluation per step, the baseline every other integrator is measured against.›Thomas tridiagonal solvernumerics: O(n) tridiagonal linear solve used in implicit finite-difference and spline schemes+ 7 moreFencing tokensdistributed: A number that grows with every lock grant and is checked by the protected resource, so a paused ex-holder's late write is rejected.›CRC32C checksumshardware-os: The Castagnoli CRC-32 with dedicated instructions on x86 (SSE4.2) and ARMv8. It is the standard fast integrity check for storage blocks, logs and network frames.›fsync, O_DSYNC and O_DIRECThardware-os: What fsync, fdatasync, O_DSYNC, O_DIRECT and F_FULLFSYNC really guarantee on Linux and macOS, and the exact call sequences for crash-safe files.›Fill-reducing orderingnumerics: Permute a sparse symmetric matrix before Cholesky/LU so the factor has few new nonzeros; minimum degree, nested dissection and RCM trade quality, speed and parallelism.›+ 2 moreSIMD programminghardware-os: Process 4-16 lanes per instruction with AVX2, AVX-512 or NEON via Rust std::arch, with runtime dispatch and a portable fallback.›d-ary heapdata-structures: Array heap with d children per node (d = 4 typical): half the binary heap's depth, siblings in one cache line, faster priority queues.›Graph partitioninggraphs: Split a graph into k balanced parts with few edges between them; multilevel coarsen-partition-refine (METIS, KaHIP) for quality, streaming heuristics (LDG, Fennel) for one-pass scale.›PRNGs (PCG, xoshiro)numerics: Small, fast, statistically strong non-cryptographic generators: PCG32 and xoshiro256**, with seeding, parallel streams and unbiased ranges.›

How it is built

Architecture overview

A dynamic positioning (DP) system holds a ship or a floating rig at a point and a heading, with no anchors, by driving its own propellers and thrusters. A computer reads the position from several independent reference systems (satellite, acoustic, laser and others), the heading from gyrocompasses, and the wind and ship motion from sensors, then commands thrust in surge, sway and yaw so that the vessel stays on station against wind, waves and current (see the overview in Wikipedia). Drill ships, diving and cable ships and crane vessels rely on it, and a loss of position can injure people, so redundancy is part of the design.

Four ideas hold it together. First, estimate before control: the raw position jitters with waves and sensor noise, so an observer combines a ship model with all the reference sensors, separates the slow drift (which thrust must fight) from the wave-frequency motion (which thrust must not chase), and also infers the unmeasured force called "current". Second, control asks for forces, allocation chooses thrusters: the controller outputs a desired force and moment, and a separate step distributes it over many thrusters under limits on power, angle and thruster-to-thruster interaction. Third, redundancy by independent copies and voting: three of each critical sensor and often three computers, so a disagreeing unit can be found and outvoted. Fourth, the failure case is the design case: the equipment class (1, 2 or 3) is defined by what single failure the system must survive, and the worst-case failure analysis decides the architecture.

Parts:

 position references (DGPS, acoustic, laser, taut wire) ─┐
 gyrocompasses (heading) ────────────────────────────────┤  plausibility checks, voting
 motion units (roll, pitch, heave), wind sensors ────────┘            │
                                                                      ▼
                          observer: ship model + weighted references + wave filter
                       (position, heading, velocity, unmeasured "current" force)
                                                                      │ estimate
 operator setpoint ──► controller (feedback + wind feed-forward) ──► force & moment demand
                                                                      ▼
                  thrust allocation (QP: limits, power, forbidden sectors, minimal energy)
                                                                      │ rpm / pitch / azimuth
                                   thruster drives ◄──── fieldbus ◄───┘
                     thruster feedback ──► observer (actual thrust)     DP console: alarms, modes

How the parts fit together

Sensors and reference systems

The system never relies on one position source. Typical references are differential GNSS, hydroacoustic systems with transponders on the seabed, laser-based range and bearing to a nearby target, and a light taut wire to a clump weight on the seabed; heading comes from gyrocompasses, roll, pitch and heave from motion reference units, and wind from anemometers (the Wikipedia overview lists these). Each source reports in its own frame at its own time, so all measurements are brought to the vessel's control point by a time-indexed tree of frames (transform-tree, no page yet) using Rigid-body transforms: an antenna offset from the control point, plus roll and pitch, shifts the reported position, and a pose is rotated with quaternions to avoid singularities. A satellite fix is itself an iterative least-squares solution (pseudorange-least-squares-positioning, no page yet; Newton root finding). Before a measurement reaches the observer it passes quality checks (jump, frozen-signal and noise tests) that use Robust statistics, so a single outlier does not break the check.

State estimator

The observer is the centre of the system. It runs a low-frequency model of the vessel in surge, sway and yaw (mass, damping, thruster forces, wind force) and corrects it with the reference measurements, weighting each by its expected noise, so a precise satellite fix counts more than a coarse acoustic one. Wikipedia's description is the same: the difference between the measured and the predicted position updates the model by Kalman filtering, and that makes it possible to ride through a short loss of all references. The building blocks are the Kalman filter for a linear model and the Extended Kalman filter for a nonlinear one (heading enters through rotation). A well-known alternative with a stability proof is the passive nonlinear observer (Fossen and Strand 1999, tested on a supply vessel, see Sources).

Two separations make the estimate useful:

  • Wave filtering. Waves move the ship at wave frequencies, which are much faster than the vessel's slow drift. If the controller reacted to that motion, thrusters would constantly work against the waves, wasting energy and wearing the drives. The observer therefore treats the wave-frequency part as a separate state or filters it out with notch or band-stop filters (IIR and FIR filters, biquad sections: biquad-filters, no page yet). The dominant wave frequency can be estimated from the measured motion with a Fast Fourier transform.
  • Unmeasured forces. Current, second-order wave drift and model errors are lumped into a slowly varying force bias that the observer estimates; Wikipedia notes the same, that forces not attributable to direct measurement are labelled "current". The controller uses the bias as feed-forward.

Model parameters come from design data and sea trials, refined by system-identification (no page yet) and nonlinear fitting (levenberg-marquardt, no page yet).

Controller

The controller turns the position and heading error and the estimated velocity into a force and moment demand. Simple systems use a PID controller per axis (still in use, per the same overview); modern systems use model-based control with feed-forward from the wind sensors, which "anticipates gusts before the ship is blown off position". Model predictive control is the option when constraints matter: limited thrust, a heading limit, or a planned move to a new position. Gain scheduling (gain-scheduled-control-laws, no page yet) changes the gains with sea state and mode (station keeping, low-speed tracking, joystick). Model prediction uses Runge-Kutta 4 or, in a cheap loop, Explicit Euler. The loop runs at a fixed period (Fixed-rate control loop), because time-step jitter corrupts the velocity estimate. The contract with the allocator is three numbers per cycle: surge force, sway force and yaw moment.

Thrust allocation

A vessel has more thrusters than degrees of freedom (azimuth thrusters, tunnel thrusters, main propellers, rudders), so there are many ways to produce the demanded force. The allocator picks the one that satisfies the demand while minimising energy, keeping within limits: maximum thrust per unit, rate limits on pitch and azimuth angle, forbidden sectors where one thruster's wash hits another, and the power that the generators can supply. Written out, this is a constrained quadratic program (quadratic-programming, no page yet; the mixing matrices of control-allocation-mixing, no page yet): minimise a weighted sum of thrust squares and slack on the demand, subject to linear bounds. The method is surveyed in Johansen and Fossen's control allocation survey. Solvers are an Interior-point method or an active-set method; the linear systems inside use a Sparse direct solver after a Fill-reducing ordering on Sparse matrices (CSR); L-BFGS fits box-constrained variants. Warm starting from the last cycle's solution is the central trick, since consecutive demands are close. If the demand exceeds the available thrust, the allocator scales it by a defined priority, usually heading before position, so the vessel does not spin while chasing position.

Thruster and I/O layer

Set-points go to the thruster drives (rpm, pitch, azimuth angle) and feedback returns the actual thrust state, which the observer needs for its model. The links are deterministic fieldbuses (real-time-fieldbus, no page yet) or Modbus (modbus-protocol, no page yet) for slower devices, with time-triggered scheduling of tasks and messages (time-triggered-scheduling, no page yet), so a late frame is a detected fault. Inside the controller, the I/O and control tasks exchange data through a lock-free SPSC ring buffer, whose correctness depends on Memory ordering; False sharing and CPU caches and memory hierarchy explain why a naively shared struct causes jitter; DMA (dma-transfers, no page yet) moves sensor frames without CPU work, and PWM generation drives small actuators. Filters and matrix products use SIMD programming.

Redundancy and fault handling

IMO guidance, as summarised by Wikipedia, defines three equipment classes. Class 1 has no redundancy (a single fault can lose position). Class 2 must not lose position from a single fault of an active component (generators, thrusters, switchboards, valves) but may after failure of a static one (cables, pipes). Class 3 must also survive fire or flood in one compartment. The text goes on to say that at least three position reference systems should be used so voting logic can find the failing one, and that Class 3 ships have three DP control computers, three gyrocompasses, three motion units and three wind sensors. A single fault that damages redundancy and cannot be fixed at once means the operation should be abandoned.

Mechanisms behind this:

  • Voting. With three sources, a faulty one is the outlier (redundancy-voting, no page yet; 2-out-of-3). The observer weights references by variance, and a reference far from the others is rejected and flagged.
  • Computer redundancy. Several independent controllers run in parallel with an online and standby role. A standby copy shadows the primary's state and takes over when the primary goes silent (Hot-standby redundancy, Primary-backup replication). Only one may command the thrusters at a time, which is a lease problem (Leases): the primary's authority expires unless renewed, and a stale primary's output is refused by the I/O layer by epoch number (Fencing tokens). Failure detection uses heartbeats (Health checking) and each unit has a Watchdog timer.
  • Modes. The system's states (off, standby, manual, auto position, auto track, degraded) form a Hierarchical state machine; a fault moves it down to a defined degraded state, not to an undefined one.
  • Independent monitor. A separate checker (safety-monitor-architecture, no page yet) verifies the commands against limits and forces a safe state; a Memory protection unit separates safety-critical tasks from the rest, and a counter plus CRC on every message over a shared network detects loss or repetition (end-to-end-protection-e2e, no page yet). Faults are classified and acted on by fault-detection-isolation-recovery (no page yet).

Safety analysis

The class is proved, not claimed. A failure mode and effects analysis (FMEA) traces each component's failure to its effect on the vessel's ability to keep position, and a worst-case failure design intent defines the single largest loss the rest must survive (for example the loss of a whole thruster room). The logical side is a Fault tree analysis: the top event "loss of position" is expressed as AND/OR over component failures, with common-cause failures (one power bus, one network, one software bug in all computers) as shared leaves. Binary decision diagrams evaluate such trees exactly even when components appear in many branches, and graph traversal (BFS and DFS) finds the sets of components that fail together. The consequence for software: identical software on three computers is a common-cause risk, so independent monitors and whole-vessel simulation testing are needed.

Operator interface and logging

The operator sees a console with alarms, modes and a position plot. Without discipline, a single fault floods the screen: Alarm management groups causes, adds delay and deadband, and keeps a few actionable alarms; debouncing-throttling (no page yet) stops chatter from a noisy sensor. Event and sensor logs are written with a Write-ahead log and checksums (CRC32C checksums), and flushed with the guarantees described in fsync, O_DSYNC and O_DIRECT, because the log is the evidence after an incident. The marine contractors' association IMCA runs a free DP incident database.

Data and control flow

One control cycle

  1. Sensors deliver measurements with time stamps: references, heading, motion, wind, thruster feedback.
  2. Each is checked for plausibility, converted to the vessel's control point, and compared with the other sources by the voting logic.
  3. The observer predicts the state from its model and last thrust, then corrects it with the accepted measurements, weighted by their noise; the wave component is removed from the low-frequency estimate and the force bias is updated.
  4. The controller computes the force and moment demand from the error, the velocity and the wind feed-forward.
  5. The allocator solves the constrained problem (warm-started), applies power limits, and produces rpm, pitch and angle set-points.
  6. The set-points are sent over the fieldbus; the monitor checks them against limits; drive feedback comes back for the next cycle.
  7. The cycle result is shown to the operator and logged.

A position reference fails

  1. The jump or noise test or the voter marks one source as suspect; the observer lowers its weight to zero.
  2. If enough references remain, control continues with an alarm; the operator is informed which reference was lost.
  3. If too few remain, the observer rides on its model for a limited time while the system warns; the operation stops if no reference returns.
  4. The reference is readmitted only after it passes the checks for a defined time.

Scaling

  1. Thrust allocation is the heaviest numeric step per cycle. Levers: warm starts, exploiting the sparse structure, a smaller problem (fewer constraints), a fixed iteration cap with a fall-back to the last feasible solution.
  2. Sensor and thruster count grows estimator and allocator. Levers: fixed-size matrices, SIMD, no allocation in the loop.
  3. Timing is the real limit: a missed deadline is a fault. Levers: fixed-period scheduling, lock-free hand-off between tasks, pinning the control task to a core, a hardware watchdog.
  4. Redundancy cost grows with class. Lever: choose the class by the risk of the operation, not by the ship.

Failure modes

FailureSymptomCauseFix
Drift-offvessel slowly leaves position with thrusters lowloss of references or insufficient thrust in weatheralarms with margin, capability analysis, abandon early
Drive-offvessel moves away with high thrustwrong or frozen reference accepted, wrong sign, bad commandplausibility checks, voting, independent monitor on commands
Chasing wavesthrusters surge constantly, high fuel usewave filter mistuned, wave frequency changedadaptive wave-frequency estimation, tune notch filters
Reference biasposition offset, vessel holds the wrong spotone reference has a systematic error, others weighted too lowcross-checks between references, variance-based weighting, lock-out
Allocation saturationdemanded force not produced, yaw runs awaythrust limit hit, forbidden sector, power limitpriority to heading, power-aware limits, warnings before saturation
Dual-primary controllerstwo computers command thrusterssplit brain after a network faultsingle authority with leases and epoch numbers, I/O refuses stale epochs
Common-cause software faultall computers fail the same wayidentical software and the same bad inputindependent monitor, diverse implementation of checks, injection tests
Alarm floodoperator cannot see the real faultone root cause triggers many alarmsgrouping, suppression of consequential alarms, priorities
Timing overrunjitter in thrust, observer instabilitya task exceeds its slotfixed schedule, budgets per task, watchdog

Real implementations

DP systems from the vendors (for example Kongsberg, Wärtsilä, Marine Technologies, Navis Engineering) are proprietary and certified by classification societies. Open material covers modelling, estimation and allocation.

namewhat it isrepolicencenotes
Kongsberg K-Pos, Wärtsilä DP, Marine Technologies DPcommercial DP systems——proprietary
Marine Systems Simulator (MSS)MATLAB/Octave library for marine control; includes DP demo models (passive observer DP, semisub DP system, thruster models) and a quadratic programming examplecybergalactic/MSSMITaccompanies Fossen's handbook; file list read from the repo
Python Vehicle SimulatorPython companion to MSS with models of AUVs, surface vehicles and ships, including a supply vessel with tunnel thrusters and main propellerscybergalactic/PythonVehicleSimulatorMITuseful for prototypes
OSQPoperator-splitting solver for convex quadratic programsosqp/osqpApache-2.0a QP solver suited to the allocation step

Sources

  • T. I. Fossen and J. P. Strand, Passive nonlinear observer design for ships using Lyapunov methods: full-scale experiments with a supply vessel, Automatica, 1999. doi
  • T. A. Johansen and T. I. Fossen, Control allocation: a survey, Automatica, 2013. doi
  • Dynamic positioning (Wikipedia): reference systems, equipment classes, redundancy requirements and control overview, read for this page.
  • IMCA: DP incident database (site listing only).
  • Repositories in the table above (README and file list read for MSS; licences from the GitHub API).

Similar systems

Share the most building blocks with this one.