9 #include "crocoddyl/core/utils/exception.hpp"
10 #include "pinocchio/algorithm/center-of-mass-derivatives.hpp"
11 #include "pinocchio/algorithm/center-of-mass.hpp"
15 using namespace crocoddyl;
17 template <
typename Scalar>
19 boost::shared_ptr<StateMultibody> state,
const Vector3s& cref,
20 const double alpha,
const std::size_t nu)
21 :
Base(state, 3, nu, true, false, false),
24 pin_model_(*state->get_pinocchio()) {}
26 template <
typename Scalar>
28 boost::shared_ptr<StateMultibody> state,
const Vector3s& cref,
30 :
Base(state, 3, true, false, false),
33 pin_model_(*state->get_pinocchio()) {}
35 template <
typename Scalar>
38 template <
typename Scalar>
40 const boost::shared_ptr<ResidualDataAbstract>& data,
41 const Eigen::Ref<const VectorXs>&
x,
const Eigen::Ref<const VectorXs>&) {
43 Data* d =
static_cast<Data*
>(data.get());
44 const Eigen::VectorBlock<const Eigen::Ref<const VectorXs>, Eigen::Dynamic> q =
45 x.head(state_->get_nq());
46 const Eigen::VectorBlock<const Eigen::Ref<const VectorXs>, Eigen::Dynamic> v =
47 x.tail(state_->get_nv());
49 pinocchio::centerOfMass(pin_model_, *d->
pinocchio, q, v);
53 template <
typename Scalar>
55 const boost::shared_ptr<ResidualDataAbstract>& data,
56 const Eigen::Ref<const VectorXs>&,
const Eigen::Ref<const VectorXs>&) {
57 Data* d =
static_cast<Data*
>(data.get());
60 const std::size_t nv = state_->get_nv();
61 pinocchio::getCenterOfMassVelocityDerivatives(pin_model_, *d->
pinocchio,
64 data->Rx.rightCols(nv) = alpha_ * d->
pinocchio->Jcom;
67 template <
typename Scalar>
68 boost::shared_ptr<ResidualDataAbstractTpl<Scalar> >
71 return boost::allocate_shared<Data>(Eigen::aligned_allocator<Data>(),
this,
75 template <
typename Scalar>
77 const Eigen::IOFormat fmt(2, Eigen::DontAlignCols,
", ",
";\n",
"",
"",
"[",
79 os <<
"ResidualModelDCMPosition {cref=" << cref_.transpose().format(fmt)
83 template <
typename Scalar>
84 const typename MathBaseTpl<Scalar>::Vector3s&
89 template <
typename Scalar>