Generator.h
Go to the documentation of this file.
1 /* -------------------------------------------------------------------------
2  * A repertory of multi primitive-to-primitive (MP2P) ICP algorithms in C++
3  * Copyright (C) 2018-2024 Jose Luis Blanco, University of Almeria
4  * See LICENSE for license information.
5  * ------------------------------------------------------------------------- */
13 #pragma once
14 
16 #include <mp2p_icp/metricmap.h>
17 #include <mrpt/containers/yaml.h>
18 #include <mrpt/maps/CPointsMap.h>
19 #include <mrpt/obs/obs_frwds.h>
20 #include <mrpt/rtti/CObject.h>
21 #include <mrpt/system/COutputLogger.h>
22 
23 #include <regex>
24 #include <stdexcept>
25 
26 namespace mp2p_icp_filters
27 {
33 struct NotImplementedError : public std::runtime_error
34 {
35  // NotImplementedError() = default;
36  template <typename T>
37  NotImplementedError(T v) : std::runtime_error(v)
38  {
39  }
40 };
41 
71 class Generator : public mrpt::rtti::CObject, // RTTI support
72  public mrpt::system::COutputLogger, // Logging support
73  public mp2p_icp::Parameterizable // Dynamic parameters
74 {
75  DEFINE_MRPT_OBJECT(Generator, mp2p_icp_filters)
76 
77  public:
78  Generator();
79 
88  virtual void initialize(const mrpt::containers::yaml& cfg_block);
89 
94  virtual bool process(
95  const mrpt::obs::CObservation& input_raw, mp2p_icp::metric_map_t& inOut,
96  const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt) const;
97 
98  struct Parameters
99  {
100  void load_from_yaml(const mrpt::containers::yaml& c, Generator& parent);
101 
105 
124 
130  mrpt::containers::yaml metric_map_definition;
131 
137 
142 
144  };
145 
147 
150  protected:
151  // To be overrided in derived classes, if implemented:
153  virtual bool filterScan2D(
154  const mrpt::obs::CObservation2DRangeScan& pc, mp2p_icp::metric_map_t& out,
155  const std::optional<mrpt::poses::CPose3D>& robotPose) const;
157  virtual bool filterScan3D(
158  const mrpt::obs::CObservation3DRangeScan& pc, mp2p_icp::metric_map_t& out,
159  const std::optional<mrpt::poses::CPose3D>& robotPose) const;
161  virtual bool filterVelodyneScan(
162  const mrpt::obs::CObservationVelodyneScan& pc, mp2p_icp::metric_map_t& out,
163  const std::optional<mrpt::poses::CPose3D>& robotPose) const;
165  virtual bool filterPointCloud(
166  const mrpt::maps::CPointsMap& pc, const mrpt::poses::CPose3D& sensorPose,
167  mp2p_icp::metric_map_t& out, const std::optional<mrpt::poses::CPose3D>& robotPose) const;
169  virtual bool filterRotatingScan(
170  const mrpt::obs::CObservationRotatingScan& pc, mp2p_icp::metric_map_t& out,
171  const std::optional<mrpt::poses::CPose3D>& robotPose) const;
172 
173  bool initialized_ = false;
176 
177  private:
178  bool implProcessDefault(
179  const mrpt::obs::CObservation& o, mp2p_icp::metric_map_t& out,
180  const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt) const;
181 
183  const mrpt::obs::CObservation& o, mp2p_icp::metric_map_t& out,
184  const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt) const;
185 
186  void internalLoadUserPlugin(const std::string& moduleToLoad) const;
187 };
188 
190 using GeneratorSet = std::vector<Generator::Ptr>;
191 
200 bool apply_generators(
201  const GeneratorSet& generators, const mrpt::obs::CObservation& obs,
202  mp2p_icp::metric_map_t& output,
203  const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt);
204 
207  const GeneratorSet& generators, const mrpt::obs::CObservation& obs,
208  const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt);
209 
214 bool apply_generators(
215  const GeneratorSet& generators, const mrpt::obs::CSensoryFrame& sf,
216  mp2p_icp::metric_map_t& output,
217  const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt);
218 
221  const GeneratorSet& generators, const mrpt::obs::CSensoryFrame& sf,
222  const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt);
223 
229 [[nodiscard]] GeneratorSet generators_from_yaml(
230  const mrpt::containers::yaml& c,
231  const mrpt::system::VerbosityLevel& vLevel = mrpt::system::LVL_INFO);
232 
241  const std::string& filename,
242  const mrpt::system::VerbosityLevel& vLevel = mrpt::system::LVL_INFO);
243 
246 } // namespace mp2p_icp_filters
mp2p_icp_filters::Generator::Parameters::metric_map_definition_ini_file
std::string metric_map_definition_ini_file
Definition: Generator.h:123
mp2p_icp_filters::Generator::internalLoadUserPlugin
void internalLoadUserPlugin(const std::string &moduleToLoad) const
Definition: Generator.cpp:601
mp2p_icp_filters::Generator::Parameters
Definition: Generator.h:98
mp2p_icp_filters::Generator::filterPointCloud
virtual bool filterPointCloud(const mrpt::maps::CPointsMap &pc, const mrpt::poses::CPose3D &sensorPose, mp2p_icp::metric_map_t &out, const std::optional< mrpt::poses::CPose3D > &robotPose) const
Definition: Generator.cpp:195
generators
static mp2p_icp_filters::GeneratorSet generators
Definition: apps/icp-run/main.cpp:130
mp2p_icp_filters::Generator::initialize
virtual void initialize(const mrpt::containers::yaml &cfg_block)
Definition: Generator.cpp:120
mp2p_icp_filters::Generator
Definition: Generator.h:71
mp2p_icp_filters::Generator::Parameters::metric_map_definition
mrpt::containers::yaml metric_map_definition
Definition: Generator.h:130
mp2p_icp_filters::Generator::filterScan2D
virtual bool filterScan2D(const mrpt::obs::CObservation2DRangeScan &pc, mp2p_icp::metric_map_t &out, const std::optional< mrpt::poses::CPose3D > &robotPose) const
Definition: Generator.cpp:159
mp2p_icp_filters::Generator::filterScan3D
virtual bool filterScan3D(const mrpt::obs::CObservation3DRangeScan &pc, mp2p_icp::metric_map_t &out, const std::optional< mrpt::poses::CPose3D > &robotPose) const
Definition: Generator.cpp:187
mp2p_icp_filters::Generator::initialized_
bool initialized_
Definition: Generator.h:173
mp2p_icp_filters::Generator::implProcessCustomMap
bool implProcessCustomMap(const mrpt::obs::CObservation &o, mp2p_icp::metric_map_t &out, const std::optional< mrpt::poses::CPose3D > &robotPose=std::nullopt) const
Definition: Generator.cpp:443
mp2p_icp_filters::Generator::process_class_names_regex_
std::regex process_class_names_regex_
Definition: Generator.h:174
mp2p_icp::metric_map_t::PT_LAYER_RAW
constexpr static const char * PT_LAYER_RAW
Definition: metricmap.h:64
mp2p_icp_filters::Generator::Parameters::process_class_names_regex
std::string process_class_names_regex
Definition: Generator.h:136
testing::internal::string
::std::string string
Definition: gtest.h:1979
mp2p_icp_filters::Generator::params_
Parameters params_
Definition: Generator.h:146
kitti-batch-convert.out
string out
Definition: kitti-batch-convert.py:7
mp2p_icp_filters::Generator::filterVelodyneScan
virtual bool filterVelodyneScan(const mrpt::obs::CObservationVelodyneScan &pc, mp2p_icp::metric_map_t &out, const std::optional< mrpt::poses::CPose3D > &robotPose) const
Definition: Generator.cpp:167
mp2p_icp::Parameterizable
Definition: Parameterizable.h:77
mp2p_icp_filters::Generator::Parameters::throw_on_unhandled_observation_class
bool throw_on_unhandled_observation_class
Definition: Generator.h:143
mp2p_icp_filters::Generator::Parameters::load_from_yaml
void load_from_yaml(const mrpt::containers::yaml &c, Generator &parent)
Definition: Generator.cpp:44
mp2p_icp_filters::Generator::Parameters::target_layer
std::string target_layer
Definition: Generator.h:104
mp2p_icp_filters::GeneratorSet
std::vector< Generator::Ptr > GeneratorSet
Definition: Generator.h:190
mp2p_icp_filters::Generator::implProcessDefault
bool implProcessDefault(const mrpt::obs::CObservation &o, mp2p_icp::metric_map_t &out, const std::optional< mrpt::poses::CPose3D > &robotPose=std::nullopt) const
Definition: Generator.cpp:341
mp2p_icp_filters::Generator::Parameters::process_sensor_labels_regex
std::string process_sensor_labels_regex
Definition: Generator.h:141
mp2p_icp_filters::generators_from_yaml_file
GeneratorSet generators_from_yaml_file(const std::string &filename, const mrpt::system::VerbosityLevel &vLevel=mrpt::system::LVL_INFO)
Definition: Generator.cpp:331
mp2p_icp_filters::NotImplementedError
Definition: Generator.h:33
Parameterizable.h
mp2p_icp_filters::Generator::filterRotatingScan
virtual bool filterRotatingScan(const mrpt::obs::CObservationRotatingScan &pc, mp2p_icp::metric_map_t &out, const std::optional< mrpt::poses::CPose3D > &robotPose) const
Definition: Generator.cpp:234
mp2p_icp_filters::Generator::Generator
Generator()
Definition: Generator.cpp:42
std
mp2p_icp_filters::NotImplementedError::NotImplementedError
NotImplementedError(T v)
Definition: Generator.h:37
metricmap.h
Generic representation of pointcloud(s) and/or extracted features.
mp2p_icp::metric_map_t
Generic container of pointcloud(s), extracted features and other maps.
Definition: metricmap.h:55
mp2p_icp_filters::Generator::process
virtual bool process(const mrpt::obs::CObservation &input_raw, mp2p_icp::metric_map_t &inOut, const std::optional< mrpt::poses::CPose3D > &robotPose=std::nullopt) const
Definition: Generator.cpp:134
mp2p_icp_filters::Generator::process_sensor_labels_regex_
std::regex process_sensor_labels_regex_
Definition: Generator.h:175
mp2p_icp_filters::apply_generators
bool apply_generators(const GeneratorSet &generators, const mrpt::obs::CObservation &obs, mp2p_icp::metric_map_t &output, const std::optional< mrpt::poses::CPose3D > &robotPose=std::nullopt)
Definition: Generator.cpp:242
mp2p_icp_filters
Definition: FilterAdjustTimestamps.h:19
kitti-batch-convert.filename
filename
Definition: kitti-batch-convert.py:6
mp2p_icp_filters::generators_from_yaml
GeneratorSet generators_from_yaml(const mrpt::containers::yaml &c, const mrpt::system::VerbosityLevel &vLevel=mrpt::system::LVL_INFO)
Definition: Generator.cpp:298


mp2p_icp
Author(s):
autogenerated on Mon May 26 2025 02:45:48