Klamp't  0.8.1
NumericalConstraint.h
Go to the documentation of this file.
1 #ifndef NUMERICAL_CSPACE_CONSTRAINT_H
2 #define NUMERICAL_CSPACE_CONSTRAINT_H
3 
4 #include <KrisLibrary/math/InequalityConstraint.h>
5 #include <KrisLibrary/robotics/Stability.h>
6 #include <KrisLibrary/robotics/TorqueSolver.h>
7 #include "DistanceQuery.h"
8 #include <Klampt/Modeling/Robot.h>
9 #include <KrisLibrary/utils/ArrayMapping.h>
10 
18 struct JointLimitConstraint : public LimitConstraint
19 {
20  JointLimitConstraint(const Robot& _robot)
21  :LimitConstraint(_robot.qMin,_robot.qMax),robot(_robot)
22  {}
23  virtual string Label() const;
24  virtual string Label(int i) const;
25 
26  const Robot& robot;
27 };
28 
30 struct SuppPolyConstraint : public InequalityConstraint
31 {
32  SuppPolyConstraint(Robot& robot, SupportPolygon& sp);
33  virtual string Label() const;
34  virtual int NumDimensions() const;
35  virtual void PreEval(const Vector& x);
36  virtual void Eval(const Vector& x,Vector& v);
37  virtual Real Eval_i(const Vector& x,int i);
38  virtual void Jacobian(const Vector& x,Matrix& J);
39  virtual void Jacobian_i(const Vector& x,int i,Vector& Ji);
40  virtual void Hessian_i(const Vector& x,int i,Matrix& Hi);
41 
42  //saves by considering constraints dependent
43  virtual Real Margin(const Vector& x,int& minConstraint);
44  virtual bool Satisfies_i(const Vector& x,int i,Real d=Zero);
45 
46  Robot& robot;
47  SupportPolygon& sp;
48  LinearConstraint cmInequality;
49  Matrix A;
50  Vector b;
51 
52  //temp
53  Vector vcom;
54  DirtyData<Matrix> Jcom;
55  DirtyData<Matrix> Hcomx,Hcomy,Hcomz;
56 };
57 
59 struct CollisionConstraint : public InequalityConstraint
60 {
61  CollisionConstraint(Robot& robot, Geometry::AnyCollisionGeometry3D& geom);
62  virtual string Label() const;
63  virtual string Label(int i) const;
64  virtual int NumDimensions() const {
65 // return this->activeDofs.Size();
66 // cout << "calling NumDimensions" << endl;
67 // getchar();
68  return robot.links.size();
69  }
70  virtual void PreEval(const Vector& x);
71  virtual void Eval(const Vector& x, Vector& v);
72  virtual Real Eval_i(const Vector& x,int i);
73  virtual void Jacobian(const Vector& x,Matrix& J);
74  virtual void Jacobian_i(const Vector& x,int i,Vector& Ji);
75  //virtual void DirectionalDeriv(const Vector& x,const Vector& h,Vector& v);
76  virtual void Hessian_i(const Vector& x,int i,Matrix& Hi);
77 
78  virtual bool Satisfies_i(const Vector& x,int i,Real d=Zero);
79 
80  Robot& robot;
81  Geometry::AnyCollisionGeometry3D& geometry;
82  vector<DistanceQuery> query;
83  ArrayMapping activeDofs;
84 };
85 
87 struct SelfCollisionConstraint : public InequalityConstraint
88 {
90  virtual string Label() const;
91  virtual string Label(int i) const;
92  virtual int NumDimensions() const { return (int)collisionPairs.size(); }
93  virtual void PreEval(const Vector& x);
94  virtual void Eval(const Vector& x, Vector& v);
95  virtual Real Eval_i(const Vector& x,int i);
96  virtual void Jacobian(const Vector& x,Matrix& J);
97  virtual void Jacobian_i(const Vector& x,int i,Vector& Ji);
98  //virtual void DirectionalDeriv(const Vector& x,const Vector& h,Vector& v);
99  virtual void Hessian_i(const Vector& x,int i,Matrix& Hi);
100 
101  virtual bool Satisfies_i(const Vector& x,int i,Real d=Zero);
102 
103  Robot& robot;
104  vector<pair<int,int> > collisionPairs;
105  vector<DistanceQuery> query;
106 };
107 
109 struct TorqueLimitConstraint : public InequalityConstraint
110 {
111  TorqueLimitConstraint(TorqueSolver& solver);
112  virtual string Label() const;
113  virtual int NumDimensions() const;
114  virtual void PreEval(const Vector& x);
115  virtual void Eval(const Vector& x,Vector& v);
116 
117  TorqueSolver& solver;
118 };
119 
120 #endif
Definition: NumericalConstraint.h:87
The main robot type used in RobotSim.
Definition: Robot.h:79
Definition: NumericalConstraint.h:18
Definition: NumericalConstraint.h:109
Definition: NumericalConstraint.h:30
Definition: NumericalConstraint.h:59