akreon-control
Optimal and robust control and state estimation in C++26.
Loading...
Searching...
No Matches
control::HinfStateFeedback< SFModel > Struct Template Reference

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
 

Detailed Description

template<ContinuousPlantModelLike SFModel>
struct control::HinfStateFeedback< SFModel >

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.

Member Typedef Documentation

◆ DecVarSpace

template<ContinuousPlantModelLike SFModel>
using control::HinfStateFeedback< SFModel >::DecVarSpace = linalg::RowVector<T, DecVarDim>

Definition at line 117 of file hinf_state_feedback.hpp.

◆ KMat

template<ContinuousPlantModelLike SFModel>
using control::HinfStateFeedback< SFModel >::KMat = linalg::Matrix<T, InputDim, StateDim>

Definition at line 110 of file hinf_state_feedback.hpp.

◆ Model

template<ContinuousPlantModelLike SFModel>
using control::HinfStateFeedback< SFModel >::Model = linalg::remove_cvref_t<SFModel>

extracting alias and types

Definition at line 98 of file hinf_state_feedback.hpp.

◆ QMat

template<ContinuousPlantModelLike SFModel>
using control::HinfStateFeedback< SFModel >::QMat = linalg::Matrix<T, StateDim, StateDim>

Definition at line 108 of file hinf_state_feedback.hpp.

◆ T

template<ContinuousPlantModelLike SFModel>
using control::HinfStateFeedback< SFModel >::T = plant_type_t<Model>

Definition at line 100 of file hinf_state_feedback.hpp.

◆ YMat

template<ContinuousPlantModelLike SFModel>
using control::HinfStateFeedback< SFModel >::YMat = linalg::Matrix<T, InputDim, StateDim>

Definition at line 109 of file hinf_state_feedback.hpp.

Member Function Documentation

◆ apply()

template<ContinuousPlantModelLike SFModel>
template<convex::AtomLike DecVar>
constexpr auto control::HinfStateFeedback< SFModel >::apply ( const SFModel &  model,
const DecVar &  Z_hat,
T  margin = 1e-6 
) const
inlineconstexpr

apply

Parameters
model(PlantModel)
Z_hat([svec(Q); vec(Y); gamma])
margin(PDness)
Returns
Hinf synthesis constraints

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()().

◆ brl_constraint()

template<ContinuousPlantModelLike SFModel>
template<convex::AtomLike DecVar>
constexpr auto control::HinfStateFeedback< SFModel >::brl_constraint ( const SFModel &  model,
const DecVar &  Z_hat,
T  margin = 1e-6 
) const
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)

Parameters
model(PlantModel)
Z_hat(DecVar)
margin(PDness)
Returns
BRL constraint as LMI

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().

◆ K()

template<ContinuousPlantModelLike SFModel>
constexpr auto control::HinfStateFeedback< SFModel >::K ( const QMat &  Q,
const YMat &  Y 
) const
inlineconstexpr

K.

K = Y Q^{-1}

Parameters
Qinverse BRL Lyapunov variable
Ylifted feedback product Y = K Q
Returns
K

Definition at line 306 of file hinf_state_feedback.hpp.

References control::is_continuous_v, and control::recover_state_feedback_gain().

◆ objective()

template<ContinuousPlantModelLike SFModel>
template<convex::AtomLike DecVar>
constexpr auto control::HinfStateFeedback< SFModel >::objective ( const DecVar &  Z_hat) const
inlineconstexpr

objective

min gamma

Parameters
Z_hat(DecVar)
Returns
gamma objective

Definition at line 290 of file hinf_state_feedback.hpp.

References control::is_continuous_v, control::HinfStateFeedback< SFModel >::QDim, and control::HinfStateFeedback< SFModel >::YDim.

◆ operator()()

template<ContinuousPlantModelLike SFModel>
template<convex::AtomLike DecVar>
constexpr auto control::HinfStateFeedback< SFModel >::operator() ( const SFModel &  model,
const DecVar &  Z_hat,
T  margin = 1e-6 
) const
inlineconstexpr

operator overload to form Hinf state feedback

Parameters
model(PlantModel)
Z_hat(DecVar)
margin(PDness)
Returns
Hinf LMIs

Definition at line 129 of file hinf_state_feedback.hpp.

References control::HinfStateFeedback< SFModel >::apply(), and control::is_continuous_v.

◆ q_constraint()

template<ContinuousPlantModelLike SFModel>
template<convex::AtomLike DecVar>
constexpr auto control::HinfStateFeedback< SFModel >::q_constraint ( const DecVar &  Z_hat,
T  margin = 1e-6 
) const
inlineconstexpr

q_constraint

PSD constraint on the synthesis Lyapunov block: Q >= margin I

Parameters
Z_hat(DecVar)
margin(PDness)
Returns
Q constraint as LMI

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().

Member Data Documentation

◆ DecVarDim

template<ContinuousPlantModelLike SFModel>
constexpr std::size_t control::HinfStateFeedback< SFModel >::DecVarDim = QDim + YDim + GammaDim
staticconstexpr

Definition at line 115 of file hinf_state_feedback.hpp.

◆ ExogenousDim

template<ContinuousPlantModelLike SFModel>
constexpr std::size_t control::HinfStateFeedback< SFModel >::ExogenousDim = plant_traits<Model>::ExogenousDim
staticconstexpr

◆ ExogenousPortRole

template<ContinuousPlantModelLike SFModel>
constexpr PortRole control::HinfStateFeedback< SFModel >::ExogenousPortRole = PortRole::EXOGENOUS
staticconstexpr

Definition at line 103 of file hinf_state_feedback.hpp.

◆ GammaDim

template<ContinuousPlantModelLike SFModel>
constexpr std::size_t control::HinfStateFeedback< SFModel >::GammaDim = 1
staticconstexpr

Definition at line 114 of file hinf_state_feedback.hpp.

◆ InputDim

template<ContinuousPlantModelLike SFModel>
constexpr std::size_t control::HinfStateFeedback< SFModel >::InputDim = plant_traits<Model>::ControlDim
staticconstexpr

Definition at line 104 of file hinf_state_feedback.hpp.

◆ OutputDim

template<ContinuousPlantModelLike SFModel>
constexpr std::size_t control::HinfStateFeedback< SFModel >::OutputDim = plant_traits<Model>::PerformanceDim
staticconstexpr

◆ QDim

◆ StateDim

template<ContinuousPlantModelLike SFModel>
constexpr std::size_t control::HinfStateFeedback< SFModel >::StateDim = plant_traits<Model>::StateDim
staticconstexpr

◆ YDim

template<ContinuousPlantModelLike SFModel>
constexpr std::size_t control::HinfStateFeedback< SFModel >::YDim = InputDim * StateDim
staticconstexpr

The documentation for this struct was generated from the following file: