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/noncopyable.hpp>
00045
00046 namespace ompl
00047 {
00048 namespace base
00049 {
00050
00051 ClassForward(StateSpace);
00052
00054 ClassForward(StateSampler);
00055
00060 class StateSampler : private boost::noncopyable
00061 {
00062 public:
00063
00065 StateSampler(const StateSpace *space) : space_(space)
00066 {
00067 }
00068
00069 virtual ~StateSampler(void)
00070 {
00071 }
00072
00074 virtual void sampleUniform(State *state) = 0;
00075
00077 virtual void sampleUniformNear(State *state, const State *near, const double distance) = 0;
00078
00080 virtual void sampleGaussian(State *state, const State *mean, const double stdDev) = 0;
00081
00082 protected:
00083
00085 const StateSpace *space_;
00086
00088 RNG rng_;
00089 };
00090
00092 class CompoundStateSampler : public StateSampler
00093 {
00094 public:
00095
00097 CompoundStateSampler(const StateSpace* space) : StateSampler(space), samplerCount_(0)
00098 {
00099 }
00100
00102 virtual ~CompoundStateSampler(void)
00103 {
00104 }
00105
00112 virtual void addSampler(const StateSamplerPtr &sampler, double weightImportance);
00113
00114 virtual void sampleUniform(State *state);
00115
00116 virtual void sampleUniformNear(State *state, const State *near, const double distance);
00117
00118 virtual void sampleGaussian(State *state, const State *mean, const double stdDev);
00119
00120 protected:
00121
00123 std::vector<StateSamplerPtr> samplers_;
00124
00126 std::vector<double> weightImportance_;
00127
00128 private:
00129
00131 unsigned int samplerCount_;
00132
00133 };
00134
00135 }
00136 }
00137
00138
00139 #endif