Abstract class for residual models. More...
#include <residual-base.hpp>
Public Types | |
typedef ActivationDataAbstractTpl< Scalar > | ActivationDataAbstract |
typedef CostDataAbstractTpl< Scalar > | CostDataAbstract |
typedef DataCollectorAbstractTpl< Scalar > | DataCollectorAbstract |
typedef MathBase::DiagonalMatrixXs | DiagonalMatrixXs |
typedef MathBaseTpl< Scalar > | MathBase |
typedef MathBase::MatrixXs | MatrixXs |
typedef ResidualDataAbstractTpl< Scalar > | ResidualDataAbstract |
typedef StateAbstractTpl< Scalar > | StateAbstract |
typedef MathBase::VectorXs | VectorXs |
Public Member Functions | |
ResidualModelAbstractTpl (boost::shared_ptr< StateAbstract > state, const std::size_t nr, const bool q_dependent=true, const bool v_dependent=true, const bool u_dependent=true) | |
Initialize the residual model. More... | |
ResidualModelAbstractTpl (boost::shared_ptr< StateAbstract > state, const std::size_t nr, const std::size_t nu, const bool q_dependent=true, const bool v_dependent=true, const bool u_dependent=true) | |
Initialize the residual model. More... | |
virtual void | calc (const boost::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) |
Compute the residual vector for nodes that depends only on the state. More... | |
virtual void | calc (const boost::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) |
Compute the residual vector. More... | |
virtual void | calcCostDiff (const boost::shared_ptr< CostDataAbstract > &cdata, const boost::shared_ptr< ResidualDataAbstract > &rdata, const boost::shared_ptr< ActivationDataAbstract > &adata, const bool update_u=true) |
Compute the derivative of the cost function. More... | |
virtual void | calcDiff (const boost::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) |
Compute the Jacobian of the residual functions with respect to the state only. More... | |
virtual void | calcDiff (const boost::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) |
Compute the Jacobian of the residual vector. More... | |
virtual boost::shared_ptr< ResidualDataAbstract > | createData (DataCollectorAbstract *const data) |
Create the residual data. More... | |
std::size_t | get_nr () const |
Return the dimension of the residual vector. | |
std::size_t | get_nu () const |
Return the dimension of the control input. | |
bool | get_q_dependent () const |
Return true if the residual function depends on q. | |
const boost::shared_ptr< StateAbstract > & | get_state () const |
Return the state. | |
bool | get_u_dependent () const |
Return true if the residual function depends on u. | |
bool | get_v_dependent () const |
Return true if the residual function depends on v. | |
virtual void | print (std::ostream &os) const |
Print relevant information of the residual model. More... | |
Public Attributes | |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar | Scalar |
Protected Attributes | |
std::size_t | nr_ |
Residual vector dimension. | |
std::size_t | nu_ |
Control dimension. | |
bool | q_dependent_ |
boost::shared_ptr< StateAbstract > | state_ |
State description. | |
bool | u_dependent_ |
VectorXs | unone_ |
No control vector. | |
bool | v_dependent_ |
Friends | |
template<class Scalar > | |
std::ostream & | operator<< (std::ostream &os, const ResidualModelAbstractTpl< Scalar > &model) |
Print information on the residual model. | |
Abstract class for residual models.
A residual model defines a vector function \(\mathbf{r}(\mathbf{x}, \mathbf{u})\mathbb{R}^{nr}\) where nr
describes its dimension in the Euclidean space. This function depends on the state point \(\mathbf{x}\in\mathcal{X}\), which lies in the state manifold described with a nq
-tuple, its velocity \(\dot{\mathbf{x}}\in T_{\mathbf{x}}\mathcal{X}\) that belongs to the tangent space with nv
dimension, and the control input \(\mathbf{u}\in\mathbb{R}^{nu}\). The residual function can used across cost and constraint models.
The main computations are carring out in calc
and calcDiff
routines. calc
computes the residual vector and calcDiff
computes the Jacobians of the residual function. Additionally, it is important to note that calcDiff()
computes the Jacobians using the latest stored values by calc()
. Thus, we need to first run calc()
.
StateAbstractTpl
, calc()
, calcDiff()
, createData()
Definition at line 44 of file residual-base.hpp.
ResidualModelAbstractTpl | ( | boost::shared_ptr< StateAbstract > | state, |
const std::size_t | nr, | ||
const std::size_t | nu, | ||
const bool | q_dependent = true , |
||
const bool | v_dependent = true , |
||
const bool | u_dependent = true |
||
) |
Initialize the residual model.
[in] | state | State of the system |
[in] | nr | Dimension of residual vector |
[in] | nu | Dimension of control vector |
[in] | q_dependent | Define if the residual function depends on q (default true) |
[in] | v_dependent | Define if the residual function depends on v (default true) |
[in] | u_dependent | Define if the residual function depends on u (default true) |
ResidualModelAbstractTpl | ( | boost::shared_ptr< StateAbstract > | state, |
const std::size_t | nr, | ||
const bool | q_dependent = true , |
||
const bool | v_dependent = true , |
||
const bool | u_dependent = true |
||
) |
Initialize the residual model.
The default nu
value is obtained from StateAbstractTpl::get_nv()
.
[in] | state | State of the system |
[in] | nr | Dimension of residual vector |
[in] | q_dependent | Define if the residual function depends on q (default true) |
[in] | v_dependent | Define if the residual function depends on v (default true) |
[in] | u_dependent | Define if the residual function depends on u (default true) |
|
virtual |
Compute the residual vector.
[in] | data | Residual data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
[in] | u | Control input \(\mathbf{u}\in\mathbb{R}^{nu}\) |
Reimplemented in ResidualModelStateTpl< _Scalar >, ResidualModelImpulseCoMTpl< _Scalar >, ResidualModelFrameVelocityTpl< _Scalar >, ResidualModelFrameTranslationTpl< _Scalar >, ResidualModelFrameRotationTpl< _Scalar >, ResidualModelFramePlacementTpl< _Scalar >, ResidualModelControlGravTpl< _Scalar >, ResidualModelContactWrenchConeTpl< _Scalar >, ResidualModelContactFrictionConeTpl< _Scalar >, ResidualModelContactForceTpl< _Scalar >, ResidualModelContactCoPPositionTpl< _Scalar >, ResidualModelContactControlGravTpl< _Scalar >, ResidualModelCoMPositionTpl< _Scalar >, ResidualModelCentroidalMomentumTpl< _Scalar >, ResidualModelJointEffortTpl< _Scalar >, ResidualModelJointAccelerationTpl< _Scalar >, ResidualModelControlTpl< _Scalar >, DifferentialActionModelFreeInvDynamicsTpl< _Scalar >::ResidualModelActuation, DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelContact, and DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelActuation.
|
virtual |
Compute the residual vector for nodes that depends only on the state.
It updates the residual vector based on the state only. This function is used in the terminal nodes of an optimal control problem.
[in] | data | Residual data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
Reimplemented in ResidualModelControlGravTpl< _Scalar >, ResidualModelContactWrenchConeTpl< _Scalar >, ResidualModelContactFrictionConeTpl< _Scalar >, ResidualModelContactForceTpl< _Scalar >, ResidualModelContactCoPPositionTpl< _Scalar >, ResidualModelContactControlGravTpl< _Scalar >, ResidualModelJointEffortTpl< _Scalar >, ResidualModelJointAccelerationTpl< _Scalar >, ResidualModelControlTpl< _Scalar >, DifferentialActionModelFreeInvDynamicsTpl< _Scalar >::ResidualModelActuation, DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelContact, and DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelActuation.
|
virtual |
Compute the Jacobian of the residual vector.
It computes the Jacobian the residual function. It assumes that calc()
has been run first.
[in] | data | Residual data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
[in] | u | Control input \(\mathbf{u}\in\mathbb{R}^{nu}\) |
Reimplemented in ResidualModelStateTpl< _Scalar >, ResidualModelImpulseCoMTpl< _Scalar >, ResidualModelFrameVelocityTpl< _Scalar >, ResidualModelFrameTranslationTpl< _Scalar >, ResidualModelFrameRotationTpl< _Scalar >, ResidualModelFramePlacementTpl< _Scalar >, ResidualModelControlGravTpl< _Scalar >, ResidualModelContactWrenchConeTpl< _Scalar >, ResidualModelContactFrictionConeTpl< _Scalar >, ResidualModelContactForceTpl< _Scalar >, ResidualModelContactCoPPositionTpl< _Scalar >, ResidualModelContactControlGravTpl< _Scalar >, ResidualModelCoMPositionTpl< _Scalar >, ResidualModelCentroidalMomentumTpl< _Scalar >, ResidualModelJointEffortTpl< _Scalar >, ResidualModelJointAccelerationTpl< _Scalar >, ResidualModelControlTpl< _Scalar >, DifferentialActionModelFreeInvDynamicsTpl< _Scalar >::ResidualModelActuation, DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelContact, and DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelActuation.
|
virtual |
Compute the Jacobian of the residual functions with respect to the state only.
It updates the Jacobian of the residual function based on the state only. This function is used in the terminal nodes of an optimal control problem.
[in] | data | Residual data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
Reimplemented in ResidualModelControlGravTpl< _Scalar >, ResidualModelContactWrenchConeTpl< _Scalar >, ResidualModelContactFrictionConeTpl< _Scalar >, ResidualModelContactForceTpl< _Scalar >, ResidualModelContactCoPPositionTpl< _Scalar >, ResidualModelContactControlGravTpl< _Scalar >, ResidualModelJointEffortTpl< _Scalar >, DifferentialActionModelFreeInvDynamicsTpl< _Scalar >::ResidualModelActuation, DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelContact, and DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelActuation.
|
virtual |
Create the residual data.
The default data contains objects to store the values of the residual vector and their Jacobians. However, it is possible to specialize this function if we need to create additional data, for instance, to avoid dynamic memory allocation.
data | Data collector |
Reimplemented in ResidualModelImpulseCoMTpl< _Scalar >, ResidualModelFrameVelocityTpl< _Scalar >, ResidualModelFrameTranslationTpl< _Scalar >, ResidualModelFrameRotationTpl< _Scalar >, ResidualModelFramePlacementTpl< _Scalar >, ResidualModelControlGravTpl< _Scalar >, ResidualModelContactWrenchConeTpl< _Scalar >, ResidualModelContactFrictionConeTpl< _Scalar >, ResidualModelContactForceTpl< _Scalar >, ResidualModelContactCoPPositionTpl< _Scalar >, ResidualModelContactControlGravTpl< _Scalar >, ResidualModelCoMPositionTpl< _Scalar >, ResidualModelCentroidalMomentumTpl< _Scalar >, DifferentialActionModelFreeInvDynamicsTpl< _Scalar >::ResidualModelActuation, DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelContact, DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelActuation, ResidualModelJointEffortTpl< _Scalar >, ResidualModelJointAccelerationTpl< _Scalar >, ResidualModelControlTpl< _Scalar >, and ResidualModelNumDiffTpl< _Scalar >.
|
virtual |
Compute the derivative of the cost function.
This function assumes that the derivatives of the activation and residual are computed via calcDiff functions.
cdata | Cost data |
rdata | Residual data |
adata | Activation data |
update_u | Update the derivative of the cost function w.r.t. to the control if True. |
Reimplemented in ResidualModelStateTpl< _Scalar >, and ResidualModelControlTpl< _Scalar >.
|
virtual |
Print relevant information of the residual model.
[out] | os | Output stream object |
Reimplemented in ResidualModelStateTpl< _Scalar >, ResidualModelImpulseCoMTpl< _Scalar >, ResidualModelFrameVelocityTpl< _Scalar >, ResidualModelFrameTranslationTpl< _Scalar >, ResidualModelFrameRotationTpl< _Scalar >, ResidualModelFramePlacementTpl< _Scalar >, ResidualModelControlGravTpl< _Scalar >, ResidualModelContactWrenchConeTpl< _Scalar >, ResidualModelContactFrictionConeTpl< _Scalar >, ResidualModelContactForceTpl< _Scalar >, ResidualModelContactCoPPositionTpl< _Scalar >, ResidualModelContactControlGravTpl< _Scalar >, ResidualModelCoMPositionTpl< _Scalar >, ResidualModelCentroidalMomentumTpl< _Scalar >, DifferentialActionModelFreeInvDynamicsTpl< _Scalar >::ResidualModelActuation, DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelContact, DifferentialActionModelContactInvDynamicsTpl< _Scalar >::ResidualModelActuation, ResidualModelJointEffortTpl< _Scalar >, ResidualModelJointAccelerationTpl< _Scalar >, and ResidualModelControlTpl< _Scalar >.
|
protected |
Label that indicates if the residual function depends on q
Definition at line 229 of file residual-base.hpp.
|
protected |
Label that indicates if the residual function depends on v
Definition at line 231 of file residual-base.hpp.
|
protected |
Label that indicates if the residual function depends on u
Definition at line 233 of file residual-base.hpp.