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_SPACES_REAL_VECTOR_CONTROL_SPACE_
00038 #define OMPL_CONTROL_SPACES_REAL_VECTOR_CONTROL_SPACE_
00039
00040 #include "ompl/control/ControlSpace.h"
00041 #include "ompl/base/spaces/RealVectorBounds.h"
00042 #include <vector>
00043
00044 namespace ompl
00045 {
00046 namespace control
00047 {
00048
00050 class RealVectorControlUniformSampler : public ControlSampler
00051 {
00052 public:
00053
00055 RealVectorControlUniformSampler(const ControlSpace *space) : ControlSampler(space)
00056 {
00057 }
00058
00059 virtual void sample(Control *control);
00060 };
00061
00063 class RealVectorControlSpace : public ControlSpace
00064 {
00065 public:
00066
00068 class ControlType : public Control
00069 {
00070 public:
00071
00074 double operator[](unsigned int i) const
00075 {
00076 return values[i];
00077 }
00078
00081 double& operator[](unsigned int i)
00082 {
00083 return values[i];
00084 }
00085
00087 double *values;
00088 };
00089
00091 RealVectorControlSpace(const base::StateSpacePtr &stateSpace, unsigned int dim) :
00092 ControlSpace(stateSpace), dimension_(dim), bounds_(dim), controlBytes_(dim * sizeof(double))
00093 {
00094 setName("RealVector" + getName());
00095 type_ = CONTROL_SPACE_REAL_VECTOR;
00096 }
00097
00098 virtual ~RealVectorControlSpace(void)
00099 {
00100 }
00101
00103 void setBounds(const base::RealVectorBounds &bounds);
00104
00106 const base::RealVectorBounds& getBounds(void) const
00107 {
00108 return bounds_;
00109 }
00110
00111 virtual unsigned int getDimension(void) const;
00112
00113 virtual void copyControl(Control *destination, const Control *source) const;
00114
00115 virtual bool equalControls(const Control *control1, const Control *control2) const;
00116
00117 virtual ControlSamplerPtr allocDefaultControlSampler(void) const;
00118
00119 virtual Control* allocControl(void) const;
00120
00121 virtual void freeControl(Control *control) const;
00122
00123 virtual void nullControl(Control *control) const;
00124
00125 virtual void printControl(const Control *control, std::ostream &out) const;
00126
00127 virtual double* getValueAddressAtIndex(Control *control, const unsigned int index) const;
00128
00129 virtual void printSettings(std::ostream &out) const;
00130
00131 virtual void setup(void);
00132
00134 virtual unsigned int getSerializationLength(void) const;
00135
00137 virtual void serialize(void *serialization, const Control *ctrl) const;
00138
00140 virtual void deserialize(Control *ctrl, const void *serialization) const;
00141
00142 protected:
00143
00145 unsigned int dimension_;
00146
00148 base::RealVectorBounds bounds_;
00149
00150 private:
00151 std::size_t controlBytes_;
00152 };
00153 }
00154 }
00155
00156 #endif