9 #include <crocoddyl/core/utils/exception.hpp>
10 #include <pinocchio/algorithm/frames-derivatives.hpp>
11 #include <pinocchio/algorithm/frames.hpp>
16 using namespace crocoddyl;
17 template <
typename Scalar>
19 boost::shared_ptr<StateMultibody> state,
20 const pinocchio::FrameIndex frame_id,
const Scalar slope,
21 const Scalar height,
const Scalar dist,
const Scalar width,
23 :
Base(state, 2, nu, true, true, false),
29 pin_model_(*state->get_pinocchio()) {}
31 template <
typename Scalar>
33 boost::shared_ptr<StateMultibody> state,
34 const pinocchio::FrameIndex frame_id,
const Scalar slope,
35 const Scalar height,
const Scalar dist,
const Scalar width)
36 :
Base(state, 2, true, true, false),
42 pin_model_(*state->get_pinocchio()) {}
44 template <
typename Scalar>
47 template <
typename Scalar>
49 const boost::shared_ptr<ResidualDataAbstract>& data,
50 const Eigen::Ref<const VectorXs>& ,
51 const Eigen::Ref<const VectorXs>&) {
54 Data* d =
static_cast<Data*
>(data.get());
56 pinocchio::updateFramePlacement(pin_model_, *d->
pinocchio, frame_id);
60 (1 + exp(-width * (d->
pinocchio->oMf[frame_id].translation()[0] - dist)));
68 (d->
pinocchio->oMf[frame_id].translation()[2] - height * d->
sig));
71 pinocchio::getFrameVelocity(pin_model_, *d->
pinocchio, frame_id,
72 pinocchio::LOCAL_WORLD_ALIGNED)
80 template <
typename Scalar>
82 const boost::shared_ptr<ResidualDataAbstract>& data,
83 const Eigen::Ref<const VectorXs>& ,
84 const Eigen::Ref<const VectorXs>&) {
85 Data* d =
static_cast<Data*
>(data.get());
86 const std::size_t nv = state_->get_nv();
98 pinocchio::getFrameVelocityDerivatives(pin_model_, *d->
pinocchio, frame_id,
102 frame_id, pinocchio::LOCAL)
113 d->
vxJ.noalias() = pinocchio::skew(-v) * d->
l_dnu_dv.template bottomRows<3>();
119 data->Rx.leftCols(nv) =
121 data->Rx.rightCols(nv) =
128 data->Rx.leftCols(nv).row(0) -=
131 data->Rx.leftCols(nv).row(1) -=
135 data->Rx.leftCols(nv).row(0) +=
137 pinocchio::getFrameVelocity(pin_model_, *d->
pinocchio, frame_id,
138 pinocchio::LOCAL_WORLD_ALIGNED)
141 data->Rx.leftCols(nv).row(1) +=
143 pinocchio::getFrameVelocity(pin_model_, *d->
pinocchio, frame_id,
144 pinocchio::LOCAL_WORLD_ALIGNED)
149 template <
typename Scalar>
150 boost::shared_ptr<ResidualDataAbstractTpl<Scalar> >
153 return boost::allocate_shared<Data>(Eigen::aligned_allocator<Data>(),
this,
157 template <
typename Scalar>
158 const typename pinocchio::FrameIndex&
163 template <
typename Scalar>
165 const pinocchio::FrameIndex& fid) {