Skip to content

Notch closed-loop hover is a non-deterministic oracle: chaotically fragile under rotor-line vibration (kernel-agnostic; mechanism unknown) #290

Description

@avrabe

Summary

The falcon-core test notch_reduces_rate_loop_noise_under_rotor_vibration (NOTCH-P01 closed-loop, v1.122) is a non-deterministic oracle and is now #[ignore]d. Enabling the RPM notch destabilizes the analytic-plant hover under moderate rotor-line vibration, chaotically and non-monotonically, and the flip is not kernel-specific. The robust NOTCH-P01 evidence (relay-notch frequency-domain suite: ≥20 dB attenuation, sweep-within-3 dB, <10° crossover phase, bit-exact bypass, line rejection) is unaffected and still passing.

Surfaced by the v1.125 f32-kernel work (a ≤2 ulp trig change flipped the test), but the kernel is exonerated — see the sweep.

Evidence (SimBackend hover, 250 Hz, rotor_vib = per-motor gyro line amplitude; final tilt, rad)

vib libm off libm on f32-kernel off f32-kernel on
0.2 0.10 0.56 0.10 0.055
0.3 0.09 0.10 0.10 2.32
0.4 0.80 1.06 0.09 1.62
0.5 0.00 0.10 0.09 0.78
0.6 3.14 0.45 0.00 0.07
0.8 0.00 0.00 0.09 1.89

Both kernels flip; libm flips notch-OFF at 0.4 and 0.6 (bold = tilt ≥ 0.25 rad, i.e. departed hover). The v1.122 pass at vib=0.8 (libm 0.00/0.00) was a lucky-stable point. Thrash at stable low injections shows the notch gives no motor-thrash reduction in this plant (notch-on ≈ notch-off, occasionally slightly worse) — the plant's LPF+ADRC already reject the line.

What has been ruled out

  • Kernel accuracy: the f32 kernels conform to libm ≤2 ulp over |x|≤128 (4M-point sweep), pass totality + Pythagorean-identity; not the cause.
  • Center-frequency chasing the thrashing eRPM (parametric excitation): tried a one-pole low-pass (12 Hz) on the tracked frequency — did NOT fix it. Mechanism is deeper.

The discriminating experiment (do this first)

A filter with the measured <10° crossover phase cannot destabilize its loop via steady-state response — yet it does. So the <10° unit test isn't capturing the real closed-loop effect. Run notch-on at CONSTANT RPM (static coefficients, no vibration) + a small attitude disturbance:

  • stable → it's a transient / time-varying-coefficient (retune-per-tick) problem;
  • unstable → the <10° phase figure understates the real margin (full 4-motor-bank stacking, or Direct-Form-1 state under continuous drive).

Either answer is a real result. "It's chaotic" is a description, not a root cause.

Do NOT

  • Re-enable the test or lower vib to green CI until root-caused.
  • Correct/demote FV-FALCON-NOTCH-001 until the root-cause lands (its own two-commit traceability action).

Relates to #270 (gz hover limit-cycle — same fragility family). NOTCH-P01 closed-loop validation ultimately belongs on the real X500 airframe / a faithful gz vibration spectrum.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions