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_STATE_VALIDITY_CHECKER_
00038 #define OMPL_BASE_STATE_VALIDITY_CHECKER_
00039
00040 #include "ompl/base/State.h"
00041 #include "ompl/util/ClassForward.h"
00042
00043 namespace ompl
00044 {
00045
00046 namespace base
00047 {
00048
00050 ClassForward(SpaceInformation);
00052
00054
00055 ClassForward(StateValidityChecker);
00057
00062 struct StateValidityCheckerSpecs
00063 {
00064 enum ClearanceComputationType
00065 {
00066 NONE = 0,
00067 EXACT,
00068 APPROXIMATE,
00069 BOUNDED_APPROXIMATE,
00070 };
00071
00072 StateValidityCheckerSpecs(void) : clearanceComputationType(NONE), hasValidDirectionComputation(false)
00073 {
00074 }
00075
00078 ClearanceComputationType clearanceComputationType;
00079
00082 bool hasValidDirectionComputation;
00083 };
00084
00088 class StateValidityChecker
00089 {
00090 public:
00091
00093 StateValidityChecker(SpaceInformation* si) : si_(si)
00094 {
00095 }
00096
00098 StateValidityChecker(const SpaceInformationPtr &si) : si_(si.get())
00099 {
00100 }
00101
00102 virtual ~StateValidityChecker(void)
00103 {
00104 }
00105
00109 virtual bool isValid(const State *state) const = 0;
00110
00112 virtual bool isValid(const State *state, double &dist) const
00113 {
00114 dist = clearance(state);
00115 return isValid(state);
00116 }
00117
00122 virtual bool isValid(const State *state, double &dist, State *validState, bool &validStateAvailable) const
00123 {
00124 dist = clearance(state, validState, validStateAvailable);
00125 return isValid(state);
00126 }
00127
00130 virtual double clearance(const State *state) const
00131 {
00132 return 0.0;
00133 }
00134
00138 virtual double clearance(const State *state, State *validState, bool &validStateAvailable) const
00139 {
00140 validStateAvailable = false;
00141 return clearance(state);
00142 }
00143
00145 const StateValidityCheckerSpecs& getSpecs(void) const
00146 {
00147 return specs_;
00148 }
00149
00150 protected:
00151
00153 SpaceInformation* si_;
00154
00156 StateValidityCheckerSpecs specs_;
00157
00158 };
00159
00161 class AllValidStateValidityChecker : public StateValidityChecker
00162 {
00163 public:
00164
00166 AllValidStateValidityChecker(SpaceInformation* si) : StateValidityChecker(si)
00167 {
00168 }
00169
00171 AllValidStateValidityChecker(const SpaceInformationPtr &si) : StateValidityChecker(si)
00172 {
00173 }
00174
00176 virtual bool isValid(const State * ) const
00177 {
00178 return true;
00179 }
00180 };
00181
00182 }
00183 }
00184
00185 #endif