|
FhSim
3.1.0
Marine systems simulation
|
| ID | 0033 |
| Class | KNOWN-LIMITATION |
| Severity | 1 |
| Status | ready |
| Models | Auv/Vehicle |
| Found | 2026-09-22 |
src/auv/Auv.cpp, Auv::ComputeThrust:
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.
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.
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,
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.
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.
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.