PlannerTerminationCondition.h
1 /*********************************************************************
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2011, Rice 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 the Rice 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 /* Author: Ioan Sucan */
36 
37 #ifndef OMPL_BASE_PLANNER_TERMINATION_CONDITION_
38 #define OMPL_BASE_PLANNER_TERMINATION_CONDITION_
39 
40 #include <functional>
41 #include <memory>
42 #include <ompl/base/ProblemDefinition.h>
43 #include <ompl/util/Time.h>
44 
45 namespace ompl
46 {
47  namespace base
48  {
56  typedef std::function<bool()> PlannerTerminationConditionFn;
64  {
65  public:
69  PlannerTerminationCondition(const PlannerTerminationConditionFn &fn);
70 
74  PlannerTerminationCondition(const PlannerTerminationConditionFn &fn, double period);
75 
76  ~PlannerTerminationCondition() = default;
77 
79  bool operator()() const
80  {
81  return eval();
82  }
83 
85  operator bool() const
86  {
87  return eval();
88  }
89 
92  void terminate() const;
93 
95  bool eval() const;
96 
97  private:
98  class PlannerTerminationConditionImpl;
99  std::shared_ptr<PlannerTerminationConditionImpl> impl_;
100  };
101 
105 
109 
113  const PlannerTerminationCondition &c2);
114 
118  const PlannerTerminationCondition &c2);
119 
122 
125 
128  PlannerTerminationCondition timedPlannerTerminationCondition(double duration, double interval);
129 
133 
137  {
138  public:
141  IterationTerminationCondition(unsigned int numIterations);
142 
145  bool eval();
146 
148  void reset();
149 
151  operator PlannerTerminationCondition();
152 
153  private:
155  unsigned int maxCalls_;
157  unsigned int timesCalled_;
158  };
159  }
160 }
161 
162 #endif
PlannerTerminationCondition plannerOrTerminationCondition(const PlannerTerminationCondition &c1, const PlannerTerminationCondition &c2)
Combine two termination conditions into one. If either termination condition returns true...
A class to run a planner for a specific number of iterations. Casts to a PTC for use with Planner::so...
PlannerTerminationCondition plannerNonTerminatingCondition()
Simple termination condition that always returns false. The termination condition will never be met...
A shared pointer wrapper for ompl::base::ProblemDefinition.
bool eval() const
The implementation of some termination condition. By default, this just calls fn_() ...
Encapsulate a termination condition for a motion planner. Planners will call operator() to decide whe...
PlannerTerminationCondition plannerAndTerminationCondition(const PlannerTerminationCondition &c1, const PlannerTerminationCondition &c2)
Combine two termination conditions into one. Both termination conditions need to return true for this...
std::function< bool()> PlannerTerminationConditionFn
Signature for functions that decide whether termination conditions have been met for a planner...
PlannerTerminationCondition plannerAlwaysTerminatingCondition()
Simple termination condition that always returns true. The termination condition will always be met...
PlannerTerminationCondition timedPlannerTerminationCondition(double duration)
Return a termination condition that will become true duration seconds in the future (wall-time) ...
Main namespace. Contains everything in this library.
Definition: AppBase.h:21
bool operator()() const
Return true if the planner should stop its computation.
PlannerTerminationCondition exactSolnPlannerTerminationCondition(ompl::base::ProblemDefinitionPtr pdef)
Return a termination condition that will become true as soon as the problem definition has an exact s...
std::chrono::system_clock::duration duration
Representation of a time duration.
Definition: Time.h:67
PlannerTerminationCondition(const PlannerTerminationConditionFn &fn)
Construct a termination condition. By default, eval() will call the externally specified function fn ...
void terminate() const
Notify that the condition for termination should become true, regardless of what eval() returns...