Base-Angular-Velocity Ripple Is a Forward-Euler Instability, Not a Control or Singularity Pathology
Statement
The persistent ripple observed in the base angular velocity of the
coordinated free-flying controller is a period-2 (Nyquist) limit cycle produced by integrating
the reduced-impedance loop’s velocity-damping term with explicit forward Euler at a timestep
larger than the loop’s stiffest damping mode can resolve. It is a pure discretization artifact:
the underlying continuous-time loop is unconditionally stable, and the ripple is near-zero-mean so
it integrates out of the configuration (pointing and
coverage are unharmed).
Linearizing the reduced velocity error
about the desired velocity, the damping term dominates the unstable mode (stiffness contributes
, comfortably stable):
Diagonalizing
with decay rates , the continuous solution decays
monotonically. Forward Euler with step replaces this with the scalar recurrence
so the discrete mode is unstable (a growing period-2 cycle, ) exactly when
At a representative near-singular step () the largest decay rate is
, giving . The nominal
sits above the stability limit ();
at () the ripple vanishes.
Why blows up near the singular configuration. Since
,
at full arm extension has large entries, develops a
light mode (small eigenvalue), and grows. With
held at full strength,
grows. The singularity therefore enters through the reduced inertia , not
the damped pseudo-inverse — which is why the obvious lever (raising base damping) makes things
worse: it increases , pushing further past 2.
This exonerates two suspects. The -regularized velocity reconstruction is a passive,
sign-stable SPD map that cannot self-oscillate, and the singularity / conditioning layer
(singularity_threshold_cascade) is downstream of the artifact.
The driver is upstream, in the explicit integration of .
Assumptions
- Free-flying regime (fully-actuated 6-DOF base). The result is about the time-discretization of
the reduced attitude+EE impedance loop, not about momentum conservation or the free-floating GJM
machinery. - The reduced state is and the
loop integrates with explicit
forward Euler at fixed , followed by a configuration step. - Linearization about with the damping term dominating the stiffest mode;
the stiffness contribution () is stable and dropped from the instability
analysis. - is SPD and is SPD, so
has real positive eigenvalues (real, diagonalizable spectrum — no complex damping modes). - Numerical values (, ) are configuration-specific,
measured at with exact and gains from the controller
config (base.derate.gain = false, so the base block runs at full strength). - The velocity clip () does not bind — it is far above the ripple
amplitude — so the limit cycle is bounded by the configuration-dependence of ,
not by saturation.
Proof sketch
Full derivation: omega_b_forward_euler_instability.md.
- Reduce the loop. Write the per-step update ;
linearize about in the error ;
keep the dominant damping term . - Diagonalize and discretize. Spectral decomposition ;
per-mode forward Euler gives . - Read off the stability map. : monotone decay (), decaying
ring (), marginal period-2 (), growing period-2 limit cycle
(). Hence the critical step . - Locate . Trace its growth to blowing up near the
singular configuration via , with fixed. - Numerical confirmation — four independent ways (full table in the derivation):
(i) the dt-independent lag-1 autocorrelation of the dominant data direction flips
between and (period-2 smooth);
(ii) the theory ratio vs , and the discrete-map
dominant eigenvalue (real, period-2) vs ;
(iii) mode alignment theory-vs-data ;
(iv) a causal re-run of the mission at (specomega_ripple_dt010) removed the
ripple exactly as predicted ( amplitude drop, every direction’s autocorr
flipping to ).
The principled fix (deferred — a separate decision with its own baseline re-pin) is to treat the
stiff damping implicitly (backward Euler / IMEX):
gives for all and all — unconditionally stable,
monotone, no timestep bound, no gain re-tuning.
Source / provenance
- Ours — the project’s own numerical finding. Full derivation, code references, and the
four-way confirmation table:
omega_b_forward_euler_instability.md. - Verification script:
validation/omega_b_ripple_mechanism.py; causal re-run spec
omega_ripple_dt010; provenance and verdicts inlogs/logs_Jun21_26/CLAIMS.md(omega_b entries)
andvalidation/INSIGHTS.md. - Code: the forward-Euler velocity step and reduced-inertia live in the GNC
controller andutils/robot.py(cited in the derivation). - Notation: notation.md.
Caveats
- and are configuration-specific
(measured at ); shrinks as the system approaches
singularity, so a single global timestep that is safe in open configurations can violate the bound
near full extension. - The analysis drops the stiffness term (). This is justified at the nominal
operating point but is not a proof for arbitrarily large stiffness gains; with much stiffer
the stiffness mode could itself approach the bound. - The limit-cycle amplitude is bounded by nonlinearity, not by
the velocity clip; if operating conditions push the ripple toward the bounding mechanism —
and the near-zero-mean property that protects pointing — would have to be re-checked. - This note establishes the mechanism and the form of the fix; it does not adopt the
implicit/IMEX integrator, shrink , or lower . Any of those is a separate
change requiring its own baseline re-pin. - The result is about discretization of the coordinated impedance loop and is orthogonal to the
Lyapunov stability of the continuous cascade
(coordinated_control_lyapunov_stability): continuous
stability is necessary but not sufficient for stability under explicit integration.
Related
- Sibling result: coordinated_control_lyapunov_stability —
the continuous-time stability the discrete loop must preserve; this page shows where explicit
integration breaks it. - Sibling result: singularity_threshold_cascade — the conditioning
layer this finding exonerates; the ripple is upstream of scheduling, but
(hence ) is driven by the same near-singular blow-up. - Sibling result: circumcentroidal_decoupling — supplies
, the hat/breve distinction, and the reduced inertia . - Topics: coordinated_control ·
cascaded_systems. - Notation: notation.md.