37 #include "ompl/tools/config/SelfConfig.h"
38 #include "ompl/tools/config/MagicConstants.h"
40 #include <boost/thread/mutex.hpp>
41 #include <boost/shared_ptr.hpp>
53 class SelfConfig::SelfConfigImpl
59 SelfConfigImpl(
const base::SpaceInformationPtr &si) :
60 si_(si), probabilityOfValidState_(-1.0), averageValidMotionLength_(-1.0)
67 if (probabilityOfValidState_ < 0.0)
69 return probabilityOfValidState_;
75 if (averageValidMotionLength_ < 0.0)
77 return averageValidMotionLength_;
103 if (range < std::numeric_limits<double>::epsilon())
106 logDebug(
"Planner range detected to be %lf", range);
128 logInform(
"Attempting to use default projection.");
129 proj = si_->getStateSpace()->getDefaultProjection();
132 throw Exception(
"No projection evaluator specified");
136 void print(std::ostream &out)
const
138 out <<
"Configuration parameters for space '" << si_->getStateSpace()->getName() <<
"'" << std::endl;
139 out <<
" - probability of a valid state is " << probabilityOfValidState_ << std::endl;
140 out <<
" - average length of a valid motion is " << averageValidMotionLength_ << std::endl;
145 void checkSetup(
void)
150 probabilityOfValidState_ = -1.0;
151 averageValidMotionLength_ = -1.0;
155 base::SpaceInformationPtr si_;
156 double probabilityOfValidState_;
157 double averageValidMotionLength_;
169 typedef std::map<base::SpaceInformation*, boost::shared_ptr<SelfConfigImpl> > ConfigMap;
171 static ConfigMap SMAP;
172 static boost::mutex LOCK;
174 boost::mutex::scoped_lock smLock(LOCK);
175 ConfigMap::const_iterator it = SMAP.find(si.get());
177 if (it != SMAP.end())
178 impl_ = it->second.get();
181 impl_ =
new SelfConfigImpl(si);
182 SMAP[si.get()].reset(impl_);
190 boost::mutex::scoped_lock iLock(impl_->lock_);
191 return impl_->getProbabilityOfValidState();
196 boost::mutex::scoped_lock iLock(impl_->lock_);
197 return impl_->getAverageValidMotionLength();
202 boost::mutex::scoped_lock iLock(impl_->lock_);
203 return impl_->configureProjectionEvaluator(proj);
208 boost::mutex::scoped_lock iLock(impl_->lock_);
209 impl_->configureValidStateSamplingAttempts(attempts);
214 boost::mutex::scoped_lock iLock(impl_->lock_);
215 impl_->configurePlannerRange(range);
220 boost::mutex::scoped_lock iLock(impl_->lock_);