QPContacts.h
Go to the documentation of this file.
1 /*
2  * Copyright 2012-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 // include
8 // std
9 #include <vector>
10 
11 // Eigen
12 #include <Eigen/Core>
13 
14 // SpaceVecAlg
15 #include <tasks/config.hh>
16 
17 #include <SpaceVecAlg/SpaceVecAlg>
18 
19 namespace tasks
20 {
21 
22 namespace qp
23 {
24 
29 struct TASKS_DLLAPI FrictionCone
30 {
32 
40  FrictionCone(const Eigen::Matrix3d & frame, int nrGen, double mu, double direction = 1.);
41 
43  std::vector<Eigen::Vector3d> generators;
44 };
45 
49 struct TASKS_DLLAPI ContactId
50 {
51  ContactId();
60  ContactId(int r1Index,
61  int r2Index,
62  const std::string & r1BodyName,
63  const std::string & r2BodyName,
64  int ambiguityId = -1);
65 
66  bool operator==(const ContactId & cId) const;
67  bool operator!=(const ContactId & cId) const;
68 
69  bool operator<(const ContactId & cId) const;
70 
71  int r1Index, r2Index;
72  std::string r1BodyName, r2BodyName;
74 };
75 
80 struct TASKS_DLLAPI UnilateralContact
81 {
83 
98  UnilateralContact(int r1Index,
99  int r2Index,
100  const std::string & r1BodyName,
101  const std::string & r2BodyName,
102  std::vector<Eigen::Vector3d> r1Points,
103  const Eigen::Matrix3d & r1Frame,
104  const sva::PTransformd & X_b1_b2,
105  int nrGen,
106  double mu,
107  const sva::PTransformd & X_b1_cf = sva::PTransformd::Identity());
108 
125  UnilateralContact(int r1Index,
126  int r2Index,
127  const std::string & r1BodyName,
128  const std::string & r2BodyName,
129  int ambId,
130  std::vector<Eigen::Vector3d> r1Points,
131  const Eigen::Matrix3d & r1Frame,
132  const sva::PTransformd & X_b1_b2,
133  int nrGen,
134  double mu,
135  const sva::PTransformd & X_b1_cf = sva::PTransformd::Identity());
136 
148  UnilateralContact(const ContactId & cId,
149  std::vector<Eigen::Vector3d> r1Points,
150  const Eigen::Matrix3d & r1Frame,
151  const sva::PTransformd & X_b1_b2,
152  int nrGen,
153  double mu,
154  const sva::PTransformd & X_b1_cf = sva::PTransformd::Identity());
155 
157  Eigen::Vector3d force(const Eigen::VectorXd & lambda, int p, const FrictionCone & c) const;
159  Eigen::Vector3d force(const Eigen::VectorXd & lambda, const FrictionCone & c) const;
160 
168  sva::ForceVecd force(const Eigen::VectorXd & lambda,
169  const std::vector<Eigen::Vector3d> & r_b_pi,
170  const FrictionCone & c_pi_b) const;
171 
173  int nrLambda(int point) const;
175  int nrLambda() const;
176 
182  Eigen::Vector3d sForce(const Eigen::VectorXd & lambda, int point, const FrictionCone & c) const;
187  Eigen::Vector3d sForce(const Eigen::VectorXd & lambda, const FrictionCone & c) const;
192  sva::ForceVecd sForce(const Eigen::VectorXd & lambda,
193  const std::vector<Eigen::Vector3d> & r_b_pi,
194  const FrictionCone & c_pi_b) const;
195 
200  int sNrLambda(int point) const;
201 
203  std::vector<Eigen::Vector3d> r1Points, r2Points;
205  sva::PTransformd X_b1_b2;
206  sva::PTransformd X_b1_cf;
207 
208 private:
209  void construct(const Eigen::MatrixXd & r1Frame, int nrGen, double mu);
210 };
211 
216 struct TASKS_DLLAPI BilateralContact
217 {
219 
234  BilateralContact(int r1Index,
235  int r2Index,
236  const std::string & r1BodyName,
237  const std::string & r2BodyName,
238  std::vector<Eigen::Vector3d> r1Points,
239  const std::vector<Eigen::Matrix3d> & r1Frames,
240  const sva::PTransformd & X_b1_b2,
241  int nrGen,
242  double mu,
243  const sva::PTransformd & X_b1_cf = sva::PTransformd::Identity());
244 
261  BilateralContact(int r1Index,
262  int r2Index,
263  const std::string & r1BodyName,
264  const std::string & r2BodyName,
265  int ambId,
266  std::vector<Eigen::Vector3d> r1Points,
267  const std::vector<Eigen::Matrix3d> & r1Frames,
268  const sva::PTransformd & X_b1_b2,
269  int nrGen,
270  double mu,
271  const sva::PTransformd & X_b1_cf = sva::PTransformd::Identity());
272 
284  BilateralContact(const ContactId & cId,
285  std::vector<Eigen::Vector3d> r1Points,
286  const std::vector<Eigen::Matrix3d> & r1Frames,
287  const sva::PTransformd & X_b1_b2,
288  int nrGen,
289  double mu,
290  const sva::PTransformd & X_b1_cf = sva::PTransformd::Identity());
291 
296 
298  Eigen::Vector3d force(const Eigen::VectorXd & lambda, int point, const std::vector<FrictionCone> & c) const;
300  Eigen::Vector3d force(const Eigen::VectorXd & lambda, const std::vector<FrictionCone> & c) const;
301 
309  sva::ForceVecd force(const Eigen::VectorXd & lambda,
310  const std::vector<Eigen::Vector3d> & r_b_pi,
311  const std::vector<FrictionCone> & c_pi_b) const;
312 
314  int nrLambda(int point) const;
316  int nrLambda() const;
317 
323  Eigen::Vector3d sForce(const Eigen::VectorXd & lambda, int point, const std::vector<FrictionCone> & c) const;
328  Eigen::Vector3d sForce(const Eigen::VectorXd & lambda, const std::vector<FrictionCone> & c) const;
333  sva::ForceVecd sForce(const Eigen::VectorXd & lambda,
334  const std::vector<Eigen::Vector3d> & r_b_pi,
335  const std::vector<FrictionCone> & c_pi_b) const;
336 
341  int sNrLambda(int point) const;
342 
344  std::vector<Eigen::Vector3d> r1Points, r2Points;
345  std::vector<FrictionCone> r1Cones, r2Cones;
346  sva::PTransformd X_b1_b2;
347  sva::PTransformd X_b1_cf;
348 
349 private:
350  void construct(const std::vector<Eigen::Matrix3d> & r1Frames, int nrGen, double mu);
351 };
352 
353 } // namespace qp
354 
355 } // namespace tasks
tasks::qp::FrictionCone::FrictionCone
FrictionCone()
Definition: QPContacts.h:31
tasks::qp::ContactId
Definition: QPContacts.h:49
tasks::qp::UnilateralContact
Definition: QPContacts.h:80
tasks::qp::UnilateralContact::r2Points
std::vector< Eigen::Vector3d > r2Points
Definition: QPContacts.h:203
tasks::qp::UnilateralContact::UnilateralContact
UnilateralContact()
Definition: QPContacts.h:82
tasks::qp::FrictionCone::generators
std::vector< Eigen::Vector3d > generators
Vector of generatrix.
Definition: QPContacts.h:43
tasks::qp::ContactId::r2Index
int r2Index
Definition: QPContacts.h:71
tasks::qp::FrictionCone
Definition: QPContacts.h:29
tasks::qp::UnilateralContact::contactId
ContactId contactId
Definition: QPContacts.h:202
tasks::qp::UnilateralContact::X_b1_b2
sva::PTransformd X_b1_b2
Definition: QPContacts.h:205
tasks::qp::BilateralContact::BilateralContact
BilateralContact()
Definition: QPContacts.h:218
tasks::qp::BilateralContact
Definition: QPContacts.h:216
tasks::qp::UnilateralContact::X_b1_cf
sva::PTransformd X_b1_cf
Definition: QPContacts.h:206
tasks::qp::BilateralContact::X_b1_b2
sva::PTransformd X_b1_b2
Definition: QPContacts.h:346
tasks::qp::ContactId::ambiguityId
int ambiguityId
Definition: QPContacts.h:73
tasks::qp::BilateralContact::contactId
ContactId contactId
Definition: QPContacts.h:343
tasks::qp::BilateralContact::r2Cones
std::vector< FrictionCone > r2Cones
Definition: QPContacts.h:345
tasks::qp::BilateralContact::r2Points
std::vector< Eigen::Vector3d > r2Points
Definition: QPContacts.h:344
tasks::qp::ContactId::r2BodyName
std::string r2BodyName
Definition: QPContacts.h:72
tasks::qp::UnilateralContact::r2Cone
FrictionCone r2Cone
Definition: QPContacts.h:204
tasks::qp::BilateralContact::X_b1_cf
sva::PTransformd X_b1_cf
Definition: QPContacts.h:347
tasks
Definition: GenQPUtils.h:18