Skip to content

Support observer-only constant disturbances in LQGProblem - #159

Merged
baggepinnen merged 2 commits into
masterfrom
feat/offset-free-lqg
Oct 22, 2026
Merged

baggepinnen merged 2 commits into
masterfrom
feat/offset-free-lqg

Conversation

@baggepinnen

Copy link
Copy Markdown
Member

Constant input disturbances introduce uncontrollable integrators in the observer model, so solving the state-feedback Riccati equation on the complete model fails. Add disturbance_indices and disturbance_input_indices to LQGProblem: feedback is designed on the physical subsystem and the full gain includes explicit matched-disturbance compensation. The Kalman filter uses the augmented model. An input mapping can also be inferred when it is unique and exact.

Physical loop analysis and reference gain compensation exclude the autonomous disturbance variables; lft and performance mappings retain the disturbance channels. This includes the discrete-time equilibrium formula, direct feedback realizations for G_PS/G_CS, correction of the extended-controller reference connection sign, and an unambiguous explicit-gain observer-controller method. The disturbance-model documentation uses exact integrators. Declare version 0.4.54 for downstream compatibility requirements.

Supports autonomous constant disturbances matched to control inputs, without direct disturbance contributions to measured or performance outputs. Unmatched disturbances and ambiguous inferred actuator allocations produce explicit errors.

Resolves RobustAndOptimalControl.jl #158.

Validation on Julia 1.13.1:

  • 207 LQG/LQI checks passed, including 70 new checks for continuous/discrete designs, MIMO variable ordering, input allocation, disturbance rejection, reference tracking, and validation errors.
  • All executable examples in docs/src/lqg_disturbance.md passed.
  • Downstream DyadControlSystems LQG analysis: 141 checks passed using this checkout.

Host: demeter2; Codex session: 01a162f3-79c4-7c40-bd9c-5ccb3964ce56; working directory: /home/baggepinnen/.julia/dev/RobustAndOptimalControl.

@codecov-commenter

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.00000% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 91.81%. Comparing base (50a8f18) to head (615ebd4).

Files with missing lines Patch % Lines
src/lqg.jl 96.00% 3 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##           master     #159   +/-   ##
=======================================
  Coverage   91.81%   91.81%           
=======================================
  Files          20       20           
  Lines        3078     3128   +50     
=======================================
+ Hits         2826     2872   +46     
- Misses        252      256    +4     
Flag Coverage Δ
unittests 91.81% <96.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@baggepinnen
baggepinnen merged commit 12cec1d into master Oct 22, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LQGProblem: offset-free LQG with an integrating disturbance state in the observer model only

2 participants