- 3.0.2 core module.
|
Computes the linearization of a general non-linear DiscreteControlledSystem using numerical differentiation. More...
#include <DiscreteSystemLinearizer.h>
Public Member Functions | |
DiscreteSystemLinearizer (std::shared_ptr< system_t > nonlinearSystem, bool doubleSidedDerivative=true) | |
control Jacobian type (B) More... | |
DiscreteSystemLinearizer (const DiscreteSystemLinearizer &arg) | |
copy constructor More... | |
virtual | ~DiscreteSystemLinearizer () |
destructor More... | |
DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR > * | clone () const override |
deep cloning More... | |
virtual const state_matrix_t & | getDerivativeState (const state_vector_t &x, const control_vector_t &u, const int n=0) |
get the Jacobian with respect to the state More... | |
virtual const state_control_matrix_t & | getDerivativeControl (const state_vector_t &x, const control_vector_t &u, const int n=0) |
get the Jacobian with respect to the input More... | |
virtual void | getAandB (const state_vector_t &x, const control_vector_t &u, const state_vector_t &x_next, const int n, size_t numSteps, state_matrix_t &A, state_control_matrix_t &B) override |
retrieve discrete-time linear system matrices A and B. More... | |
Public Member Functions inherited from ct::core::DiscreteLinearSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
DiscreteLinearSystem (const ct::core::SYSTEM_TYPE &type=ct::core::SYSTEM_TYPE::GENERAL) | |
default constructor More... | |
virtual | ~DiscreteLinearSystem () |
destructor More... | |
virtual void | propagateControlledDynamics (const state_vector_t &state, const time_t n, const control_vector_t &control, state_vector_t &stateNext) override |
compute the system dynamics More... | |
void | getAandB (const state_vector_t &x, const control_vector_t &u, const int n, state_matrix_t &A, state_control_matrix_t &B) |
Public Member Functions inherited from ct::core::DiscreteControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
DiscreteControlledSystem (const SYSTEM_TYPE &type=SYSTEM_TYPE::GENERAL) | |
default constructor More... | |
DiscreteControlledSystem (std::shared_ptr< DiscreteController< STATE_DIM, CONTROL_DIM, SCALAR >> controller, const SYSTEM_TYPE &type=SYSTEM_TYPE::GENERAL) | |
constructor More... | |
DiscreteControlledSystem (const ControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > &arg) | |
copy constructor More... | |
virtual | ~DiscreteControlledSystem ()=default |
destructor More... | |
void | setController (const std::shared_ptr< DiscreteController< STATE_DIM, CONTROL_DIM, SCALAR >> &controller) |
set a new controller More... | |
void | getController (std::shared_ptr< DiscreteController< STATE_DIM, CONTROL_DIM, SCALAR >> &controller) const |
get the controller instance More... | |
std::shared_ptr< DiscreteController< STATE_DIM, CONTROL_DIM, SCALAR > > | getController () |
get the controller instace More... | |
virtual void | propagateDynamics (const state_vector_t &state, const time_t n, state_vector_t &stateNext) override |
propagates the system dynamics forward by one step More... | |
Public Member Functions inherited from ct::core::DiscreteSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
DiscreteSystem (const SYSTEM_TYPE &type=GENERAL) | |
constructor More... | |
virtual | ~DiscreteSystem () |
desctructor More... | |
virtual void | propagateDynamics (const StateVector< STATE_DIM, SCALAR > &state, const time_t n, StateVector< STATE_DIM, SCALAR > &stateNext)=0 |
propagates the system dynamics forward by one step More... | |
SYSTEM_TYPE | getType () const |
get the type of system More... | |
Public Attributes | |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef DiscreteLinearSystem< STATE_DIM, CONTROL_DIM, SCALAR > | Base |
Public Attributes inherited from ct::core::DiscreteLinearSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef DiscreteControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > | Base |
Public Attributes inherited from ct::core::DiscreteControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef std::shared_ptr< DiscreteControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > > | Ptr |
Protected Attributes | |
std::shared_ptr< system_t > | nonlinearSystem_ |
instance of non-linear system More... | |
DynamicsLinearizerNumDiff< STATE_DIM, CONTROL_DIM, SCALAR, int > | linearizer_ |
instance of numerical-linearizer More... | |
state_matrix_t | dFdx_ |
Jacobian wrt state. More... | |
state_control_matrix_t | dFdu_ |
Jacobian wrt input. More... | |
Protected Attributes inherited from ct::core::DiscreteControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
std::shared_ptr< DiscreteController< STATE_DIM, CONTROL_DIM, SCALAR > > | controller_ |
the controller instance More... | |
Protected Attributes inherited from ct::core::DiscreteSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
SYSTEM_TYPE | type_ |
type of system More... | |
Computes the linearization of a general non-linear DiscreteControlledSystem using numerical differentiation.
This class takes a non-linear DiscreteControlledSystem and computes the linearization around a certain point , .
where
Examples for using the SystemLinearizer (and the Auto-diff Linearizer) can be found in AutoDiffLinearizerTest.cpp
dimension | of state vector |
dimension | of control vector |
SCALAR | underlying scalar type of the system |
typedef DiscreteControlledSystem<STATE_DIM, CONTROL_DIM, SCALAR> ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::system_t |
type of system to be linearized
typedef Base::state_vector_t ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::state_vector_t |
state vector type
typedef Base::control_vector_t ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::control_vector_t |
control vector type
typedef Base::state_matrix_t ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::state_matrix_t |
state Jacobian type (A)
typedef Base::state_control_matrix_t ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::state_control_matrix_t |
|
inline |
control Jacobian type (B)
default constructor
Initializes the linearizer with a non-linear system.
nonlinearSystem | non-linear system to linearize |
doubleSidedDerivative | if true, double sided numerical differentiation is used |
References ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::dFdu_, and ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::dFdx_.
|
inline |
copy constructor
|
inlinevirtual |
destructor
|
inlineoverridevirtual |
deep cloning
Implements ct::core::DiscreteLinearSystem< STATE_DIM, CONTROL_DIM, SCALAR >.
|
inlinevirtual |
get the Jacobian with respect to the state
This computes the linearization of the system with respect to the state at a given point , , i.e. it computes
x | state to linearize at |
u | control to linearize at |
n | index |
References ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::dFdx_, ct::core::DynamicsLinearizerNumDiff< STATE_DIM, CONTROL_DIM, SCALAR, TIME >::getDerivativeState(), ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::linearizer_, and n.
Referenced by TEST().
|
inlinevirtual |
get the Jacobian with respect to the input
This computes the linearization of the system with respect to the input at a given point , , i.e. it computes
x | state to linearize at |
u | control to linearize at |
n | index |
References ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::dFdu_, ct::core::DynamicsLinearizerNumDiff< STATE_DIM, CONTROL_DIM, SCALAR, TIME >::getDerivativeControl(), ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::linearizer_, and n.
Referenced by TEST().
|
inlineoverridevirtual |
retrieve discrete-time linear system matrices A and B.
This computes matrices A and B such that
Note that the inputs x_next and subSteps are being ignored
x | the state setpoint at n |
u | the control setpoint at n |
n | the time setpoint |
x_next | -> ignored |
subSteps | -> ignored |
A | the resulting linear system matrix A |
B | the resulting linear system matrix B |
Implements ct::core::DiscreteLinearSystem< STATE_DIM, CONTROL_DIM, SCALAR >.
References ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::dFdu_, ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::dFdx_, ct::core::DynamicsLinearizerNumDiff< STATE_DIM, CONTROL_DIM, SCALAR, TIME >::getDerivativeControl(), ct::core::DynamicsLinearizerNumDiff< STATE_DIM, CONTROL_DIM, SCALAR, TIME >::getDerivativeState(), and ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::linearizer_.
Referenced by TEST().
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef DiscreteLinearSystem<STATE_DIM, CONTROL_DIM, SCALAR> ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::Base |
|
protected |
instance of non-linear system
|
protected |
instance of numerical-linearizer
Referenced by ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getAandB(), ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getDerivativeControl(), and ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getDerivativeState().
|
protected |
Jacobian wrt state.
Referenced by ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::DiscreteSystemLinearizer(), ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getAandB(), and ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getDerivativeState().
|
protected |
Jacobian wrt input.
Referenced by ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::DiscreteSystemLinearizer(), ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getAandB(), and ct::core::DiscreteSystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getDerivativeControl().