All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends
GoalLazySamples.h
1 /*********************************************************************
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2010, 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_GOALS_GOAL_LAZY_SAMPLES_
38 #define OMPL_BASE_GOALS_GOAL_LAZY_SAMPLES_
39 
40 #include "ompl/base/goals/GoalStates.h"
41 #include <boost/thread/thread.hpp>
42 #include <boost/function.hpp>
43 #include <limits>
44 
45 namespace ompl
46 {
47 
48  namespace base
49  {
50 
52 
56  typedef boost::function<bool(const GoalLazySamples*, State*)> GoalSamplingFn;
57 
72  class GoalLazySamples : public GoalStates
73  {
74  public:
75 
79  typedef boost::function<void(const base::State*)> NewStateCallbackFn;
80 
104  GoalLazySamples(const SpaceInformationPtr &si, const GoalSamplingFn &samplerFunc,
105  bool autoStart = true, double minDist = std::numeric_limits<double>::epsilon());
106 
107  virtual ~GoalLazySamples(void);
108 
109  virtual void sampleGoal(State *st) const;
110 
111  virtual double distanceGoal(const State *st) const;
112 
113  virtual void addState(const State* st);
114 
116  void startSampling(void);
117 
119  void stopSampling(void);
120 
122  bool isSampling(void) const;
123 
126  void setMinNewSampleDistance(double dist)
127  {
128  minDist_ = dist;
129  }
130 
133  double getMinNewSampleDistance(void) const
134  {
135  return minDist_;
136  }
137 
139  unsigned int samplingAttemptsCount(void) const
140  {
141  return samplingAttempts_;
142  }
143 
146  void setNewStateCallback(const NewStateCallbackFn &callback);
147 
149  bool addStateIfDifferent(const State* st, double minDistance);
150 
152  virtual bool couldSample(void) const;
153 
154  virtual bool hasStates(void) const;
155  virtual const State* getState(unsigned int index) const;
156  virtual std::size_t getStateCount(void) const;
157 
158  virtual void clear(void);
159 
160  protected:
161 
163  void goalSamplingThread(void);
164 
166  mutable boost::mutex lock_;
167 
170 
173 
175  boost::thread *samplingThread_;
176 
178  unsigned int samplingAttempts_;
179 
182  double minDist_;
183 
186  };
187 
188  }
189 }
190 
191 #endif