|
akreon-control
Optimal and robust control and state estimation in C++26.
|
Hinf State Observer. More...
#include <hinf_state_observer.hpp>
Public Types | |
| using | Model = linalg::remove_cvref_t< ObsModel > |
| extracting alias and types | |
| using | T = plant_type_t< Model > |
| using | QMat = linalg::Matrix< T, StateDim, StateDim > |
| using | WMat = linalg::Matrix< T, StateDim, MeasurementDim > |
| using | LMat = linalg::Matrix< T, StateDim, MeasurementDim > |
| using | DecVarSpace = linalg::RowVector< T, DecVarDim > |
Public Member Functions | |
| template<convex::AtomLike DecVar> | |
| constexpr auto | operator() (const ObsModel &model, const DecVar &Z_hat, T margin=1e-6) const |
| operator overload to form Hinf state observer | |
| template<convex::AtomLike DecVar> | |
| constexpr auto | apply (const ObsModel &model, const DecVar &Z_hat, T margin=1e-6) const |
| apply | |
| template<convex::AtomLike DecVar> | |
| constexpr auto | q_constraint (const DecVar &Z_hat, T margin=1e-6) const |
| q_constraint | |
| template<convex::AtomLike DecVar> | |
| constexpr auto | brl_constraint (const ObsModel &model, const DecVar &Z_hat, T margin=1e-6) const |
| brl_constraint | |
| template<convex::AtomLike DecVar> | |
| constexpr auto | objective (const DecVar &Z_hat) const |
| objective | |
| constexpr auto | L (const QMat &Q, const WMat &W) const |
| L. | |
Static Public Attributes | |
| static constexpr std::size_t | StateDim = plant_traits<Model>::StateDim |
| static constexpr std::size_t | ExogenousDim = plant_traits<Model>::ExogenousDim |
| static constexpr std::size_t | MeasurementDim |
| static constexpr std::size_t | PerformanceDim |
| static constexpr std::size_t | QDim = StateDim * (StateDim + 1) / 2 |
| static constexpr std::size_t | WDim = StateDim * MeasurementDim |
| static constexpr std::size_t | GammaDim = 1 |
| static constexpr std::size_t | DecVarDim = QDim + WDim + GammaDim |
Hinf State Observer.
Given the LTI System with additive disturbance xdot = A x + B_u u + B_w w y = C_y x + D_yw w z_e = C_e e
Observer design hat{xdot} = A hat{x} + B_u u + L(y - C_y hat{x}) e = x - hat{x} edot = (A - L C_y) e + (B_w - L D_yw) w
A_cl = A - L C_y B_cl = B_w - L D_yw C_cl = C_e
Certifies ||T_{wz_e}||_infinity < gamma.
General BRL form with observability Lyapunov variable Q > 0: [ A_cl^T Q + Q A_cl Q B_cl C_cl^T ] < 0 [ B_cl^T Q -gamma I D_ew^T ] [ C_cl D_ew -gamma I ]
Hinf observer synthesis decision variables: Q : n x n, observability Lyapunov variable W : n x p_y, lifted observer product W = Q L L : n x p_y gamma : scalar induced L2-gain bound DecVar = [svec(Q); vec(W); gamma]
Objective: min gamma
We have a bilinear term in Q L, so let W = Q L where L = Q^-1 W.
Convex problem: min gamma s.t. Q > 0 [ A^T Q + Q A - C_y^T W^T - W C_y Q B_w - W D_yw C_e^T ] < 0 [ (Q B_w - W D_yw)^T -gamma I D_ew^T ] [ C_e D_ew -gamma I ]
Full decision space: QDim = n(n + 1) / 2 WDim = n p_y GammaDim = 1 DecVarDim = QDim + WDim + GammaDim DecVar in R^DecVarDim
Shape checks: A^T Q, Q A, C_y^T W^T, W C_y : n x n Q B_w - W D_yw : n x m_w C_e : p_z x n gamma I_w : m_w x m_w gamma I_z : p_z x p_z BRL LMI : (n + m_w + p_z) x (n + m_w + p_z)
Definition at line 80 of file hinf_state_observer.hpp.
| using control::HinfStateObserver< ObsModel >::DecVarSpace = linalg::RowVector<T, DecVarDim> |
Definition at line 102 of file hinf_state_observer.hpp.
| using control::HinfStateObserver< ObsModel >::LMat = linalg::Matrix<T, StateDim, MeasurementDim> |
Definition at line 95 of file hinf_state_observer.hpp.
| using control::HinfStateObserver< ObsModel >::Model = linalg::remove_cvref_t<ObsModel> |
extracting alias and types
Definition at line 82 of file hinf_state_observer.hpp.
| using control::HinfStateObserver< ObsModel >::QMat = linalg::Matrix<T, StateDim, StateDim> |
Definition at line 93 of file hinf_state_observer.hpp.
| using control::HinfStateObserver< ObsModel >::T = plant_type_t<Model> |
Definition at line 84 of file hinf_state_observer.hpp.
| using control::HinfStateObserver< ObsModel >::WMat = linalg::Matrix<T, StateDim, MeasurementDim> |
Definition at line 94 of file hinf_state_observer.hpp.
|
inlineconstexpr |
apply
| model | (PlantModel) |
| Z_hat | ([svec(Q); vec(W); gamma]) |
| margin | (PDness) |
Definition at line 129 of file hinf_state_observer.hpp.
References control::HinfStateObserver< ObsModel >::brl_constraint(), control::is_continuous_v, and control::HinfStateObserver< ObsModel >::q_constraint().
Referenced by control::HinfStateObserver< ObsModel >::operator()().
|
inlineconstexpr |
brl_constraint
PSD constraint on the negated observer BRL block: -BRL(Q, W, gamma) >= margin I
FMat Dim (n+m_w+p_z x n+m_w+p_z)
| model | (PlantModel) |
| Z_hat | (DecVar) |
| margin | (PDness) |
Definition at line 185 of file hinf_state_observer.hpp.
References control::EXOGENOUS, control::HinfStateObserver< ObsModel >::ExogenousDim, control::is_continuous_v, control::MEASUREMENT, control::HinfStateObserver< ObsModel >::PerformanceDim, control::HinfStateObserver< ObsModel >::QDim, control::HinfStateObserver< ObsModel >::StateDim, and control::HinfStateObserver< ObsModel >::WDim.
Referenced by control::HinfStateObserver< ObsModel >::apply().
|
inlineconstexpr |
L.
L = Q^{-1} W
| Q | observability Lyapunov variable |
| W | lifted observer product W = Q L |
Definition at line 289 of file hinf_state_observer.hpp.
References control::is_continuous_v, and control::recover_state_observer_gain().
|
inlineconstexpr |
objective
min gamma
| Z_hat | (DecVar) |
Definition at line 273 of file hinf_state_observer.hpp.
References control::is_continuous_v, control::HinfStateObserver< ObsModel >::QDim, and control::HinfStateObserver< ObsModel >::WDim.
|
inlineconstexpr |
operator overload to form Hinf state observer
| model | (PlantModel) |
| Z_hat | (DecVar) |
| margin | (PDness) |
Definition at line 114 of file hinf_state_observer.hpp.
References control::HinfStateObserver< ObsModel >::apply(), and control::is_continuous_v.
|
inlineconstexpr |
q_constraint
PSD constraint on the observability Lyapunov block: Q >= margin I
| Z_hat | (DecVar) |
| margin | (PDness) |
Definition at line 155 of file hinf_state_observer.hpp.
References control::is_continuous_v, and control::HinfStateObserver< ObsModel >::QDim.
Referenced by control::HinfStateObserver< ObsModel >::apply().
|
staticconstexpr |
Definition at line 100 of file hinf_state_observer.hpp.
|
staticconstexpr |
Definition at line 87 of file hinf_state_observer.hpp.
Referenced by control::HinfStateObserver< ObsModel >::brl_constraint().
|
staticconstexpr |
Definition at line 99 of file hinf_state_observer.hpp.
|
staticconstexpr |
Definition at line 88 of file hinf_state_observer.hpp.
|
staticconstexpr |
Definition at line 90 of file hinf_state_observer.hpp.
Referenced by control::HinfStateObserver< ObsModel >::brl_constraint().
|
staticconstexpr |
Definition at line 97 of file hinf_state_observer.hpp.
Referenced by control::HinfStateObserver< ObsModel >::brl_constraint(), control::HinfStateObserver< ObsModel >::objective(), and control::HinfStateObserver< ObsModel >::q_constraint().
|
staticconstexpr |
Definition at line 86 of file hinf_state_observer.hpp.
Referenced by control::HinfStateObserver< ObsModel >::brl_constraint().
|
staticconstexpr |
Definition at line 98 of file hinf_state_observer.hpp.
Referenced by control::HinfStateObserver< ObsModel >::brl_constraint(), and control::HinfStateObserver< ObsModel >::objective().