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 {
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 
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 
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
Definition: GenQPUtils.h:19
Definition: QPContacts.h:217
std::vector< FrictionCone > r1Cones
Definition: QPContacts.h:345
BilateralContact(int r1Index, int r2Index, const std::string &r1BodyName, const std::string &r2BodyName, std::vector< Eigen::Vector3d > r1Points, const std::vector< Eigen::Matrix3d > &r1Frames, const sva::PTransformd &X_b1_b2, int nrGen, double mu, const sva::PTransformd &X_b1_cf=sva::PTransformd::Identity())
ContactId contactId
Definition: QPContacts.h:343
int sNrLambda(int point) const
sva::ForceVecd force(const Eigen::VectorXd &lambda, const std::vector< Eigen::Vector3d > &r_b_pi, const std::vector< FrictionCone > &c_pi_b) const
BilateralContact(const ContactId &cId, std::vector< Eigen::Vector3d > r1Points, const std::vector< Eigen::Matrix3d > &r1Frames, const sva::PTransformd &X_b1_b2, int nrGen, double mu, const sva::PTransformd &X_b1_cf=sva::PTransformd::Identity())
BilateralContact()
Definition: QPContacts.h:218
Eigen::Vector3d force(const Eigen::VectorXd &lambda, int point, const std::vector< FrictionCone > &c) const
std::vector< Eigen::Vector3d > r1Points
Definition: QPContacts.h:344
sva::ForceVecd sForce(const Eigen::VectorXd &lambda, const std::vector< Eigen::Vector3d > &r_b_pi, const std::vector< FrictionCone > &c_pi_b) const
BilateralContact(int r1Index, int r2Index, const std::string &r1BodyName, const std::string &r2BodyName, int ambId, std::vector< Eigen::Vector3d > r1Points, const std::vector< Eigen::Matrix3d > &r1Frames, const sva::PTransformd &X_b1_b2, int nrGen, double mu, const sva::PTransformd &X_b1_cf=sva::PTransformd::Identity())
BilateralContact(const UnilateralContact &c)
Eigen::Vector3d sForce(const Eigen::VectorXd &lambda, const std::vector< FrictionCone > &c) const
sva::PTransformd X_b1_cf
Definition: QPContacts.h:347
sva::PTransformd X_b1_b2
Definition: QPContacts.h:346
int nrLambda(int point) const
Eigen::Vector3d force(const Eigen::VectorXd &lambda, const std::vector< FrictionCone > &c) const
Eigen::Vector3d sForce(const Eigen::VectorXd &lambda, int point, const std::vector< FrictionCone > &c) const
Definition: QPContacts.h:50
bool operator<(const ContactId &cId) const
bool operator==(const ContactId &cId) const
std::string r1BodyName
Definition: QPContacts.h:72
int ambiguityId
Definition: QPContacts.h:73
ContactId(int r1Index, int r2Index, const std::string &r1BodyName, const std::string &r2BodyName, int ambiguityId=-1)
int r1Index
Definition: QPContacts.h:71
bool operator!=(const ContactId &cId) const
Definition: QPContacts.h:30
std::vector< Eigen::Vector3d > generators
Vector of generatrix.
Definition: QPContacts.h:43
FrictionCone()
Definition: QPContacts.h:31
FrictionCone(const Eigen::Matrix3d &frame, int nrGen, double mu, double direction=1.)
Definition: QPContacts.h:81
UnilateralContact()
Definition: QPContacts.h:82
int sNrLambda(int point) const
UnilateralContact(const ContactId &cId, std::vector< Eigen::Vector3d > r1Points, const Eigen::Matrix3d &r1Frame, const sva::PTransformd &X_b1_b2, int nrGen, double mu, const sva::PTransformd &X_b1_cf=sva::PTransformd::Identity())
ContactId contactId
Definition: QPContacts.h:202
Eigen::Vector3d force(const Eigen::VectorXd &lambda, int p, const FrictionCone &c) const
Eigen::Vector3d force(const Eigen::VectorXd &lambda, const FrictionCone &c) const
FrictionCone r1Cone
Definition: QPContacts.h:204
sva::ForceVecd force(const Eigen::VectorXd &lambda, const std::vector< Eigen::Vector3d > &r_b_pi, const FrictionCone &c_pi_b) const
UnilateralContact(int r1Index, int r2Index, const std::string &r1BodyName, const std::string &r2BodyName, std::vector< Eigen::Vector3d > r1Points, const Eigen::Matrix3d &r1Frame, const sva::PTransformd &X_b1_b2, int nrGen, double mu, const sva::PTransformd &X_b1_cf=sva::PTransformd::Identity())
Eigen::Vector3d sForce(const Eigen::VectorXd &lambda, int point, const FrictionCone &c) const
sva::PTransformd X_b1_b2
Definition: QPContacts.h:205
UnilateralContact(int r1Index, int r2Index, const std::string &r1BodyName, const std::string &r2BodyName, int ambId, std::vector< Eigen::Vector3d > r1Points, const Eigen::Matrix3d &r1Frame, const sva::PTransformd &X_b1_b2, int nrGen, double mu, const sva::PTransformd &X_b1_cf=sva::PTransformd::Identity())
int nrLambda(int point) const
sva::PTransformd X_b1_cf
Definition: QPContacts.h:206
sva::ForceVecd sForce(const Eigen::VectorXd &lambda, const std::vector< Eigen::Vector3d > &r_b_pi, const FrictionCone &c_pi_b) const
Eigen::Vector3d sForce(const Eigen::VectorXd &lambda, const FrictionCone &c) const
std::vector< Eigen::Vector3d > r1Points
Definition: QPContacts.h:203