Summary
The Rust HInfController::update_discretization() in scpn-control-rs/crates/control-control/src/h_infinity.rs currently uses Euler discretization with LQR-approximated gains. The full ZOH (zero-order hold) + DARE (Discrete Algebraic Riccati Equation) solver is needed for proper H-infinity synthesis.
Requirements
- ZOH discretization:
F_d = expm(A*dt), G_d = A^{-1}(F_d - I)B
- DARE solver via eigendecomposition or Schur factorization
- Requires
ndarray-linalg feature flag (LAPACK dependency)
Current State
Gains are computed at construction time via pole-placement for the 2-state VDE plant. When dt changes, update_discretization() updates cached_dt but does not recompute gains.
Acceptance Criteria
Summary
The Rust
HInfController::update_discretization()inscpn-control-rs/crates/control-control/src/h_infinity.rscurrently uses Euler discretization with LQR-approximated gains. The full ZOH (zero-order hold) + DARE (Discrete Algebraic Riccati Equation) solver is needed for proper H-infinity synthesis.Requirements
F_d = expm(A*dt),G_d = A^{-1}(F_d - I)Bndarray-linalgfeature flag (LAPACK dependency)Current State
Gains are computed at construction time via pole-placement for the 2-state VDE plant. When
dtchanges,update_discretization()updatescached_dtbut does not recompute gains.Acceptance Criteria
update_discretization(dt)recomputesfd,kd,ldvia ZOH + DARE