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-2021 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 
29 #include <cstdint>
30 #include <functional> //reference_wrapper
31 #include <memory>
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,
63  const Parameters& p, Results& result,
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(
92  const mrpt::containers::yaml& params, ICP::solver_list_t& lst);
93 
94  const solver_list_t& solvers() const { return solvers_; }
96 
98  static bool run_solvers(
99  const solver_list_t& solvers, const Pairings& pairings,
100  OptimalTF_Result& out, const SolverContext& sc = {});
101 
123  void initialize_matchers(const mrpt::containers::yaml& params);
124 
125  static void initialize_matchers(
126  const mrpt::containers::yaml& params, matcher_list_t& lst);
127 
128  const matcher_list_t& matchers() const { return matchers_; }
130 
137  {
138  QualityEvaluatorEntry(mp2p_icp::QualityEvaluator::Ptr o, double w)
139  : obj(o), relativeWeight(w)
140  {
141  }
142 
143  mp2p_icp::QualityEvaluator::Ptr obj;
144  double relativeWeight = 1.0;
145  };
146  using quality_eval_list_t = std::vector<QualityEvaluatorEntry>;
147 
165  void initialize_quality_evaluators(const mrpt::containers::yaml& params);
166 
167  static void initialize_quality_evaluators(
168  const mrpt::containers::yaml& params, quality_eval_list_t& lst);
169 
171  {
172  return quality_evaluators_;
173  }
175 
176  static double evaluate_quality(
177  const quality_eval_list_t& evaluators, const metric_map_t& pcGlobal,
178  const metric_map_t& pcLocal, const mrpt::poses::CPose3D& localPose,
179  const Pairings& finalPairings);
180 
189  virtual void initialize_derived( //
190  [[maybe_unused]] const mrpt::containers::yaml& p)
191  {
192  // Default: do nothing
193  }
194 
195  protected:
199  {QualityEvaluator_PairedRatio::Create(), 1.0}};
200 
201  static void save_log_file(const LogRecord& log, const Parameters& p);
202 
203  struct ICP_State
204  {
205  ICP_State(const metric_map_t& pcsGlobal, const metric_map_t& pcsLocal)
206  : pcGlobal(pcsGlobal), pcLocal(pcsLocal)
207  {
208  }
209 
215  uint32_t currentIteration = 0;
216  LogRecord* log = nullptr;
217  };
218 };
219 } // namespace mp2p_icp
mp2p_icp::ICP::ICP_State::log
LogRecord * log
Definition: ICP.h:216
mp2p_icp::ICP::quality_evaluators
const quality_eval_list_t & quality_evaluators() const
Definition: ICP.h:170
mp2p_icp::ICP::quality_eval_list_t
std::vector< QualityEvaluatorEntry > quality_eval_list_t
Definition: ICP.h:146
QualityEvaluator_PairedRatio.h
Matching quality evaluator: simple ratio [0,1] of paired entities.
mp2p_icp
Definition: covariance.h:17
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:360
mp2p_icp::ICP::QualityEvaluatorEntry::relativeWeight
double relativeWeight
Definition: ICP.h:144
LogRecord.h
A record of the inputs and outputs of an ICP run.
mp2p_icp::ICP::ICP_State::layerOfLargestPc
std::string layerOfLargestPc
Definition: ICP.h:212
mp2p_icp::Pairings
Definition: Pairings.h:94
mp2p_icp::ICP::quality_evaluators_
quality_eval_list_t quality_evaluators_
Definition: ICP.h:198
mp2p_icp::LogRecord
Definition: LogRecord.h:30
mp2p_icp::SolverContext
Definition: Solver.h:30
mp2p_icp::ICP::ICP_State::ICP_State
ICP_State(const metric_map_t &pcsGlobal, const metric_map_t &pcsLocal)
Definition: ICP.h:205
mp2p_icp::ICP::ICP_State::currentSolution
OptimalTF_Result currentSolution
Definition: ICP.h:214
mp2p_icp::OptimalTF_Result
Definition: OptimalTF_Result.h:24
mp2p_icp::ICP::QualityEvaluatorEntry
Definition: ICP.h:136
mp2p_icp::ICP::solvers_
solver_list_t solvers_
Definition: ICP.h:196
mp2p_icp::ICP::initialize_solvers
void initialize_solvers(const mrpt::containers::yaml &params)
Definition: mp2p_icp/src/ICP.cpp:258
mp2p_icp::ICP::matchers
matcher_list_t & matchers()
Definition: ICP.h:129
Parameters.h
mp2p_icp::ICP::solvers
solver_list_t & solvers()
Definition: ICP.h:95
mp2p_icp::ICP::ICP_State::pcGlobal
const metric_map_t & pcGlobal
Definition: ICP.h:210
testing::internal::string
::std::string string
Definition: gtest.h:1979
mp2p_icp::ICP::solver_list_t
std::vector< mp2p_icp::Solver::Ptr > solver_list_t
Definition: ICP.h:68
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 mrpt::optional_ref< LogRecord > &outputDebugInfo=std::nullopt)
Definition: mp2p_icp/src/ICP.cpp:25
Solver.h
Virtual base class for optimal alignment solvers (one step in ICP).
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:94
mp2p_icp::ICP::quality_evaluators
quality_eval_list_t & quality_evaluators()
Definition: ICP.h:174
mp2p_icp::ICP::initialize_matchers
void initialize_matchers(const mrpt::containers::yaml &params)
Definition: mp2p_icp/src/ICP.cpp:290
mp2p_icp::ICP::ICP_State
Definition: ICP.h:203
mp2p_icp::ICP::matchers
const matcher_list_t & matchers() const
Definition: ICP.h:128
Matcher.h
Pointcloud matching generic base class.
mp2p_icp::ICP::ICP_State::currentPairings
Pairings currentPairings
Definition: ICP.h:213
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:47
mp2p_icp::ICP::QualityEvaluatorEntry::obj
mp2p_icp::QualityEvaluator::Ptr obj
Definition: ICP.h:143
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:189
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:246
mp2p_icp::Parameters
Definition: Parameters.h:25
mp2p_icp::ICP::ICP_State::pcLocal
const metric_map_t & pcLocal
Definition: ICP.h:211
Results.h
mp2p_icp::ICP::initialize_quality_evaluators
void initialize_quality_evaluators(const mrpt::containers::yaml &params)
Definition: mp2p_icp/src/ICP.cpp:355
mp2p_icp::ICP::QualityEvaluatorEntry::QualityEvaluatorEntry
QualityEvaluatorEntry(mp2p_icp::QualityEvaluator::Ptr o, double w)
Definition: ICP.h:138
mp2p_icp::matcher_list_t
std::vector< mp2p_icp::Matcher::Ptr > matcher_list_t
Definition: Matcher.h:98
mp2p_icp::ICP::ICP_State::currentIteration
uint32_t currentIteration
Definition: ICP.h:215
mp2p_icp::ICP::save_log_file
static void save_log_file(const LogRecord &log, const Parameters &p)
Definition: mp2p_icp/src/ICP.cpp:179
mp2p_icp::ICP::matchers_
matcher_list_t matchers_
Definition: ICP.h:197


mrpt_local_obstacles
Author(s): Jose-Luis Blanco-Claraco
autogenerated on Mon Aug 14 2023 02:09:03