1 #ifndef CSPACE_HELPERS_H 2 #define CSPACE_HELPERS_H 5 #include "GeodesicSpace.h" 25 virtual int NumDimensions() {
return geodesic->NumDimensions(); }
26 virtual int NumIntrinsicDimensions() {
return geodesic->NumIntrinsicDimensions(); }
28 virtual void Interpolate(
const Config& x,
const Config& y,Real u,
Config& out) { geodesic->Interpolate(x,y,u,out); }
29 virtual void Midpoint(
const Config& x,
const Config& y,
Config& out) { geodesic->Interpolate(x,y,0.5,out); }
31 virtual void InterpolateDeriv(
const Config& a,
const Config& b,Real u,
Vector& dx) { geodesic->InterpolateDeriv(a,b,u,dx); }
32 virtual void InterpolateDerivA(
const Config& a,
const Config& b,Real u,
const Vector& da,
Vector& dx) { geodesic->InterpolateDerivA(a,b,u,da,dx); }
33 virtual void InterpolateDerivB(
const Config& a,
const Config& b,Real u,
const Vector& db,
Vector& dx) { geodesic->InterpolateDerivB(a,b,u,db,dx); }
34 virtual void InterpolateDeriv2(
const Config& a,
const Config& b,Real u,
Vector& ddx) { geodesic->InterpolateDeriv2(a,b,u,ddx); }
35 virtual void Integrate(
const Config& a,
const Vector& da,
Config& b) { geodesic->Integrate(a,da,b); }
37 std::shared_ptr<GeodesicSpace> geodesic;
48 virtual int NumDimensions() {
return d; }
49 virtual void SampleNeighborhood(
const Config& c,Real r,
Config& x);
51 virtual void Interpolate(
const Config& x,
const Config& y,Real u,
Config& out) { CSpace::Interpolate(x,y,u,out); }
52 virtual void Midpoint(
const Config& x,
const Config& y,
Config& out) { out.add(x,y); out.inplaceMul(0.5); }
54 virtual void Sample(
Config& q) { FatalError(
"Not implemented"); }
70 virtual EdgePlannerPtr PathChecker(
const Config& a,
const Config& b);
71 virtual void Sample(
Config& x);
72 virtual void SampleNeighborhood(
const Config& c,Real r,
Config& x);
114 MultiCSpace(
const std::shared_ptr<CSpace>& space1,
const std::shared_ptr<CSpace>& space2);
115 MultiCSpace(
const std::vector<std::shared_ptr<CSpace> >& components);
116 void Add(
const std::string& name,
const std::shared_ptr<CSpace>& space,Real distanceWeight=1);
127 void FlattenConstraints();
130 void AddConstraint(
int spaceIndex,
const std::string& name,
CSet* constraint);
133 void AddConstraint(
int spaceIndex,
const std::string& name,
const std::shared_ptr<CSet>& constraint);
136 void AddConstraint(
int spaceIndex,
const std::string& name,CSet::CPredicate test);
138 void Split(
const Vector& x,std::vector<Vector>& items);
139 void SplitRef(
const Vector& x,std::vector<Vector>& items);
140 void Join(
const std::vector<Vector>& items,
Vector& x);
144 bool IsFeasible_Independent(
const Config&);
146 EdgePlannerPtr LocalPlanner_Independent(
const Config& a,
const Config& b);
148 EdgePlannerPtr PathChecker_Independent(
const Config& a,
const Config& b);
150 EdgePlannerPtr PathChecker_Independent(
const Config& a,
const Config& b,
int constraint);
153 virtual int NumDimensions();
154 virtual int NumIntrinsicDimensions();
155 virtual std::string VariableName(
int i);
156 virtual int NumConstraints();
157 virtual std::string ConstraintName(
int i);
158 virtual std::shared_ptr<CSet> Constraint(
int i);
159 virtual void Sample(
Config& x);
160 virtual void SampleNeighborhood(
const Config& c,Real r,
Config& x);
161 virtual bool IsFeasible(
const Config& q);
163 virtual EdgePlannerPtr LocalPlanner(
const Config& a,
const Config& b);
164 virtual EdgePlannerPtr PathChecker(
const Config& a,
const Config& b);
165 virtual EdgePlannerPtr PathChecker(
const Config& a,
const Config& b,
int obstacle);
181 std::vector<std::shared_ptr<CSpace> > components;
182 std::vector<std::string> componentNames;
183 std::vector<Real> distanceWeights;
200 virtual int NumDimensions();
201 virtual std::string VariableName(
int i);
202 virtual int NumConstraints();
203 virtual std::string ConstraintName(
int i);
204 virtual std::shared_ptr<CSet> Constraint(
int i);
205 virtual void Sample(
Config& x);
206 virtual void SampleNeighborhood(
const Config& c,Real r,
Config& x);
207 virtual EdgePlannerPtr LocalPlanner(
const Config& a,
const Config& b);
208 virtual EdgePlannerPtr PathChecker(
const Config& a,
const Config& b);
209 virtual EdgePlannerPtr PathChecker(
const Config& a,
const Config& b,
int obstacle);
210 virtual bool IsFeasible(
const Config& x);
211 virtual bool IsFeasible(
const Config&,
int constraint);
230 virtual bool IsFeasible(
const Config& x) {
return CSpace::IsFeasible(x); }
231 virtual bool IsFeasible(
const Config& x,
int obstacle) {
return CSpace::IsFeasible(x,obstacle); }
234 virtual EdgePlannerPtr LocalPlanner(
const Config& a,
const Config& b) {
return CSpace::LocalPlanner(a,b); }
235 virtual EdgePlannerPtr PathChecker(
const Config& a,
const Config& b);
236 virtual EdgePlannerPtr PathChecker(
const Config& a,
const Config& b,
int obstacle);
238 std::vector<int> activeConstraints;
258 virtual bool IsFeasible(
const Config& x);
259 virtual bool IsFeasible(
const Config& x,
int obstacle);
261 virtual EdgePlannerPtr PathChecker(
const Config& a,
const Config& b);
262 virtual EdgePlannerPtr PathChecker(
const Config& a,
const Config& b,
int obstacle);
263 bool IsFeasible_NoDeps(
const Config& x,
int obstacle);
264 EdgePlannerPtr PathChecker_NoDeps(
const Config& a,
const Config& b,
int obstacle);
265 void SetupAdaptiveInfo();
266 bool AddFeasibleDependency(
int constraint,
int dependency);
267 bool AddVisibleDependency(
int constraint,
int dependency);
268 bool AddFeasibleDependency(
const char* name,
const char* dependency);
269 bool AddVisibleDependency(
const char* name,
const char* dependency);
270 void OptimizeQueryOrder();
271 void GetFeasibleDependencies(
int obstacle,std::vector<int>& deps,
bool recursive=
true)
const;
272 void GetVisibleDependencies(
int obstacle,std::vector<int>& deps,
bool recursive=
true)
const;
283 std::map<std::string,int> constraintMap;
284 std::vector<PredicateStats> feasibleStats,visibleStats;
285 std::vector<std::vector<int> > feasibleTestDeps,visibleTestDeps;
286 std::vector<int> feasibleTestOrder,visibleTestOrder;
287 bool useBaseVisibleTest;
294 EdgePlannerPtr MakeSingleConstraintEpsilonChecker(
CSpace* space,
const Config& a,
const Config& b,
int obstacle,Real epsilon);
298 EdgePlannerPtr MakeSingleConstraintBisectionPlanner(
CSpace* space,
const Config& a,
const Config& b,
int obstacle,Real epsilon);
Definition: CSpaceHelpers.h:110
A space with geodesics and (optionally) geodesic derivatives.
Definition: GeodesicSpace.h:31
virtual void Properties(PropertyMap &)
Returns properties of the space that might be useful for planners.
Definition: CSpace.cpp:127
virtual Real Distance(const Config &x, const Config &y)
optionally overrideable (default uses euclidean space)
Definition: CSpaceHelpers.h:27
virtual Optimization::NonlinearProgram * FeasibleNumeric()
If possible, give the feasible set as a nonlinear program.
Definition: CSpace.cpp:190
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:39
virtual Optimization::NonlinearProgram * FeasibleNumeric()
If possible, give the feasible set as a nonlinear program.
Definition: CSpaceHelpers.h:233
Definition: CSpaceHelpers.h:11
virtual void CheckConstraints(const Config &, std::vector< bool > &satisfied)
Returns a vector indicating which constraints are satisfied.
Definition: CSpace.cpp:211
virtual Real Distance(const Config &x, const Config &y)
optionally overrideable (default uses euclidean space)
Definition: CSpaceHelpers.h:50
virtual Real Distance(const Config &x, const Config &y)
optionally overrideable (default uses euclidean space)
Definition: CSpace.h:61
bool AreSubspacesIndependent() const
Definition: CSpaceHelpers.h:120
virtual bool ProjectFeasible(Config &x)
Definition: CSpaceHelpers.h:232
virtual Real ObstacleDistance(const Config &a)
for local planners using obstacle distance
Definition: CSpace.cpp:201
A class that optimizes constraint testing order using empirical data.
Definition: CSpaceHelpers.h:254
Converts an CSpace so that it only checks one or a subset of selected constraints.
Definition: CSpaceHelpers.h:225
Definition: CSpaceHelpers.h:276
Vector bmin
The domain. NOTE: modifing these does not directly affect the constraints! Use SetDomain instead...
Definition: CSpaceHelpers.h:77
A helper class that assists with selective overriding of another cspace's methods (similar to "monkey...
Definition: CSpaceHelpers.h:196
A simple map from keys to values.
Definition: PropertyMap.h:27
A structure defining a nonlinear program.
Definition: NonlinearProgram.h:22
Definition: CSpaceHelpers.h:63
A subset of a CSpace, which establishes a constraint for a configuration must meet. Mathematically, this is a set S which imposes the constraint [q in S].
Definition: CSet.h:20
Definition: CSpaceHelpers.h:21
Definition: CSpaceHelpers.h:44
virtual bool ProjectFeasible(Config &x)
Definition: CSpace.cpp:141