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_SPACES_REAL_VECTOR_STATE_SPACE_
00038 #define OMPL_BASE_SPACES_REAL_VECTOR_STATE_SPACE_
00039
00040 #include "ompl/base/StateSpace.h"
00041 #include "ompl/base/spaces/RealVectorBounds.h"
00042 #include <vector>
00043 #include <string>
00044 #include <map>
00045
00046 namespace ompl
00047 {
00048 namespace base
00049 {
00050
00052 class RealVectorStateSampler : public StateSampler
00053 {
00054 public:
00055
00057 RealVectorStateSampler(const StateSpace *space) : StateSampler(space)
00058 {
00059 }
00060
00061 virtual void sampleUniform(State *state);
00062 virtual void sampleUniformNear(State *state, const State *near, const double distance);
00063 virtual void sampleGaussian(State *state, const State *mean, const double stdDev);
00064 };
00065
00067 class RealVectorStateSpace : public StateSpace
00068 {
00069 public:
00070
00072 class StateType : public State
00073 {
00074 public:
00075 StateType(void) : State()
00076 {
00077 }
00078
00081 double operator[](unsigned int i) const
00082 {
00083 return values[i];
00084 }
00085
00088 double& operator[](unsigned int i)
00089 {
00090 return values[i];
00091 }
00092
00094 double *values;
00095 };
00096
00099 RealVectorStateSpace(unsigned int dim = 0) : StateSpace(), dimension_(dim), bounds_(dim), stateBytes_(dim * sizeof(double))
00100 {
00101 type_ = STATE_SPACE_REAL_VECTOR;
00102 setName("RealVector" + getName());
00103 dimensionNames_.resize(dim, "");
00104 }
00105
00106 virtual ~RealVectorStateSpace(void)
00107 {
00108 }
00109
00111 void addDimension(double minBound = 0.0, double maxBound = 0.0);
00112
00114 void addDimension(const std::string &name, double minBound = 0.0, double maxBound = 0.0);
00115
00118 void setBounds(const RealVectorBounds &bounds);
00119
00122 void setBounds(double low, double high);
00123
00125 const RealVectorBounds& getBounds(void) const
00126 {
00127 return bounds_;
00128 }
00129
00130 virtual unsigned int getDimension(void) const;
00131
00134 const std::string& getDimensionName(unsigned int index) const;
00135
00137 int getDimensionIndex(const std::string &name) const;
00138
00140 void setDimensionName(unsigned int index, const std::string &name);
00141
00142 virtual double getMaximumExtent(void) const;
00143
00144 virtual void enforceBounds(State *state) const;
00145
00146 virtual bool satisfiesBounds(const State *state) const;
00147
00148 virtual void copyState(State *destination, const State *source) const;
00149
00150 virtual double distance(const State *state1, const State *state2) const;
00151
00152 virtual bool equalStates(const State *state1, const State *state2) const;
00153
00154 virtual void interpolate(const State *from, const State *to, const double t, State *state) const;
00155
00156 virtual StateSamplerPtr allocStateSampler(void) const;
00157
00158 virtual State* allocState(void) const;
00159
00160 virtual void freeState(State *state) const;
00161
00162 virtual double* getValueAddressAtIndex(State *state, const unsigned int index) const;
00163
00164 virtual void printState(const State *state, std::ostream &out) const;
00165
00166 virtual void printSettings(std::ostream &out) const;
00167
00168 virtual void registerProjections(void);
00169
00170 virtual void setup(void);
00171
00172 protected:
00173
00175 unsigned int dimension_;
00176
00178 RealVectorBounds bounds_;
00179
00181 std::vector<std::string> dimensionNames_;
00182
00184 std::map<std::string, unsigned int> dimensionIndex_;
00185
00186 private:
00187
00189 std::size_t stateBytes_;
00190
00191 };
00192 }
00193 }
00194
00195 #endif