serializer.h
Go to the documentation of this file.
1 
2 #ifndef _TUW_VORONOI_SERIALIZER
3 #define _TUW_VORONOI_SERIALIZER
4 
5 #include <nav_msgs/OccupancyGrid.h>
6 #include <memory>
7 #include <opencv2/core/core.hpp>
9 
10 #include <fstream>
11 #include <boost/archive/xml_oarchive.hpp>
12 #include <boost/archive/xml_iarchive.hpp>
13 
14 #define DEFAULT_MAP_NAME "voronoi_map"
15 #include <eigen3/Eigen/Dense>
16 #include <boost/filesystem.hpp>
17 #include <boost/functional/hash.hpp>
18 
19 namespace tuw_graph
20 {
21 
23  {
24  public:
26  {}
27  PointSerializer(float _x, float _y)
28  {
29  x = _x;
30  y = _y;
31  }
32  PointSerializer(Eigen::Vector2d p)
33  {
34  x = p[0];
35  y = p[1];
36  }
37  float x;
38  float y;
39  private:
41  template<class archive> void serialize(archive & ar, const unsigned int version)
42  {
43  using boost::serialization::make_nvp;
44  ar & boost::serialization::make_nvp("x", x);
45  ar & boost::serialization::make_nvp("y", y);
46  }
47  };
48 
49  class GraphInfo
50  {
51  public:
52  GraphInfo() : Origin(0, 0)
53  {};
54  GraphInfo(Eigen::Vector2d _pt, float _resolution, int _nrSegments_) : Origin(_pt)
55  {
56  Resolution = _resolution;
57  SegmentLength = _nrSegments_;
58  }
60  float Resolution;
62 
63  private:
65  template<class archive> void serialize(archive & ar, const unsigned int version)
66  {
67  using boost::serialization::make_nvp;
68  ar & boost::serialization::make_nvp("Origin", Origin);
69  ar & boost::serialization::make_nvp("Resolution", Resolution);
70  ar & boost::serialization::make_nvp("SegmentLength", SegmentLength);
71  }
72  };
73 
74  class TreeInfo
75  {
76  public:
77  TreeInfo(std::vector<Segment> _segs) : TreeInfo(_segs.size())
78  {
79  for(uint32_t i = 0; i < _segs.size(); i++)
80  {
81  int * pred = Predecessors.get();
82  int * succ = Successors.get();
83  int * point = Points.get();
84  pred[i] = _segs[i].getPredecessors().size();
85  succ[i] = _segs[i].getSuccessors().size();
86  point[i] = _segs[i].getPath().size();
87  }
88  }
89  TreeInfo(int _length)
90  {
91  Predecessors.reset(new int[_length]);
92  Successors.reset(new int[_length]);
93  Points.reset(new int[_length]);
94  Length = _length;
95  //predLength = _length;
96 
97  }
98  int Length;
99  std::unique_ptr<int> Predecessors;
100  std::unique_ptr<int> Successors;
101  std::unique_ptr<int> Points;
102 
103  private:
104  //int predLength;
105  //int succLength;
106  //int pointsLength;
108  template<class archive> void serialize(archive & ar, const unsigned int version)
109  {
110  using boost::serialization::make_nvp;
111  ar & boost::serialization::make_nvp("Length", Length);
112  ar & boost::serialization::make_array<int>(Predecessors.get(), Length);
113  ar & boost::serialization::make_array<int>(Successors.get(), Length);
114  ar & boost::serialization::make_array<int>(Points.get(), Length);
115  }
116  };
117 
118 
119 
121  {
122  public:
124  {
125  }
126 
127  SegmentSerializer(int _predLength, int _succLength, int _pointLength)
128  {
129  predecessorLength = _predLength;
130  successorLength = _succLength;
131  pointLength = _pointLength;
132  predecessors.reset(new int[predecessorLength]);
133  successors.reset(new int[successorLength]);
134  points.reset(new PointSerializer[pointLength]);
135 
136  }
137 
139  SegmentSerializer(_s.getId(), _s.getPredecessors(), _s.getSuccessors(), _s.getMinPathSpace(), _s.getPath())
140  {
141  }
142 
143  SegmentSerializer(const uint32_t _id, std::vector<uint32_t> _predecessors, std::vector<uint32_t> _successors, float _minDistance, std::vector<Eigen::Vector2d> _points):
144  SegmentSerializer(_predecessors.size(), _successors.size(), _points.size())
145  {
146  id = _id;
147  minDistance = _minDistance;
148 
149  int *pred = predecessors.get();
150  int *succ = successors.get();
151  PointSerializer *pts = points.get();
152 
153 
154  for(int i = 0; i < predecessorLength; i++)
155  {
156  pred[i] = _predecessors[i];
157  }
158 
159  for(int i = 0; i < successorLength; i++)
160  {
161  succ[i] = _successors[i];
162  }
163 
164  for(uint32_t i = 0; i < _points.size(); i++)
165  {
166  PointSerializer p(_points[i]);
167  pts[i] = p;
168  }
169  }
170 
171  int id;
174  std::unique_ptr<int> predecessors;
175  std::unique_ptr<int> successors;
176  float minDistance;
178  std::unique_ptr<PointSerializer> points;
179 
180  private:
182  template<class archive> void serialize(archive & ar, const unsigned int version)
183  {
184  using boost::serialization::make_nvp;
185  ar & boost::serialization::make_nvp("id", id);
186  ar & boost::serialization::make_nvp("predecessorLength", predecessorLength);
187  ar & boost::serialization::make_nvp("successorLength", successorLength);
188  ar & boost::serialization::make_nvp("minDistance", minDistance);
189  ar & boost::serialization::make_nvp("pointLength", pointLength);
190  ar & boost::serialization::make_array<int>(predecessors.get(), predecessorLength);
191  ar & boost::serialization::make_array<int>(successors.get(), successorLength);
192  ar & boost::serialization::make_array<PointSerializer>(points.get(), pointLength);
193  }
194  };
195 
196 
198  {
199  public:
200  GraphSerializer(std::vector<SegmentSerializer> &_segments)
201  {
202  segments_ = &_segments[0];
203  Length = _segments.size();
204  }
205  int Length;
207  private:
209  template<class archive> void serialize(archive & ar, const unsigned int version)
210  {
211  using boost::serialization::make_nvp;
212  ar & boost::serialization::make_nvp("pointLength", Length);
213  ar & boost::serialization::make_array<SegmentSerializer>(segments_, Length);
214  }
215  };
216 
218  {
219  public:
220  Serializer();
228  void save(const std::string &_mapPath, const std::vector<Segment> &_segs, const Eigen::Vector2d &_origin, const float &_resolution);
237  void save(const std::string &_mapPath, const std::vector<Segment> &_segs, const Eigen::Vector2d &_origin, const float &_resolution, const cv::Mat &_map);
245  bool load(const std::string &_mapPath, std::vector<Segment> &_segs, Eigen::Vector2d &_origin, float &_resolution);
254  bool load(const std::string &_mapPath, std::vector<Segment> &_segs, Eigen::Vector2d &_origin, float &_resolution, cv::Mat &_map);
260  size_t getHash(const std::vector<signed char> &_map, const std::vector<double> &_parameters) const;
261  };
262 
263 }
264 
265 #endif
tuw_graph::SegmentSerializer::SegmentSerializer
SegmentSerializer(const uint32_t _id, std::vector< uint32_t > _predecessors, std::vector< uint32_t > _successors, float _minDistance, std::vector< Eigen::Vector2d > _points)
Definition: serializer.h:143
tuw_graph::SegmentSerializer::predecessors
std::unique_ptr< int > predecessors
Definition: serializer.h:174
tuw_graph::GraphSerializer::GraphSerializer
GraphSerializer(std::vector< SegmentSerializer > &_segments)
Definition: serializer.h:200
tuw_graph::GraphInfo::Resolution
float Resolution
Definition: serializer.h:60
getPath
ROSLIB_DECL std::string getPath(const std::string &package_name)
tuw_graph::SegmentSerializer::pointLength
int pointLength
Definition: serializer.h:177
tuw_graph::GraphInfo::GraphInfo
GraphInfo(Eigen::Vector2d _pt, float _resolution, int _nrSegments_)
Definition: serializer.h:54
tuw_graph::TreeInfo::TreeInfo
TreeInfo(std::vector< Segment > _segs)
Definition: serializer.h:77
tuw_graph::PointSerializer::PointSerializer
PointSerializer()
Definition: serializer.h:25
tuw_graph::TreeInfo
Definition: serializer.h:74
tuw_graph::SegmentSerializer::successors
std::unique_ptr< int > successors
Definition: serializer.h:175
tuw_graph::PointSerializer::access
friend class boost::serialization::access
Definition: serializer.h:40
tuw_graph::GraphSerializer::Length
int Length
Definition: serializer.h:205
tuw_graph::Serializer::Serializer
Serializer()
Definition: serializer.cpp:22
tuw_graph::SegmentSerializer::successorLength
int successorLength
Definition: serializer.h:173
tuw_graph::SegmentSerializer::SegmentSerializer
SegmentSerializer(const Segment &_s)
Definition: serializer.h:138
tuw_graph::Segment
Definition: segment.h:37
tuw_graph::TreeInfo::serialize
void serialize(archive &ar, const unsigned int version)
Definition: serializer.h:108
tuw_graph::SegmentSerializer::points
std::unique_ptr< PointSerializer > points
Definition: serializer.h:178
tuw_graph::PointSerializer
Definition: serializer.h:22
tuw_graph::PointSerializer::serialize
void serialize(archive &ar, const unsigned int version)
Definition: serializer.h:41
tuw_graph::PointSerializer::x
float x
Definition: serializer.h:37
tuw_graph::TreeInfo::Length
int Length
Definition: serializer.h:98
tuw_graph::TreeInfo::TreeInfo
TreeInfo(int _length)
Definition: serializer.h:89
tuw_graph::GraphSerializer
Definition: serializer.h:197
tuw_graph::SegmentSerializer::serialize
void serialize(archive &ar, const unsigned int version)
Definition: serializer.h:182
tuw_graph::TreeInfo::Successors
std::unique_ptr< int > Successors
Definition: serializer.h:100
tuw_graph::SegmentSerializer::SegmentSerializer
SegmentSerializer()
Definition: serializer.h:123
tuw_graph::GraphInfo::serialize
void serialize(archive &ar, const unsigned int version)
Definition: serializer.h:65
tuw_graph::SegmentSerializer::access
friend class boost::serialization::access
Definition: serializer.h:181
tuw_graph::Serializer::save
void save(const std::string &_mapPath, const std::vector< Segment > &_segs, const Eigen::Vector2d &_origin, const float &_resolution)
saves the graph to a specific path in xml format
Definition: serializer.cpp:155
tuw_graph::PointSerializer::PointSerializer
PointSerializer(Eigen::Vector2d p)
Definition: serializer.h:32
tuw_graph::GraphSerializer::access
friend class boost::serialization::access
Definition: serializer.h:208
tuw_graph::GraphInfo::access
friend class boost::serialization::access
Definition: serializer.h:64
tuw_graph::PointSerializer::PointSerializer
PointSerializer(float _x, float _y)
Definition: serializer.h:27
tuw_graph::GraphInfo
Definition: serializer.h:49
tuw_graph::GraphInfo::Origin
PointSerializer Origin
Definition: serializer.h:59
tuw_graph::TreeInfo::access
friend class boost::serialization::access
Definition: serializer.h:107
tuw_graph::PointSerializer::y
float y
Definition: serializer.h:38
tuw_graph::TreeInfo::Points
std::unique_ptr< int > Points
Definition: serializer.h:101
tuw_graph::SegmentSerializer::minDistance
float minDistance
Definition: serializer.h:176
tuw_graph::Serializer
Definition: serializer.h:217
tuw_graph::GraphSerializer::serialize
void serialize(archive &ar, const unsigned int version)
Definition: serializer.h:209
tuw_graph::GraphSerializer::segments_
SegmentSerializer * segments_
Definition: serializer.h:206
tuw_graph::Serializer::load
bool load(const std::string &_mapPath, std::vector< Segment > &_segs, Eigen::Vector2d &_origin, float &_resolution)
loads a graph from memory which is saved in plain text
Definition: serializer.cpp:45
tuw_graph::GraphInfo::GraphInfo
GraphInfo()
Definition: serializer.h:52
tuw_graph::SegmentSerializer::id
int id
Definition: serializer.h:171
tuw_graph::GraphInfo::SegmentLength
int SegmentLength
Definition: serializer.h:61
tuw_graph::Serializer::getHash
size_t getHash(const std::vector< signed char > &_map, const std::vector< double > &_parameters) const
generate a hash from a _map
Definition: serializer.cpp:27
tuw_graph
Definition: serializer.h:19
tuw_graph::SegmentSerializer
Definition: serializer.h:120
tuw_graph::SegmentSerializer::predecessorLength
int predecessorLength
Definition: serializer.h:172
tuw_graph::SegmentSerializer::SegmentSerializer
SegmentSerializer(int _predLength, int _succLength, int _pointLength)
Definition: serializer.h:127
segment.h
tuw_graph::TreeInfo::Predecessors
std::unique_ptr< int > Predecessors
Definition: serializer.h:99


tuw_voronoi_graph
Author(s): Benjamin Binder
autogenerated on Wed Mar 2 2022 01:10:12