17 #ifndef POINT_CLOUD_MAPPING__MAP_HPP_
18 #define POINT_CLOUD_MAPPING__MAP_HPP_
21 #include <sensor_msgs/msg/point_cloud2.hpp>
22 #include <sensor_msgs/point_cloud2_iterator.hpp>
24 #include <geometry_msgs/msg/pose_with_covariance_stamped.hpp>
26 #include <pcl/io/pcd_io.h>
29 #include <unordered_map>
35 namespace point_cloud_mapping
66 template<
typename IncrementT, MapStorageMode StorageModeT>
76 const IncrementT & observation,
77 const geometry_msgs::msg::PoseWithCovarianceStamped & pose) = 0;
81 virtual void write(
const std::string & file_name_prefix)
const = 0;
85 virtual std::size_t size() const noexcept = 0;
89 virtual std::
size_t capacity() const noexcept = 0;
102 virtual void clear() = 0;
114 static constexpr
auto NUM_FIELDS{4U};
117 using Cloud = sensor_msgs::msg::PointCloud2;
118 using CloudIt = sensor_msgs::PointCloud2Iterator<float32_t>;
130 const Cloud & observation,
131 const geometry_msgs::msg::PoseWithCovarianceStamped &)
override;
135 void write(
const std::string & file_name_prefix)
const override;
136 std::size_t size() const noexcept override;
137 std::
size_t capacity() const noexcept override;
138 void clear() override;
142 std::
size_t m_capacity;
143 std::
string m_frame_id;
154 static constexpr
auto NUM_FIELDS{4U};
156 using Cloud = sensor_msgs::msg::PointCloud2;
157 using CloudIt = sensor_msgs::PointCloud2Iterator<float32_t>;
165 const std::string & frame =
"map");
171 const Cloud & observation,
172 const geometry_msgs::msg::PoseWithCovarianceStamped &)
override;
175 void write(
const std::string & file_name_prefix)
const override;
177 std::size_t size() const noexcept override;
179 std::
size_t capacity() const noexcept override;
181 void clear() override;
184 perception::filters::voxel_grid::Config m_grid_config;
185 std::unordered_map<uint64_t,
186 perception::filters::voxel_grid::CentroidVoxel<common::types::PointXYZIF>> m_grid;
187 std::
string m_frame_id;
195 #endif // POINT_CLOUD_MAPPING__MAP_HPP_