9 #ifndef CROCODDYL_MULTIBODY_CONTACTS_CONTACT_2D_HPP_
10 #define CROCODDYL_MULTIBODY_CONTACTS_CONTACT_2D_HPP_
12 #include <pinocchio/spatial/motion.hpp>
13 #include <pinocchio/multibody/data.hpp>
14 #include <pinocchio/algorithm/frames.hpp>
15 #include <pinocchio/algorithm/kinematics-derivatives.hpp>
17 #include "crocoddyl/multibody/fwd.hpp"
18 #include "crocoddyl/core/utils/exception.hpp"
19 #include "crocoddyl/multibody/contact-base.hpp"
20 #include "crocoddyl/core/utils/deprecate.hpp"
22 #include "crocoddyl/multibody/frames-deprecated.hpp"
26 template <
typename _Scalar>
29 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
31 typedef _Scalar Scalar;
37 typedef typename MathBase::Vector2s Vector2s;
38 typedef typename MathBase::Vector3s Vector3s;
39 typedef typename MathBase::VectorXs VectorXs;
40 typedef typename MathBase::Matrix3s Matrix3s;
51 ContactModel2DTpl(boost::shared_ptr<StateMultibody> state,
const pinocchio::FrameIndex
id,
const Vector2s& xref,
52 const std::size_t nu,
const Vector2s& gains = Vector2s::Zero());
64 ContactModel2DTpl(boost::shared_ptr<StateMultibody> state,
const pinocchio::FrameIndex
id,
const Vector2s& xref,
65 const Vector2s& gains = Vector2s::Zero());
66 DEPRECATED(
"Use constructor which is not based on FrameTranslation.",
68 const std::size_t nu,
const Vector2s& gains = Vector2s::Zero());)
69 DEPRECATED(
"Use constructor which is not based on FrameTranslation.",
71 const Vector2s& gains = Vector2s::Zero());)
81 virtual void calc(
const boost::shared_ptr<ContactDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x);
90 virtual void calcDiff(
const boost::shared_ptr<ContactDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x);
98 virtual void updateForce(
const boost::shared_ptr<ContactDataAbstract>& data,
const VectorXs& force);
103 virtual boost::shared_ptr<ContactDataAbstract>
createData(pinocchio::DataTpl<Scalar>*
const data);
115 const Vector2s& get_gains()
const;
127 virtual void print(std::ostream& os)
const;
140 template <
typename _Scalar>
142 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
144 typedef _Scalar Scalar;
147 typedef typename MathBase::Matrix2s Matrix2s;
148 typedef typename MathBase::Matrix3s Matrix3s;
149 typedef typename MathBase::Matrix6xs Matrix6xs;
150 typedef typename MathBase::Vector3s Vector3s;
152 template <
template <
typename Scalar>
class Model>
153 ContactData2DTpl(Model<Scalar>*
const model, pinocchio::DataTpl<Scalar>*
const data)
155 fJf(6, model->get_state()->get_nv()),
156 v_partial_dq(6, model->get_state()->get_nv()),
157 a_partial_dq(6, model->get_state()->get_nv()),
158 a_partial_dv(6, model->get_state()->get_nv()),
159 a_partial_da(6, model->get_state()->get_nv()),
160 fXjdv_dq(6, model->get_state()->get_nv()),
161 fXjda_dq(6, model->get_state()->get_nv()),
162 fXjda_dv(6, model->get_state()->get_nv()) {
163 frame = model->get_id();
164 jMf = model->get_state()->get_pinocchio()->frames[
frame].placement;
165 fXj =
jMf.inverse().toActionMatrix();
167 v_partial_dq.setZero();
168 a_partial_dq.setZero();
169 a_partial_dv.setZero();
170 a_partial_da.setZero();
192 pinocchio::MotionTpl<Scalar> v;
193 pinocchio::MotionTpl<Scalar> a;
195 Matrix6xs v_partial_dq;
196 Matrix6xs a_partial_dq;
197 Matrix6xs a_partial_dv;
198 Matrix6xs a_partial_da;
214 #include "crocoddyl/multibody/contacts/contact-2d.hxx"
216 #endif // CROCODDYL_MULTIBODY_CONTACTS_CONTACT_2D_HPP_