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
Pointcloud matching generic base class.
std::vector< mp2p_icp::Matcher::Ptr > matcher_list_t
Definition: Matcher.h:98
static void save_log_file(const LogRecord &log, const Parameters &p)
Generic container of pointcloud(s), extracted features and other maps.
Definition: metricmap.h:47
solver_list_t & solvers()
Definition: ICP.h:95
const metric_map_t & pcLocal
Definition: ICP.h:211
INLINE Rall1d< T, V, S > log(const Rall1d< T, V, S > &arg)
void initialize_solvers(const mrpt::containers::yaml &params)
::std::string string
Definition: gtest.h:1979
OptimalTF_Result currentSolution
Definition: ICP.h:214
ICP_State(const metric_map_t &pcsGlobal, const metric_map_t &pcsLocal)
Definition: ICP.h:205
static bool run_solvers(const solver_list_t &solvers, const Pairings &pairings, OptimalTF_Result &out, const SolverContext &sc={})
quality_eval_list_t quality_evaluators_
Definition: ICP.h:198
const solver_list_t & solvers() const
Definition: ICP.h:94
mp2p_icp::QualityEvaluator::Ptr obj
Definition: ICP.h:143
Generic representation of pointcloud(s) and/or extracted features.
Pairings currentPairings
Definition: ICP.h:213
Matching quality evaluator (virtual base class)
void initialize_quality_evaluators(const mrpt::containers::yaml &params)
const matcher_list_t & matchers() const
Definition: ICP.h:128
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)
matcher_list_t & matchers()
Definition: ICP.h:129
std::vector< mp2p_icp::Solver::Ptr > solver_list_t
Definition: ICP.h:68
matcher_list_t matchers_
Definition: ICP.h:197
Virtual base class for optimal alignment solvers (one step in ICP).
const quality_eval_list_t & quality_evaluators() const
Definition: ICP.h:170
const metric_map_t & pcGlobal
Definition: ICP.h:210
A record of the inputs and outputs of an ICP run.
virtual void initialize_derived([[maybe_unused]] const mrpt::containers::yaml &p)
Definition: ICP.h:189
std::string layerOfLargestPc
Definition: ICP.h:212
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)
QualityEvaluatorEntry(mp2p_icp::QualityEvaluator::Ptr o, double w)
Definition: ICP.h:138
quality_eval_list_t & quality_evaluators()
Definition: ICP.h:174
std::vector< QualityEvaluatorEntry > quality_eval_list_t
Definition: ICP.h:146
solver_list_t solvers_
Definition: ICP.h:196
void initialize_matchers(const mrpt::containers::yaml &params)
Matching quality evaluator: simple ratio [0,1] of paired entities.


mrpt_local_obstacles
Author(s): Jose-Luis Blanco-Claraco
autogenerated on Thu Jun 1 2023 03:06:43