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_KPIECE_LBKPIECE1_
00038 #define OMPL_GEOMETRIC_PLANNERS_KPIECE_LBKPIECE1_
00039
00040 #include "ompl/geometric/planners/PlannerIncludes.h"
00041 #include "ompl/geometric/planners/kpiece/Discretization.h"
00042
00043 namespace ompl
00044 {
00045
00046 namespace geometric
00047 {
00048
00081 class LBKPIECE1 : public base::Planner
00082 {
00083 public:
00084
00086 LBKPIECE1(const base::SpaceInformationPtr &si) : base::Planner(si, "LBKPIECE1"),
00087 dStart_(boost::bind(&LBKPIECE1::freeMotion, this, _1)),
00088 dGoal_(boost::bind(&LBKPIECE1::freeMotion, this, _1))
00089 {
00090 type_ = base::PLAN_TO_GOAL_SAMPLEABLE_REGION;
00091
00092 minValidPathFraction_ = 0.5;
00093 maxDistance_ = 0.0;
00094 }
00095
00096 virtual ~LBKPIECE1(void)
00097 {
00098 }
00099
00102 void setProjectionEvaluator(const base::ProjectionEvaluatorPtr &projectionEvaluator)
00103 {
00104 projectionEvaluator_ = projectionEvaluator;
00105 }
00106
00109 void setProjectionEvaluator(const std::string &name)
00110 {
00111 projectionEvaluator_ = si_->getStateSpace()->getProjection(name);
00112 }
00113
00115 const base::ProjectionEvaluatorPtr& getProjectionEvaluator(void) const
00116 {
00117 return projectionEvaluator_;
00118 }
00119
00125 void setRange(double distance)
00126 {
00127 maxDistance_ = distance;
00128 }
00129
00131 double getRange(void) const
00132 {
00133 return maxDistance_;
00134 }
00141 void setBorderFraction(double bp)
00142 {
00143 dStart_.setBorderFraction(bp);
00144 dGoal_.setBorderFraction(bp);
00145 }
00146
00149 double getBorderFraction(void) const
00150 {
00151 return dStart_.getBorderFraction();
00152 }
00153
00160 void setMinValidPathFraction(double fraction)
00161 {
00162 minValidPathFraction_ = fraction;
00163 }
00164
00166 double getMinValidPathFraction(void) const
00167 {
00168 return minValidPathFraction_;
00169 }
00170
00171 virtual void setup(void);
00172
00173 virtual bool solve(const base::PlannerTerminationCondition &ptc);
00174 virtual void clear(void);
00175
00176 virtual void getPlannerData(base::PlannerData &data) const;
00177
00178 protected:
00179
00181 class Motion
00182 {
00183 public:
00184
00185 Motion(void) : root(NULL), state(NULL), parent(NULL), valid(false)
00186 {
00187 }
00188
00190 Motion(const base::SpaceInformationPtr &si) : root(NULL), state(si->allocState()), parent(NULL), valid(false)
00191 {
00192 }
00193
00194 ~Motion(void)
00195 {
00196 }
00197
00199 const base::State *root;
00200
00202 base::State *state;
00203
00205 Motion *parent;
00206
00208 bool valid;
00209
00211 std::vector<Motion*> children;
00212 };
00213
00215 void freeMotion(Motion *motion);
00216
00218 void removeMotion(Discretization<Motion> &disc, Motion* motion);
00219
00225 bool isPathValid(Discretization<Motion> &disc, Motion* motion, base::State *temp);
00226
00228 base::StateSamplerPtr sampler_;
00229
00231 base::ProjectionEvaluatorPtr projectionEvaluator_;
00232
00234 Discretization<Motion> dStart_;
00235
00237 Discretization<Motion> dGoal_;
00238
00244 double minValidPathFraction_;
00245
00247 double maxDistance_;
00248
00250 RNG rng_;
00251 };
00252
00253 }
00254 }
00255
00256
00257 #endif