MRPT  1.9.9
CSimplePointsMap.h
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | https://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2019, Individual contributors, see AUTHORS file |
6  | See: https://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See: https://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 #pragma once
10 
11 #include <mrpt/maps/CPointsMap.h>
12 #include <mrpt/math/CMatrixF.h>
13 #include <mrpt/obs/obs_frwds.h>
15 
16 namespace mrpt
17 {
18 namespace maps
19 {
20 /** A cloud of points in 2D or 3D, which can be built from a sequence of laser
21  * scans.
22  * This class only stores the coordinates (x,y,z) of each point.
23  *
24  * See mrpt::maps::CPointsMap and derived classes for other point cloud
25  * classes.
26  *
27  * \sa CMetricMap, CWeightedPointsMap, CPoint,
28  * mrpt::serialization::CSerializable \ingroup mrpt_maps_grp
29  */
31 {
33 
34  public:
35  /** Default constructor */
36  CSimplePointsMap() = default;
39  {
41  }
43  {
45  return *this;
46  }
48  {
49  impl_copyFrom(o);
50  return *this;
51  }
52 
53  // --------------------------------------------
54  /** @name Pure virtual interfaces to be implemented by any class derived
55  from CPointsMap
56  @{ */
57  void reserve(size_t newLength) override; // See base class docs
58  void resize(size_t newLength) override; // See base class docs
59  void setSize(size_t newLength) override; // See base class docs
60  /** The virtual method for \a insertPoint() *without* calling
61  * mark_as_modified() */
62  void insertPointFast(float x, float y, float z = 0) override;
63  /** Get all the data fields for one point as a vector: [X Y Z]
64  * Unlike getPointAllFields(), this method does not check for index out of
65  * bounds
66  * \sa getPointAllFields, setPointAllFields, setPointAllFieldsFast
67  */
69  const size_t index, std::vector<float>& point_data) const override
70  {
71  point_data.resize(3);
72  point_data[0] = m_x[index];
73  point_data[1] = m_y[index];
74  point_data[2] = m_z[index];
75  }
76  /** Set all the data fields for one point as a vector: [X Y Z]
77  * Unlike setPointAllFields(), this method does not check for index out of
78  * bounds
79  * \sa setPointAllFields, getPointAllFields, getPointAllFieldsFast
80  */
82  const size_t index, const std::vector<float>& point_data) override
83  {
84  ASSERTDEB_(point_data.size() == 3);
85  m_x[index] = point_data[0];
86  m_y[index] = point_data[1];
87  m_z[index] = point_data[2];
88  }
89 
90  // See CPointsMap::loadFromRangeScan()
91  void loadFromRangeScan(
92  const mrpt::obs::CObservation2DRangeScan& rangeScan,
93  const mrpt::poses::CPose3D* robotPose = nullptr) override;
94  // See CPointsMap::loadFromRangeScan()
95  void loadFromRangeScan(
96  const mrpt::obs::CObservation3DRangeScan& rangeScan,
97  const mrpt::poses::CPose3D* robotPose = nullptr) override;
98 
99  protected:
100  void impl_copyFrom(const CPointsMap& obj) override;
102  const CPointsMap& anotherMap, const size_t nPreviousPoints) override
103  {
104  MRPT_UNUSED_PARAM(anotherMap);
105  MRPT_UNUSED_PARAM(nPreviousPoints);
106  // No extra data.
107  }
108 
109  // Friend methods:
110  template <class Derived>
112  template <class Derived>
113  friend struct detail::pointmap_traits;
114 
115  public:
116  /** @} */
117 
118  // See base docs
120  {
121  return this;
122  }
123 
124  protected:
125  /** Clear the map, erasing all the points.
126  */
127  void internal_clear() override;
128 
129  /** @name PLY Import virtual methods to implement in base classes
130  @{ */
131  /** In a base class, reserve memory to prepare subsequent calls to
132  * PLY_import_set_vertex */
133  void PLY_import_set_vertex_count(const size_t N) override;
134  /** @} */
135 
137  /** Observations insertion options */
138  mrpt::maps::CPointsMap::TInsertionOptions insertionOpts;
139  /** Probabilistic observation likelihood options */
140  mrpt::maps::CPointsMap::TLikelihoodOptions likelihoodOpts;
141  /** Rendering as 3D object options */
142  mrpt::maps::CPointsMap::TRenderOptions renderOpts;
144 }; // End of class def.
145 } // namespace maps
146 
147 namespace opengl
148 {
149 /** Specialization mrpt::opengl::PointCloudAdapter<mrpt::maps::CSimplePointsMap>
150  * \ingroup mrpt_adapters_grp*/
151 template <>
153 {
154  private:
156 
157  public:
158  /** The type of each point XYZ coordinates */
159  using coords_t = float;
160  /** Has any color RGB info? */
161  static constexpr bool HAS_RGB = false;
162  /** Has native RGB info (as floats)? */
163  static constexpr bool HAS_RGBf = false;
164  /** Has native RGB info (as uint8_t)? */
165  static constexpr bool HAS_RGBu8 = false;
166 
167  /** Constructor (accept a const ref for convenience) */
169  : m_obj(*const_cast<mrpt::maps::CSimplePointsMap*>(&obj))
170  {
171  }
172  /** Get number of points */
173  inline size_t size() const { return m_obj.size(); }
174  /** Set number of points (to uninitialized values) */
175  inline void resize(const size_t N) { m_obj.resize(N); }
176  /** Does nothing as of now */
177  inline void setDimensions(const size_t& height, const size_t& width) {}
178  /** Get XYZ coordinates of i'th point */
179  template <typename T>
180  inline void getPointXYZ(const size_t idx, T& x, T& y, T& z) const
181  {
182  m_obj.getPointFast(idx, x, y, z);
183  }
184  /** Set XYZ coordinates of i'th point */
185  inline void setPointXYZ(
186  const size_t idx, const coords_t x, const coords_t y, const coords_t z)
187  {
188  m_obj.setPointFast(idx, x, y, z);
189  }
190 
191  /** Set XYZ coordinates of i'th point */
192  inline void setInvalidPoint(const size_t idx)
193  {
194  THROW_EXCEPTION("mrpt::maps::CSimplePointsMap needs to be dense");
195  }
196 }; // end of PointCloudAdapter<mrpt::maps::CPointsMap>
197 } // namespace opengl
198 
199 } // namespace mrpt
CSimplePointsMap & operator=(const CPointsMap &o)
void insertPointFast(float x, float y, float z=0) override
The virtual method for insertPoint() without calling mark_as_modified()
CSimplePointsMap(const CSimplePointsMap &o)
void getPointFast(size_t index, float &x, float &y, float &z) const
Just like getPoint() but without checking out-of-bound index and without returning the point weight...
Definition: CPointsMap.h:481
GLdouble GLdouble z
Definition: glext.h:3879
CPointsMap & operator=(const CPointsMap &o)
Definition: CPointsMap.h:120
#define THROW_EXCEPTION(msg)
Definition: exceptions.h:67
void reserve(size_t newLength) override
Reserves memory for a given number of points: the size of the map does not change, it only reserves the memory.
void setInvalidPoint(const size_t idx)
Set XYZ coordinates of i&#39;th point.
#define MAP_DEFINITION_START(_CLASS_NAME_)
Add a MAP_DEFINITION_START() ...
Declares a class derived from "CObservation" that encapsules a 3D range scan measurement, as from a time-of-flight range camera or any other RGBD sensor.
A cloud of points in 2D or 3D, which can be built from a sequence of laser scans. ...
PointCloudAdapter(const mrpt::maps::CSimplePointsMap &obj)
Constructor (accept a const ref for convenience)
void getPointAllFieldsFast(const size_t index, std::vector< float > &point_data) const override
Get all the data fields for one point as a vector: [X Y Z] Unlike getPointAllFields(), this method does not check for index out of bounds.
GLsizei GLsizei GLuint * obj
Definition: glext.h:4085
GLenum GLsizei width
Definition: glext.h:3535
Rendering options, used in getAs3DObject()
Definition: CPointsMap.h:313
void setDimensions(const size_t &height, const size_t &width)
Does nothing as of now.
With this struct options are provided to the observation insertion process.
Definition: CPointsMap.h:221
A cloud of points in 2D or 3D, which can be built from a sequence of laser scans or other sensors...
Definition: CPointsMap.h:65
void setSize(size_t newLength) override
Resizes all point buffers so they can hold the given number of points, erasing all previous contents ...
An adapter to different kinds of point cloud object.
void getPointXYZ(const size_t idx, T &x, T &y, T &z) const
Get XYZ coordinates of i&#39;th point.
GLuint index
Definition: glext.h:4068
void impl_copyFrom(const CPointsMap &obj) override
Virtual assignment operator, copies as much common data (XYZ, color,...) as possible from the source ...
void loadFromRangeScan(const mrpt::obs::CObservation2DRangeScan &rangeScan, const mrpt::poses::CPose3D *robotPose=nullptr) override
See CPointsMap::loadFromRangeScan()
CSimplePointsMap()=default
Default constructor.
CSimplePointsMap & operator=(const CSimplePointsMap &o)
void setPointFast(size_t index, float x, float y, float z)
Changes the coordinates of the given point (0-based index), without checking for out-of-bounds and wi...
Definition: CPointsMap.h:161
float coords_t
The type of each point XYZ coordinates.
void internal_clear() override
Clear the map, erasing all the points.
mrpt::aligned_std_vector< float > m_z
Definition: CPointsMap.h:1123
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
A "CObservation"-derived class that represents a 2D range scan measurement (typically from a laser sc...
const mrpt::maps::CSimplePointsMap * getAsSimplePointsMap() const override
If the map is a simple points map or it&#39;s a multi-metric map that contains EXACTLY one simple points ...
mrpt::aligned_std_vector< float > m_y
Definition: CPointsMap.h:1123
void setPointAllFieldsFast(const size_t index, const std::vector< float > &point_data) override
Set all the data fields for one point as a vector: [X Y Z] Unlike setPointAllFields(), this method does not check for index out of bounds.
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
Definition: CPose3D.h:85
Options used when evaluating "computeObservationLikelihood" in the derived classes.
Definition: CPointsMap.h:279
#define ASSERTDEB_(f)
Defines an assertion mechanism - only when compiled in debug.
Definition: exceptions.h:190
void setPointXYZ(const size_t idx, const coords_t x, const coords_t y, const coords_t z)
Set XYZ coordinates of i&#39;th point.
void addFrom_classSpecific(const CPointsMap &anotherMap, const size_t nPreviousPoints) override
Auxiliary method called from within addFrom() automatically, to finish the copying of class-specific ...
GLenum GLint GLint y
Definition: glext.h:3542
CSimplePointsMap(const CPointsMap &o)
#define DEFINE_SERIALIZABLE(class_name, NS)
This declaration must be inserted in all CSerializable classes definition, within the class declarati...
void PLY_import_set_vertex_count(const size_t N) override
In a base class, reserve memory to prepare subsequent calls to PLY_import_set_vertex.
void resize(const size_t N)
Set number of points (to uninitialized values)
GLenum GLint x
Definition: glext.h:3542
GLenum GLsizei GLsizei height
Definition: glext.h:3558
mrpt::aligned_std_vector< float > m_x
The point coordinates.
Definition: CPointsMap.h:1123
#define MAP_DEFINITION_END(_CLASS_NAME_)
size_t size() const
Save the point cloud as a PCL PCD file, in either ASCII or binary format.
Definition: CPointsMap.h:441
void resize(size_t newLength) override
Resizes all point buffers so they can hold the given number of points: newly created points are set t...
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.
Definition: common.h:186



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 4363012a5 Tue Nov 19 10:55:26 2019 +0100 at mar nov 19 11:00:13 CET 2019