BFMT.h
1 /*********************************************************************
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2013, Autonomous Systems Laboratory, Stanford University
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 * * Neither the name of Stanford University nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *********************************************************************/
34 
35 /* Authors: Joseph Starek (Stanford) */
36 /* Co-developers: Javier V Gomez (UC3M)*/
37 /* Algorithm design: Joseph Starek (Stanford), Ed Schmerling (Stanford), Lucas Janson (Stanford) and Marco Pavone (Stanford) */
38 /* Acknowledgements for insightful comments: Ashley Clark (Stanford) */
39 
40 #ifndef OMPL_GEOMETRIC_PLANNERS_BIDIRECTIONALFMT_H
41 #define OMPL_GEOMETRIC_PLANNERS_BIDIRECTIONALFMT_H
42 
43 #include <ompl/geometric/planners/PlannerIncludes.h>
44 #include <ompl/base/goals/GoalSampleableRegion.h>
45 #include <ompl/datastructures/NearestNeighbors.h>
46 #include <ompl/datastructures/BinaryHeap.h>
47 #include <ompl/base/OptimizationObjective.h>
48 #include <map>
49 
50 namespace ompl
51 {
52 
53  namespace geometric
54  {
55 
82  class BFMT : public ompl::base::Planner {
83  public:
84 
86  enum TreeType { FWD = 0, REV = 1 };
87 
89  enum ExploreType { SWAP_EVERY_TIME = 0, CHOOSE_SMALLEST_Z = 1 };
90 
92  enum TerminateType { FEASIBILITY = 0, OPTIMALITY = 1 };
93 
95 
96  virtual ~BFMT();
97 
98  virtual void setup(void);
99 
101 
102  virtual void clear();
103 
104  virtual void getPlannerData(base::PlannerData &data) const;
105 
111  void setNumSamples(const unsigned int numSamples)
112  {
113  numSamples_ = numSamples;
114  }
115 
117  unsigned int getNumSamples() const
118  {
119  return numSamples_;
120  }
121 
123  void setNearestK(bool nearestK)
124  {
125  nearestK_ = nearestK;
126  }
127 
129  bool getNearestK() const
130  {
131  return nearestK_;
132  }
133 
141  void setRadiusMultiplier(const double radiusMultiplier)
142  {
143  if (radiusMultiplier <= 0.0)
144  throw Exception("Radius multiplier must be greater than zero");
145  radiusMultiplier_ = radiusMultiplier;
146  }
147 
150  double getRadiusMultiplier() const
151  {
152  return radiusMultiplier_;
153  }
154 
158  void setFreeSpaceVolume(const double freeSpaceVolume)
159  {
160  if (freeSpaceVolume < 0.0)
161  throw Exception("Free space volume should be greater than zero");
162  freeSpaceVolume_ = freeSpaceVolume;
163  }
164 
167  double getFreeSpaceVolume() const
168  {
169  return freeSpaceVolume_;
170  }
171 
174  void setCacheCC(bool ccc)
175  {
176  cacheCC_ = ccc;
177  }
178 
180  bool getCacheCC() const
181  {
182  return cacheCC_;
183  }
184 
186  void setHeuristics(bool h)
187  {
188  heuristics_ = h;
189  }
190 
193  bool getHeuristics() const
194  {
195  return heuristics_;
196  }
197 
199  void setExtendedFMT(bool e)
200  {
201  extendedFMT_ = e;
202  }
203 
205  bool getExtendedFMT() const
206  {
207  return extendedFMT_;
208  }
209 
212  void setExploration(bool balanced)
213  {
214  exploration_ = SWAP_EVERY_TIME;
215  if (balanced) {
216  exploration_ = CHOOSE_SMALLEST_Z;
217  }
218  }
219 
221  bool getExploration() const
222  {
223  return (exploration_ == CHOOSE_SMALLEST_Z);
224  }
225 
229  void setTermination(bool optimality)
230  {
231  termination_ = FEASIBILITY;
232  if (optimality) {
233  termination_ = OPTIMALITY;
234  }
235  }
236 
238  bool getTermination() const
239  {
240  return (termination_ == OPTIMALITY);
241  }
242 
245  void setPrecomputeNN(bool p)
246  {
247  precomputeNN_ = p;
248  }
249 
251  bool setPrecomputeNN() const
252  {
253  return precomputeNN_;
254  }
255 
257  class BiDirMotion {
258  public:
259 
267  enum SetType { SET_CLOSED, SET_OPEN, SET_UNVISITED };
268 
269  BiDirMotion(TreeType* tree)
270  : state_(NULL), tree_(tree)
271  {
272  parent_[FWD] = NULL;
273  parent_[REV] = NULL;
274  cost_[FWD] = base::Cost(0.0);
275  cost_[REV] = base::Cost(0.0);
276  hcost_[FWD] = base::Cost(0.0);
277  hcost_[REV] = base::Cost(0.0);
278  currentSet_[FWD] = SET_UNVISITED;
279  currentSet_[REV] = SET_UNVISITED;
280  }
281 
284  : state_(si->allocState()), tree_(tree)
285  {
286  parent_[FWD] = NULL;
287  parent_[REV] = NULL;
288  cost_[FWD] = base::Cost(0.0);
289  cost_[REV] = base::Cost(0.0);
290  hcost_[FWD] = base::Cost(0.0);
291  hcost_[REV] = base::Cost(0.0);
292  currentSet_[FWD] = SET_UNVISITED;
293  currentSet_[REV] = SET_UNVISITED;
294  }
295 
296  typedef std::vector<BiDirMotion*> BiDirMotionPtrs;
297 
300 
303 
305  BiDirMotionPtrs children_[2];
306 
309 
312 
315 
318 
320  std::set<BiDirMotion *> collChecksDone_;
321 
323  inline base::Cost getCost(void) const
324  {
325  return this->cost_[*tree_];
326  }
327 
329  inline base::Cost getOtherCost(void) const
330  {
331  return this->cost_[(*tree_+1) % 2];
332 
333  }
334 
336  inline void setCost(base::Cost cost)
337  {
338  this->cost_[*tree_] = cost;
339  }
340 
342  inline void setParent(BiDirMotion* parent)
343  {
344  this->parent_[*tree_] = parent;
345  }
346 
348  inline BiDirMotion* getParent(void) const
349  {
350  return this->parent_[*tree_];
351  }
352 
354  inline void setChildren(BiDirMotionPtrs children)
355  {
356  this->children_[*tree_] = children;
357  }
358 
360  inline BiDirMotionPtrs getChildren(void) const
361  {
362  return this->children_[*tree_];
363  }
364 
366  inline void setCurrentSet(SetType set)
367  {
368  this->currentSet_[*tree_] = set;
369  }
370 
372  inline SetType getCurrentSet(void) const
373  {
374  return this->currentSet_[*tree_];
375  }
376 
378  inline SetType getOtherSet(void) const
379  {
380  return this->currentSet_[(*tree_+1) % 2];
381  }
382 
384  inline void setTreeType(TreeType* treePtr)
385  {
386  this->tree_ = treePtr;
387  }
388 
390  inline TreeType getTreeType(void) const
391  {
392  return *tree_;
393  }
394 
396  void setState(base::State *state) {
397  state_ = state;
398  }
399 
402  return state_;
403  }
404 
408  {
409  if (collChecksDone_.find(m) == collChecksDone_.end())
410  return false;
411  return true;
412  }
413 
416  {
417  collChecksDone_.insert(m);
418  }
419 
422  {
423  hcost_[*tree_] = h;
424  }
425 
428  {
429  return hcost_[*tree_];
430  }
431  };
432 
433  typedef std::vector<BiDirMotion*> BiDirMotionPtrs;
434 
435  protected:
436 
439  bool operator()(const BiDirMotion* p1, const BiDirMotion* p2) const {
440  if (heuristics_)
441  return ( opt_->combineCosts(p1->getCost(), p1->getHeuristicCost()).value() < opt_->combineCosts(p2->getCost(), p2->getHeuristicCost()).value() );
442  else
443  return (p1->getCost().value() < p2->getCost().value());
444  }
445 
447  bool heuristics_;
448  };
449 
451 
453  void swapTrees();
454 
456  void useFwdTree()
457  {
458  tree_ = FWD;
459  }
460 
462  void useRevTree()
463  {
464  tree_ = REV;
465  }
466 
471  double distanceFunction(const BiDirMotion* a, const BiDirMotion* b) const
472  {
473  return opt_->motionCost(a->getState(), b->getState()).value();
474  }
475 
477  double calculateUnitBallVolume(const unsigned int dimension) const;
478 
484  double calculateRadius(unsigned int dimension, unsigned int n) const;
485 
487  void freeMemory();
488 
491  void saveNeighborhood(std::shared_ptr< NearestNeighbors<BiDirMotion*> > nn, BiDirMotion* m);
492 
495  void sampleFree(std::shared_ptr<NearestNeighbors<BiDirMotion*> > nn,
497 
500 
507  void expandTreeFromNode(BiDirMotion *&z, BiDirMotion *&connection_point);
508 
510  bool plan(BiDirMotion *x_init, BiDirMotion *x_goal, BiDirMotion *&z, const base::PlannerTerminationCondition& ptc);
511 
513  bool termination(BiDirMotion *&z, BiDirMotion *&connection_point, const base::PlannerTerminationCondition& ptc);
514 
517 
519  void tracePath(BiDirMotion *z, BiDirMotionPtrs& path);
520 
523  void updateNeighborhood(BiDirMotion *m, const std::vector<BiDirMotion *> nbh);
524 
527 
529  unsigned int numSamples_;
530 
539 
543 
545  unsigned int collisionChecks_;
546 
548  bool nearestK_;
549 
551  double NNr_;
552 
554  unsigned int NNk_;
555 
558 
561 
564 
567 
569  std::shared_ptr< NearestNeighbors<BiDirMotion*> > nn_;
570 
573  std::map<BiDirMotion*, BiDirMotionPtrs > neighborhoods_;
574 
579  BiDirMotionBinHeap Open_[2];
580 
582  std::map<BiDirMotion*, BiDirMotionBinHeap::Element*> Open_elements[2];
583 
586 
589 
592 
595 
597  bool cacheCC_;
598 
601 
602  // For sorting a list of costs and getting only their sorted indices
604  {
605  CostIndexCompare(const std::vector<base::Cost>& costs,
606  const base::OptimizationObjective &opt) :
607  costs_(costs), opt_(opt)
608  {}
609  bool operator()(unsigned i, unsigned j)
610  {
611  return (costs_[i].value() < costs_[j].value());
612  }
613  const std::vector<base::Cost>& costs_;
615  };
616 
617  };
618 
619  } // End "geometric" namespace
620 } // End "ompl" namespace
621 
622 
623 #endif /* OMPL_GEOMETRIC_PLANNERS_BIDIRECTIONALFMT_H */
624 
Object containing planner generated vertex and edge data. It is assumed that all vertices are unique...
Definition: PlannerData.h:163
void insertNewSampleInOpen(const base::PlannerTerminationCondition &ptc)
Extended FMT strategy: inserts a new motion in open if the heap is empty.
Definition: BFMT.cpp:652
std::map< BiDirMotion *, BiDirMotionPtrs > neighborhoods_
A map linking a motion to all of the motions within a distance r of that motion.
Definition: BFMT.h:573
bool getTermination() const
Returns the termination strategy.
Definition: BFMT.h:238
base::State * heurGoalState_[2]
Goal state caching to accelerate cost to go heuristic computation.
Definition: BFMT.h:594
base::Cost hcost_[2]
The minimum cost to go of this motion (heuristically computed)
Definition: BFMT.h:317
bool precomputeNN_
If true all the nearest neighbors maps are precomputed before solving.
Definition: BFMT.h:566
void setCurrentSet(SetType set)
Set the current set of the motion.
Definition: BFMT.h:366
void saveNeighborhood(std::shared_ptr< NearestNeighbors< BiDirMotion * > > nn, BiDirMotion *m)
Save the neighbors within a neighborhood of a given state. The strategy used (nearestK or nearestR de...
Definition: BFMT.cpp:188
double calculateRadius(unsigned int dimension, unsigned int n) const
Calculate the radius to use for nearest neighbor searches, using the bound given in L...
Definition: BFMT.cpp:249
double radiusMultiplier_
This planner uses a nearest neighbor search radius proportional to the lower bound for optimality der...
Definition: BFMT.h:538
SetType getOtherSet(void) const
Get set of this motion in the inactive tree.
Definition: BFMT.h:378
void setTermination(bool optimality)
Sets the termination strategy: optimality true finishes when the best possible path is found...
Definition: BFMT.h:229
base::Cost getCost(void) const
Set the state associated with the motion.
Definition: BFMT.h:323
base::StateSamplerPtr sampler_
State sampler.
Definition: BFMT.h:585
void initializeProblem(base::GoalSampleableRegion *&goal_s)
Carries out some planner checks.
Definition: BFMT.cpp:257
ExploreType exploration_
Exploration strategy used.
Definition: BFMT.h:560
A shared pointer wrapper for ompl::base::StateSampler.
void setPrecomputeNN(bool p)
Sets Nearest Neighbors precomputation. Currently, it precomputes once solve() has been called...
Definition: BFMT.h:245
void setChildren(BiDirMotionPtrs children)
Set the children of the motion.
Definition: BFMT.h:354
Encapsulate a termination condition for a motion planner. Planners will call operator() to decide whe...
void setCacheCC(bool ccc)
Sets the collision check caching to save calls to the collision checker with slightly memory usage as...
Definition: BFMT.h:174
void setNearestK(bool nearestK)
If nearestK is true, FMT will be run using the Knearest strategy.
Definition: BFMT.h:123
base::Cost getHeuristicCost() const
Get the cost to go heuristic cost.
Definition: BFMT.h:427
base::Cost getOtherCost(void) const
Get cost of this motion in the inactive tree.
Definition: BFMT.h:329
bool termination(BiDirMotion *&z, BiDirMotion *&connection_point, const base::PlannerTerminationCondition &ptc)
Checks if the termination condition is met.
Definition: BFMT.cpp:762
BiDirMotionPtrs children_[2]
The set of motions descending from the current motion.
Definition: BFMT.h:305
void setParent(BiDirMotion *parent)
Set the parent of the motion.
Definition: BFMT.h:342
bool getNearestK() const
Get the state of the nearestK strategy.
Definition: BFMT.h:129
BiDirMotionPtrs getChildren(void) const
Get the children of the motion.
Definition: BFMT.h:360
base::Cost cost_[2]
The cost of this motion.
Definition: BFMT.h:314
unsigned int NNk_
K used in the nearestK strategy.
Definition: BFMT.h:554
void setTreeType(TreeType *treePtr)
Set tree identifier for this motion.
Definition: BFMT.h:384
void setExtendedFMT(bool e)
Activates the extended FMT*: adding new samples if planner does not finish successfully.
Definition: BFMT.h:199
SetType currentSet_[2]
Current set in which the motion is included.
Definition: BFMT.h:308
void freeMemory()
Free the memory allocated by this planner.
Definition: BFMT.cpp:91
base::State * getState() const
Get the state associated with the motion.
Definition: BFMT.h:401
base::OptimizationObjectivePtr opt_
The cost objective function.
Definition: BFMT.h:588
void tracePath(BiDirMotion *z, BiDirMotionPtrs &path)
Trace the path along a tree towards the root (forward or reverse)
Definition: BFMT.cpp:824
ExploreType
Exploration strategy identifier.
Definition: BFMT.h:89
bool alreadyCC(BiDirMotion *m)
Returns true if the connection to m has been already tested and failed because of a collision...
Definition: BFMT.h:407
Abstract definition of a goal region that can be sampled.
Main namespace. Contains everything in this library.
Definition: Cost.h:42
void setState(base::State *state)
Set the state associated with the motion.
Definition: BFMT.h:396
BiDirMotionBinHeap Open_[2]
A binary heap for storing explored motions in cost-to-come sorted order. The motions in Open have bee...
Definition: BFMT.h:579
virtual void setup(void)
Perform extra configuration steps, if needed. This call will also issue a call to ompl::base::SpaceIn...
Definition: BFMT.cpp:52
bool getExtendedFMT() const
Returns true if the extended FMT* is activated.
Definition: BFMT.h:205
void addCC(BiDirMotion *m)
Caches a failed collision check to m.
Definition: BFMT.h:415
bool plan(BiDirMotion *x_init, BiDirMotion *x_goal, BiDirMotion *&z, const base::PlannerTerminationCondition &ptc)
Executes the actual planning algorithm, swapping and expanding the trees.
Definition: BFMT.cpp:568
void useFwdTree()
Sets forward tree active.
Definition: BFMT.h:456
std::shared_ptr< NearestNeighbors< BiDirMotion * > > nn_
A nearest-neighbor datastructure containing the set of all motions.
Definition: BFMT.h:569
bool getCacheCC() const
Get the state of the collision check caching.
Definition: BFMT.h:180
Base class for a planner.
Definition: Planner.h:230
Bidirectional Asymptotically Optimal Fast Marching Tree algorithm developed by J. Starek...
Definition: BFMT.h:82
SetType
The FMT* planner begins with all nodes included in set Unvisited "Waiting for optimal connection"...
Definition: BFMT.h:267
void setFreeSpaceVolume(const double freeSpaceVolume)
Store the volume of the obstacle-free configuration space. If no value is specified, the default assumes an obstacle-free unit hypercube, freeSpaceVolume = (maximumExtent/sqrt(dimension))^(dimension)
Definition: BFMT.h:158
void sampleFree(std::shared_ptr< NearestNeighbors< BiDirMotion * > > nn, const base::PlannerTerminationCondition &ptc)
Sample a state from the free configuration space and save it into the nearest neighbors data structur...
Definition: BFMT.cpp:214
BiDirMotion * parent_[2]
The parent motion in the exploration tree.
Definition: BFMT.h:302
double value() const
The value of the cost.
Definition: Cost.h:54
bool setPrecomputeNN() const
Returns true if Nearest Neighbor precomputation is done.
Definition: BFMT.h:251
void swapTrees()
Change the active tree.
Definition: BFMT.cpp:835
A class to store the exit status of Planner::solve()
Definition: PlannerStatus.h:48
unsigned int getNumSamples() const
Get the number of states that the planner will sample.
Definition: BFMT.h:117
A shared pointer wrapper for ompl::base::SpaceInformation.
void expandTreeFromNode(BiDirMotion *&z, BiDirMotion *&connection_point)
Complete one iteration of the main loop of the BFMT* algorithm: Find K nearest nodes in set Unvisited...
Definition: BFMT.cpp:445
void setRadiusMultiplier(const double radiusMultiplier)
The planner searches for neighbors of a node within a cost r, where r is the value described for BFMT...
Definition: BFMT.h:141
virtual void clear()
Clear all internal datastructures. Planner settings are not affected. Subsequent calls to solve() wil...
Definition: BFMT.cpp:105
virtual base::PlannerStatus solve(const base::PlannerTerminationCondition &ptc)
Function that can solve the motion planning problem. This function can be called multiple times on th...
Definition: BFMT.cpp:267
void useRevTree()
Sets reverse tree active.
Definition: BFMT.h:462
void updateNeighborhood(BiDirMotion *m, const std::vector< BiDirMotion * > nbh)
For a motion m, updates the stored neighborhoods of all its neighbors by by inserting m (maintaining ...
Definition: BFMT.cpp:840
TreeType tree_
Active tree.
Definition: BFMT.h:557
bool cacheCC_
Flag to activate the collision check caching.
Definition: BFMT.h:597
Definition of an abstract state.
Definition: State.h:50
TerminateType termination_
Termination strategy used.
Definition: BFMT.h:563
double getFreeSpaceVolume() const
Get the volume of the free configuration space that is being used by the planner. ...
Definition: BFMT.h:167
unsigned int collisionChecks_
Number of collision checks performed by the algorithm.
Definition: BFMT.h:545
base::State * state_
The state contained by the motion.
Definition: BFMT.h:299
Representation of a bidirectional motion.
Definition: BFMT.h:257
bool extendedFMT_
Add new samples if the tree was not able to find a solution.
Definition: BFMT.h:600
void setHeuristicCost(const base::Cost h)
Set the cost to go heuristic cost.
Definition: BFMT.h:421
Abstract representation of a container that can perform nearest neighbors queries.
double getRadiusMultiplier() const
Get the multiplier used for the nearest neighbors search radius.
Definition: BFMT.h:150
Abstract definition of optimization objectives.
TreeType
Tree identifier.
Definition: BFMT.h:86
The exception type for ompl.
Definition: Exception.h:47
A shared pointer wrapper for ompl::base::OptimizationObjective.
unsigned int numSamples_
The number of samples to use when planning.
Definition: BFMT.h:529
void chooseTreeAndExpansionNode(BiDirMotion *&z)
Chooses and expand a tree according to the exploration strategy.
Definition: BFMT.cpp:785
BiDirMotion(const base::SpaceInformationPtr &si, TreeType *tree)
Constructor that allocates memory for the state.
Definition: BFMT.h:283
void setCost(base::Cost cost)
Set the cost of the motion.
Definition: BFMT.h:336
bool getHeuristics() const
Returns true if the heap is ordered taking into account cost to go heuristics.
Definition: BFMT.h:193
double distanceFunction(const BiDirMotion *a, const BiDirMotion *b) const
Compute the distance between two motions as the cost between their contained states. Note that for computationally intensive cost functions, the cost between motions should be stored to avoid duplicate calculations.
Definition: BFMT.h:471
std::set< BiDirMotion * > collChecksDone_
Contains the connections attempted FROM this node.
Definition: BFMT.h:320
TreeType getTreeType(void) const
Get tree identifier for this motion.
Definition: BFMT.h:390
SetType getCurrentSet(void) const
Fet the current set of the motion.
Definition: BFMT.h:372
double NNr_
Radius employed in the nearestR strategy.
Definition: BFMT.h:551
TerminateType
Termination strategy identifier.
Definition: BFMT.h:92
double freeSpaceVolume_
The volume of numSathe free configuration space, computed as an upper bound with 95% confidence...
Definition: BFMT.h:542
void setExploration(bool balanced)
Sets exploration strategy: balanced true expands one tree every iteration. False will select the tree...
Definition: BFMT.h:212
void setHeuristics(bool h)
Activates the cost to go heuristics when ordering the heap.
Definition: BFMT.h:186
bool nearestK_
Flag to activate the K nearest neighbors strategy.
Definition: BFMT.h:548
BiDirMotion * getParent(void) const
Get the parent of the motion.
Definition: BFMT.h:348
std::map< BiDirMotion *, BiDirMotionBinHeap::Element * > Open_elements[2]
Map to know the corresponding heap element from the given motion.
Definition: BFMT.h:582
bool heuristics_
Flag to activate the cost to go heuristics.
Definition: BFMT.h:591
bool getExploration() const
Returns the exploration strategy.
Definition: BFMT.h:221
Definition of a cost value. Can represent the cost of a motion or the cost of a state.
Definition: Cost.h:47
double calculateUnitBallVolume(const unsigned int dimension) const
Compute the volume of the unit ball in a given dimension.
Definition: BFMT.cpp:240
void setNumSamples(const unsigned int numSamples)
Set the number of states that the planner should sample. The planner will sample this number of state...
Definition: BFMT.h:111
TreeType * tree_
Tree identifier.
Definition: BFMT.h:311
Comparator used to order motions in a binary heap.
Definition: BFMT.h:438
virtual void getPlannerData(base::PlannerData &data) const
Get information about the current run of the motion planner. Repeated calls to this function will upd...
Definition: BFMT.cpp:120