It is easy to stand up a simulation environment that looks correct and is useless for catching real bugs. The gap is almost always fidelity, not functionality.

Where Fidelity Matters Most

For underwater vehicles specifically, three areas tend to dominate whether a simulation is trustworthy:

  • Sensor noise models — clean, noiseless sensor output in simulation hides state estimation bugs that only appear with real noise characteristics.
  • Communication constraints — acoustic links are low-bandwidth and high-latency; simulating them as instantaneous hides timing bugs.
  • Hydrodynamics — even a coarse drag and added-mass model catches control tuning issues that a kinematic-only model cannot.

A Minimal Noise Model

Even a simple additive Gaussian noise model on DVL and IMU channels is far better than none:

import random

def add_noise(value, sigma):
    return value + random.gauss(0, sigma)

This alone was enough to surface a state estimator bug that only manifested once measurement noise was non-zero.

Practical Guidance

Treat the simulator as a test environment with the same rigor as unit tests: version it, keep it reproducible, and treat a simulation failure as seriously as a hardware failure.

This practice directly informed the Ocean Simulation Environment project and continues to shape how new navigation code is validated before hardware testing.