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_GEOMETRIC_PLANNERS_EST_EST_
00038 #define OMPL_GEOMETRIC_PLANNERS_EST_EST_
00039
00040 #include "ompl/datastructures/Grid.h"
00041 #include "ompl/geometric/planners/PlannerIncludes.h"
00042 #include "ompl/base/ProjectionEvaluator.h"
00043 #include <vector>
00044
00045 namespace ompl
00046 {
00047
00048 namespace geometric
00049 {
00050
00075 class EST : public base::Planner
00076 {
00077 public:
00078
00080 EST(const base::SpaceInformationPtr &si) : base::Planner(si, "EST")
00081 {
00082 type_ = base::PLAN_TO_GOAL_ANY;
00083
00084 goalBias_ = 0.05;
00085 maxDistance_ = 0.0;
00086 }
00087
00088 virtual ~EST(void)
00089 {
00090 freeMemory();
00091 }
00092
00093 virtual bool solve(const base::PlannerTerminationCondition &ptc);
00094
00095 virtual void clear(void);
00096
00104 void setGoalBias(double goalBias)
00105 {
00106 goalBias_ = goalBias;
00107 }
00108
00110 double getGoalBias(void) const
00111 {
00112 return goalBias_;
00113 }
00114
00120 void setRange(double distance)
00121 {
00122 maxDistance_ = distance;
00123 }
00124
00126 double getRange(void) const
00127 {
00128 return maxDistance_;
00129 }
00130
00133 void setProjectionEvaluator(const base::ProjectionEvaluatorPtr &projectionEvaluator)
00134 {
00135 projectionEvaluator_ = projectionEvaluator;
00136 }
00137
00140 void setProjectionEvaluator(const std::string &name)
00141 {
00142 projectionEvaluator_ = si_->getStateSpace()->getProjection(name);
00143 }
00144
00146 const base::ProjectionEvaluatorPtr& getProjectionEvaluator(void) const
00147 {
00148 return projectionEvaluator_;
00149 }
00150
00151 virtual void setup(void);
00152
00153 virtual void getPlannerData(base::PlannerData &data) const;
00154
00155 protected:
00156
00158 class Motion
00159 {
00160 public:
00161
00162 Motion(void) : state(NULL), parent(NULL)
00163 {
00164 }
00165
00167 Motion(const base::SpaceInformationPtr &si) : state(si->allocState()), parent(NULL)
00168 {
00169 }
00170
00171 ~Motion(void)
00172 {
00173 }
00174
00176 base::State *state;
00177
00179 Motion *parent;
00180 };
00181
00183 typedef std::vector<Motion*> MotionSet;
00184
00186 struct TreeData
00187 {
00188 TreeData(void) : grid(0), size(0)
00189 {
00190 }
00191
00193 Grid<MotionSet> grid;
00194
00196 unsigned int size;
00197 };
00198
00200 void freeMemory(void);
00201
00203 void addMotion(Motion *motion);
00204
00206 Motion* selectMotion(void);
00207
00209 base::ValidStateSamplerPtr sampler_;
00210
00212 TreeData tree_;
00213
00215 base::ProjectionEvaluatorPtr projectionEvaluator_;
00216
00218 double goalBias_;
00219
00221 double maxDistance_;
00222
00224 RNG rng_;
00225 };
00226
00227 }
00228 }
00229
00230 #endif