c432fc3725
esp32_sim.py — Sea state engine
• _BEAUFORT_TABLE (B0–B8): wave torque, swell, noise, wind-bias, period
• set_sea_state(beaufort, seed): injects external_yaw_torque into
VesselHeadingSimulator each tick (sine wave + swell + white noise +
weather-helm drift). B4≈±3° heading osc, B6 disengages correctly.
• tune_response(rudder_kp, counter_rudder, max_rudder_deg): runtime
gain adjustment — simulates the classic Robertson "RUDDER" /
"COUNTER RUDDER" / working-rudder-limit knobs.
• _compute_wave_torque(): composed 4-component disturbance model.
sim_protocol.py — 7 new demanding test cases
TC-08 Beaufort 4, 5 min max dev 10.4°, RMS 5.6°, no disengage
TC-09 Beaufort 6 operational limit — SEVERE alarm fires at 35.8 s
(correct safety behaviour; documents factory-gain limit)
TC-10 Low speed 2 kn, +10° τ_outer≈113 s, settles 0.83° < 3°
TC-11 180° reversal no SEVERE (tracking_settled guard), 1.18°
TC-12 Rapid setpoint stress 5 changes in 100 s, final error 1.17°
TC-13 Gain boost in B5 1.70× RMS improvement (12.3°→7.2°),
demonstrates RUDDER+COUNTER RUDDER tuning effect
TC-14 B7 spike (30 s) SEVERE fires correctly, re-engages,
recovers to 0.0° within 90 s of calm return
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>