1 #ifndef ROBOTICS_MULTI_MODAL_CSPACE_H 2 #define ROBOTICS_MULTI_MODAL_CSPACE_H 5 #include <KrisLibrary/graph/UndirectedGraph.h> 6 #include <KrisLibrary/errors.h> 18 virtual bool IsValid(
const Mode& m) {
return true; }
19 virtual CSpace* GetModeCSpace(
const Mode& m) {
return NULL; }
20 virtual CSpace* GetTransitionCSpace(
const Mode& m1,
const Mode& m2) {
return NULL; }
23 virtual bool CanEnum()
const {
return false; }
24 virtual bool CanSample()
const {
return false; }
25 virtual void Enum(std::vector<Mode>& modes) { FatalError(
"MultiModalCSpace: Cannot enumerate all modes"); }
26 virtual void Sample(std::vector<Mode>& modes) { FatalError(
"MultiModalCSpace: Cannot sample modes"); }
29 virtual bool CanEnumAdjacent()
const {
return false; }
30 virtual bool CanSampleAdjacent()
const {
return false; }
31 virtual bool CanTestAdjacent()
const {
return false; }
32 virtual void EnumAdjacent(
const Mode& m,std::vector<Mode>& modes) { FatalError(
"MultiModalCSpace: Cannot enumerate adjacent modes"); }
33 virtual void SampleAdjacent(
const Mode& m,std::vector<Mode>& adj) { FatalError(
"MultiModalCSpace: Cannot sample adjacent modes"); }
34 virtual bool TestAdjacent(
const Mode& m1,
const Mode& m2) { FatalError(
"MultiModalCSpace: Cannot test mode adjacency");
return false; }
47 virtual bool IsValid(
const Mode& m) {
return m >= 0 && m < modeGraph.NumNodes(); }
48 virtual CSpace* GetModeCSpace(
const Mode& m) {
return modeGraph.nodes[m]; }
49 virtual CSpace* GetTransitionCSpace(
const Mode& m1,
const Mode& m2) {
return *modeGraph.FindEdge(m1,m2); }
52 virtual bool CanEnum()
const {
return true; }
53 virtual bool CanSample()
const {
return true; }
54 virtual void Enum(std::vector<Mode>& modes) { modes.resize(modeGraph.nodes.size());
for(
size_t i=0;i<modeGraph.nodes.size();i++) modes[i]=i; }
55 virtual void Sample(std::vector<Mode>& modes) { Enum(modes); }
58 virtual bool CanEnumAdjacent()
const {
return true; }
59 virtual bool CanSampleAdjacent()
const {
return true; }
60 virtual bool CanTestAdjacent()
const {
return true; }
61 virtual void EnumAdjacent(
const Mode& m,std::vector<Mode>& modes) {
64 for(modeGraph.Begin(m,e);!e.end();++e) modes.push_back(e.target());
66 virtual void SampleAdjacent(
const Mode& m,std::vector<Mode>& adj) { EnumAdjacent(m,adj); }
67 virtual bool TestAdjacent(
const Mode& m1,
const Mode& m2) {
return modeGraph.HasEdge(m1,m2); }
Motion planning configuration space base class. The configuration space implements an interpolation s...
Definition: CSpace.h:39
Multi-modal configuration space base class.
Definition: MultiModalCSpace.h:13
Definition: MultiModalCSpace.h:37