Summation of individual cost models. More...
#include <crocoddyl/core/costs/cost-sum.hpp>
Public Types | |
typedef CostDataAbstractTpl< Scalar > | CostDataAbstract |
typedef std::map< std::string, boost::shared_ptr< CostDataAbstract > > | CostDataContainer |
typedef CostDataSumTpl< Scalar > | CostDataSum |
typedef CostItemTpl< Scalar > | CostItem |
typedef CostModelAbstractTpl< Scalar > | CostModelAbstract |
typedef std::map< std::string, boost::shared_ptr< CostItem > > | CostModelContainer |
typedef DataCollectorAbstractTpl< Scalar > | DataCollectorAbstract |
typedef MathBaseTpl< Scalar > | MathBase |
typedef MathBase::MatrixXs | MatrixXs |
typedef StateAbstractTpl< Scalar > | StateAbstract |
typedef MathBase::VectorXs | VectorXs |
Public Member Functions | |
CostModelSumTpl (boost::shared_ptr< StateAbstract > state, const std::size_t &nu) | |
Initialize the cost-sum model. More... | |
CostModelSumTpl (boost::shared_ptr< StateAbstract > state) | |
Initialize the cost-sum model. More... | |
void | addCost (const std::string &name, boost::shared_ptr< CostModelAbstract > cost, const Scalar &weight, bool active=true) |
Add a cost item. More... | |
void | calc (const boost::shared_ptr< CostDataSum > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) |
Compute the total cost value. More... | |
void | calc (const boost::shared_ptr< CostDataSum > &data, const Eigen::Ref< const VectorXs > &x) |
void | calcDiff (const boost::shared_ptr< CostDataSum > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) |
Compute the Jacobian and Hessian of the total cost. More... | |
void | calcDiff (const boost::shared_ptr< CostDataSum > &data, const Eigen::Ref< const VectorXs > &x) |
void | changeCostStatus (const std::string &name, bool active) |
Change the cost status. More... | |
boost::shared_ptr< CostDataSum > | createData (DataCollectorAbstract *const data) |
Create the cost data. More... | |
const std::vector< std::string > & | get_active () const |
Return the names of the active costs. | |
const CostModelContainer & | get_costs () const |
Return the stack of cost models. | |
const std::vector< std::string > & | get_inactive () const |
Return the names of the inactive costs. | |
const std::size_t & | get_nr () const |
Return the dimension of the active residual vector. | |
const std::size_t & | get_nr_total () const |
Return the dimension of the total residual vector. | |
const std::size_t & | get_nu () const |
Return the dimension of the control input. | |
const boost::shared_ptr< StateAbstract > & | get_state () const |
Return the state. | |
bool | getCostStatus (const std::string &name) const |
Return the status of a given cost name. More... | |
void | removeCost (const std::string &name) |
Remove a cost item. More... | |
Public Attributes | |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar | Scalar |
Summation of individual cost models.
This class serves to manage a set of added cost models. The cost functions might active or inactive, with this approach we avoid dynamic allocation of memory. Each cost model is added through addCost
, where the weight and its status can be defined.
The main computations are carring out in calc
and calcDiff
routines. calc
computes the costs (and its residuals) and calcDiff
computes the derivatives of the cost functions (and its residuals). Concretely speaking, calcDiff
builds a linear-quadratic approximation of the total cost function with the form: \(\mathbf{l_x}\in\mathbb{R}^{ndx}\), \(\mathbf{l_u}\in\mathbb{R}^{nu}\), \(\mathbf{l_{xx}}\in\mathbb{R}^{ndx\times ndx}\), \(\mathbf{l_{xu}}\in\mathbb{R}^{ndx\times nu}\), \(\mathbf{l_{uu}}\in\mathbb{R}^{nu\times nu}\) are the Jacobians and Hessians, respectively.
StateAbstractTpl
, calc()
, calcDiff()
, createData()
Definition at line 57 of file cost-sum.hpp.
CostModelSumTpl | ( | boost::shared_ptr< StateAbstract > | state, |
const std::size_t & | nu | ||
) |
Initialize the cost-sum model.
[in] | state | State of the multibody system |
[in] | nu | Dimension of control vector |
|
explicit |
Initialize the cost-sum model.
The default nu
value is obtained from StateAbstractTpl::get_nv()
.
[in] | state | State of the multibody system |
void addCost | ( | const std::string & | name, |
boost::shared_ptr< CostModelAbstract > | cost, | ||
const Scalar & | weight, | ||
bool | active = true |
||
) |
Add a cost item.
[in] | name | Cost name |
[in] | cost | Cost model |
[in] | weight | Cost weight |
[in] | active | True if the cost is activated (default true) |
void removeCost | ( | const std::string & | name | ) |
Remove a cost item.
[in] | name | Cost name |
void changeCostStatus | ( | const std::string & | name, |
bool | active | ||
) |
Change the cost status.
[in] | name | Cost name |
[in] | active | Cost status (true for active and false for inactive) |
void calc | ( | const boost::shared_ptr< CostDataSum > & | data, |
const Eigen::Ref< const VectorXs > & | x, | ||
const Eigen::Ref< const VectorXs > & | u | ||
) |
Compute the total cost value.
[in] | data | Cost data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
[in] | u | Control input \(\mathbf{u}\in\mathbb{R}^{nu}\) |
void calcDiff | ( | const boost::shared_ptr< CostDataSum > & | data, |
const Eigen::Ref< const VectorXs > & | x, | ||
const Eigen::Ref< const VectorXs > & | u | ||
) |
Compute the Jacobian and Hessian of the total cost.
[in] | data | Cost data |
[in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
[in] | u | Control input \(\mathbf{u}\in\mathbb{R}^{nu}\) |
boost::shared_ptr<CostDataSum> createData | ( | DataCollectorAbstract *const | data | ) |
Create the cost data.
The default data contains objects to store the values of the cost, residual vector and their derivatives (first and second order derivatives). However, it is possible to specialized this function is we need to create additional data, for instance, to avoid dynamic memory allocation.
data | Data collector |
void calc | ( | const boost::shared_ptr< CostDataSum > & | data, |
const Eigen::Ref< const VectorXs > & | x | ||
) |
Compute the total cost value.
[in] | data | Cost data |
[in] | x | State point |
void calcDiff | ( | const boost::shared_ptr< CostDataSum > & | data, |
const Eigen::Ref< const VectorXs > & | x | ||
) |
Compute the Jacobian and Hessian of the total cost.
[in] | data | Cost data |
[in] | x | State point |
bool getCostStatus | ( | const std::string & | name | ) | const |
Return the status of a given cost name.
[in] | name | Cost name |