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

Luenberger Observer. More...

#include <luenberger_observer.hpp>

Public Types

using Model = linalg::remove_cvref_t< ObsModel >
 extracting alias and types
 
using T = plant_type_t< Model >
 
using State = plant_state_vec_t< Model >
 
using QMat = linalg::Matrix< T, StateDim, StateDim >
 
using WMat = linalg::Matrix< T, StateDim, OutputDim >
 
using LMat = linalg::Matrix< T, StateDim, OutputDim >
 
using FMat = QMat
 
using ZSpace = linalg::RowVector< T, ZDim >
 
using Fs = linalg::Vector< FMat, ZDim >
 

Public Member Functions

template<convex::AtomLike ZVar>
constexpr auto operator() (const ObsModel &model, const ZVar &Z, T margin=1e-6) const
 operator overload (form luenberger observer)
 
template<convex::AtomLike ZVar>
constexpr auto apply (const ObsModel &model, const ZVar &Z, T margin=1e-6) const
 apply
 
template<convex::AtomLike ZVar>
constexpr auto q_constraint (const ZVar &Z, T margin=1e-6) const
 q_constraint
 
template<convex::AtomLike ZVar>
constexpr auto stability_constraint (const ObsModel &model, const ZVar &Z) const
 stability_constraint
 
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 OutputDim = plant_traits<Model>::MeasurementDim
 
static constexpr std::size_t QDim = StateDim * (StateDim + 1) / 2
 
static constexpr std::size_t WDim = StateDim * OutputDim
 
static constexpr std::size_t ZDim = QDim + WDim
 

Detailed Description

template<ContinuousPlantModelLike ObsModel>
struct control::LuenbergerObserver< ObsModel >

Luenberger Observer.

Given xdot = A x + B u y = C x

design a state observer xhatdot = A xhat + B u + L (y - C xhat)

such that the estimation error e = x - xhat satisfies edot = (A - L C) e and the error dynamics are asymptotically stable (or satisfy the chosen performance certificate).

There exists Q > 0 s.t. A^T Q + Q A - W C - C^T W^T < 0

where W = Q L, and L = Q^{-1} W.

Definition at line 44 of file luenberger_observer.hpp.

Member Typedef Documentation

◆ FMat

template<ContinuousPlantModelLike ObsModel>
using control::LuenbergerObserver< ObsModel >::FMat = QMat

Definition at line 57 of file luenberger_observer.hpp.

◆ Fs

template<ContinuousPlantModelLike ObsModel>
using control::LuenbergerObserver< ObsModel >::Fs = linalg::Vector<FMat, ZDim>

Definition at line 64 of file luenberger_observer.hpp.

◆ LMat

template<ContinuousPlantModelLike ObsModel>
using control::LuenbergerObserver< ObsModel >::LMat = linalg::Matrix<T, StateDim, OutputDim>

Definition at line 56 of file luenberger_observer.hpp.

◆ Model

template<ContinuousPlantModelLike ObsModel>
using control::LuenbergerObserver< ObsModel >::Model = linalg::remove_cvref_t<ObsModel>

extracting alias and types

Definition at line 46 of file luenberger_observer.hpp.

◆ QMat

template<ContinuousPlantModelLike ObsModel>
using control::LuenbergerObserver< ObsModel >::QMat = linalg::Matrix<T, StateDim, StateDim>

Definition at line 54 of file luenberger_observer.hpp.

◆ State

template<ContinuousPlantModelLike ObsModel>
using control::LuenbergerObserver< ObsModel >::State = plant_state_vec_t<Model>

Definition at line 49 of file luenberger_observer.hpp.

◆ T

template<ContinuousPlantModelLike ObsModel>
using control::LuenbergerObserver< ObsModel >::T = plant_type_t<Model>

Definition at line 48 of file luenberger_observer.hpp.

◆ WMat

template<ContinuousPlantModelLike ObsModel>
using control::LuenbergerObserver< ObsModel >::WMat = linalg::Matrix<T, StateDim, OutputDim>

Definition at line 55 of file luenberger_observer.hpp.

◆ ZSpace

