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_DISCRETE_CONTROL_SPACE_
00038 #define OMPL_CONTROL_SPACES_DISCRETE_CONTROL_SPACE_
00039
00040 #include "ompl/control/ControlSpace.h"
00041
00042 namespace ompl
00043 {
00044 namespace control
00045 {
00046
00048 class DiscreteControlSampler : public ControlSampler
00049 {
00050 public:
00051
00053 DiscreteControlSampler(const ControlSpace *space) : ControlSampler(space)
00054 {
00055 }
00056
00057 virtual void sample(Control *control);
00058 };
00059
00064 class DiscreteControlSpace : public ControlSpace
00065 {
00066 public:
00067
00069 class ControlType : public Control
00070 {
00071 public:
00072
00074 int value;
00075 };
00076
00078 DiscreteControlSpace(const base::StateSpacePtr &stateSpace, int lowerBound, int upperBound) :
00079 ControlSpace(stateSpace), lowerBound_(lowerBound), upperBound_(upperBound)
00080 {
00081 setName("Discrete" + getName());
00082 type_ = CONTROL_SPACE_DISCRETE;
00083 }
00084
00085 virtual ~DiscreteControlSpace(void)
00086 {
00087 }
00088
00089 virtual unsigned int getDimension(void) const;
00090
00091 virtual void copyControl(Control *destination, const Control *source) const;
00092
00093 virtual bool equalControls(const Control *control1, const Control *control2) const;
00094
00095 virtual ControlSamplerPtr allocDefaultControlSampler(void) const;
00096
00097 virtual Control* allocControl(void) const;
00098
00099 virtual void freeControl(Control *control) const;
00100
00102 virtual void nullControl(Control *control) const;
00103
00104 virtual void printControl(const Control *control, std::ostream &out) const;
00105
00106 virtual void printSettings(std::ostream &out) const;
00107
00109 unsigned int getControlCount(void) const
00110 {
00111 return upperBound_ - lowerBound_ + 1;
00112 }
00113
00115 int getLowerBound(void) const
00116 {
00117 return lowerBound_;
00118 }
00119
00121 int getUpperBound(void) const
00122 {
00123 return upperBound_;
00124 }
00125
00127 void setBounds(int lowerBound, int upperBound)
00128 {
00129 lowerBound_ = lowerBound;
00130 upperBound_ = upperBound;
00131 }
00132
00133 virtual void setup(void);
00134
00136 virtual unsigned int getSerializationLength(void) const;
00137
00139 virtual void serialize(void *serialization, const Control *ctrl) const;
00140
00142 virtual void deserialize(Control *ctrl, const void *serialization) const;
00143
00144 protected:
00145
00147 int lowerBound_;
00148
00150 int upperBound_;
00151 };
00152
00153 }
00154 }
00155
00156 #endif