Parasol Planning Library (PPL)
ClearanceUtilities.h
Go to the documentation of this file.
1 #ifndef PMPL_CLEARANCE_UTILITY_H_
2 #define PMPL_CLEARANCE_UTILITY_H_
3 
5 #include "Geometry/Bodies/Body.h"
7 //#include "MPLibrary/LocalPlanners/StraightLine.h"
10 #include "Utilities/MPUtils.h"
11 
12 
13 class Robot;
14 
15 
21  double m_avg{0};
22  double m_min{0};
23  double m_max{0};
24  double m_var{0};
25  std::vector<double> m_clearanceAlongPath;
26  double m_pathLength{0};
27 };
28 
29 
34 template<class CfgType>
35 struct Ray {
36  CfgType m_incr;
37  CfgType m_tick;
38 
39  Ray(const CfgType& _i, const CfgType& _t) : m_incr(_i), m_tick(_t) {}
40 };
41 
42 
48 class ClearanceUtility : virtual public MPBaseObject {
49 
50  public:
51 
54 
57  typedef typename RoadmapType::VID VID;
58 
62 
76  string _vcLabel = "", string _dmLabel = "",
77  bool _exactClearance = false, bool _exactPenetration = false,
78  size_t _clearanceRays = 10, size_t _penetrationRays = 10,
79  double _approxStepSize = MAX_DBL, double _approxResolution = MAX_DBL,
80  bool _useBBX = true, bool _positionalDofsOnly = true, bool _debug = false);
81 
84  ClearanceUtility(XMLNode& _node);
85 
86  virtual ~ClearanceUtility() = default;
87 
91 
94  virtual void Print(ostream& _os) const override;
95 
96  virtual void Initialize() override;
97 
101 
104  const string& GetDistanceMetricLabel() const {return m_dmLabel;}
105 
108  const string& GetValidityCheckerLabel() const {return m_vcLabel;}
109 
112  void SetValidityCheckerLabel(const string& _s) {m_vcLabel = _s;}
113 
116  bool GetExactClearance() const {return m_exactClearance;}
117 
121 
125 
128  bool IsInitialized() const {return m_initialized;}
129 
133 
144  bool CollisionInfo(Cfg& _cfg, Cfg& _clrCfg,
145  const Boundary* const _b, CDInfo& _cdInfo,
146  const bool& _useOppValidityWitness = true);
147 
158  bool ExactCollisionInfo(Cfg& _cfg, Cfg& _clrCfg,
159  const Boundary* const _b, CDInfo& _cdInfo,
160  const bool _useOppValidityWitness = true);
161 
173  bool ApproxCollisionInfo(Cfg& _cfg, Cfg& _clrCfg,
174  const Boundary* const _b, CDInfo& _cdInfo,
175  const bool& _useOppValidityWitness = true);
176 
194  bool FindApproximateWitness(const std::size_t& _numRays,
195  std::vector<Ray<Cfg> >& _rays, const Cfg& _sampledCfg,
196  const bool& _initValidity, const Boundary* const _b,
197  std::pair<size_t, Cfg>& _candidate,
198  const bool& _useOppValidityWitness = true);
199 
208  void MakeRays(const Cfg& _sampledCfg, const std::size_t& _numRays,
209  std::vector<Ray<Cfg> >& _rays);
210 
223  bool ValidateCandidate(const std::pair<size_t, Cfg>& _cand,
224  const std::vector<Ray<Cfg> >& _rays,
225  const Boundary* const _b, const bool& _useOppValidityWitness = true);
226 
230 
234  ClearanceStats PathClearance(vector<VID>& _path);
235 
239  ClearanceStats PathClearance(vector<Cfg>& _path);
240 
246  vector<double> EdgeClearance(const Cfg& _c1, const Cfg& _c2,
247  const WeightType& _weight);
248 
259  const bool GetNearestVertexWitness(Cfg& _cfg, CDInfo& _cdInfo,
260  const Boundary* const _b);
261 
262  void SetRobot(Robot* _robot);
263 
265 
266  protected:
267 
270 
271  string m_vcLabel{"cd4"};
272  string m_dmLabel{"euclidean"};
273 
274  bool m_useBBX{true};
275 
276  bool m_positionalDofsOnly{true};
277 
278  bool m_exactClearance{false};
279  bool m_exactPenetration{false};
280 
281  size_t m_clearanceRays{10};
282  size_t m_penetrationRays{10};
283 
284  // These replaced two similar members from the ClearanceUtility
285  // class (m_approxStepSize and m_approxResolution):
287  double m_rayTickResolution;//no default values as these are required in node
290 
291  //These two are linearly related based on the resolution for ray ticking.
292  // The max ray magnitude is just how far out a ray will be attempted.
297 
298  //These are just for getting rayTickResolution and orientationResolution.
299  // They get multiplied into their respective values from the environment,
300  // and should only really be used there. See Initialize() for more info.
304 
308  bool m_initialized{false};
309 
311 
313 
327  const Cfg& _cfg, const bool _initValidity,
328  Cfg& _witnessCfg, const Boundary* const _b,
329  const bool _useOppValidityWitness = true);
330 
331  int abcd = 0;
332 };
333 
334 #endif
#define MAX_DBL
Definition: MPUtils.h:33
Definition: Boundary.h:30
Definition: Cfg.h:38
Definition: ClearanceUtilities.h:48
bool ApproxCollisionInfo(Cfg &_cfg, Cfg &_clrCfg, const Boundary *const _b, CDInfo &_cdInfo, const bool &_useOppValidityWitness=true)
Definition: ClearanceUtilities.cpp:337
const string & GetDistanceMetricLabel() const
Definition: ClearanceUtilities.h:104
const bool GetNearestVertexWitness(Cfg &_cfg, CDInfo &_cdInfo, const Boundary *const _b)
Definition: ClearanceUtilities.cpp:215
int abcd
Definition: ClearanceUtilities.h:331
bool ValidateCandidate(const std::pair< size_t, Cfg > &_cand, const std::vector< Ray< Cfg > > &_rays, const Boundary *const _b, const bool &_useOppValidityWitness=true)
Definition: ClearanceUtilities.cpp:674
bool IsInitialized() const
Definition: ClearanceUtilities.h:128
bool m_initialized
Definition: ClearanceUtilities.h:308
bool ExactCollisionInfo(Cfg &_cfg, Cfg &_clrCfg, const Boundary *const _b, CDInfo &_cdInfo, const bool _useOppValidityWitness=true)
Definition: ClearanceUtilities.cpp:157
bool FindApproximateWitness(const std::size_t &_numRays, std::vector< Ray< Cfg > > &_rays, const Cfg &_sampledCfg, const bool &_initValidity, const Boundary *const _b, std::pair< size_t, Cfg > &_candidate, const bool &_useOppValidityWitness=true)
Definition: ClearanceUtilities.cpp:416
void SetValidityCheckerLabel(const string &_s)
Definition: ClearanceUtilities.h:112
bool CollisionInfo(Cfg &_cfg, Cfg &_clrCfg, const Boundary *const _b, CDInfo &_cdInfo, const bool &_useOppValidityWitness=true)
Definition: ClearanceUtilities.cpp:146
string m_dmLabel
Distance metric method label.
Definition: ClearanceUtilities.h:272
Robot * m_robot
Definition: ClearanceUtilities.h:310
const string & GetValidityCheckerLabel() const
Definition: ClearanceUtilities.h:108
double m_maSearchResolutionFactor
The search resolution factor.
Definition: ClearanceUtilities.h:303
MPBaseObject::RoadmapType RoadmapType
Definition: ClearanceUtilities.h:56
void MakeRays(const Cfg &_sampledCfg, const std::size_t &_numRays, std::vector< Ray< Cfg > > &_rays)
Definition: ClearanceUtilities.cpp:588
double GetPositionResolution() const
Definition: ClearanceUtilities.h:120
double m_orientationResFactor
The orientation resolution factor.
Definition: ClearanceUtilities.h:301
vector< double > EdgeClearance(const Cfg &_c1, const Cfg &_c2, const WeightType &_weight)
Definition: ClearanceUtilities.cpp:892
bool m_exactClearance
Use exact clearance calculations?
Definition: ClearanceUtilities.h:278
virtual void Print(ostream &_os) const override
Definition: ClearanceUtilities.cpp:95
ClearanceStats PathClearance(vector< VID > &_path)
Definition: ClearanceUtilities.cpp:777
size_t m_maxRayIterations
The maximum number of ray iterations.
Definition: ClearanceUtilities.h:296
double m_maxRayMagnitude
How far out a ray will be attempted.
Definition: ClearanceUtilities.h:294
RoadmapType::VID VID
Definition: ClearanceUtilities.h:57
double GetOrientationResolution() const
Definition: ClearanceUtilities.h:124
size_t m_penetrationRays
Number of rays for approximate penetration.
Definition: ClearanceUtilities.h:282
double m_positionalResFactor
The position resoluiton factor.
Definition: ClearanceUtilities.h:302
ClearanceStats RoadmapClearance()
Definition: ClearanceUtilities.cpp:738
double m_orientationResolution
The orientation resolution.
Definition: ClearanceUtilities.h:289
bool m_positionalDofsOnly
Use only positional dofs?
Definition: ClearanceUtilities.h:276
size_t m_clearanceRays
Number of rays for approximate clearance.
Definition: ClearanceUtilities.h:281
string m_vcLabel
Validity checker method label.
Definition: ClearanceUtilities.h:271
virtual ~ClearanceUtility()=default
double m_rayTickResolution
The resolution for rayTicks.
Definition: ClearanceUtilities.h:287
virtual void Initialize() override
Definition: ClearanceUtilities.cpp:115
bool GetExactClearance() const
Definition: ClearanceUtilities.h:116
bool AdjustWitnessToEnsureValidity(const Cfg &_cfg, const bool _initValidity, Cfg &_witnessCfg, const Boundary *const _b, const bool _useOppValidityWitness=true)
Definition: ClearanceUtilities.cpp:264
bool m_useBBX
Use bounding box as obstacle?
Definition: ClearanceUtilities.h:274
bool m_exactPenetration
Use exact penetration calculations?
Definition: ClearanceUtilities.h:279
MPBaseObject::WeightType WeightType
Definition: ClearanceUtilities.h:55
void SetRobot(Robot *_robot)
Definition: ClearanceUtilities.cpp:941
ClearanceUtility(string _vcLabel="", string _dmLabel="", bool _exactClearance=false, bool _exactPenetration=false, size_t _clearanceRays=10, size_t _penetrationRays=10, double _approxStepSize=MAX_DBL, double _approxResolution=MAX_DBL, bool _useBBX=true, bool _positionalDofsOnly=true, bool _debug=false)
Definition: ClearanceUtilities.cpp:11
Definition: Weight.h:36
Definition: GenericStateGraph.h:67
STAPLGraph::vertex_descriptor VID
Definition: GenericStateGraph.h:83
Definition: MPBaseObject.h:46
Definition: Robot.h:31
Definition: XMLNode.h:27
Definition: CDInfo.h:139
Definition: ClearanceUtilities.h:20
double m_pathLength
Definition: ClearanceUtilities.h:26
double m_avg
Definition: ClearanceUtilities.h:21
std::vector< double > m_clearanceAlongPath
Definition: ClearanceUtilities.h:25
double m_var
Definition: ClearanceUtilities.h:24
double m_max
Definition: ClearanceUtilities.h:23
double m_min
Definition: ClearanceUtilities.h:22
Definition: ClearanceUtilities.h:35
CfgType m_tick
Definition: ClearanceUtilities.h:37
Ray(const CfgType &_i, const CfgType &_t)
Definition: ClearanceUtilities.h:39
CfgType m_incr
Definition: ClearanceUtilities.h:36