10 #ifndef CROCODDYL_MULTIBODY_CONTACTS_MULTIPLE_CONTACTS_HPP_
11 #define CROCODDYL_MULTIBODY_CONTACTS_MULTIPLE_CONTACTS_HPP_
18 #include "crocoddyl/core/utils/exception.hpp"
19 #include "crocoddyl/multibody/contact-base.hpp"
20 #include "crocoddyl/multibody/fwd.hpp"
24 template <
typename _Scalar>
26 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
28 typedef _Scalar Scalar;
33 std::shared_ptr<ContactModelAbstract> contact,
34 const bool active =
true)
35 : name(name), contact(contact), active(active) {}
42 os <<
"{" << *model.contact <<
"}";
47 std::shared_ptr<ContactModelAbstract> contact;
59 template <
typename _Scalar>
62 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
64 typedef _Scalar Scalar;
73 typedef typename MathBase::Vector2s Vector2s;
74 typedef typename MathBase::Vector3s Vector3s;
75 typedef typename MathBase::VectorXs VectorXs;
76 typedef typename MathBase::MatrixXs MatrixXs;
78 typedef std::map<std::string, std::shared_ptr<ContactItem> >
79 ContactModelContainer;
80 typedef std::map<std::string, std::shared_ptr<ContactDataAbstract> >
82 typedef typename pinocchio::container::aligned_vector<
83 pinocchio::ForceTpl<Scalar> >::iterator ForceIterator;
92 const std::size_t nu);
112 std::shared_ptr<ContactModelAbstract> contact,
113 const bool active =
true);
136 void calc(
const std::shared_ptr<ContactDataMultiple>& data,
137 const Eigen::Ref<const VectorXs>& x);
145 void calcDiff(
const std::shared_ptr<ContactDataMultiple>& data,
146 const Eigen::Ref<const VectorXs>& x);
156 const VectorXs& dv)
const;
165 void updateForce(
const std::shared_ptr<ContactDataMultiple>& data,
166 const VectorXs& force);
178 const MatrixXs& ddv_dx)
const;
192 const MatrixXs& df_dx,
const MatrixXs& df_du)
const;
205 pinocchio::DataTpl<Scalar>& pinocchio)
const;
214 pinocchio::DataTpl<Scalar>*
const data);
219 const std::shared_ptr<StateMultibody>&
get_state()
const;
274 template <
class Scalar>
279 std::shared_ptr<StateMultibody> state_;
280 ContactModelContainer contacts_;
282 std::size_t nc_total_;
284 std::set<std::string> active_set_;
285 std::set<std::string> inactive_set_;
286 bool compute_all_contacts_;
294 template <
typename _Scalar>
296 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
298 typedef _Scalar Scalar;
302 typedef typename MathBase::VectorXs VectorXs;
303 typedef typename MathBase::MatrixXs MatrixXs;
311 template <
template <
typename Scalar>
class Model>
313 pinocchio::DataTpl<Scalar>*
const data)
314 :
Jc(model->get_nc_total(), model->get_state()->get_nv()),
315 a0(model->get_nc_total()),
316 da0_dx(model->get_nc_total(), model->get_state()->get_ndx()),
317 dv(model->get_state()->get_nv()),
318 ddv_dx(model->get_state()->get_nv(), model->get_state()->get_ndx()),
319 fext(model->get_state()->get_pinocchio()->njoints,
320 pinocchio::ForceTpl<Scalar>::Zero()) {
326 for (
typename ContactModelMultiple::ContactModelContainer::const_iterator
327 it = model->get_contacts().begin();
328 it != model->get_contacts().end(); ++it) {
329 const std::shared_ptr<ContactItem>& item = it->second;
331 std::make_pair(item->name, item->contact->createData(data)));
353 typename ContactModelMultiple::ContactDataContainer
355 pinocchio::container::aligned_vector<pinocchio::ForceTpl<Scalar> >
364 #include "crocoddyl/multibody/contacts/multiple-contacts.hxx"
State multibody representation.