9 #ifndef CROCODDYL_CORE_COST_BASE_HPP_ 10 #define CROCODDYL_CORE_COST_BASE_HPP_ 12 #include <boost/shared_ptr.hpp> 13 #include <boost/make_shared.hpp> 15 #include "crocoddyl/core/fwd.hpp" 16 #include "crocoddyl/core/state-base.hpp" 17 #include "crocoddyl/core/data-collector-base.hpp" 18 #include "crocoddyl/core/activation-base.hpp" 19 #include "crocoddyl/core/residual-base.hpp" 20 #include "crocoddyl/core/activations/quadratic.hpp" 21 #include "crocoddyl/core/utils/deprecate.hpp" 48 template <
typename _Scalar>
51 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
53 typedef _Scalar Scalar;
61 typedef typename MathBase::VectorXs VectorXs;
62 typedef typename MathBase::MatrixXs MatrixXs;
71 CostModelAbstractTpl(boost::shared_ptr<StateAbstract> state, boost::shared_ptr<ActivationModelAbstract> activation,
72 boost::shared_ptr<ResidualModelAbstract> residual);
81 CostModelAbstractTpl(boost::shared_ptr<StateAbstract> state, boost::shared_ptr<ActivationModelAbstract> activation,
82 const std::size_t nu);
92 CostModelAbstractTpl(boost::shared_ptr<StateAbstract> state, boost::shared_ptr<ActivationModelAbstract> activation);
102 CostModelAbstractTpl(boost::shared_ptr<StateAbstract> state, boost::shared_ptr<ResidualModelAbstract> residual);
113 CostModelAbstractTpl(boost::shared_ptr<StateAbstract> state,
const std::size_t nr,
const std::size_t nu);
135 virtual void calc(
const boost::shared_ptr<CostDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
136 const Eigen::Ref<const VectorXs>& u) = 0;
147 virtual void calcDiff(
const boost::shared_ptr<CostDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
148 const Eigen::Ref<const VectorXs>& u) = 0;
160 virtual boost::shared_ptr<CostDataAbstract>
createData(DataCollectorAbstract*
const data);
168 void calc(
const boost::shared_ptr<CostDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x);
176 void calcDiff(
const boost::shared_ptr<CostDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x);
181 const boost::shared_ptr<StateAbstract>&
get_state()
const;
186 const boost::shared_ptr<ActivationModelAbstract>&
get_activation()
const;
191 const boost::shared_ptr<ResidualModelAbstract>&
get_residual()
const;
196 std::size_t
get_nu()
const;
201 template <
class Scalar>
202 friend std::ostream& operator<<(std::ostream& os, const CostModelAbstractTpl<Scalar>& model);
207 template <
class ReferenceType>
213 template <
class ReferenceType>
221 virtual void print(std::ostream& os)
const;
241 template <
typename _Scalar>
243 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
245 typedef _Scalar Scalar;
250 typedef typename MathBase::VectorXs VectorXs;
251 typedef typename MathBase::MatrixXs MatrixXs;
253 template <
template <
typename Scalar>
class Model>
256 activation(model->get_activation()->createData()),
257 residual(model->get_residual()->createData(data)),
259 Lx(model->get_state()->get_ndx()),
261 Lxx(model->get_state()->get_ndx(), model->get_state()->get_ndx()),
262 Lxu(model->get_state()->get_ndx(), model->get_nu()),
263 Luu(model->get_nu(), model->get_nu()) {
270 virtual ~CostDataAbstractTpl() {}
272 DEPRECATED(
"Use residual.r",
const VectorXs& get_r()
const {
return residual->r; };)
273 DEPRECATED(
"Use residual.Rx",
const MatrixXs& get_Rx()
const {
return residual->Rx; };)
274 DEPRECATED(
"Use residual.Ru",
const MatrixXs& get_Ru()
const {
return residual->Ru; };)
275 DEPRECATED(
"Use residual.r",
void set_r(
const VectorXs& r) { residual->r = r; };)
276 DEPRECATED(
"Use residual.Rx",
void set_Rx(
const MatrixXs& Rx) { residual->Rx = Rx; };)
277 DEPRECATED(
"Use residual.Ru",
void set_Ru(
const MatrixXs& Ru) { residual->Ru = Ru; };)
279 DataCollectorAbstract* shared;
280 boost::shared_ptr<ActivationDataAbstract> activation;
281 boost::shared_ptr<ResidualDataAbstract> residual;
295 #include "crocoddyl/core/cost-base.hxx" 297 #endif // CROCODDYL_CORE_COST_BASE_HPP_ virtual void calcDiff(const boost::shared_ptr< CostDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)=0
Compute the Jacobian and Hessian of cost and its residual vector.
void set_reference(ReferenceType ref)
Modify the cost reference.
boost::shared_ptr< ResidualModelAbstract > residual_
Residual model.
Abstract class for cost models.
const boost::shared_ptr< ActivationModelAbstract > & get_activation() const
Return the activation model.
virtual void get_referenceImpl(const std::type_info &, void *)
Abstract class for the state representation.
const boost::shared_ptr< ResidualModelAbstract > & get_residual() const
Return the residual model.
boost::shared_ptr< ActivationModelAbstract > activation_
Activation model.
virtual void set_referenceImpl(const std::type_info &, const void *)
const boost::shared_ptr< StateAbstract > & get_state() const
Return the state.
Abstract class for residual models.
CostModelAbstractTpl(boost::shared_ptr< StateAbstract > state, boost::shared_ptr< ActivationModelAbstract > activation, boost::shared_ptr< ResidualModelAbstract > residual)
Initialize the cost model.
virtual void calc(const boost::shared_ptr< CostDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)=0
Compute the cost value and its residual vector.
virtual boost::shared_ptr< CostDataAbstract > createData(DataCollectorAbstract *const data)
Create the cost data.
VectorXs unone_
No control vector.
virtual void print(std::ostream &os) const
Print relevant information of the cost model.
std::size_t nu_
Control dimension.
boost::shared_ptr< StateAbstract > state_
State description.
ReferenceType get_reference()
Return the cost reference.
std::size_t get_nu() const
Return the dimension of the control input.