Residual-based constraint. More...
#include <residual.hpp>
Public Types | |
typedef ConstraintModelAbstractTpl< Scalar > | Base |
typedef ConstraintDataAbstractTpl< Scalar > | ConstraintDataAbstract |
typedef ConstraintDataResidualTpl< Scalar > | Data |
typedef DataCollectorAbstractTpl< Scalar > | DataCollectorAbstract |
typedef MathBaseTpl< Scalar > | MathBase |
typedef ResidualModelAbstractTpl< Scalar > | ResidualModelAbstract |
typedef MathBase::VectorXs | VectorXs |
![]() | |
typedef ConstraintDataAbstractTpl< Scalar > | ConstraintDataAbstract |
typedef DataCollectorAbstractTpl< Scalar > | DataCollectorAbstract |
typedef MathBaseTpl< Scalar > | MathBase |
typedef ResidualModelAbstractTpl< Scalar > | ResidualModelAbstract |
typedef StateAbstractTpl< Scalar > | StateAbstract |
typedef MathBase::VectorXs | VectorXs |
Public Member Functions | |
ConstraintModelResidualTpl (std::shared_ptr< typename Base::StateAbstract > state, std::shared_ptr< ResidualModelAbstract > residual, const bool T_act=true) | |
Initialize the residual constraint model as an equality constraint. | |
ConstraintModelResidualTpl (std::shared_ptr< typename Base::StateAbstract > state, std::shared_ptr< ResidualModelAbstract > residual, const VectorXs &lower, const VectorXs &upper, const bool T_act=true) | |
Initialize the residual constraint model as an inequality constraint. | |
virtual void | calc (const std::shared_ptr< ConstraintDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) override |
Compute the residual constraint based on state only. | |
virtual void | calc (const std::shared_ptr< ConstraintDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override |
Compute the residual constraint. | |
virtual void | calcDiff (const std::shared_ptr< ConstraintDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) override |
Compute the derivatives of the residual constraint with respect to the state only. | |
virtual void | calcDiff (const std::shared_ptr< ConstraintDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override |
Compute the derivatives of the residual constraint. | |
template<typename NewScalar > | |
ConstraintModelResidualTpl< NewScalar > | cast () const |
Cast the residual constraint model to a different scalar type. | |
virtual std::shared_ptr< ConstraintDataAbstract > | createData (DataCollectorAbstract *const data) override |
Create the residual constraint data. | |
virtual void | print (std::ostream &os) const override |
Print relevant information of the cost-residual model. | |
![]() | |
ConstraintModelAbstractTpl (std::shared_ptr< StateAbstract > state, const std::size_t ng, const std::size_t nh, const bool T_const=true) | |
ConstraintModelAbstractTpl (std::shared_ptr< StateAbstract > state, const std::size_t nu, const std::size_t ng, const std::size_t nh, const bool T_const=true) | |
the constraint model | |
ConstraintModelAbstractTpl (std::shared_ptr< StateAbstract > state, std::shared_ptr< ResidualModelAbstract > residual, const std::size_t ng, const std::size_t nh) | |
Initialize the constraint model. | |
const VectorXs & | get_lb () const |
Return the lower bound of the constraint. | |
std::size_t | get_ng () const |
Return the number of inequality constraints. | |
std::size_t | get_nh () const |
Return the number of equality constraints. | |
std::size_t | get_nu () const |
Return the dimension of the control input. | |
const std::shared_ptr< ResidualModelAbstract > & | get_residual () const |
Return the residual model. | |
const std::shared_ptr< StateAbstract > & | get_state () const |
Return the state. | |
bool | get_T_constraint () const |
Return true if the constraint is imposed in terminal nodes as well. | |
ConstraintType | get_type () const |
Return the type of constraint. | |
const VectorXs & | get_ub () const |
Return the upper bound of the constraint. | |
void | remove_bounds () |
Remove the bounds of the constraint. | |
void | update_bounds (const VectorXs &lower, const VectorXs &upper) |
Update the lower and upper bounds the upper bound of constraint. | |
Public Attributes | |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar | Scalar |
![]() | |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar | Scalar |
Protected Attributes | |
VectorXs | lb_ |
Lower bound of the constraint. | |
std::size_t | ng_ |
Number of inequality constraints. | |
std::size_t | nh_ |
Number of equality constraints. | |
std::size_t | nu_ |
Control dimension. | |
std::shared_ptr< ResidualModelAbstract > | residual_ |
Residual model. | |
std::shared_ptr< StateAbstract > | state_ |
State description. | |
bool | T_constraint_ |
ConstraintType | type_ |
Type of constraint: inequality=0, equality=1, both=2. | |
VectorXs | ub_ |
Upper bound of the constraint. | |
VectorXs | unone_ |
No control vector. | |
![]() | |
VectorXs | lb_ |
Lower bound of the constraint. | |
std::size_t | ng_ |
Number of inequality constraints. | |
std::size_t | nh_ |
Number of equality constraints. | |
std::size_t | nu_ |
Control dimension. | |
std::shared_ptr< ResidualModelAbstract > | residual_ |
Residual model. | |
std::shared_ptr< StateAbstract > | state_ |
State description. | |
bool | T_constraint_ |
ConstraintType | type_ |
Type of constraint: inequality=0, equality=1, both=2. | |
VectorXs | ub_ |
Upper bound of the constraint. | |
VectorXs | unone_ |
No control vector. | |
Residual-based constraint.
This constraint function uses a residual model to define equality / inequality constraint as
\[ \mathbf{\underline{r}} \leq \mathbf{r}(\mathbf{x}, \mathbf{u}) \leq \mathbf{\bar{r}} \]
where \(\mathbf{r}(\cdot)\) describes the residual function, and \(\mathbf{\underline{r}}\), \(\mathbf{\bar{r}}\) are the lower and upper bounds, respectively. We can define element-wise equality constraints by defining the same value for both: lower and upper values. Additionally, if we do not define the bounds, then it is assumed that \(\mathbf{\underline{r}}=\mathbf{\bar{r}}=\mathbf{0}\).
The main computations are carring out in calc
and calcDiff
routines. calc
computes the constraint residual and calcDiff
computes the Jacobians of the constraint function. Concretely speaking, calcDiff
builds a linear approximation of the constraint function with the form: \(\mathbf{g_x}\in\mathbb{R}^{ng\times ndx}\), \(\mathbf{g_u}\in\mathbb{R}^{ng\times nu}\), \(\mathbf{h_x}\in\mathbb{R}^{nh\times ndx}\) \(\mathbf{h_u}\in\mathbb{R}^{nh\times nu}\). Additionally, it is important to note that calcDiff()
computes the derivatives using the latest stored values by calc()
. Thus, we need to run first calc()
.
ConstraintModelAbstractTpl
, calc()
, calcDiff()
, createData()
Definition at line 47 of file residual.hpp.
typedef MathBaseTpl<Scalar> MathBase |
Definition at line 53 of file residual.hpp.
typedef ConstraintModelAbstractTpl<Scalar> Base |
Definition at line 54 of file residual.hpp.
typedef ConstraintDataResidualTpl<Scalar> Data |
Definition at line 55 of file residual.hpp.
typedef ConstraintDataAbstractTpl<Scalar> ConstraintDataAbstract |
Definition at line 56 of file residual.hpp.
typedef ResidualModelAbstractTpl<Scalar> ResidualModelAbstract |
Definition at line 57 of file residual.hpp.
typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract |
Definition at line 58 of file residual.hpp.
typedef MathBase::VectorXs VectorXs |
Definition at line 59 of file residual.hpp.
ConstraintModelResidualTpl | ( | std::shared_ptr< typename Base::StateAbstract > | state, |
std::shared_ptr< ResidualModelAbstract > | residual, | ||
const VectorXs & | lower, | ||
const VectorXs & | upper, | ||
const bool | T_act = true |
||
) |
Initialize the residual constraint model as an inequality constraint.
[in] | state | State of the multibody system |
[in] | residual | Residual model |
[in] | lower | Lower bound (dimension of the residual vector) |
[in] | upper | Upper bound (dimension of the residual vector) |
[in] | T_act | False if we want to deactivate the residual at the terminal node (default true) |
ConstraintModelResidualTpl | ( | std::shared_ptr< typename Base::StateAbstract > | state, |
std::shared_ptr< ResidualModelAbstract > | residual, | ||
const bool | T_act = true |
||
) |
Initialize the residual constraint model as an equality constraint.
[in] | state | State of the multibody system |
[in] | residual | Residual model |
[in] | T_act | False if we want to deactivate the residual at the terminal node (default true) |
|
overridevirtual |
Compute the residual constraint.
[in] | data | Residual constraint data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
[in] | u | Control input \(\mathbf{u}\in\mathbb{R}^{nu}\) |
Implements ConstraintModelAbstractTpl< _Scalar >.
|
overridevirtual |
Compute the residual constraint based on state only.
It updates the constraint based on the state only. This function is commonly used in the terminal nodes of an optimal control problem.
[in] | data | Residual constraint data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
Reimplemented from ConstraintModelAbstractTpl< _Scalar >.
|
overridevirtual |
Compute the derivatives of the residual constraint.
[in] | data | Residual constraint data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
[in] | u | Control input \(\mathbf{u}\in\mathbb{R}^{nu}\) |
Implements ConstraintModelAbstractTpl< _Scalar >.
|
overridevirtual |
Compute the derivatives of the residual constraint with respect to the state only.
It updates the Jacobian of the constraint function based on the state only. This function is commonly used in the terminal nodes of an optimal control problem.
[in] | data | Residual constraint data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
Reimplemented from ConstraintModelAbstractTpl< _Scalar >.
|
overridevirtual |
Create the residual constraint data.
Reimplemented from ConstraintModelAbstractTpl< _Scalar >.
ConstraintModelResidualTpl< NewScalar > cast | ( | ) | const |
Cast the residual constraint model to a different scalar type.
It is useful for operations requiring different precision or scalar types.
NewScalar | The new scalar type to cast to. |
|
overridevirtual |
Print relevant information of the cost-residual model.
[out] | os | Output stream object |
Reimplemented from ConstraintModelAbstractTpl< _Scalar >.
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar |
Definition at line 52 of file residual.hpp.
|
protected |
Lower bound of the constraint.
Definition at line 256 of file constraint-base.hpp.
|
protected |
Number of inequality constraints.
Definition at line 259 of file constraint-base.hpp.
|
protected |
Number of equality constraints.
Definition at line 260 of file constraint-base.hpp.
|
protected |
Control dimension.
Definition at line 258 of file constraint-base.hpp.
|
protected |
Residual model.
Definition at line 253 of file constraint-base.hpp.
|
protected |
State description.
Definition at line 252 of file constraint-base.hpp.
|
protected |
Label that indicates if the constraint is imposed in terminal nodes as well
Definition at line 261 of file constraint-base.hpp.
|
protected |
Type of constraint: inequality=0, equality=1, both=2.
Definition at line 255 of file constraint-base.hpp.
|
protected |
Upper bound of the constraint.
Definition at line 257 of file constraint-base.hpp.
|
protected |
No control vector.
Definition at line 263 of file constraint-base.hpp.