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
00047 namespace ompl
00048 {
00049 namespace control
00050 {
00051
00052 ClassForward(ControlSpace);
00053
00055 ClassForward(ControlSampler);
00056
00065 class ControlSampler
00066 {
00067 public:
00068
00070 ControlSampler(const ControlSpace *space) : space_(space)
00071 {
00072 }
00073
00074 virtual ~ControlSampler(void)
00075 {
00076 }
00077
00081 virtual void sample(Control *control) = 0;
00082
00091 virtual void sample(Control *control, const base::State *state);
00092
00100 virtual void sampleNext(Control *control, const Control *previous);
00101
00109 virtual void sampleNext(Control *control, const Control *previous, const base::State *state);
00110
00116 virtual void sampleTo(Control *control, const base::State *source, const base::State *target);
00117
00126 virtual void sampleTo(Control *control, const Control *previous, const base::State *source, const base::State *target);
00127
00137 virtual unsigned int sampleTo(Control *control, unsigned int minSteps, unsigned int maxSteps, const base::State *source, const base::State *target);
00138
00150 virtual unsigned int sampleTo(Control *control, unsigned int minSteps, unsigned int maxSteps, const Control *previous, const base::State *source, const base::State *target);
00151
00153 virtual unsigned int sampleStepCount(unsigned int minSteps, unsigned int maxSteps);
00154
00155 protected:
00156
00158 const ControlSpace *space_;
00159
00161 RNG rng_;
00162 };
00163
00165 class CompoundControlSampler : public ControlSampler
00166 {
00167 public:
00168
00170 CompoundControlSampler(const ControlSpace* space) : ControlSampler(space)
00171 {
00172 }
00173
00175 virtual ~CompoundControlSampler(void)
00176 {
00177 }
00178
00182 virtual void addSampler(const ControlSamplerPtr &sampler);
00183
00184
00185 virtual void sample(Control *control);
00186 virtual void sample(Control *control, const base::State *state);
00187 virtual void sampleNext(Control *control, const Control *previous);
00188 virtual void sampleNext(Control *control, const Control *previous, const base::State *state);
00189 virtual void sampleTo(Control *control, const base::State *source, const base::State *target);
00190 virtual void sampleTo(Control *control, const Control *previous, const base::State *source, const base::State *target);
00191 virtual unsigned int sampleTo(Control *control, unsigned int minSteps, unsigned int maxSteps, const base::State *source, const base::State *target);
00192 virtual unsigned int sampleTo(Control *control, unsigned int minSteps, unsigned int maxSteps, const Control *previous, const base::State *source, const base::State *target);
00193
00194 protected:
00195
00197 std::vector<ControlSamplerPtr> samplers_;
00198
00199 private:
00200
00202 unsigned int samplerCount_;
00203
00204 };
00205
00207 typedef boost::function1<ControlSamplerPtr, const ControlSpace*> ControlSamplerAllocator;
00208 }
00209 }
00210
00211
00212 #endif