Parasol Planning Library (PPL)
CDInfo.h
Go to the documentation of this file.
1 #ifndef PMPL_CD_INFO_H_
2 #define PMPL_CD_INFO_H_
3 
4 #include "Vector.h"
5 
6 #include <limits>
7 #include <map>
8 #include <unordered_map>
9 #include <utility>
10 #include <vector>
11 
12 class Body;
13 class MultiBody;
14 
15 
16 
22 
23  public:
24 
27 
28  typedef std::pair<const Body*, const Body*> BodyKey;
29  typedef std::pair<const MultiBody*, const MultiBody*> MultiBodyKey;
30 
31  typedef std::map<BodyKey, double> BodyMap;
32  typedef std::map<MultiBodyKey, double> MultiBodyMap;
33 
34  typedef typename BodyMap::const_iterator iterator;
35 
39 
43  void Merge(const CDClearanceMap& _other);
44 
49  void SetClearance(const Body* const _a, const Body* const _b,
50  const double _clearance);
51 
53  void Clear();
54 
58 
66  double GetClearance(const Body* const _a, const Body* const _b)
67  const noexcept;
68 
76  double GetClearance(const MultiBody* const _a, const MultiBody* const _b)
77  const noexcept;
78 
80  double GetMinClearance() const noexcept;
81 
83  BodyKey GetClosestBodies() const noexcept;
84 
86  MultiBodyKey GetClosestMultiBodies() const noexcept;
87 
88  iterator begin() const noexcept;
89  iterator end() const noexcept;
90 
92 
93  private:
94 
97 
102  BodyKey MakeKey(const Body* const _a, const Body* const _b)
103  const noexcept;
104 
109  MultiBodyKey MakeKey(const MultiBody* const _a, const MultiBody* const _b)
110  const noexcept;
111 
115 
116  BodyMap m_bodyMap;
117  MultiBodyMap m_multibodyMap;
118 
120  double m_minClearance{std::numeric_limits<double>::infinity()};
121 
122  BodyKey m_closestPair{nullptr, nullptr};
123 
125 
126 };
127 
128 
139 struct CDInfo {
140 
143 
146  typedef std::pair<int, int> CollisionPair;
147 
151 
153  CDInfo(const bool _retAllInfo = false);
154 
157  void ResetVars(const bool _retAllInfo = false);
158 
162 
167  bool operator<(const CDInfo& _cdInfo) const noexcept;
168 
172 
176  double m_minDist;
177 
178  mathtool::Vector3d m_robotPoint;
179  mathtool::Vector3d m_objectPoint;
180 
181  std::vector<CollisionPair> m_trianglePairs;
182 
184 
186 
187 };
188 
189 #endif
Definition: Body.h:41
Definition: CDInfo.h:21
std::map< BodyKey, double > BodyMap
Definition: CDInfo.h:31
void SetClearance(const Body *const _a, const Body *const _b, const double _clearance)
Definition: CDInfo.cpp:46
iterator begin() const noexcept
Definition: CDInfo.cpp:122
MultiBodyKey GetClosestMultiBodies() const noexcept
Get the multibody pair which had the lowest clearance value.
Definition: CDInfo.cpp:112
iterator end() const noexcept
Definition: CDInfo.cpp:129
BodyKey GetClosestBodies() const noexcept
Get the body pair which had the lowest clearance value.
Definition: CDInfo.cpp:105
std::pair< const MultiBody *, const MultiBody * > MultiBodyKey
Definition: CDInfo.h:29
std::pair< const Body *, const Body * > BodyKey
Definition: CDInfo.h:28
void Merge(const CDClearanceMap &_other)
Definition: CDInfo.cpp:32
BodyMap::const_iterator iterator
Definition: CDInfo.h:34
double GetClearance(const Body *const _a, const Body *const _b) const noexcept
Definition: CDInfo.cpp:79
std::map< MultiBodyKey, double > MultiBodyMap
Definition: CDInfo.h:32
void Clear()
Reset the structure.
Definition: CDInfo.cpp:68
double GetMinClearance() const noexcept
Get the lowest reported clearance.
Definition: CDInfo.cpp:98
Definition: MultiBody.h:65
Definition: CDInfo.h:139
std::vector< CollisionPair > m_trianglePairs
All colliding triangle pairs.
Definition: CDInfo.h:181
mathtool::Vector3d m_objectPoint
Closest point on closest obstacle to Robot.
Definition: CDInfo.h:179
bool m_retAllInfo
Consider all collisions or only the first?
Definition: CDInfo.h:173
mathtool::Vector3d m_robotPoint
Closest point on Robot to closest obstacle.
Definition: CDInfo.h:178
CDClearanceMap m_clearanceMap
Map of detected clearances.
Definition: CDInfo.h:183
double m_minDist
Distance between Robot and closest obstacle.
Definition: CDInfo.h:176
int m_collidingObstIndex
Index for first discovered obstacle collision.
Definition: CDInfo.h:174
std::pair< int, int > CollisionPair
Definition: CDInfo.h:146
int m_nearestObstIndex
Index for closest obstacle.
Definition: CDInfo.h:175
CDInfo(const bool _retAllInfo=false)
Definition: CDInfo.cpp:155
bool operator<(const CDInfo &_cdInfo) const noexcept
Definition: CDInfo.cpp:177
void ResetVars(const bool _retAllInfo=false)
Definition: CDInfo.cpp:162