KrisLibrary  1.0.0
CSpace.h
1 #ifndef ROBOTICS_CSPACE_H
2 #define ROBOTICS_CSPACE_H
3 
4 
5 #include <KrisLibrary/math/vector.h>
7 #include <KrisLibrary/utils/PropertyMap.h>
8 #include <memory>
9 #include "CSet.h"
10 
11 namespace Optimization {
12  class NonlinearProgram;
13 } //namespace Math
14 using namespace Math;
15 typedef Vector Config;
16 class Interpolator;
17 class EdgePlanner;
18 class CSpace;
19 typedef std::shared_ptr<EdgePlanner> EdgePlannerPtr;
20 
21 
34 class CSpace
35 {
36 public:
37  virtual ~CSpace() {}
38  void AddConstraint(const std::string& name,CSet* constraint);
39  void AddConstraint(const std::string& name,const std::shared_ptr<CSet>& constraint);
40  void AddConstraint(const std::string& name,CSet::CPredicate test);
41  void CopyConstraints(const CSpace* space,const std::string& prefix="");
42  virtual int NumDimensions();
43  virtual std::string VariableName(int i);
44  virtual int NumConstraints() { return (int)constraints.size(); }
45  virtual std::string ConstraintName(int i) { return constraintNames[i]; }
46  virtual std::shared_ptr<CSet> Constraint(int i) { return constraints[i]; }
47  virtual void Sample(Config& x)=0;
48  virtual void SampleNeighborhood(const Config& c,Real r,Config& x);
49  virtual bool IsFeasible(const Config&);
50  virtual bool IsFeasible(const Config&,int constraint);
51  virtual EdgePlannerPtr LocalPlanner(const Config& a,const Config& b);
52  virtual EdgePlannerPtr PathChecker(const Config& a,const Config& b);
53  virtual EdgePlannerPtr PathChecker(const Config& a,const Config& b,int constraint);
54 
56  virtual Real Distance(const Config& x, const Config& y) { return Distance_L2(x,y); }
57  virtual void Interpolate(const Config& x,const Config& y,Real u,Config& out);
58  virtual void Midpoint(const Config& x,const Config& y,Config& out);
59 
62  virtual bool ProjectFeasible(Config& x);
63 
65  virtual Optimization::NonlinearProgram* FeasibleNumeric();
66 
68  virtual Real ObstacleDistance(const Config& a);
69 
93  virtual void Properties(PropertyMap&);
94 
96  virtual void CheckConstraints(const Config&,std::vector<bool>& satisfied);
97 
99  void GetFeasibleNames(const Config& q,std::vector<std::string>& names);
101  void GetInfeasibleNames(const Config& q,std::vector<std::string>& names);
103  void PrintInfeasibleNames(const Config& q,std::ostream& out=std::cout,const char* prefix="",const char* suffix="\n");
104 
105  std::vector<std::string> constraintNames;
106  std::vector<std::shared_ptr<CSet> > constraints;
107 };
108 
109 #endif
Namespace for classes and functions in the Optimization package.
Definition: CSet.h:7
Real Sample(const Interval &s)
Uniformly samples the given intervals.
Definition: sample.cpp:116
Vector Config
an alias for Vector
Definition: RobotKinematics3D.h:14
Motion planning configuration space base class. The configuration space implements an interpolation s...
Definition: CSpace.h:34
Abstract base class for an edge planner / edge checker (i.e., local planner).
Definition: EdgePlanner.h:49
virtual Real Distance(const Config &x, const Config &y)
optionally overrideable (default uses euclidean space)
Definition: CSpace.h:56
A base class for all 1D interpolators.
Definition: Interpolator.h:10
Standard vector/matrix metrics.
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
A simple map from keys to values.
Definition: PropertyMap.h:27
A structure defining a nonlinear program.
Definition: NonlinearProgram.h:22
A subset of a CSpace, which establishes a constraint for a configuration to be feasible.
Definition: CSet.h:20