Klamp't  0.8.1
Hold.h
Go to the documentation of this file.
1 #ifndef HOLD_H
2 #define HOLD_H
3 
4 #include <KrisLibrary/robotics/Contact.h>
5 #include <KrisLibrary/robotics/IK.h>
6 using namespace std;
7 
26 struct Hold
27 {
29  void Transform(const RigidTransform& T);
31  inline void GetCentroid(Vector3& c) const
32  {
33  c.setZero();
34  for(size_t i=0;i<contacts.size();i++)
35  c += contacts[i].x;
36  c/=(Real)contacts.size();
37  }
38 
39  //Returns the average normal of the contacts
40  inline void GetNormal(Vector3& n) const
41  {
42  n.setZero();
43  for(size_t j=0;j<contacts.size();j++)
44  n += contacts[j].n;
45  n.inplaceNormalize();
46  }
47 
49  inline Vector3 GetCentroid() const { Vector3 c; GetCentroid(c); return c; }
50  inline Vector3 GetNormal() const { Vector3 n; GetNormal(n); return n; }
51 
64  void SetupIKConstraint(const Vector3& localPos0, const Vector3& rot);
73  void SetupFixedIKConstraint( const Vector3& localPos0, const Matrix3& rot);
80  void SetupPointIKConstraint(const Vector3& localPos0);
91  void SetupAxisIKConstraint( const Vector3& localPos0, const Vector3& axis, const Vector3& axis_w);
92 
93  int link;
94  vector<ContactPoint> contacts;
95  IKGoal ikConstraint;
96 };
97 
98 bool operator == (const Hold& a,const Hold& b);
99 bool operator < (const Hold& a,const Hold& b);
100 bool operator > (const Hold& a,const Hold& b);
101 ostream& operator << (ostream&, const Hold&);
102 istream& operator >> (istream&, Hold&);
103 
106 #endif
void GetCentroid(Vector3 &c) const
Returns the centroid of the contacts.
Definition: Hold.h:31
A single contact between the robot and the environment.
Definition: Hold.h:26
Vector3 GetCentroid() const
Same as above.
Definition: Hold.h:49