37 #include "ompl/base/PlannerTerminationCondition.h"
38 #include "ompl/util/Time.h"
39 #include <boost/bind.hpp>
40 #include <boost/thread.hpp>
41 #include <boost/lambda/bind.hpp>
50 class PlannerTerminationCondition::PlannerTerminationConditionImpl
59 signalThreadStop_(false)
65 ~PlannerTerminationConditionImpl()
88 void startEvalThread(
void)
92 signalThreadStop_ =
false;
94 thread_ =
new boost::thread(boost::bind(&PlannerTerminationConditionImpl::periodicEval,
this));
99 void stopEvalThread(
void)
101 signalThreadStop_ =
true;
111 void periodicEval(
void)
116 unsigned int count = 1;
120 count = 0.5 + period_ / 0.001;
124 while (!terminate_ && !signalThreadStop_)
127 for (
unsigned int i = 0 ; i < count ; ++i)
129 if (terminate_ || signalThreadStop_)
131 boost::this_thread::sleep(s);
143 mutable bool terminate_;
146 boost::thread *thread_;
152 bool signalThreadStop_;
160 impl_(new PlannerTerminationConditionImpl(fn, -1.0))
165 impl_(new PlannerTerminationConditionImpl(fn, period))
176 return impl_->eval();
194 static bool plannerOrTerminationConditionAux(
const PlannerTerminationCondition &c1,
const PlannerTerminationCondition &c2)
199 static bool plannerAndTerminationConditionAux(
const PlannerTerminationCondition &c1,
const PlannerTerminationCondition &c2)
230 if (interval > duration)
bool eval(void) const
The implementation of some termination condition. By default, this just calls fn_() ...
PlannerTerminationCondition plannerOrTerminationCondition(const PlannerTerminationCondition &c1, const PlannerTerminationCondition &c2)
Combine two termination conditions into one. If either termination condition returns true...
PlannerTerminationCondition plannerNonTerminatingCondition()
Simple termination condition that always returns false. The termination condition will never be met...
boost::posix_time::time_duration duration
Representation of a time duration.
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...
void terminate(void) const
Notify that the condition for termination should become true, regardless of what eval() returns...
PlannerTerminationCondition plannerAlwaysTerminatingCondition()
Simple termination condition that always returns true. The termination condition will always be met...
duration seconds(double sec)
Return the time duration representing a given number of seconds.
PlannerTerminationCondition timedPlannerTerminationCondition(double duration)
Return a termination condition that will become true duration seconds in the future (wall-time) ...
PlannerTerminationCondition(const PlannerTerminationConditionFn &fn)
Construct a termination condition. By default, eval() will call the externally specified function fn ...
boost::posix_time::ptime point
Representation of a point in time.
point now(void)
Get the current time point.
boost::function< bool()> PlannerTerminationConditionFn
Signature for functions that decide whether termination conditions have been met for a planner...