9 #ifndef CROCODDYL_MULTIBODY_COST_BASE_HPP_
10 #define CROCODDYL_MULTIBODY_COST_BASE_HPP_
12 #include <boost/shared_ptr.hpp>
13 #include <boost/make_shared.hpp>
15 #include "crocoddyl/multibody/fwd.hpp"
16 #include "crocoddyl/multibody/states/multibody.hpp"
17 #include "crocoddyl/core/data-collector-base.hpp"
18 #include "crocoddyl/core/activation-base.hpp"
19 #include "crocoddyl/core/utils/to-string.hpp"
20 #include "crocoddyl/core/activations/quadratic.hpp"
24 template <
typename _Scalar>
27 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
29 typedef _Scalar Scalar;
36 typedef typename MathBase::VectorXs VectorXs;
37 typedef typename MathBase::MatrixXs MatrixXs;
39 CostModelAbstractTpl(boost::shared_ptr<StateMultibody> state, boost::shared_ptr<ActivationModelAbstract> activation,
40 const std::size_t& nu);
41 CostModelAbstractTpl(boost::shared_ptr<StateMultibody> state, boost::shared_ptr<ActivationModelAbstract> activation);
42 CostModelAbstractTpl(boost::shared_ptr<StateMultibody> state,
const std::size_t& nr,
const std::size_t& nu);
46 virtual void calc(
const boost::shared_ptr<CostDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
47 const Eigen::Ref<const VectorXs>& u) = 0;
48 virtual void calcDiff(
const boost::shared_ptr<CostDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
49 const Eigen::Ref<const VectorXs>& u) = 0;
52 void calc(
const boost::shared_ptr<CostDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x);
53 void calcDiff(
const boost::shared_ptr<CostDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x);
55 const boost::shared_ptr<StateMultibody>& get_state()
const;
56 const boost::shared_ptr<ActivationModelAbstract>& get_activation()
const;
57 const std::size_t& get_nu()
const;
59 template <
class ReferenceType>
60 void set_reference(ReferenceType ref);
62 template <
class ReferenceType>
63 ReferenceType get_reference()
const;
66 virtual void set_referenceImpl(
const std::type_info&,
const void*);
67 virtual void get_referenceImpl(
const std::type_info&,
void*)
const;
69 boost::shared_ptr<StateMultibody> state_;
70 boost::shared_ptr<ActivationModelAbstract> activation_;
75 template <
typename _Scalar>
77 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
79 typedef _Scalar Scalar;
83 typedef typename MathBase::VectorXs VectorXs;
84 typedef typename MathBase::MatrixXs MatrixXs;
86 template <
template <
typename Scalar>
class Model>
89 activation(model->get_activation()->createData()),
91 Lx(model->get_state()->get_ndx()),
93 Lxx(model->get_state()->get_ndx(), model->get_state()->get_ndx()),
94 Lxu(model->get_state()->get_ndx(), model->get_nu()),
95 Luu(model->get_nu(), model->get_nu()),
96 r(model->get_activation()->get_nr()),
97 Rx(model->get_activation()->get_nr(), model->get_state()->get_ndx()),
98 Ru(model->get_activation()->get_nr(), model->get_nu()) {
111 boost::shared_ptr<ActivationDataAbstract> activation;
128 #include "crocoddyl/multibody/cost-base.hxx"
130 #endif // CROCODDYL_MULTIBODY_COST_BASE_HPP_