9 #ifndef CROCODDYL_CORE_ACTUATION_BASE_HPP_ 10 #define CROCODDYL_CORE_ACTUATION_BASE_HPP_ 13 #include <boost/shared_ptr.hpp> 14 #include <boost/make_shared.hpp> 16 #include "crocoddyl/core/fwd.hpp" 17 #include "crocoddyl/core/mathbase.hpp" 18 #include "crocoddyl/core/state-base.hpp" 19 #include "crocoddyl/core/utils/to-string.hpp" 20 #include "crocoddyl/core/utils/exception.hpp" 24 template <
typename _Scalar>
27 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
29 typedef _Scalar Scalar;
33 typedef typename MathBase::VectorXs VectorXs;
34 typedef typename MathBase::MatrixXs MatrixXs;
38 throw_pretty(
"Invalid argument: " 39 <<
"nu cannot be zero");
44 virtual void calc(
const boost::shared_ptr<ActuationDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
45 const Eigen::Ref<const VectorXs>& u) = 0;
46 virtual void calcDiff(
const boost::shared_ptr<ActuationDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
47 const Eigen::Ref<const VectorXs>& u) = 0;
48 virtual boost::shared_ptr<ActuationDataAbstract> createData() {
49 return boost::allocate_shared<ActuationDataAbstract>(Eigen::aligned_allocator<ActuationDataAbstract>(),
this);
52 const std::size_t& get_nu()
const {
return nu_; };
53 const boost::shared_ptr<StateAbstract>& get_state()
const {
return state_; };
57 boost::shared_ptr<StateAbstract> state_;
60 template <
typename _Scalar>
62 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
64 typedef _Scalar Scalar;
66 typedef typename MathBase::VectorXs VectorXs;
67 typedef typename MathBase::MatrixXs MatrixXs;
69 template <
template <
typename Scalar>
class Model>
71 : tau(model->get_state()->get_nv()),
72 dtau_dx(model->get_state()->get_nv(), model->get_state()->get_ndx()),
73 dtau_du(model->get_state()->get_nv(), model->get_nu()) {
78 virtual ~ActuationDataAbstractTpl() {}
87 #endif // CROCODDYL_CORE_ACTUATION_BASE_HPP_ Abstract class for the state representation.