4#ifndef __multicontact_api_scenario_contact_model_planar_hpp__
5#define __multicontact_api_scenario_contact_model_planar_hpp__
9#include <pinocchio/fwd.hpp>
10#include <pinocchio/spatial/skew.hpp>
19template <
typename _Scalar>
22 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
25 typedef Eigen::Matrix<Scalar, 3, 3>
Matrix3;
26 typedef Eigen::Matrix<Scalar, 3, Eigen::Dynamic>
Matrix3X;
27 typedef Eigen::Matrix<Scalar, 6, Eigen::Dynamic>
Matrix6X;
33 m_num_contact_points(1),
34 m_contact_points_positions(
Matrix3X::Zero(3, 1)) {}
40 m_num_contact_points(1),
41 m_contact_points_positions(
Matrix3X::Zero(3, 1)) {}
47 m_num_contact_points(1),
48 m_contact_points_positions(
Matrix3X::Zero(3, 1)) {}
51 template <
typename S2>
55 m_contact_points_positions(other.m_contact_points_positions),
56 m_num_contact_points(other.m_num_contact_points) {}
58 template <
typename S2>
61 m_num_contact_points == other.m_num_contact_points &&
62 m_contact_points_positions == other.m_contact_points_positions;
65 template <
typename S2>
67 return !(*
this == other);
70 void disp(std::ostream& os)
const {
72 <<
"Number of contact points: " << m_num_contact_points
73 <<
", positions: " << std::endl
74 << m_contact_points_positions << std::endl;
77 template <
typename S2>
87 m_num_contact_points = num;
88 m_contact_points_positions = Matrix3X::Zero(3, num);
92 return m_contact_points_positions;
96 m_contact_points_positions = positions;
97 m_num_contact_points = positions.cols();
106 Matrix6X gen = Matrix6X::Zero(6, m_num_contact_points * 3);
107 for (
size_t i = 0; i < m_num_contact_points; i++) {
108 gen.block(0, i * 3, 3, 3) = Matrix3::Identity();
109 gen.block(3, i * 3, 3, 3) =
110 pinocchio::skew(m_contact_points_positions.col(i));
122 size_t m_num_contact_points;
125 Matrix3X m_contact_points_positions;
130 template <
class Archive>
131 void save(Archive& ar,
const unsigned int )
const {
132 ar& boost::serialization::make_nvp(
"mu",
m_mu);
133 ar& boost::serialization::make_nvp(
"contact_type",
m_contact_type);
134 ar& boost::serialization::make_nvp(
"num_contact_points",
135 m_num_contact_points);
136 ar& boost::serialization::make_nvp(
"contact_points_positions",
137 m_contact_points_positions);
140 template <
class Archive>
141 void load(Archive& ar,
const unsigned int ) {
142 ar >> boost::serialization::make_nvp(
"mu",
m_mu);
143 ar >> boost::serialization::make_nvp(
"contact_type",
m_contact_type);
144 ar >> boost::serialization::make_nvp(
"num_contact_points",
145 m_num_contact_points);
146 ar >> boost::serialization::make_nvp(
"contact_points_positions",
147 m_contact_points_positions);
150 BOOST_SERIALIZATION_SPLIT_MEMBER()
#define MULTICONTACT_API_DEFINE_CLASS_TEMPLATE_VERSION(Template, Type)
Definition archive.hpp:22