Parasol Planning Library (PPL)
TopologicalMap.h
Go to the documentation of this file.
1 #ifndef PMPL_TOPOLOGICAL_MAP_H_
2 #define PMPL_TOPOLOGICAL_MAP_H_
3 
5 #include "Utilities/Hash.h"
6 #include "Utilities/SSSP.h"
7 #include "Utilities/XMLNode.h"
10 
11 #include "glutils/obj_file.h"
12 #include "glutils/triangulated_model.h"
13 
29 // Topological Nearest-Neighbor Filtering". Under review for RA-L @ IROS 20.
30 // - and -
31 // Read Sandstrom. "Approximating Configuration Space Topology with Workspace
32 // Models". PhD Thesis, May 2020.
38 class TopologicalMap final : public MPBaseObject {
39  public:
43 
46  typedef typename RoadmapType::VID VID;
47  typedef typename RoadmapType::VI VI;
49 
50  typedef std::vector<const WorkspaceRegion*> NeighborhoodKey;
51 
53  typedef std::unordered_map<const WorkspaceRegion*, double> DistanceMap;
54 
56  typedef std::map<const WorkspaceRegion*, VertexSet> OccupancyMap;
57 
61 
63  TopologicalMap(double gridSize, string decomp_label) {
64  this->m_gridSize = gridSize;
65  this->m_decompositionLabel = decomp_label;
66  }
67  TopologicalMap(XMLNode& _node);
68 
69  virtual ~TopologicalMap();
70 
74 
75  virtual void Initialize() override;
76 
80 
85  const VertexSet* GetMappedVIDs(RoadmapType* const _r,
86  const WorkspaceRegion* const _region,
87  const size_t _bodyIndex = 0) const;
88 
95  const VID _vid,
96  const size_t _bodyIndex = 0) const;
97 
102  bool IsPopulated(RoadmapType* const _r,
103  const WorkspaceRegion* const _region,
104  const size_t _bodyIndex = 0) const;
105 
109 
111  const WorkspaceRegion* GetRandomRegion() const;
112 
119  const WorkspaceRegion* LocateRegion(RoadmapType* const _r,
120  const VID _vid,
121  const size_t _bodyIndex = 0) const;
122 
129  const WorkspaceRegion* LocateRegion(const Cfg& _c,
130  const size_t _bodyIndex = 0) const;
131 
135  const WorkspaceRegion* LocateRegion(const Point3d& _p) const;
136 
141  const WorkspaceRegion* LocateNearestRegion(const Cfg& _c,
142  const size_t _bodyIndex = 0) const;
143 
147  const WorkspaceRegion* LocateNearestRegion(const Point3d& _p) const;
148 
154  size_t LocateCell(RoadmapType* const _r,
155  const VID _v,
156  const size_t _bodyIndex = 0) const;
157 
163  size_t LocateCell(const Cfg& _c, const size_t _bodyIndex = 0) const;
164 
168  size_t LocateCell(const Point3d& _p) const;
169 
176 
179  NeighborhoodKey LocateNeighborhood(RoadmapType* const _r, const VID _v) const;
180  NeighborhoodKey LocateNeighborhood(const Cfg& _c) const;
181 
185 
188 
192 
202  double ApproximateMinimumInnerDistance(const WorkspaceRegion* const _source,
203  const WorkspaceRegion* const _target);
204 
210  const WorkspaceRegion* const _source,
211  const double _radius);
212 
214 
215  private:
218 
220  void EnsureMap(RoadmapType* const _r);
221 
225  void MapCfg(RoadmapType* const _r, const VI _vertex);
226 
229  void UnmapCfg(RoadmapType* const _r, const VI _vertex);
230 
232  void ClearCfgMaps();
233 
237  const OccupancyMap& GetForwardMap(RoadmapType* const _r,
238  const size_t _bodyIndex) const;
239 
243  const NeighborhoodKey& GetInverseMap(RoadmapType* const _r,
244  const VID _vid) const;
245 
249 
250  std::string m_decompositionLabel;
251 
252  std::string m_pqpLabel;
253 
255  std::unique_ptr<const GridOverlay> m_grid;
256 
257  double m_gridSize{.1};
258 
260  GridOverlay::DecompositionMap m_cellToRegions;
261 
263  std::unordered_map<RoadmapType*, std::vector<OccupancyMap>> m_regionToVIDs;
264 
266  std::unordered_map<RoadmapType*, std::unordered_map<VID, NeighborhoodKey>>
267  m_vidToNeighborhood;
268 
270  std::unordered_set<size_t> m_boundaryCells;
271 
273  std::unordered_map<const WorkspaceRegion*, DistanceMap> m_innerDistanceMap;
274 
276 };
277 
278 #endif
Definition: Cfg.h:38
Definition: Weight.h:36
Definition: GenericStateGraph.h:67
STAPLGraph::vertex_descriptor VID
Definition: GenericStateGraph.h:83
STAPLGraph::vertex_iterator VI
Definition: GenericStateGraph.h:89
std::unordered_set< VID > VertexSet
Definition: GenericStateGraph.h:86
std::vector< std::vector< const WorkspaceRegion * > > DecompositionMap
A mapping from a grid cell index to a set of workspace regions.
Definition: GridOverlay.h:40
Definition: MPBaseObject.h:46
Definition: TopologicalMap.h:38
RoadmapType::VertexSet VertexSet
Definition: TopologicalMap.h:48
std::map< const WorkspaceRegion *, VertexSet > OccupancyMap
A map of the VIDs occupying a given region.
Definition: TopologicalMap.h:56
double ApproximateMinimumInnerDistance(const WorkspaceRegion *const _source, const WorkspaceRegion *const _target)
Definition: TopologicalMap.cpp:487
MPBaseObject::RoadmapType RoadmapType
Definition: TopologicalMap.h:45
virtual void Initialize() override
Definition: TopologicalMap.cpp:44
const VertexSet * GetMappedVIDs(RoadmapType *const _r, const WorkspaceRegion *const _region, const size_t _bodyIndex=0) const
Definition: TopologicalMap.cpp:129
TopologicalMap()
Definition: TopologicalMap.cpp:15
NeighborhoodKey LocateNeighborhood(RoadmapType *const _r, const VID _v) const
Definition: TopologicalMap.cpp:344
RoadmapType::VID VID
Definition: TopologicalMap.h:46
const WorkspaceRegion * LocateRegion(RoadmapType *const _r, const VID _vid, const size_t _bodyIndex=0) const
Definition: TopologicalMap.cpp:172
TopologicalMap(double gridSize, string decomp_label)
Definition: TopologicalMap.h:63
std::unordered_map< const WorkspaceRegion *, double > DistanceMap
A map describing the distance to a region from some starting point.
Definition: TopologicalMap.h:53
MPBaseObject::WeightType WeightType
Definition: TopologicalMap.h:44
bool IsPopulated(RoadmapType *const _r, const WorkspaceRegion *const _region, const size_t _bodyIndex=0) const
Definition: TopologicalMap.cpp:156
std::vector< const WorkspaceRegion * > NeighborhoodKey
Definition: TopologicalMap.h:50
const DistanceMap & ComputeApproximateMinimumInnerDistances(const WorkspaceRegion *const _source, const double _radius)
Definition: TopologicalMap.cpp:512
const WorkspaceRegion * LocateNearestRegion(const Cfg &_c, const size_t _bodyIndex=0) const
Definition: TopologicalMap.cpp:288
const WorkspaceDecomposition * GetDecomposition() const
Get the decomposition used by this map.
Definition: TopologicalMap.cpp:371
size_t LocateCell(RoadmapType *const _r, const VID _v, const size_t _bodyIndex=0) const
Definition: TopologicalMap.cpp:324
virtual ~TopologicalMap()
const WorkspaceRegion * GetMappedRegion(RoadmapType *const _r, const VID _vid, const size_t _bodyIndex=0) const
Definition: TopologicalMap.cpp:142
RoadmapType::VI VI
Definition: TopologicalMap.h:47
const WorkspaceRegion * GetRandomRegion() const
Let it be a light for you in dark places, when all other lights go out.
Definition: TopologicalMap.cpp:164
Definition: WorkspaceDecomposition.h:24
Definition: WorkspaceRegion.h:18
Definition: XMLNode.h:27