Parasol Planning Library (PPL)
MPSolution.h
Go to the documentation of this file.
1 #ifndef PMPL_MP_SOLUTION_TYPE_H_
2 #define PMPL_MP_SOLUTION_TYPE_H_
3 
11 #include "Utilities/MetricUtils.h"
12 
13 // #include <map>
14 // #include <memory>
15 // #include <unordered_map>
16 
17 class Robot;
18 class Path;
19 class GroupPath;
20 
21 
34 class MPSolutionType final {
35 
36  public:
37 
40 
44 
46  struct RobotSolution {
47  std::unique_ptr<RoadmapType> freeMap;
48  std::unique_ptr<RoadmapType> obstMap;
49  std::unique_ptr<Path> path;
50  std::unique_ptr<LocalObstacleMap> lom;
51 
52  RobotSolution() = default;
53 
57  RobotSolution(Robot* const _robot, StatClass* const _stats);
58  };
59 
61  struct GroupSolution {
62  std::unique_ptr<GroupRoadmapType> freeMap;
63  std::unique_ptr<GroupRoadmapType> obstMap;
64  std::unique_ptr<GroupPath> path;
65 
66  GroupSolution() = default;
67 
70  GroupSolution(RobotGroup* const _group, MPSolutionType* const _solution);
71  };
72 
76 
77  MPSolutionType(Robot* const _r);
78 
79  MPSolutionType(RobotGroup* const _g);
80 
84 
85  void AddRobot(Robot* const _r) noexcept;
86 
87  void SetRobot(Robot* const _r) noexcept;
88 
89  void SetRoadmap(Robot* const _r, RoadmapType* _roadmap) noexcept;
90 
91  void SetPath(Robot* const _r, Path* _path) noexcept;
92 
93  void AddRobotGroup(RobotGroup* const _g) noexcept;
94 
95  void SetGroupRoadmap(RobotGroup* const _g, GroupRoadmapType* _roadmap) noexcept;
96 
97  void SetGroupPath(RobotGroup* const _r, GroupPath* _path) noexcept;
98 
102 
103  RoadmapType* GetRoadmap(Robot* const _r = nullptr) const noexcept;
104 
105  RoadmapType* GetBlockRoadmap(Robot* const _r = nullptr) const noexcept;
106 
107  Path* GetPath(Robot* const _r = nullptr) const noexcept;
108 
109  LocalObstacleMap* GetLocalObstacleMap(Robot* const _r = nullptr) const
110  noexcept;
111 
112  GroupRoadmapType* GetGroupRoadmap(RobotGroup* const _g = nullptr) const
113  noexcept;
114 
115  GroupPath* GetGroupPath(RobotGroup* const _g = nullptr) const noexcept;
116 
117  StatClass* GetStatClass() const noexcept;
118 
119  Robot* GetRobot() const noexcept;
120 
121  RobotGroup* GetRobotGroup() const noexcept;
122 
124 
125  private:
126 
129 
133  const RobotSolution* GetRobotSolution(Robot* _r) const noexcept;
134 
138  RobotSolution* GetRobotSolution(Robot* _r) noexcept;
139 
143  const GroupSolution* GetGroupSolution(RobotGroup* _g) const noexcept;
144 
148  GroupSolution* GetGroupSolution(RobotGroup* _g) noexcept;
152 
153  Robot* m_robot{nullptr};
154  RobotGroup* m_group{nullptr};
155 
156  std::unique_ptr<StatClass> m_stats;
157 
159  std::unordered_map<Robot*, RobotSolution> m_individualSolutions;
160  std::unordered_map<RobotGroup*, GroupSolution> m_groupSolutions;
161 
163 
164 };
165 
166 #endif
Definition: GenericStateGraph.h:67
Definition: GroupCfg.h:39
Definition: GroupPath.h:23
Definition: GroupRoadmap.h:25
Definition: LocalObstacleMap.h:27
Definition: MPSolution.h:34
GroupRoadmap< GroupCfgType, GroupLocalPlan< RoadmapType > > GroupRoadmapType
Definition: MPSolution.h:43
RobotGroup * GetRobotGroup() const noexcept
Definition: MPSolution.cpp:222
void SetPath(Robot *const _r, Path *_path) noexcept
Definition: MPSolution.cpp:102
Robot * GetRobot() const noexcept
Definition: MPSolution.cpp:215
Path * GetPath(Robot *const _r=nullptr) const noexcept
Definition: MPSolution.cpp:176
GroupRoadmapType * GetGroupRoadmap(RobotGroup *const _g=nullptr) const noexcept
Definition: MPSolution.cpp:192
GroupPath * GetGroupPath(RobotGroup *const _g=nullptr) const noexcept
Definition: MPSolution.cpp:200
void SetRobot(Robot *const _r) noexcept
Definition: MPSolution.cpp:70
GroupCfg< RoadmapType > GroupCfgType
Definition: MPSolution.h:42
StatClass * GetStatClass() const noexcept
Definition: MPSolution.cpp:208
void SetGroupPath(RobotGroup *const _r, GroupPath *_path) noexcept
Definition: MPSolution.cpp:146
RoadmapType * GetBlockRoadmap(Robot *const _r=nullptr) const noexcept
Definition: MPSolution.cpp:168
void AddRobotGroup(RobotGroup *const _g) noexcept
Definition: MPSolution.cpp:115
void SetRoadmap(Robot *const _r, RoadmapType *_roadmap) noexcept
Definition: MPSolution.cpp:89
GenericStateGraph< Cfg, DefaultWeight< Cfg > > RoadmapType
Definition: MPSolution.h:41
MPSolutionType(Robot *const _r)
Definition: MPSolution.cpp:30
RoadmapType * GetRoadmap(Robot *const _r=nullptr) const noexcept
Definition: MPSolution.cpp:160
LocalObstacleMap * GetLocalObstacleMap(Robot *const _r=nullptr) const noexcept
Definition: MPSolution.cpp:184
void AddRobot(Robot *const _r) noexcept
Definition: MPSolution.cpp:52
void SetGroupRoadmap(RobotGroup *const _g, GroupRoadmapType *_roadmap) noexcept
Definition: MPSolution.cpp:133
Definition: Path.h:23
A group of one or more robots.
Definition: RobotGroup.h:17
Definition: Robot.h:31
Definition: MetricUtils.h:29
The outputs for a robot group.
Definition: MPSolution.h:61
std::unique_ptr< GroupPath > path
The current solution path.
Definition: MPSolution.h:64
std::unique_ptr< GroupRoadmapType > freeMap
The free-space roadmap.
Definition: MPSolution.h:62
std::unique_ptr< GroupRoadmapType > obstMap
The obstacle-space roadmap.
Definition: MPSolution.h:63
The outputs for an individual robot.
Definition: MPSolution.h:46
std::unique_ptr< LocalObstacleMap > lom
The local obstacle map.
Definition: MPSolution.h:50
std::unique_ptr< RoadmapType > freeMap
The free-space roadmap.
Definition: MPSolution.h:47
std::unique_ptr< RoadmapType > obstMap
The obstacle-space roadmap.
Definition: MPSolution.h:48
std::unique_ptr< Path > path
The current solution path.
Definition: MPSolution.h:49