class mp2p_icp_filters::FilterDeskew
Overview
Builds a new layer with a deskewed (motion compensated) version of an input pointcloud from a moving LIDAR, where points are time-stamped.
Important notes:
The
time
field of each point is assumed to be in seconds since the reference time point, which can be the start or middle point of the scan. This can be controlled by adding a FilterAdjustTimestamps before this block.The input layer must contain a point cloud in the format mrpt::maps::CPointsMapXYZIRT so timestamps are present.
If the input layer is of a different type, or the
time
field is missing, an exception will be thrown by default, unless the optionsilently_ignore_no_timestamps
is set totrue
, in which case the input cloud will be just moved forward to the output.
#include <FilterDeskew.h> class FilterDeskew: public mp2p_icp_filters::FilterBase { public: // fields std::string input_pointcloud_layer = mp2p_icp::metric_map_t::PT_LAYER_RAW; std::string output_pointcloud_layer; std::string output_layer_class = "mrpt::maps::CPointsMapXYZI"; bool silently_ignore_no_timestamps = false; bool skip_deskew = false; bool use_precise_local_velocities = false; std::optional<mrpt::math::TTwist3D> twist; // methods virtual void initialize(const mrpt::containers::yaml& c); virtual void filter(mp2p_icp::metric_map_t& inOut) const; };
Inherited Members
public: // methods virtual void initialize(const mrpt::containers::yaml& cfg_block) = 0; virtual void filter(mp2p_icp::metric_map_t& inOut) const = 0;
Fields
std::string input_pointcloud_layer = mp2p_icp::metric_map_t::PT_LAYER_RAW
An input layer, from which to read input points Points must be already in the vehicle frame.
std::string output_pointcloud_layer
The output point cloud layer name
std::string output_layer_class = "mrpt::maps::CPointsMapXYZI"
The class name for output layer if it does not exist and needs to be created
bool silently_ignore_no_timestamps = false
Whether to skip throwing an exception if the input layer does not contain timestamps.
bool skip_deskew = false
If enabled (set to true), no “de-skew” will be performed, and the input points will be just copied into the output layer.
bool use_precise_local_velocities = false
If enabled (true), the constant twist
field is ignored and the precise twist trajectory is retrieved from the LocalVelocityBuffer from the ParameterSource attached to this block.
std::optional<mrpt::math::TTwist3D> twist
The velocity (linear and angular) of the vehicle in the local vehicle frame. See FilterDeskew::initialize for an example of how to define it via dynamic variables. This will be used unless use_precise_local_velocities
is enabled, in which case it can be left as an empty std::optional
.
Methods
virtual void initialize(const mrpt::containers::yaml& c)
Parameters:
params: input_pointcloud_layer: 'raw' output_pointcloud_layer: 'deskewed' # silently_ignore_no_timestamps: false # skip_deskew: false # Can be enabled to bypass deskew # use_precise_local_velocities: false # Use precise IMU-based de-skewing # These (vx,...,wz) are variable names that must be defined via the # mp2p_icp::Parameterizable API to update them dynamically. twist: [vx,vy,vz,wx,wy,wz]
virtual void filter(mp2p_icp::metric_map_t& inOut) const
See docs above for FilterBase.