|
akreon-control
Optimal and robust control and state estimation in C++26.
|
Hinf State Feedback. More...
#include <hinf_state_feedback.hpp>
Public Types | |
| using | Model = linalg::remove_cvref_t< SFModel > |
| extracting alias and types | |
| using | T = plant_type_t< Model > |
| using | QMat = linalg::Matrix< T, StateDim, StateDim > |
| using | YMat = linalg::Matrix< T, InputDim, StateDim > |
| using | KMat = linalg::Matrix< T, InputDim, StateDim > |
| using | DecVarSpace = linalg::RowVector< T, DecVarDim > |
Public Member Functions | |
| template<convex::AtomLike DecVar> | |
| constexpr auto | operator() (const SFModel &model, const DecVar &Z_hat, T margin=1e-6) const |
| operator overload to form Hinf state feedback | |
| template<convex::AtomLike DecVar> | |
| constexpr auto | apply (const SFModel &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 SFModel &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 | K (const QMat &Q, const YMat &Y) const |
| K. | |
Static Public Attributes | |
| static constexpr std::size_t | StateDim = plant_traits<Model>::StateDim |
| static constexpr PortRole | ExogenousPortRole = PortRole::EXOGENOUS |
| static constexpr std::size_t | InputDim = plant_traits<Model>::ControlDim |
| static constexpr std::size_t | ExogenousDim = plant_traits<Model>::ExogenousDim |
| static constexpr std::size_t | OutputDim = plant_traits<Model>::PerformanceDim |
| static constexpr std::size_t | QDim = StateDim * (StateDim + 1) / 2 |
| static constexpr std::size_t | YDim = InputDim * StateDim |
| static constexpr std::size_t | GammaDim = 1 |
| static constexpr std::size_t | DecVarDim = QDim + YDim + GammaDim |
Hinf State Feedback.
We seek a state-feedback gain K s.t. L2 gain sup_{||w||_2 = 1} = ||z||_2 = sup_{||w||_2!=0}frac{||z||_2}{||w||_2}
of the CL system is less than an arbitrary gamma
L2 gain for LTI is equal to H_infinity norm of the corresponding TF. exists K s.t. L2 gain of an LTI system is less than gamma if the inverse BRL Lyapunov variable Q > 0. xdot = A x + B_xw w + B_xu u z = C_zx x + D_zw w + D_zu u y = C_yx x + D_yw w + D_yu u
Plant = [ A B_xw B_xu ] [ C_zx D_zw D_zu ] [ C_yx D_yw D_yu ]
let u = K x
xdot = (A + B_xu K) x + B_xw w z = (C_zx + D_zu K) x + D_zw w
A_cl = A + B_xu K B_cl = B_xw C_cl = C_zx + D_zu K D_cl = D_zw
Certifies ||T_zw||_infinity < gamma where T_zw is the complementary sensitivity TF from w to z
General BRL form with Lyapunov variable S > 0: [ (A_cl^T S + S A_cl) (S B_xw) C_cl^T ] < 0 [ (B_xw^T S) (-gamma I) D_zw^T ] [ C_cl D_zw -gamma I ]
Hinf synthesis decision variables: Q : n x n, inverse BRL Lyapunov variable Q = S^{-1} Y : m_u x n, lifted feedback product Y = K Q K : m_u x n gamma : scalar induced L2-gain bound DecVar = [svec(Q); vec(Y); gamma]
Objective: min gamma
We have a bilinear term in K Q, so let Y = K Q where K = Y Q^-1 [ A Q + Q A^T + B_xu Y + Y^T B_xu^T B_xw (C_zx Q + D_zu Y)^T ] < 0 [ B_xw^T (-gamma I) D_zw^T ] [ C_zx Q + D_zu Y D_zw (-gamma I) ]
Convex problem: min gamma s.t. Q > 0 BRL(Q, Y, gamma) < 0
Full decision space: QDim = n(n + 1) / 2 YDim = m_u n GammaDim = 1 DecVarDim = QDim + YDim + GammaDim DecVar in R^DecVarDim
Shape checks: A Q, Q A^T, B_xu Y, Y^T B_xu^T : n x n B_xw : n x m_w C_zx Q + D_zu Y : p_z x n D_zw : p_z x m_w 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 96 of file hinf_state_feedback.hpp.
| using control::HinfStateFeedback< SFModel >::DecVarSpace = linalg::RowVector<T, DecVarDim> |
Definition at line 117 of file hinf_state_feedback.hpp.
| using control::HinfStateFeedback< SFModel >::KMat = linalg::Matrix<T, InputDim, StateDim> |
Definition at line 110 of file hinf_state_feedback.hpp.
| using control::HinfStateFeedback< SFModel >::Model = linalg::remove_cvref_t<SFModel> |
extracting alias and types
Definition at line 98 of file hinf_state_feedback.hpp.
| using control::HinfStateFeedback< SFModel >::QMat = linalg::Matrix<T, StateDim, StateDim> |
Definition at line 108 of file hinf_state_feedback.hpp.
| using control::HinfStateFeedback< SFModel >::T = plant_type_t<Model> |
Definition at line 100 of file hinf_state_feedback.hpp.
| using control::HinfStateFeedback< SFModel >::YMat = linalg::Matrix<T, InputDim, StateDim> |
Definition at line 109 of file hinf_state_feedback.hpp.
|
inlineconstexpr |
apply
| model | (PlantModel) |
| Z_hat | ([svec(Q); vec(Y); gamma]) |
| margin | (PDness) |
Definition at line 144 of file hinf_state_feedback.hpp.
References control::HinfStateFeedback< SFModel >::brl_constraint(), control::is_continuous_v, and control::HinfStateFeedback< SFModel >::q_constraint().
Referenced by control::HinfStateFeedback< SFModel >::operator()().
|
inlineconstexpr |
brl_constraint
PSD constraint on the negated inverse-BRL block: -BRL(Q, Y, 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 200 of file hinf_state_feedback.hpp.
References control::HinfStateFeedback< SFModel >::ExogenousDim, control::is_continuous_v, control::HinfStateFeedback< SFModel >::OutputDim, control::HinfStateFeedback< SFModel >::QDim, control::HinfStateFeedback< SFModel >::StateDim, and control::HinfStateFeedback< SFModel >::YDim.
Referenced by control::HinfStateFeedback< SFModel >::apply().
|
inlineconstexpr |
K.
K = Y Q^{-1}
| Q | inverse BRL Lyapunov variable |
| Y | lifted feedback product Y = K Q |
Definition at line 306 of file hinf_state_feedback.hpp.
References control::is_continuous_v, and control::recover_state_feedback_gain().
|
inlineconstexpr |
objective
min gamma
| Z_hat | (DecVar) |
Definition at line 290 of file hinf_state_feedback.hpp.
References control::is_continuous_v, control::HinfStateFeedback< SFModel >::QDim, and control::HinfStateFeedback< SFModel >::YDim.
|
inlineconstexpr |
operator overload to form Hinf state feedback
| model | (PlantModel) |
| Z_hat | (DecVar) |
| margin | (PDness) |
Definition at line 129 of file hinf_state_feedback.hpp.
References control::HinfStateFeedback< SFModel >::apply(), and control::is_continuous_v.
|
inlineconstexpr |
q_constraint
PSD constraint on the synthesis Lyapunov block: Q >= margin I
| Z_hat | (DecVar) |
| margin | (PDness) |
Definition at line 170 of file hinf_state_feedback.hpp.
References control::is_continuous_v, and control::HinfStateFeedback< SFModel >::QDim.
Referenced by control::HinfStateFeedback< SFModel >::apply().
|
staticconstexpr |
Definition at line 115 of file hinf_state_feedback.hpp.
|
staticconstexpr |
Definition at line 105 of file hinf_state_feedback.hpp.
Referenced by control::HinfStateFeedback< SFModel >::brl_constraint().
|
staticconstexpr |
Definition at line 103 of file hinf_state_feedback.hpp.
|
staticconstexpr |
Definition at line 114 of file hinf_state_feedback.hpp.
|
staticconstexpr |
Definition at line 104 of file hinf_state_feedback.hpp.
|
staticconstexpr |
Definition at line 106 of file hinf_state_feedback.hpp.
Referenced by control::HinfStateFeedback< SFModel >::brl_constraint().
|
staticconstexpr |
Definition at line 112 of file hinf_state_feedback.hpp.
Referenced by control::HinfStateFeedback< SFModel >::brl_constraint(), control::HinfStateFeedback< SFModel >::objective(), and control::HinfStateFeedback< SFModel >::q_constraint().
|
staticconstexpr |
Definition at line 102 of file hinf_state_feedback.hpp.
Referenced by control::HinfStateFeedback< SFModel >::brl_constraint().
|
staticconstexpr |
Definition at line 113 of file hinf_state_feedback.hpp.
Referenced by control::HinfStateFeedback< SFModel >::brl_constraint(), and control::HinfStateFeedback< SFModel >::objective().