alro65
|
a2f3e82f17
|
sprint-9: integration tests + hardening + operator manual
Integration tests (64 new tests, 462 total):
- test_integration_cascade: full cascade closed-loop simulation --
outer PID → inner PID → rudder dynamics → vessel heading; verifies
convergence across small/90°/180° turns, wrap-around, and low speed
- test_integration_ekf_pid: EKF-smoothed heading feeding outer PID;
confirms EKF reduces rudder total-variation vs raw noisy heading
- test_integration_alarm_audit: alarm engine → audit log hash-chain;
verify, tamper detection, cross-session reload, multi-alarm logging
- test_modbus_utils: 38 tests for scale/raw conversion, bounds checking,
heading/rudder helpers, signed int16 two's-complement round-trip
Hardening:
- heading_ekf: guard NaN/inf in update_heading() and update_rot() -- skip
bad measurements silently rather than corrupting filter state
- adaptive_tuner: guard NaN/inf in step() -- ignore corrupt error samples
- modbus_utils.py: new shared module with scale_to_raw, scale_to_raw_signed,
raw_signed_to_scaled, clamp_uint16, validate_holding_write,
heading_deg_to_raw, rudder_deg_to_raw_signed
Documentation:
- docs/operator_manual.md: 15-section operator manual covering safety,
installation, all operating modes, alarm reference, commissioning,
fault-finding, Modbus register summary, and activation/audit log procedure
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-20 03:35:23 -04:00 |
|
alro65
|
45642fda0e
|
sprint-8: EKF + adaptive tuner + HWID + SHA-256 audit hash-chain
- heading_ekf.py: 2-state Kalman filter fusing PGN 127250 heading and
127251 ROT with shortest-arc innovation and symmetric covariance update
- adaptive_tuner.py: gradient-descent outer-loop Kp/Ki adjuster bounded
to ±adaptive_max_deviation_pct; oscillation vs steady-state detection
- hwid.py: HMAC-SHA256 activation token (verify side); hwid_from_mac_words
converts three Modbus uint16 MAC words to 12-char hex HWID
- audit.py: SHA-256 hash-chain -- each JSONL line carries prev_hash and
line_hash; verify_chain() detects tampering, deletion, insertion
- firmware/system/hwid.h+cpp: esp_efuse_mac_get_default wrapper + FNV-32
hash + "AA:BB:CC:DD:EE:FF" formatter
- modbus_registers.yaml + generated .h/.py: HWID_MAC_01/23/45 at
input addrs 9/10/11 (three 16-bit words = 6-byte MAC)
- modbus_slave.cpp: INPUT_HWID_MAC_01/23/45 cases read eFuse MAC
- main.cpp: logs HWID string + FNV-32 hash at boot (activation traceability)
- tests: 72 new tests (audit signing, EKF, adaptive tuner, HWID) -- 398 total
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-05-20 03:07:27 -04:00 |
|