10 #ifndef CROCODDYL_MULTIBODY_CONTACTS_CONTACT_3D_HPP_
11 #define CROCODDYL_MULTIBODY_CONTACTS_CONTACT_3D_HPP_
13 #include "crocoddyl/core/utils/deprecate.hpp"
14 #include "crocoddyl/multibody/contact-base.hpp"
15 #include "crocoddyl/multibody/fwd.hpp"
19 template <
typename _Scalar>
22 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
25 typedef _Scalar Scalar;
31 typedef typename MathBase::Matrix3s Matrix3s;
32 typedef typename MathBase::Vector2s Vector2s;
33 typedef typename MathBase::Vector3s Vector3s;
34 typedef typename MathBase::VectorXs VectorXs;
52 const pinocchio::FrameIndex
id,
const Vector3s& xref,
53 const pinocchio::ReferenceFrame type,
const std::size_t nu,
54 const Vector2s& gains = Vector2s::Zero());
72 const pinocchio::FrameIndex
id,
const Vector3s& xref,
73 const pinocchio::ReferenceFrame type,
74 const Vector2s& gains = Vector2s::Zero());
77 "Use constructor that passes the type type of contact, this assumes is "
80 const pinocchio::FrameIndex
id,
const Vector3s& xref,
82 const Vector2s& gains = Vector2s::Zero());)
84 "Use constructor that passes the type type of contact, this assumes is "
87 const pinocchio::FrameIndex
id,
const Vector3s& xref,
88 const Vector2s& gains = Vector2s::Zero());)
98 virtual void calc(
const std::shared_ptr<ContactDataAbstract>& data,
99 const Eigen::Ref<const VectorXs>& x)
override;
108 virtual void calcDiff(
const std::shared_ptr<ContactDataAbstract>& data,
109 const Eigen::Ref<const VectorXs>& x)
override;
117 virtual void updateForce(
const std::shared_ptr<ContactDataAbstract>& data,
118 const VectorXs& force)
override;
124 pinocchio::DataTpl<Scalar>*
const data)
override;
135 template <
typename NewScalar>
158 virtual void print(std::ostream& os)
const override;
172 template <
typename _Scalar>
174 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
176 typedef _Scalar Scalar;
179 typedef typename MathBase::Vector3s Vector3s;
180 typedef typename MathBase::Matrix3s Matrix3s;
181 typedef typename MathBase::Matrix3xs Matrix3xs;
182 typedef typename MathBase::Matrix6xs Matrix6xs;
183 typedef typename pinocchio::MotionTpl<Scalar> Motion;
184 typedef typename pinocchio::ForceTpl<Scalar> Force;
186 template <
template <
typename Scalar>
class Model>
188 pinocchio::DataTpl<Scalar>*
const data)
191 f_local(Force::Zero()),
192 da0_local_dx(3, model->get_state()->get_ndx()),
193 fJf(6, model->get_state()->get_nv()),
194 v_partial_dq(6, model->get_state()->get_nv()),
195 a_partial_dq(6, model->get_state()->get_nv()),
196 a_partial_dv(6, model->get_state()->get_nv()),
197 a_partial_da(6, model->get_state()->get_nv()),
198 fXjdv_dq(6, model->get_state()->get_nv()),
199 fXjda_dq(6, model->get_state()->get_nv()),
200 fXjda_dv(6, model->get_state()->get_nv()),
201 fJf_df(3, model->get_state()->get_nv()) {
202 frame = model->get_id();
203 jMf = model->get_state()->get_pinocchio()->frames[
frame].placement;
204 fXj =
jMf.inverse().toActionMatrix();
208 da0_local_dx.setZero();
210 v_partial_dq.setZero();
211 a_partial_dq.setZero();
212 a_partial_dv.setZero();
213 a_partial_da.setZero();
217 a0_world_skew.setZero();
243 Matrix3xs da0_local_dx;
245 Matrix6xs v_partial_dq;
246 Matrix6xs a_partial_dq;
247 Matrix6xs a_partial_dv;
248 Matrix6xs a_partial_da;
252 Matrix3s a0_world_skew;
266 #include "crocoddyl/multibody/contacts/contact-3d.hxx"
State multibody representation.