10#ifndef CROCODDYL_MULTIBODY_CONTACT_BASE_HPP_ 11#define CROCODDYL_MULTIBODY_CONTACT_BASE_HPP_ 13#include "crocoddyl/core/utils/deprecate.hpp" 14#include "crocoddyl/multibody/force-base.hpp" 15#include "crocoddyl/multibody/fwd.hpp" 16#include "crocoddyl/multibody/states/multibody.hpp" 27template <
typename _Scalar>
30 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
32 typedef _Scalar Scalar;
36 typedef typename MathBase::VectorXs VectorXs;
37 typedef typename MathBase::MatrixXs MatrixXs;
48 const pinocchio::ReferenceFrame
type,
49 const std::size_t nc,
const std::size_t nu);
51 const pinocchio::ReferenceFrame
type,
52 const std::size_t nc);
55 "Use constructor that passes the type type of contact, this assumes is " 58 const std::size_t nc,
const std::size_t nu);)
60 "Use constructor that passes the type type of contact, this assumes is " 63 const std::size_t nc);)
73 virtual void calc(
const std::shared_ptr<ContactDataAbstract>& data,
74 const Eigen::Ref<const VectorXs>& x) = 0;
83 virtual void calcDiff(
const std::shared_ptr<ContactDataAbstract>& data,
84 const Eigen::Ref<const VectorXs>& x) = 0;
92 virtual void updateForce(
const std::shared_ptr<ContactDataAbstract>& data,
93 const VectorXs& force) = 0;
102 const MatrixXs& df_dx,
const MatrixXs& df_du)
const;
109 void setZeroForce(
const std::shared_ptr<ContactDataAbstract>& data)
const;
122 pinocchio::DataTpl<Scalar>*
const data);
127 const std::shared_ptr<StateMultibody>&
get_state()
const;
147 void set_id(
const pinocchio::FrameIndex
id);
162 template <
class Scalar>
171 virtual void print(std::ostream& os)
const;
174 std::shared_ptr<StateMultibody> state_;
177 pinocchio::FrameIndex
id_;
182template <
typename _Scalar>
183struct ContactDataAbstractTpl :
public ForceDataAbstractTpl<_Scalar> {
184 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
186 typedef _Scalar Scalar;
188 typedef ForceDataAbstractTpl<Scalar> Base;
189 typedef typename MathBase::VectorXs VectorXs;
190 typedef typename MathBase::MatrixXs MatrixXs;
191 typedef typename pinocchio::SE3Tpl<Scalar> SE3;
193 template <
template <
typename Scalar>
class Model>
194 ContactDataAbstractTpl(Model<Scalar>*
const model,
195 pinocchio::DataTpl<Scalar>*
const data)
197 fXj(
jMf.inverse().toActionMatrix()),
199 da0_dx(model->get_nc(), model->get_state()->get_ndx()),
200 dtau_dq(model->get_state()->get_nv(), model->get_state()->get_nv()) {
205 virtual ~ContactDataAbstractTpl() =
default;
215 typename SE3::ActionMatrixType fXj;
226#include "crocoddyl/multibody/contact-base.hxx" State multibody representation.
PinocchioData * pinocchio
pinocchio::FrameIndex frame