Skip to content

Implement ZOH + DARE discretization in Rust HInfController #10

@anulum

Description

@anulum

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

  • update_discretization(dt) recomputes fd, kd, ld via ZOH + DARE
  • Gain stability verified for dt range [1e-4, 1e-2]
  • Unit tests cover variable-dt scenarios

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions