FilterAdjustTimestamps.cpp
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  * ------------------------------------------------------------------------- */
14 #include <mrpt/containers/yaml.h>
15 
16 #include <optional>
17 
19  FilterAdjustTimestamps, mp2p_icp_filters::FilterBase, mp2p_icp_filters)
20 
21 using namespace mp2p_icp_filters;
22 
24  const mrpt::containers::yaml& c, FilterAdjustTimestamps& parent)
25 {
26  MCP_LOAD_REQ(c, pointcloud_layer);
27  MCP_LOAD_REQ(c, method);
28  MCP_LOAD_REQ(c, silently_ignore_no_timestamps);
29 
31 }
32 
34 {
35  mrpt::system::COutputLogger::setLoggerName("FilterAdjustTimestamps");
36 }
37 
38 void FilterAdjustTimestamps::initialize(const mrpt::containers::yaml& c)
39 {
40  MRPT_START
41 
42  MRPT_LOG_DEBUG_STREAM("Loading these params:\n" << c);
43  params_.load_from_yaml(c, *this);
44 
45  MRPT_END
46 }
47 
49 {
50  MRPT_START
51 
53 
54  // In/out:
55  auto pcPtr = inOut.point_layer(params_.pointcloud_layer);
56  ASSERTMSG_(
57  pcPtr, mrpt::format(
58  "Input point cloud layer '%s' was not found.",
59  params_.pointcloud_layer.c_str()));
60 
61  auto& pc = *pcPtr;
62 
63  auto* TsPtr = pc.getPointsBufferRef_timestamp();
64 
65  if (TsPtr == nullptr || (TsPtr->empty() && !pc.empty()))
66  {
67  // we don't have timestamps:
69  {
70  MRPT_LOG_DEBUG_STREAM(
71  "Skipping time adjusting in input cloud '"
72  << params_.pointcloud_layer << "' with contents: "
73  << pc.asString() << " due to missing timestamps.");
74  return;
75  }
76  else
77  {
78  THROW_EXCEPTION_FMT(
79  "Cannot do time adjusting for input cloud '%s' "
80  "with contents: %s due to missing timestamps.",
81  params_.pointcloud_layer.c_str(), pc.asString().c_str());
82  }
83  }
84 
85  auto& Ts = *TsPtr;
86 
87  std::optional<float> minT, maxT;
88 
89  for (size_t i = 0; i < Ts.size(); i++)
90  {
91  const float t = Ts[i];
92 
93  if (!minT || t < *minT) minT = t;
94  if (!maxT || t > *maxT) maxT = t;
95  }
96  ASSERT_(minT && maxT);
97 
98  switch (params_.method)
99  {
101  {
102  const float dt = 0.5f * (*maxT + *minT) + params_.time_offset;
103  for (auto& t : Ts) t -= dt;
104  }
105  break;
107  {
108  const float dt = *minT + params_.time_offset;
109  for (auto& t : Ts) t -= dt;
110  }
111  break;
113  {
114  const float m = *minT;
115  const float k = *maxT != *minT ? 1.0f / (*maxT - *minT) : 1.0f;
116  for (auto& t : Ts) t = (t - m) * k + params_.time_offset;
117  }
118  break;
119 
120  default:
121  THROW_EXCEPTION("Unknown value for 'method'");
122  }
123 
124  MRPT_END
125 }
mp2p_icp::Parameterizable::checkAllParametersAreRealized
void checkAllParametersAreRealized() const
Definition: Parameterizable.cpp:138
mp2p_icp_filters::FilterAdjustTimestamps::params_
Parameters params_
Definition: FilterAdjustTimestamps.h:78
kitti-run-seq.f
string f
Definition: kitti-run-seq.py:12
mp2p_icp_filters::FilterAdjustTimestamps::filter
void filter(mp2p_icp::metric_map_t &inOut) const override
Definition: FilterAdjustTimestamps.cpp:48
IMPLEMENTS_MRPT_OBJECT
IMPLEMENTS_MRPT_OBJECT(FilterAdjustTimestamps, mp2p_icp_filters::FilterBase, mp2p_icp_filters) using namespace mp2p_icp_filters
mp2p_icp_filters::TimestampAdjustMethod::Normalize
@ Normalize
mp2p_icp_filters::FilterAdjustTimestamps::Parameters::silently_ignore_no_timestamps
bool silently_ignore_no_timestamps
Definition: FilterAdjustTimestamps.h:68
mp2p_icp_filters::FilterAdjustTimestamps::FilterAdjustTimestamps
FilterAdjustTimestamps()
Definition: FilterAdjustTimestamps.cpp:33
mp2p_icp_filters::FilterAdjustTimestamps::Parameters::load_from_yaml
void load_from_yaml(const mrpt::containers::yaml &c, FilterAdjustTimestamps &parent)
Definition: FilterAdjustTimestamps.cpp:23
mp2p_icp_filters::FilterAdjustTimestamps::initialize
void initialize(const mrpt::containers::yaml &c) override
Definition: FilterAdjustTimestamps.cpp:38
FilterAdjustTimestamps.h
Normalizes point cloud timestamps.
mp2p_icp_filters::FilterBase
Definition: FilterBase.h:46
mp2p_icp::metric_map_t::point_layer
mrpt::maps::CPointsMap::Ptr point_layer(const layer_name_t &name) const
Definition: metricmap.cpp:629
mp2p_icp_filters::FilterAdjustTimestamps
Definition: FilterAdjustTimestamps.h:46
mp2p_icp_filters::FilterAdjustTimestamps::Parameters::pointcloud_layer
std::string pointcloud_layer
Definition: FilterAdjustTimestamps.h:63
mp2p_icp_filters::TimestampAdjustMethod::EarliestIsZero
@ EarliestIsZero
mp2p_icp::metric_map_t
Generic container of pointcloud(s), extracted features and other maps.
Definition: metricmap.h:49
mp2p_icp_filters::FilterAdjustTimestamps::Parameters::method
TimestampAdjustMethod method
Definition: FilterAdjustTimestamps.h:74
mp2p_icp_filters::TimestampAdjustMethod::MiddleIsZero
@ MiddleIsZero
DECLARE_PARAMETER_IN_OPT
#define DECLARE_PARAMETER_IN_OPT(__yaml, __variable, __object)
Definition: Parameterizable.h:159
mp2p_icp_filters
Definition: FilterAdjustTimestamps.h:19
t
geometry_msgs::TransformStamped t
mp2p_icp_filters::FilterAdjustTimestamps::Parameters::time_offset
double time_offset
Definition: FilterAdjustTimestamps.h:71


mp2p_icp
Author(s):
autogenerated on Thu Oct 17 2024 02:45:33