FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
0033 — Auv thrust does not fall off with speed
ID 0033
Class KNOWN-LIMITATION
Severity 1
Status ready
Models Auv/Vehicle
Found 2026-09-22

Evidence

src/auv/Auv.cpp, Auv::ComputeThrust:

double Auv::ComputeThrust(const double propulsionPower, const double /*surgeSpeed*/) const
{
return m_thrustPerPower * propulsionPower;
}
double m_thrustPerPower
Thrust per watt of propulsion power, N/W.
Definition Auv.h:842
virtual double ComputeThrust(double propulsionPower, double surgeSpeed) const

The thrust is a constant times the commanded propulsion power and ignores the speed it is handed. That is the model the specification asks for, but it is dimensionally wrong: at a fixed shaft power a real propeller delivers roughly P/u at speed, so its thrust falls as the vehicle accelerates and is finite, not infinite, at zero speed.

ThrustPerPower is therefore a single calibration point, not a propeller curve. The default 0.30 N/W is calibrated at the design cruise condition: 9.0 N of hull drag at 1.5 m/s from 30 W of propulsion power, an overall efficiency of about 0.45. The model is accurate near that point and increasingly optimistic away from it — most visibly at a standstill, where it predicts full thrust from full power.

Effect

Acceleration from rest is too brisk, and the terminal speed the vehicle reaches at powers well away from 30 W is wrong in a way no test will catch, because the test derives its expectation from the same relation. tests/Auv_Test.cpp, Auv_SurgeConvergesToTheAnalyticTerminalSpeed, asserts u = sqrt(2 kT P / (rho A_f Cd)), which is the closed form of this thrust law.

For a guidance and survey-coverage study — what the AUV work is for — the error is immaterial: the vehicle spends its mission within a few tenths of a metre per second of cruise. For anything about transients, dash performance or energy at off-design speeds, it is not.

Possible fix

ComputeThrust(propulsionPower, surgeSpeed) is protected virtual and already takes the speed, precisely so that this can be replaced without touching a caller. The usual substitute is a bollard-pull blend,

T = T_bollard / (1 + u / u_ref), T_bollard = k_B * P^(2/3),

reducing to kT * P at the calibration point, which keeps every existing default and regression meaningful. It needs one more parameter (u_ref, or a bollard coefficient) and a note that ThrustPerPower then names the cruise point rather than the whole curve.

Alternatively, an actual open-water propeller curve with a shaft-speed state. That is a much larger change and is not warranted by the survey scenario.

Test that would prove it

A test cannot show the present law is wrong — it is self-consistent. What a fix needs is a test that the replacement still reproduces the calibration point: at 30 W the terminal speed must stay 1.50 m/s, so the existing Auv_SurgeConvergesToTheAnalyticTerminalSpeed keeps passing, while a new case asserts finite thrust at zero speed and a thrust at 3 m/s materially below kT * P.

Risk

Changing the law moves every open-loop Auv trajectory away from cruise and will move any recorded baseline. Doing it after the closed-loop increments land means the speed PID absorbs most of the difference, which is the honest place to judge whether it matters.