ICP.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  * ------------------------------------------------------------------------- */
12 #pragma once
13 
15 #include <mp2p_icp/LogRecord.h>
16 #include <mp2p_icp/Matcher.h>
17 #include <mp2p_icp/Parameters.h>
20 #include <mp2p_icp/Results.h>
21 #include <mp2p_icp/Solver.h>
22 #include <mp2p_icp/metricmap.h>
23 #include <mrpt/containers/yaml.h>
24 #include <mrpt/core/optional_ref.h>
25 #include <mrpt/math/TPose3D.h>
26 #include <mrpt/rtti/CObject.h>
27 #include <mrpt/system/COutputLogger.h>
28 #include <mrpt/system/CTimeLogger.h>
29 
30 #include <cstdint>
31 #include <functional>
32 
33 namespace mp2p_icp
34 {
51 class ICP : public mrpt::system::COutputLogger, public mrpt::rtti::CObject
52 {
53  DEFINE_MRPT_OBJECT(ICP, mp2p_icp)
54 
55  public:
60  virtual void align(
61  const metric_map_t& pcLocal, const metric_map_t& pcGlobal,
62  const mrpt::math::TPose3D& initialGuessLocalWrtGlobal, const Parameters& p, Results& result,
63  const std::optional<mrpt::poses::CPose3DPDFGaussianInf>& prior = std::nullopt,
64  const mrpt::optional_ref<LogRecord>& outputDebugInfo = std::nullopt);
65 
68  using solver_list_t = std::vector<mp2p_icp::Solver::Ptr>;
69 
89  void initialize_solvers(const mrpt::containers::yaml& params);
90 
91  static void initialize_solvers(const mrpt::containers::yaml& params, ICP::solver_list_t& lst);
92 
93  const solver_list_t& solvers() const { return solvers_; }
95 
97  static bool run_solvers(
98  const solver_list_t& solvers, const Pairings& pairings, OptimalTF_Result& out,
99  const SolverContext& sc = {});
100 
122  void initialize_matchers(const mrpt::containers::yaml& params);
123 
124  static void initialize_matchers(const mrpt::containers::yaml& params, matcher_list_t& lst);
125 
126  const matcher_list_t& matchers() const { return matchers_; }
128 
135  {
136  QualityEvaluatorEntry(mp2p_icp::QualityEvaluator::Ptr o, double w)
137  : obj(o), relativeWeight(w)
138  {
139  }
140 
141  mp2p_icp::QualityEvaluator::Ptr obj;
142  double relativeWeight = 1.0;
143  };
144  using quality_eval_list_t = std::vector<QualityEvaluatorEntry>;
145 
163  void initialize_quality_evaluators(const mrpt::containers::yaml& params);
164 
165  static void initialize_quality_evaluators(
166  const mrpt::containers::yaml& params, quality_eval_list_t& lst);
167 
170 
171  static double evaluate_quality(
172  const quality_eval_list_t& evaluators, const metric_map_t& pcGlobal,
173  const metric_map_t& pcLocal, const mrpt::poses::CPose3D& localPose,
174  const Pairings& finalPairings);
175 
179  {
180  for (auto& o : matchers()) o->attachToParameterSource(source);
181  for (auto& o : solvers()) o->attachToParameterSource(source);
182  for (auto& o : quality_evaluators()) o.obj->attachToParameterSource(source);
183  }
184 
191  virtual void initialize_derived( //
192  [[maybe_unused]] const mrpt::containers::yaml& p)
193  {
194  // Default: do nothing
195  }
196 
198  {
199  IterationHook_Input() = default;
200 
201  const metric_map_t* pcGlobal = nullptr;
202  const metric_map_t* pcLocal = nullptr;
203  const Pairings* currentPairings = nullptr;
205  uint32_t currentIteration = 0;
206  };
208  {
209  IterationHook_Output() = default;
210 
211  bool request_stop = false;
212  };
213 
215 
217 
218  const mrpt::system::CTimeLogger& profiler() const { return profiler_; }
219  mrpt::system::CTimeLogger& profiler() { return profiler_; }
220 
221  protected:
224  quality_eval_list_t quality_evaluators_ = {{QualityEvaluator_PairedRatio::Create(), 1.0}};
225 
227 
228  mrpt::system::CTimeLogger profiler_{false /*disabled*/, "mp2p_icp::ICP"};
229 
230  static void save_log_file(const LogRecord& log, const Parameters& p);
231 
232  struct ICP_State
233  {
234  ICP_State(const metric_map_t& pcsGlobal, const metric_map_t& pcsLocal)
235  : pcGlobal(pcsGlobal), pcLocal(pcsLocal)
236  {
237  }
238 
243  uint32_t currentIteration = 0;
244  LogRecord* log = nullptr;
245  };
246 
247  private:
249 };
250 } // namespace mp2p_icp
mp2p_icp::ICP::ICP_State::log
LogRecord * log
Definition: ICP.h:244
mp2p_icp::ICP::quality_evaluators
const quality_eval_list_t & quality_evaluators() const
Definition: ICP.h:168
mp2p_icp::ICP::quality_eval_list_t
std::vector< QualityEvaluatorEntry > quality_eval_list_t
Definition: ICP.h:144
QualityEvaluator_PairedRatio.h
Matching quality evaluator: simple ratio [0,1] of paired entities.
mp2p_icp
Definition: covariance.h:17
mp2p_icp::ICP::IterationHook_Input::pcGlobal
const metric_map_t * pcGlobal
Definition: ICP.h:201
mp2p_icp::ICP::IterationHook_Input::pcLocal
const metric_map_t * pcLocal
Definition: ICP.h:202
mp2p_icp::ParameterSource
Definition: Parameterizable.h:42
mp2p_icp::ICP::profiler_
mrpt::system::CTimeLogger profiler_
Definition: ICP.h:228
mp2p_icp::ICP::evaluate_quality
static double evaluate_quality(const quality_eval_list_t &evaluators, const metric_map_t &pcGlobal, const metric_map_t &pcLocal, const mrpt::poses::CPose3D &localPose, const Pairings &finalPairings)
Definition: mp2p_icp/src/ICP.cpp:566
mp2p_icp::ICP::QualityEvaluatorEntry::relativeWeight
double relativeWeight
Definition: ICP.h:142
LogRecord.h
A record of the inputs and outputs of an ICP run.
mp2p_icp::ICP::IterationHook_Input::currentIteration
uint32_t currentIteration
Definition: ICP.h:205
mp2p_icp::ICP::IterationHook_Input::currentPairings
const Pairings * currentPairings
Definition: ICP.h:203
mp2p_icp::ICP::attachToParameterSource
void attachToParameterSource(ParameterSource &source)
Definition: ICP.h:178
mp2p_icp::Pairings
Definition: Pairings.h:76
mp2p_icp::ICP::IterationHook_Input::IterationHook_Input
IterationHook_Input()=default
mp2p_icp::ICP::ownParamSource_
ParameterSource ownParamSource_
Definition: ICP.h:248
mp2p_icp::ICP::quality_evaluators_
quality_eval_list_t quality_evaluators_
Definition: ICP.h:224
mp2p_icp::ICP::setIterationHook
void setIterationHook(const iteration_hook_t &ih)
Definition: ICP.h:216
mp2p_icp::LogRecord
Definition: LogRecord.h:30
mp2p_icp::SolverContext
Definition: Solver.h:36
mp2p_icp::ICP::ICP_State::ICP_State
ICP_State(const metric_map_t &pcsGlobal, const metric_map_t &pcsLocal)
Definition: ICP.h:234
mp2p_icp::ICP::ICP_State::currentSolution
OptimalTF_Result currentSolution
Definition: ICP.h:242
mp2p_icp::OptimalTF_Result
Definition: OptimalTF_Result.h:24
mp2p_icp::ICP::QualityEvaluatorEntry
Definition: ICP.h:134
mp2p_icp::ICP::solvers_
solver_list_t solvers_
Definition: ICP.h:222
mp2p_icp::ICP::iteration_hook_t
std::function< IterationHook_Output(const IterationHook_Input &)> iteration_hook_t
Definition: ICP.h:214
mp2p_icp::ICP::initialize_solvers
void initialize_solvers(const mrpt::containers::yaml &params)
Definition: mp2p_icp/src/ICP.cpp:472
mp2p_icp::ICP::profiler
const mrpt::system::CTimeLogger & profiler() const
Definition: ICP.h:218
mp2p_icp::ICP::matchers
matcher_list_t & matchers()
Definition: ICP.h:127
Parameters.h
mp2p_icp::ICP::solvers
solver_list_t & solvers()
Definition: ICP.h:94
mp2p_icp::ICP::ICP_State::pcGlobal
const metric_map_t & pcGlobal
Definition: ICP.h:239
mp2p_icp::ICP::solver_list_t
std::vector< mp2p_icp::Solver::Ptr > solver_list_t
Definition: ICP.h:68
Solver.h
Virtual base class for optimal alignment solvers (one step in ICP).
mp2p_icp::ICP::IterationHook_Input::currentSolution
const OptimalTF_Result * currentSolution
Definition: ICP.h:204
mp2p_icp::ICP
Definition: ICP.h:51
kitti-batch-convert.out
string out
Definition: kitti-batch-convert.py:7
IterTermReason.h
mp2p_icp::ICP::solvers
const solver_list_t & solvers() const
Definition: ICP.h:93
mp2p_icp::ICP::quality_evaluators
quality_eval_list_t & quality_evaluators()
Definition: ICP.h:169
mp2p_icp::ICP::initialize_matchers
void initialize_matchers(const mrpt::containers::yaml &params)
Definition: mp2p_icp/src/ICP.cpp:501
mp2p_icp::ICP::IterationHook_Output
Definition: ICP.h:207
mp2p_icp::ICP::ICP_State
Definition: ICP.h:232
mp2p_icp::ICP::matchers
const matcher_list_t & matchers() const
Definition: ICP.h:126
mp2p_icp::ICP::IterationHook_Output::IterationHook_Output
IterationHook_Output()=default
mp2p_icp::ICP::align
virtual void align(const metric_map_t &pcLocal, const metric_map_t &pcGlobal, const mrpt::math::TPose3D &initialGuessLocalWrtGlobal, const Parameters &p, Results &result, const std::optional< mrpt::poses::CPose3DPDFGaussianInf > &prior=std::nullopt, const mrpt::optional_ref< LogRecord > &outputDebugInfo=std::nullopt)
Definition: mp2p_icp/src/ICP.cpp:27
mp2p_icp::ICP::IterationHook_Output::request_stop
bool request_stop
Definition: ICP.h:211
Matcher.h
Pointcloud matching generic base class.
mp2p_icp::ICP::ICP_State::currentPairings
Pairings currentPairings
Definition: ICP.h:241
QualityEvaluator.h
Matching quality evaluator (virtual base class)
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::ICP::iteration_hook_
iteration_hook_t iteration_hook_
Definition: ICP.h:226
mp2p_icp::ICP::QualityEvaluatorEntry::obj
mp2p_icp::QualityEvaluator::Ptr obj
Definition: ICP.h:141
mp2p_icp::Results
Definition: Results.h:21
mp2p_icp::ICP::initialize_derived
virtual void initialize_derived([[maybe_unused]] const mrpt::containers::yaml &p)
Definition: ICP.h:191
mp2p_icp::ICP::run_solvers
static bool run_solvers(const solver_list_t &solvers, const Pairings &pairings, OptimalTF_Result &out, const SolverContext &sc={})
Definition: mp2p_icp/src/ICP.cpp:460
mp2p_icp::Parameters
Definition: Parameters.h:26
mp2p_icp::ICP::ICP_State::pcLocal
const metric_map_t & pcLocal
Definition: ICP.h:240
Results.h
mp2p_icp::ICP::IterationHook_Input
Definition: ICP.h:197
mp2p_icp::ICP::initialize_quality_evaluators
void initialize_quality_evaluators(const mrpt::containers::yaml &params)
Definition: mp2p_icp/src/ICP.cpp:561
mp2p_icp::ICP::QualityEvaluatorEntry::QualityEvaluatorEntry
QualityEvaluatorEntry(mp2p_icp::QualityEvaluator::Ptr o, double w)
Definition: ICP.h:136
mp2p_icp::matcher_list_t
std::vector< mp2p_icp::Matcher::Ptr > matcher_list_t
Definition: Matcher.h:108
mp2p_icp::ICP::ICP_State::currentIteration
uint32_t currentIteration
Definition: ICP.h:243
mp2p_icp::ICP::profiler
mrpt::system::CTimeLogger & profiler()
Definition: ICP.h:219
mp2p_icp::ICP::save_log_file
static void save_log_file(const LogRecord &log, const Parameters &p)
Definition: mp2p_icp/src/ICP.cpp:375
mp2p_icp::ICP::matchers_
matcher_list_t matchers_
Definition: ICP.h:223


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