00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef OMPL_CONTROL_PLANNERS_SYCLOP_DECOMPOSITION_
00038 #define OMPL_CONTROL_PLANNERS_SYCLOP_DECOMPOSITION_
00039
00040 #include "ompl/base/spaces/RealVectorBounds.h"
00041 #include "ompl/base/StateSampler.h"
00042 #include "ompl/base/State.h"
00043 #include "ompl/util/Console.h"
00044 #include "ompl/util/Exception.h"
00045 #include "ompl/util/ClassForward.h"
00046
00047 namespace ompl
00048 {
00049 namespace control
00050 {
00051
00053
00054 ClassForward(Decomposition);
00056
00061 class Decomposition
00062 {
00063 public:
00064
00066 Decomposition(const int n, const std::size_t dim, const base::RealVectorBounds& b) : numRegions_(n), dimension_(dim), bounds_(b)
00067 {
00068 if (dim > b.low.size())
00069 throw Exception("Decomposition", "argument 'dim' exceeds dimension of given bounds");
00070 else if (dim < b.low.size())
00071 logWarn("Decomposition: dimension of given bounds exceeds argument 'dim'. Using the first 'dim' values of bounds");
00072 }
00073
00074 virtual ~Decomposition()
00075 {
00076 }
00077
00079 virtual int getNumRegions() const
00080 {
00081 return numRegions_;
00082 }
00083
00085 virtual std::size_t getDimension() const
00086 {
00087 return dimension_;
00088 }
00089
00091 virtual const base::RealVectorBounds& getBounds() const
00092 {
00093 return bounds_;
00094 }
00095
00097 virtual double getRegionVolume(const int rid) const = 0;
00098
00101 virtual int locateRegion(const base::State* s) const = 0;
00102
00104 virtual void project(const base::State* s, std::vector<double>& coord) const = 0;
00105
00107 virtual void getNeighbors(const int rid, std::vector<int>& neighbors) const = 0;
00108
00110 virtual void sampleFromRegion(const int rid, const base::StateSamplerPtr& sampler, base::State* s) = 0;
00111
00113 virtual const base::RealVectorBounds& getRegionBounds(const int rid) = 0;
00114
00115 protected:
00116
00117 const int numRegions_;
00118 const std::size_t dimension_;
00119 const base::RealVectorBounds bounds_;
00120 };
00121 }
00122 }
00123 #endif