00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00039 #ifndef TOPOLOGICAL_ROADMAP_ROADMAP_H
00040 #define TOPOLOGICAL_ROADMAP_ROADMAP_H
00041
00042 #include <topological_map_2d/topological_map.h>
00043 #include <topological_nav_msgs/RoadmapNode.h>
00044 #include <topological_nav_msgs/RoadmapEdge.h>
00045
00046 namespace topological_roadmap
00047 {
00048
00049 namespace msg=topological_nav_msgs;
00050
00051
00052
00053
00054
00055 typedef boost::adjacency_list<boost::multisetS, boost::listS, boost::undirectedS,
00056 msg::RoadmapNode, msg::RoadmapEdge> Graph;
00057 typedef boost::graph_traits<Graph>::edge_descriptor GraphEdge;
00058 typedef boost::graph_traits<Graph>::vertex_descriptor GraphVertex;
00059
00060
00061
00062
00063
00077 class Roadmap : public Graph
00078 {
00079 public:
00080
00081 typedef msg::RoadmapNode NodeInfo;
00082 typedef msg::RoadmapEdge EdgeInfo;
00083 typedef std::set<unsigned> Nodes;
00084
00086 Roadmap ();
00087
00089 Roadmap (const Roadmap& r);
00090
00092 Roadmap& operator= (const Roadmap& r);
00093
00096 GraphVertex node (unsigned id) const;
00097
00100 GraphEdge edge (unsigned id) const;
00101
00104 const NodeInfo& nodeInfo (unsigned id) const;
00105
00108 const EdgeInfo& edgeInfo (unsigned id) const;
00109
00113 unsigned addNode (const NodeInfo& info);
00114
00120 unsigned addEdge (const EdgeInfo& info);
00121
00125 void deleteEdge (unsigned id);
00126
00130 Nodes gridNodes (const unsigned g) const;
00131
00133 void recomputeIndexes ();
00134
00135 private:
00136
00137 std::map<unsigned, GraphVertex> vertex_map_;
00138 std::map<unsigned, GraphEdge> edge_map_;
00139 std::map<unsigned, Nodes> grid_nodes_;
00140
00141
00142 unsigned next_node_id_;
00143
00144
00145 unsigned next_edge_id_;
00146
00147 };
00148
00149
00150
00151
00152
00153
00155 geometry_msgs::Point
00156 positionOnGrid (unsigned n, unsigned g, const Roadmap& r,
00157 const topological_map_2d::TopologicalMap& t);
00158
00159
00161 std::pair<std::vector<unsigned>, std::vector<geometry_msgs::Point> >
00162 nodesOnGrid (const unsigned g, const Roadmap& r,
00163 const topological_map_2d::TopologicalMap& t);
00164
00165
00166 }
00167
00168 #endif // include guard