![]() |
- 3.0.2 core module.
|
Computes the linearization of a general non-linear ControlledSystem using numerical differentiation. More...
#include <SystemLinearizer.h>
Public Types | |
| typedef Base::time_t | time_t |
| Time type as defined in System. More... | |
| typedef Base::state_vector_t | state_vector_t |
| state vector type More... | |
| typedef Base::control_vector_t | control_vector_t |
| input vector type More... | |
| typedef Base::state_matrix_t | state_matrix_t |
| state Jacobian type More... | |
| typedef Base::state_control_matrix_t | state_control_matrix_t |
| input Jacobian type More... | |
| typedef ControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > | system_t |
| type of system to be linearized More... | |
Public Types inherited from ct::core::LinearSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
| typedef Base::time_t | time_t |
| typedef StateVector< STATE_DIM, SCALAR > | state_vector_t |
| state vector type More... | |
| typedef ControlVector< CONTROL_DIM, SCALAR > | control_vector_t |
| input vector type More... | |
| typedef StateMatrix< STATE_DIM, SCALAR > | state_matrix_t |
| state Jacobian type More... | |
| typedef StateControlMatrix< STATE_DIM, CONTROL_DIM, SCALAR > | state_control_matrix_t |
| input Jacobian type More... | |
Public Types inherited from ct::core::ControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
| typedef std::shared_ptr< ControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > > | Ptr |
| typedef Base::time_t | time_t |
Public Types inherited from ct::core::System< STATE_DIM, SCALAR > | |
| typedef SCALAR | time_t |
| the type of the time variable More... | |
Public Member Functions | |
| SystemLinearizer (std::shared_ptr< system_t > nonlinearSystem, bool doubleSidedDerivative=true) | |
| default constructor More... | |
| SystemLinearizer (const SystemLinearizer &arg) | |
| copy constructor More... | |
| virtual | ~SystemLinearizer () |
| destructor More... | |
| SystemLinearizer< 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 time_t t=0.0) override |
| 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 time_t t=0.0) override |
| get the Jacobian with respect to the input More... | |
Public Member Functions inherited from ct::core::LinearSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
| LinearSystem (const ct::core::SYSTEM_TYPE &type=ct::core::SYSTEM_TYPE::GENERAL) | |
| default constructor More... | |
| virtual | ~LinearSystem () |
| destructor More... | |
| virtual void | computeControlledDynamics (const state_vector_t &state, const time_t &t, const control_vector_t &control, state_vector_t &derivative) override |
| compute the system dynamics More... | |
| virtual void | getDerivatives (state_matrix_t &A, state_control_matrix_t &B, const state_vector_t &x, const control_vector_t &u, const time_t t=time_t(0.0)) |
| Get both linear system matrices A and B in one call. More... | |
Public Member Functions inherited from ct::core::ControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
| ControlledSystem (const SYSTEM_TYPE &type=SYSTEM_TYPE::GENERAL) | |
| default constructor More... | |
| ControlledSystem (std::shared_ptr< ct::core::Controller< STATE_DIM, CONTROL_DIM, SCALAR >> controller, const SYSTEM_TYPE &type=SYSTEM_TYPE::GENERAL) | |
| constructor More... | |
| ControlledSystem (const ControlledSystem &arg) | |
| copy constructor More... | |
| virtual | ~ControlledSystem () |
| destructor More... | |
| void | setController (const std::shared_ptr< Controller< STATE_DIM, CONTROL_DIM, SCALAR >> &controller) |
| set a new controller More... | |
| void | getController (std::shared_ptr< Controller< STATE_DIM, CONTROL_DIM, SCALAR >> &controller) const |
| get the controller instance More... | |
| std::shared_ptr< Controller< STATE_DIM, CONTROL_DIM, SCALAR > > | getController () |
| get the controller instace More... | |
| virtual void | computeDynamics (const StateVector< STATE_DIM, SCALAR > &state, const time_t &t, StateVector< STATE_DIM, SCALAR > &derivative) override |
| compute the dynamics of the system More... | |
| virtual void | computeControlledDynamics (const StateVector< STATE_DIM, SCALAR > &state, const time_t &t, const ControlVector< CONTROL_DIM, SCALAR > &control, StateVector< STATE_DIM, SCALAR > &derivative)=0 |
| ControlVector< CONTROL_DIM, SCALAR > | getLastControlAction () |
Public Member Functions inherited from ct::core::System< STATE_DIM, SCALAR > | |
| System (const SYSTEM_TYPE &type=SYSTEM_TYPE::GENERAL) | |
| default constructor More... | |
| System (const System &other) | |
| copy constructor More... | |
| virtual | ~System () |
| destructor More... | |
| virtual void | computeDynamics (const StateVector< STATE_DIM, SCALAR > &state, const time_t &t, StateVector< STATE_DIM, SCALAR > &derivative)=0 |
| computes the system dynamics More... | |
| SYSTEM_TYPE | getType () const |
| get the type of system More... | |
| virtual bool | isSymplectic () const |
| Determines if the system is in symplectic form. More... | |
Public Attributes | |
| EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef LinearSystem< STATE_DIM, CONTROL_DIM, SCALAR > | Base |
| Base class type. More... | |
Public Attributes inherited from ct::core::LinearSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
| EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef ControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > | Base |
Public Attributes inherited from ct::core::ControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
| EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef System< STATE_DIM, SCALAR > | Base |
Public Attributes inherited from ct::core::System< STATE_DIM, SCALAR > | |
| EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef SCALAR | S |
| the scalar type More... | |
Protected Attributes | |
| std::shared_ptr< system_t > | nonlinearSystem_ |
| instance of non-linear system More... | |
| DynamicsLinearizerNumDiff< STATE_DIM, CONTROL_DIM, SCALAR, SCALAR > | linearizer_ |
| instance of numerical-linearizer More... | |
| state_matrix_t | dFdx_ |
| Jacobian wrt state. More... | |
| state_control_matrix_t | dFdu_ |
| Jacobian wrt input. More... | |
| bool | isSecondOrderSystem_ |
| flag if system is a second order system More... | |
Protected Attributes inherited from ct::core::ControlledSystem< STATE_DIM, CONTROL_DIM, SCALAR > | |
| std::shared_ptr< Controller< STATE_DIM, CONTROL_DIM, SCALAR > > | controller_ |
| the controller instance More... | |
| ControlVector< CONTROL_DIM, SCALAR > | controlAction_ |
Protected Attributes inherited from ct::core::System< STATE_DIM, SCALAR > | |
| SYSTEM_TYPE | type_ |
| type of system More... | |
Computes the linearization of a general non-linear ControlledSystem using numerical differentiation.
This class takes a non-linear ControlledSystem
and computes the linearization around a certain point
,
.
where
In case the ControlledSystem is a pure second-order system, the upper half of A is not explicitely computed but A is assumed to be of the following form
Examples for using the SystemLinearizer (and the Auto-diff Linearizer) can be found in AutoDiffLinearizerTest.cpp
| STATE_DIM | dimension of state vector |
| CONTROL_DIM | dimension of control vector |
| SCALAR | underlying scalar type of the system |
| typedef Base::time_t ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::time_t |
Time type as defined in System.
| typedef Base::state_vector_t ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::state_vector_t |
state vector type
| typedef Base::control_vector_t ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::control_vector_t |
input vector type
| typedef Base::state_matrix_t ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::state_matrix_t |
state Jacobian type
| typedef Base::state_control_matrix_t ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::state_control_matrix_t |
input Jacobian type
| typedef ControlledSystem<STATE_DIM, CONTROL_DIM, SCALAR> ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::system_t |
type of system to be linearized
|
inline |
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::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::dFdu_, ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::dFdx_, ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::isSecondOrderSystem_, and ct::core::SECOND_ORDER.
|
inline |
copy constructor
|
inlinevirtual |
destructor
|
inlineoverridevirtual |
deep cloning
Implements ct::core::LinearSystem< STATE_DIM, CONTROL_DIM, SCALAR >.
Referenced by TEST().
|
inlineoverridevirtual |
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 |
| t | time |
Implements ct::core::LinearSystem< STATE_DIM, CONTROL_DIM, SCALAR >.
References ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::dFdx_, ct::core::DynamicsLinearizerNumDiff< STATE_DIM, CONTROL_DIM, SCALAR, TIME >::getDerivativeState(), ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::isSecondOrderSystem_, ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::linearizer_, and t.
Referenced by TEST().
|
inlineoverridevirtual |
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 |
| t | time |
Implements ct::core::LinearSystem< STATE_DIM, CONTROL_DIM, SCALAR >.
References ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::dFdu_, ct::core::DynamicsLinearizerNumDiff< STATE_DIM, CONTROL_DIM, SCALAR, TIME >::getDerivativeControl(), ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::isSecondOrderSystem_, ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::linearizer_, and t.
Referenced by TEST().
| EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef LinearSystem<STATE_DIM, CONTROL_DIM, SCALAR> ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::Base |
Base class type.
|
protected |
instance of non-linear system
|
protected |
instance of numerical-linearizer
Referenced by ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getDerivativeControl(), and ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getDerivativeState().
|
protected |
Jacobian wrt state.
Referenced by ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getDerivativeState(), and ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::SystemLinearizer().
|
protected |
Jacobian wrt input.
Referenced by ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getDerivativeControl(), and ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::SystemLinearizer().
|
protected |
flag if system is a second order system
Referenced by ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getDerivativeControl(), ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::getDerivativeState(), and ct::core::SystemLinearizer< STATE_DIM, CONTROL_DIM, SCALAR >::SystemLinearizer().