template<ContinuousPlantModelLike ObsModel>
using control::LuenbergerObserver< ObsModel >::ZSpace = linalg::RowVector<T, ZDim>

Definition at line 63 of file luenberger_observer.hpp.

Member Function Documentation

◆ apply()

template<ContinuousPlantModelLike ObsModel>
template<convex::AtomLike ZVar>
constexpr auto control::LuenbergerObserver< ObsModel >::apply ( const ObsModel &  model,
const ZVar &  Z,
T  margin = 1e-6 
) const
inlineconstexpr

◆ L()

template<ContinuousPlantModelLike ObsModel>
constexpr auto control::LuenbergerObserver< ObsModel >::L ( const QMat &  Q,
const WMat &  W 
) const
inlineconstexpr

L.

L = Q^{-1} W

Parameters
Q(QMat)
W(lifted luenberger gain W = Q L)
Returns
L

Definition at line 169 of file luenberger_observer.hpp.

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

◆ operator()()

template<ContinuousPlantModelLike ObsModel>
template<convex::AtomLike ZVar>
constexpr auto control::LuenbergerObserver< ObsModel >::operator() ( const ObsModel &  model,
const ZVar &  Z,
T  margin = 1e-6 
) const
inlineconstexpr

operator overload (form luenberger observer)

Parameters
model(StateSpace)
Z(dec var [svec(Q); vec(W)])
Returns
observer synthesis constraints

Definition at line 75 of file luenberger_observer.hpp.

References control::LuenbergerObserver< ObsModel >::apply(), and control::is_continuous_v.

◆ q_constraint()

template<ContinuousPlantModelLike ObsModel>
template<convex::AtomLike ZVar>
constexpr auto control::LuenbergerObserver< ObsModel >::q_constraint ( const ZVar &  Z,
T  margin = 1e-6 
) const
inlineconstexpr

q_constraint

Parameters
Z(dec var [svec(Q); vec(W)])
margin(PD)
Returns
Q constraint as LMI

Definition at line 113 of file luenberger_observer.hpp.

References control::is_continuous_v, control::LuenbergerObserver< ObsModel >::QDim, and control::LuenbergerObserver< ObsModel >::WDim.

Referenced by control::LuenbergerObserver< ObsModel >::apply().

◆ stability_constraint()

template<ContinuousPlantModelLike ObsModel>
template<convex::AtomLike ZVar>
constexpr auto control::LuenbergerObserver< ObsModel >::stability_constraint ( const ObsModel &  model,
const ZVar &  Z 
) const
inlineconstexpr

stability_constraint

Parameters
model(PlantModel)
Z(dec var [svec(Q); vec(W)])
Returns
stability constraint as LMI

Definition at line 135 of file luenberger_observer.hpp.

References control::is_continuous_v, control::LuenbergerObserver< ObsModel >::QDim, and control::LuenbergerObserver< ObsModel >::WDim.

Referenced by control::LuenbergerObserver< ObsModel >::apply().

Member Data Documentation

◆ OutputDim

template<ContinuousPlantModelLike ObsModel>
constexpr std::size_t control::LuenbergerObserver< ObsModel >::OutputDim = plant_traits<Model>::MeasurementDim
staticconstexpr

Definition at line 52 of file luenberger_observer.hpp.

◆ QDim

template<ContinuousPlantModelLike ObsModel>
constexpr std::size_t control::LuenbergerObserver< ObsModel >::QDim = StateDim * (StateDim + 1) / 2
staticconstexpr

◆ StateDim

template<ContinuousPlantModelLike ObsModel>
constexpr std::size_t control::LuenbergerObserver< ObsModel >::StateDim = plant_traits<Model>::StateDim
staticconstexpr

Definition at line 51 of file luenberger_observer.hpp.

◆ WDim

template<ContinuousPlantModelLike ObsModel>
constexpr std::size_t control::LuenbergerObserver< ObsModel >::WDim = StateDim * OutputDim
staticconstexpr

◆ ZDim

template<ContinuousPlantModelLike ObsModel>
constexpr std::size_t control::LuenbergerObserver< ObsModel >::ZDim = QDim + WDim
staticconstexpr

Definition at line 61 of file luenberger_observer.hpp.


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