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_CONTROL_SAMPLER_
00038 #define OMPL_CONTROL_CONTROL_SAMPLER_
00039
00040 #include "ompl/base/State.h"
00041 #include "ompl/control/Control.h"
00042 #include "ompl/util/RandomNumbers.h"
00043 #include "ompl/util/ClassForward.h"
00044 #include <vector>
00045 #include <boost/function.hpp>
00046 #include <boost/noncopyable.hpp>
00047
00048 namespace ompl
00049 {
00050 namespace control
00051 {
00052
00054 ClassForward(ControlSpace);
00056
00058
00059 ClassForward(ControlSampler);
00061
00070 class ControlSampler : private boost::noncopyable
00071 {
00072 public:
00073
00075 ControlSampler(const ControlSpace *space) : space_(space)
00076 {
00077 }
00078
00079 virtual ~ControlSampler(void)
00080 {
00081 }
00082
00086 virtual void sample(Control *control) = 0;
00087
00096 virtual void sample(Control *control, const base::State *state);
00097
00105 virtual void sampleNext(Control *control, const Control *previous);
00106
00114 virtual void sampleNext(Control *control, const Control *previous, const base::State *state);
00115
00117 virtual unsigned int sampleStepCount(unsigned int minSteps, unsigned int maxSteps);
00118
00119 protected:
00120
00122 const ControlSpace *space_;
00123
00125 RNG rng_;
00126 };
00127
00129 class CompoundControlSampler : public ControlSampler
00130 {
00131 public:
00132
00134 CompoundControlSampler(const ControlSpace* space) : ControlSampler(space)
00135 {
00136 }
00137
00139 virtual ~CompoundControlSampler(void)
00140 {
00141 }
00142
00146 virtual void addSampler(const ControlSamplerPtr &sampler);
00147
00148
00149 virtual void sample(Control *control);
00150 virtual void sample(Control *control, const base::State *state);
00151 virtual void sampleNext(Control *control, const Control *previous);
00152 virtual void sampleNext(Control *control, const Control *previous, const base::State *state);
00153
00154 protected:
00155
00157 std::vector<ControlSamplerPtr> samplers_;
00158
00159 private:
00160
00162 unsigned int samplerCount_;
00163
00164 };
00165
00167 typedef boost::function<ControlSamplerPtr(const ControlSpace*)> ControlSamplerAllocator;
00168 }
00169 }
00170
00171
00172 #endif