Main MRPT website > C++ reference for MRPT 1.9.9
CSimpleMap.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2018, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #include "obs-precomp.h" // Precompiled headers
11 
12 #include <mrpt/maps/CSimpleMap.h>
17 
18 using namespace mrpt::obs;
19 using namespace mrpt::maps;
20 using namespace mrpt::poses;
21 using namespace mrpt::poses;
22 using namespace std;
23 using namespace mrpt::serialization;
25 
27 
28 const auto fn_pair_make_unique = [](auto& ptr) {
29  ptr.first.reset(dynamic_cast<mrpt::poses::CPose3DPDF*>(ptr.first->clone()));
30  ptr.second.reset(
31  dynamic_cast<mrpt::obs::CSensoryFrame*>(ptr.second->clone()));
32 };
33 
34 CSimpleMap::CSimpleMap(const CSimpleMap& o) : m_posesObsPairs(o.m_posesObsPairs)
35 {
36  for_each(
38 }
39 
41 {
43  if (this == &o) return *this; // It may be used sometimes
44 
46  for_each(
48 
49  return *this;
50  MRPT_END
51 }
52 
53 size_t CSimpleMap::size() const { return m_posesObsPairs.size(); }
54 bool CSimpleMap::empty() const { return m_posesObsPairs.empty(); }
57  size_t index, CPose3DPDF::Ptr& out_posePDF,
58  CSensoryFrame::Ptr& out_SF) const
59 {
60  if (index >= m_posesObsPairs.size()) THROW_EXCEPTION("Index out of bounds");
61  out_posePDF = m_posesObsPairs[index].first;
62  out_SF = m_posesObsPairs[index].second;
63 }
64 
66 {
68  if (index >= m_posesObsPairs.size()) THROW_EXCEPTION("Index out of bounds");
69  m_posesObsPairs.erase(m_posesObsPairs.begin() + index);
70  MRPT_END
71 }
72 
74  size_t index, const CPose3DPDF::Ptr& in_posePDF,
75  const CSensoryFrame::Ptr& in_SF)
76 {
78  if (index >= m_posesObsPairs.size()) THROW_EXCEPTION("Index out of bounds");
79  if (in_posePDF) m_posesObsPairs[index].first = in_posePDF;
80  if (in_SF) m_posesObsPairs[index].second = in_SF;
81  MRPT_END
82 }
83 
85  size_t index, const CPosePDF::Ptr& in_posePDF,
86  const CSensoryFrame::Ptr& in_SF)
87 {
89 
90  if (index >= m_posesObsPairs.size()) THROW_EXCEPTION("Index out of bounds");
91 
92  if (in_posePDF)
93  m_posesObsPairs[index].first =
94  CPose3DPDF::Ptr(CPose3DPDF::createFrom2D(*in_posePDF));
95  if (in_SF) m_posesObsPairs[index].second = in_SF;
96 
97  MRPT_END
98 }
99 
101  const CPose3DPDF* in_posePDF, const CSensoryFrame::Ptr& in_SF)
102 {
103  MRPT_START
104 
106 
107  pair.second = in_SF;
108  pair.first = CPose3DPDF::Ptr(static_cast<CPose3DPDF*>(in_posePDF->clone()));
109 
110  m_posesObsPairs.push_back(pair);
111 
112  MRPT_END
113 }
114 
115 /*---------------------------------------------------------------
116  insert
117  ---------------------------------------------------------------*/
119  const CPose3DPDF::Ptr& in_posePDF, const CSensoryFrame::Ptr& in_SF)
120 {
121  MRPT_START
122 
124 
125  pair.second = in_SF;
126  pair.first = in_posePDF;
127 
128  m_posesObsPairs.push_back(pair);
129 
130  MRPT_END
131 }
132 
133 /*---------------------------------------------------------------
134  insert
135  ---------------------------------------------------------------*/
137  const CPose3DPDF* in_posePDF, const CSensoryFrame& in_SF)
138 {
139  MRPT_START
140 
142 
143  pair.second = CSensoryFrame::Ptr(new CSensoryFrame(in_SF));
144  pair.first = CPose3DPDF::Ptr(static_cast<CPose3DPDF*>(in_posePDF->clone()));
145 
146  m_posesObsPairs.push_back(pair);
147 
148  MRPT_END
149 }
150 
151 /*---------------------------------------------------------------
152  insert
153  ---------------------------------------------------------------*/
154 void CSimpleMap::insert(const CPosePDF* in_posePDF, const CSensoryFrame& in_SF)
155 {
156  MRPT_START
157 
159 
160  pair.second = CSensoryFrame::Ptr(new CSensoryFrame(in_SF));
161  pair.first = CPose3DPDF::Ptr(static_cast<CPose3DPDF*>(in_posePDF->clone()));
162 
163  m_posesObsPairs.push_back(pair);
164 
165  MRPT_END
166 }
167 
168 /*---------------------------------------------------------------
169  insert
170  ---------------------------------------------------------------*/
172  const CPosePDF* in_posePDF, const CSensoryFrame::Ptr& in_SF)
173 {
174  MRPT_START
175 
177 
178  pair.second = in_SF;
179  pair.first = CPose3DPDF::Ptr(static_cast<CPose3DPDF*>(in_posePDF->clone()));
180 
181  m_posesObsPairs.push_back(pair);
182 
183  MRPT_END
184 }
185 
186 /*---------------------------------------------------------------
187  insert 2D
188  ---------------------------------------------------------------*/
190  const CPosePDF::Ptr& in_posePDF, const CSensoryFrame::Ptr& in_SF)
191 {
192  insert(CPose3DPDF::Ptr(CPose3DPDF::createFrom2D(*in_posePDF)), in_SF);
193 }
194 
196  size_t index, const CPose3DPDF::Ptr& in_posePDF,
197  const CSensoryFrame::Ptr& in_SF)
198 {
199  if (index >= m_posesObsPairs.size()) return;
200 
201  MRPT_START
202 
204 
205  pair.second = in_SF;
206  pair.first = in_posePDF;
207 
208  auto iter = m_posesObsPairs.begin() + index;
209  m_posesObsPairs.insert(iter, pair);
210 
211  MRPT_END
212 }
213 
216 {
217  out.WriteAs<uint32_t>(m_posesObsPairs.size());
218  for (const auto& p : m_posesObsPairs) out << *p.first << *p.second;
219 }
220 
223 {
224  switch (version)
225  {
226  case 1:
227  {
228  uint32_t i, n;
229  clear();
230  in >> n;
231  m_posesObsPairs.resize(n);
232  for (i = 0; i < n; i++)
233  in >> m_posesObsPairs[i].first >> m_posesObsPairs[i].second;
234  }
235  break;
236  case 0:
237  {
238  // There are 2D poses PDF instead of 3D: transform them:
239  uint32_t i, n;
240  clear();
241  in >> n;
242  m_posesObsPairs.resize(n);
243  for (i = 0; i < n; i++)
244  {
245  CPosePDF::Ptr aux2Dpose;
246  in >> aux2Dpose >> m_posesObsPairs[i].second;
247  m_posesObsPairs[i].first =
248  CPose3DPDF::Ptr(CPose3DPDF::createFrom2D(*aux2Dpose));
249  }
250  }
251  break;
252  default:
254  };
255 }
256 
257 /*---------------------------------------------------------------
258  changeCoordinatesOrigin
259  ---------------------------------------------------------------*/
261 {
263  it != m_posesObsPairs.end(); ++it)
264  it->first->changeCoordinatesReference(newOrigin);
265 }
266 
267 /** Save this object to a .simplemap binary file (compressed with gzip)
268  * \sa loadFromFile
269  * \return false on any error.
270  */
271 bool CSimpleMap::saveToFile(const std::string& filName) const
272 {
273  try
274  {
275  mrpt::io::CFileGZOutputStream fo(filName);
276  archiveFrom(fo) << *this;
277  return true;
278  }
279  catch (...)
280  {
281  return false;
282  }
283 }
284 
285 /** Load the contents of this object from a .simplemap binary file (possibly
286  * compressed with gzip)
287  * \sa saveToFile
288  * \return false on any error.
289  */
291 {
292  try
293  {
294  mrpt::io::CFileGZInputStream fi(filName);
295  archiveFrom(fi) >> *this;
296  return true;
297  }
298  catch (...)
299  {
300  return false;
301  }
302 }
n
GLenum GLsizei n
Definition: glext.h:5074
IMPLEMENTS_MRPT_OBJECT_ALT_NAME
#define IMPLEMENTS_MRPT_OBJECT_ALT_NAME(class_name, base, NameSpace, alt_name)
This must be inserted in all CObject classes implementation files.
Definition: CObject.h:217
mrpt::maps::CSimpleMap::TPosePDFSensFramePair
std::pair< mrpt::poses::CPose3DPDF::Ptr, mrpt::obs::CSensoryFrame::Ptr > TPosePDFSensFramePair
Definition: CSimpleMap.h:179
fn_pair_make_unique
const auto fn_pair_make_unique
Definition: CSimpleMap.cpp:28
mrpt::maps::CSimpleMap::empty
bool empty() const
Returns size()!=0.
Definition: CSimpleMap.cpp:54
mrpt::obs::CSensoryFrame::Ptr
std::shared_ptr< CSensoryFrame > Ptr
Definition: CSensoryFrame.h:56
mrpt::rtti::CObject::clone
virtual CObject * clone() const =0
Returns a deep copy (clone) of the object, indepently of its class.
mrpt::poses::CPose3DPDF
Declares a class that represents a Probability Density Function (PDF) of a 3D pose (6D actually).
Definition: CPose3DPDF.h:42
CFileGZOutputStream.h
mrpt::maps::CSimpleMap::operator=
CSimpleMap & operator=(const CSimpleMap &o)
Copy.
Definition: CSimpleMap.cpp:40
obs-precomp.h
uint8_t
unsigned char uint8_t
Definition: rptypes.h:41
mrpt::maps::CSimpleMap::loadFromFile
bool loadFromFile(const std::string &filName)
Load the contents of this object from a .simplemap binary file (possibly compressed with gzip)
Definition: CSimpleMap.cpp:290
THROW_EXCEPTION
#define THROW_EXCEPTION(msg)
Definition: exceptions.h:41
p
GLfloat GLfloat p
Definition: glext.h:6305
mrpt::poses
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
Definition: CHierarchicalMapMHPartition.h:25
mrpt::obs
This namespace contains representation of robot actions and observations.
Definition: CParticleFilter.h:17
mrpt::serialization::CArchive
Virtual base class for "archives": classes abstracting I/O streams.
Definition: CArchive.h:48
mrpt::maps::CSimpleMap::serializeFrom
void serializeFrom(mrpt::serialization::CArchive &in, uint8_t serial_version) override
Pure virtual method for reading (deserializing) from an abstract archive.
Definition: CSimpleMap.cpp:221
mrpt::obs::CSensoryFrame
Declares a class for storing a "sensory frame", a set of "observations" taken by the robot approximat...
Definition: CSensoryFrame.h:54
mrpt::serialization::CArchive::WriteAs
void WriteAs(const TYPE_FROM_ACTUAL &value)
Definition: CArchive.h:152
mrpt::io::CFileGZInputStream
Transparently opens a compressed "gz" file and reads uncompressed data from it.
Definition: io/CFileGZInputStream.h:26
MRPT_START
#define MRPT_START
Definition: exceptions.h:262
mrpt::io::CFileGZOutputStream
Saves data to a file and transparently compress the data using the given compression level.
Definition: io/CFileGZOutputStream.h:26
mrpt::poses::CPose3D
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
Definition: CPose3D.h:88
index
GLuint index
Definition: glext.h:4054
mrpt::maps::CSimpleMap::size
size_t size() const
Returns the count of pairs (pose,sensory data)
Definition: CSimpleMap.cpp:53
mrpt::maps::CSimpleMap::set
void set(size_t index, const mrpt::poses::CPose3DPDF::Ptr &in_posePDF, const mrpt::obs::CSensoryFrame::Ptr &in_SF)
Changes the i'th pair, first one is index '0'.
Definition: CSimpleMap.cpp:73
mrpt::serialization::CSerializable
The virtual base class which provides a unified interface for all persistent objects in MRPT.
Definition: CSerializable.h:32
mrpt::maps::CSimpleMap::get
void get(size_t index, mrpt::poses::CPose3DPDF::Ptr &out_posePDF, mrpt::obs::CSensoryFrame::Ptr &out_SF) const
Access to the i'th pair, first one is index '0'.
Definition: CSimpleMap.cpp:56
mrpt::maps::CSimpleMap::serializeGetVersion
uint8_t serializeGetVersion() const override
Must return the current versioning number of the object.
Definition: CSimpleMap.cpp:214
mrpt::serialization
Definition: aligned_serialization.h:14
metaprogramming_serialization.h
mrpt::poses::CPosePDF
Declares a class that represents a probability density function (pdf) of a 2D pose (x,...
Definition: CPosePDF.h:41
mrpt::serialization::archiveFrom
CArchiveStreamBase< STREAM > archiveFrom(STREAM &s)
Helper function to create a templatized wrapper CArchive object for a: MRPT's CStream,...
Definition: CArchive.h:561
mrpt::maps::CSimpleMap::insertToPos
void insertToPos(size_t index, const mrpt::poses::CPose3DPDF::Ptr &in_posePDF, const mrpt::obs::CSensoryFrame::Ptr &in_SF)
Insert a new pair to the sequence, making a copy of the smart pointer (it's not made unique) to.
Definition: CSimpleMap.cpp:195
MRPT_END
#define MRPT_END
Definition: exceptions.h:266
mrpt::maps::CSimpleMap
This class stores a sequence of <Probabilistic Pose,SensoryFrame> pairs, thus a "metric map" can be t...
Definition: CSimpleMap.h:35
CFileGZInputStream.h
mrpt::poses::CPose3DPDF::Ptr
std::shared_ptr< CPose3DPDF > Ptr
Definition: CPose3DPDF.h:45
mrpt::serialization::metaprogramming
Definition: metaprogramming_serialization.h:17
in
GLuint in
Definition: glext.h:7274
string
GLsizei const GLchar ** string
Definition: glext.h:4101
mrpt::maps::CSimpleMap::insert
void insert(const mrpt::poses::CPose3DPDF *in_posePDF, const mrpt::obs::CSensoryFrame &in_SF)
Add a new pair to the sequence.
Definition: CSimpleMap.cpp:136
mrpt::maps
Definition: CBeacon.h:24
iterator
Scalar * iterator
Definition: eigen_plugins.h:26
mrpt::maps::CSimpleMap::m_posesObsPairs
TPosePDFSensFramePairList m_posesObsPairs
The stored data.
Definition: CSimpleMap.h:206
CArchive.h
MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
For use in CSerializable implementations.
Definition: exceptions.h:90
mrpt::maps::CSimpleMap::changeCoordinatesOrigin
void changeCoordinatesOrigin(const mrpt::poses::CPose3D &newOrigin)
Change the coordinate origin of all stored poses, for consistency with future new poses to enter in t...
Definition: CSimpleMap.cpp:260
CSimpleMap.h
mrpt::maps::CSimpleMap::clear
void clear()
Remove all stored pairs.
Definition: CSimpleMap.cpp:55
mrpt::maps::CSimpleMap::serializeTo
void serializeTo(mrpt::serialization::CArchive &out) const override
Pure virtual method for writing (serializing) to an abstract archive.
Definition: CSimpleMap.cpp:215
mrpt::poses::CPosePDF::Ptr
std::shared_ptr< CPosePDF > Ptr
Definition: CPosePDF.h:44
mrpt::maps::CSimpleMap::saveToFile
bool saveToFile(const std::string &filName) const
Save this object to a .simplemap binary file (compressed with gzip)
Definition: CSimpleMap.cpp:271
uint32_t
unsigned __int32 uint32_t
Definition: rptypes.h:47
first
GLint * first
Definition: glext.h:3827
mrpt::maps::CSimpleMap::remove
void remove(size_t index)
Deletes the i'th pair, first one is index '0'.
Definition: CSimpleMap.cpp:65



Page generated by Doxygen 1.8.17 for MRPT 1.9.9 Git: ad3a9d8ae Tue May 1 23:10:22 2018 -0700 at miƩ 12 jul 2023 10:03:34 CEST