10 #ifndef CROCODDYL_MULTIBODY_CONTACTS_MULTIPLE_CONTACTS_HPP_
11 #define CROCODDYL_MULTIBODY_CONTACTS_MULTIPLE_CONTACTS_HPP_
13 #include "crocoddyl/multibody/contact-base.hpp"
14 #include "crocoddyl/multibody/fwd.hpp"
18 template <
typename _Scalar>
20 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
22 typedef _Scalar Scalar;
27 std::shared_ptr<ContactModelAbstract> contact,
28 const bool active =
true)
29 : name(name), contact(contact), active(active) {}
31 template <
typename NewScalar>
34 ReturnType ret(name, contact->template cast<NewScalar>(), active);
43 os <<
"{" << *model.contact <<
"}";
48 std::shared_ptr<ContactModelAbstract> contact;
60 template <
typename _Scalar>
63 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
65 typedef _Scalar Scalar;
74 typedef typename MathBase::Vector2s Vector2s;
75 typedef typename MathBase::Vector3s Vector3s;
76 typedef typename MathBase::VectorXs VectorXs;
77 typedef typename MathBase::MatrixXs MatrixXs;
79 typedef std::map<std::string, std::shared_ptr<ContactItem> >
80 ContactModelContainer;
81 typedef std::map<std::string, std::shared_ptr<ContactDataAbstract> >
83 typedef typename pinocchio::container::aligned_vector<
84 pinocchio::ForceTpl<Scalar> >::iterator ForceIterator;
93 const std::size_t nu);
113 std::shared_ptr<ContactModelAbstract> contact,
114 const bool active =
true);
137 void calc(
const std::shared_ptr<ContactDataMultiple>& data,
138 const Eigen::Ref<const VectorXs>& x);
146 void calcDiff(
const std::shared_ptr<ContactDataMultiple>& data,
147 const Eigen::Ref<const VectorXs>& x);
157 const VectorXs& dv)
const;
166 void updateForce(
const std::shared_ptr<ContactDataMultiple>& data,
167 const VectorXs& force);
179 const MatrixXs& ddv_dx)
const;
193 const MatrixXs& df_dx,
const MatrixXs& df_du)
const;
206 pinocchio::DataTpl<Scalar>& pinocchio)
const;
215 pinocchio::DataTpl<Scalar>*
const data);
226 template <
typename NewScalar>
232 const std::shared_ptr<StateMultibody>&
get_state()
const;
287 template <
class Scalar>
292 std::shared_ptr<StateMultibody> state_;
293 ContactModelContainer contacts_;
295 std::size_t nc_total_;
297 std::set<std::string> active_set_;
298 std::set<std::string> inactive_set_;
299 bool compute_all_contacts_;
307 template <
typename _Scalar>
309 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
311 typedef _Scalar Scalar;
315 typedef typename MathBase::VectorXs VectorXs;
316 typedef typename MathBase::MatrixXs MatrixXs;
324 template <
template <
typename Scalar>
class Model>
326 pinocchio::DataTpl<Scalar>*
const data)
327 :
Jc(model->get_nc_total(), model->get_state()->get_nv()),
328 a0(model->get_nc_total()),
329 da0_dx(model->get_nc_total(), model->get_state()->get_ndx()),
330 dv(model->get_state()->get_nv()),
331 ddv_dx(model->get_state()->get_nv(), model->get_state()->get_ndx()),
332 fext(model->get_state()->get_pinocchio()->njoints,
333 pinocchio::ForceTpl<Scalar>::Zero()) {
339 for (
typename ContactModelMultiple::ContactModelContainer::const_iterator
340 it = model->get_contacts().begin();
341 it != model->get_contacts().end(); ++it) {
342 const std::shared_ptr<ContactItem>& item = it->second;
344 std::make_pair(item->name, item->contact->createData(data)));
366 typename ContactModelMultiple::ContactDataContainer
368 pinocchio::container::aligned_vector<pinocchio::ForceTpl<Scalar> >
377 #include "crocoddyl/multibody/contacts/multiple-contacts.hxx"
State multibody representation.