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_BASE_SPACE_STATE_SAMPLER_
00038 #define OMPL_BASE_SPACE_STATE_SAMPLER_
00039
00040 #include "ompl/base/State.h"
00041 #include "ompl/util/RandomNumbers.h"
00042 #include "ompl/util/ClassForward.h"
00043 #include <vector>
00044 #include <boost/function.hpp>
00045 #include <boost/noncopyable.hpp>
00046
00047 namespace ompl
00048 {
00049 namespace base
00050 {
00051
00053 ClassForward(StateSpace);
00055
00057
00058 ClassForward(StateSampler);
00060
00065 class StateSampler : private boost::noncopyable
00066 {
00067 public:
00068
00070 StateSampler(const StateSpace *space) : space_(space)
00071 {
00072 }
00073
00074 virtual ~StateSampler(void)
00075 {
00076 }
00077
00079 virtual void sampleUniform(State *state) = 0;
00080
00082 virtual void sampleUniformNear(State *state, const State *near, const double distance) = 0;
00083
00085 virtual void sampleGaussian(State *state, const State *mean, const double stdDev) = 0;
00086
00087 protected:
00088
00090 const StateSpace *space_;
00091
00093 RNG rng_;
00094 };
00095
00097 class CompoundStateSampler : public StateSampler
00098 {
00099 public:
00100
00102 CompoundStateSampler(const StateSpace* space) : StateSampler(space), samplerCount_(0)
00103 {
00104 }
00105
00107 virtual ~CompoundStateSampler(void)
00108 {
00109 }
00110
00117 virtual void addSampler(const StateSamplerPtr &sampler, double weightImportance);
00118
00119 virtual void sampleUniform(State *state);
00120
00121 virtual void sampleUniformNear(State *state, const State *near, const double distance);
00122
00123 virtual void sampleGaussian(State *state, const State *mean, const double stdDev);
00124
00125 protected:
00126
00128 std::vector<StateSamplerPtr> samplers_;
00129
00131 std::vector<double> weightImportance_;
00132
00133 private:
00134
00136 unsigned int samplerCount_;
00137
00138 };
00139
00141 typedef boost::function<StateSamplerPtr(const StateSpace*)> StateSamplerAllocator;
00142 }
00143 }
00144
00145
00146 #endif