mp2p_icp_filters library
Overview
LiDAR and point cloud segmentation and filtering algorithms.
// typedefs typedef std::vector<FilterBase::Ptr> mp2p_icp_filters::FilterPipeline; typedef std::vector<Generator::Ptr> mp2p_icp_filters::GeneratorSet; // enums enum mp2p_icp_filters::DecimateMethod; enum mp2p_icp_filters::MotionCompensationMethod; enum mp2p_icp_filters::TimestampAdjustMethod; // structs struct mp2p_icp_filters::NotImplementedError; struct mp2p_icp_filters::sm2mm_options_t; // classes class mp2p_icp_filters::FilterAbsoluteTimestamp; class mp2p_icp_filters::FilterAdjustTimestamps; class mp2p_icp_filters::FilterBase; class mp2p_icp_filters::FilterBoundingBox; class mp2p_icp_filters::FilterByExpression; class mp2p_icp_filters::FilterByIntensity; class mp2p_icp_filters::FilterByRange; class mp2p_icp_filters::FilterByRing; class mp2p_icp_filters::FilterClear; class mp2p_icp_filters::FilterCurvature; class mp2p_icp_filters::FilterDecimate; class mp2p_icp_filters::FilterDecimateAdaptive; class mp2p_icp_filters::FilterDecimateRangeAdaptive; class mp2p_icp_filters::FilterDecimateVoxels; class mp2p_icp_filters::FilterDeleteLayer; class mp2p_icp_filters::FilterDeskew; class mp2p_icp_filters::FilterEdgesPlanes; class mp2p_icp_filters::FilterFartherPointSampling; class mp2p_icp_filters::FilterMLS; class mp2p_icp_filters::FilterMerge; class mp2p_icp_filters::FilterNormalizeIntensity; class mp2p_icp_filters::FilterPlanePatches; class mp2p_icp_filters::FilterPoleDetector; class mp2p_icp_filters::FilterPolygon2D; class mp2p_icp_filters::FilterRemoveByVoxelOccupancy; class mp2p_icp_filters::FilterRemovePointCloudField; class mp2p_icp_filters::FilterRenameLayer; class mp2p_icp_filters::FilterSOR; class mp2p_icp_filters::FilterTransformPointCloud; class mp2p_icp_filters::FilterVoxelSOR; class mp2p_icp_filters::FilterVoxelSlice; class mp2p_icp_filters::Generator; class mp2p_icp_filters::GeneratorEdgesFromCurvature; class mp2p_icp_filters::GeneratorEdgesFromRangeImage; class mp2p_icp_filters::PointCloudToVoxelGrid; class mp2p_icp_filters::PointCloudToVoxelGridAverage; class mp2p_icp_filters::PointCloudToVoxelGridSingle; // global variables static constexpr static const char* mp2p_icp_filters::POINT_FIELD_INTENSITY = "intensity"; static constexpr static const char* mp2p_icp_filters::POINT_FIELD_RING_ID = "ring"; static constexpr static const char* mp2p_icp_filters::POINT_FIELD_TIMESTAMP = "t"; // global functions mrpt::maps::CMetricMap::Ptr mp2p_icp_filters::CreateMetricMapFromDefinition( const mrpt::containers::yaml& metricMapDefinition, const std::string& metricMapDefinitionIniFile = std::string(), const mrpt::system::COutputLogger* logger = nullptr ); void mp2p_icp_filters::apply_filter_pipeline( const FilterPipeline& filters, mp2p_icp::metric_map_t& inOut, const mrpt::optional_ref<mrpt::system::CTimeLogger>& profiler = std::nullopt ); FilterPipeline mp2p_icp_filters::filter_pipeline_from_yaml( const mrpt::containers::yaml& c, const mrpt::system::VerbosityLevel& vLevel = mrpt::system::LVL_INFO ); FilterPipeline mp2p_icp_filters::filter_pipeline_from_yaml_file( const std::string& filename, const mrpt::system::VerbosityLevel& vLevel = mrpt::system::LVL_INFO ); bool mp2p_icp_filters::apply_generators( const GeneratorSet& generators, const mrpt::obs::CObservation& obs, mp2p_icp::metric_map_t& output, const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt, const mrpt::optional_ref<mrpt::system::CTimeLogger>& profiler = std::nullopt ); mp2p_icp::metric_map_t mp2p_icp_filters::apply_generators( const GeneratorSet& generators, const mrpt::obs::CObservation& obs, const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt ); bool mp2p_icp_filters::apply_generators( const GeneratorSet& generators, const mrpt::obs::CSensoryFrame& sf, mp2p_icp::metric_map_t& output, const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt ); mp2p_icp::metric_map_t mp2p_icp_filters::apply_generators( const GeneratorSet& generators, const mrpt::obs::CSensoryFrame& sf, const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt ); GeneratorSet mp2p_icp_filters::generators_from_yaml( const mrpt::containers::yaml& c, const mrpt::system::VerbosityLevel& vLevel = mrpt::system::LVL_INFO ); GeneratorSet mp2p_icp_filters::generators_from_yaml_file( const std::string& filename, const mrpt::system::VerbosityLevel& vLevel = mrpt::system::LVL_INFO ); mrpt::maps::CPointsMap::Ptr mp2p_icp_filters::GetOrCreatePointLayer( mp2p_icp::metric_map_t& m, const std::string& layerName, bool allowEmptyName = true, const std::string& classForLayerCreation = "mrpt::maps::CSimplePointsMap" ); double mp2p_icp_filters::robust_max_range( const mrpt::maps::CPointsMap& pc, double percentile = 0.95, const mrpt::math::TPoint3Df& center = {0, 0, 0} ); void mp2p_icp_filters::simplemap_to_metricmap( const mrpt::maps::CSimpleMap& sm, mp2p_icp::metric_map_t& outMap, const mrpt::containers::yaml& pipeline, const sm2mm_options_t& options = {} );
Typedefs
typedef std::vector<FilterBase::Ptr> mp2p_icp_filters::FilterPipeline
A sequence of filters
typedef std::vector<Generator::Ptr> mp2p_icp_filters::GeneratorSet
A set of generators
Global Functions
mrpt::maps::CMetricMap::Ptr mp2p_icp_filters::CreateMetricMapFromDefinition( const mrpt::containers::yaml& metricMapDefinition, const std::string& metricMapDefinitionIniFile = std::string(), const mrpt::system::COutputLogger* logger = nullptr )
Instantiates an empty mrpt::maps::CMetricMap object of the class described by a metric_map_definition YAML block, using the same schema accepted by Generator ‘s metric_map_definition parameter (a class key, plus optional plugin, creationOpts, insertOpts, likelihoodOpts, renderOpts, etc. sub-blocks), or from an external .ini file in the format expected by mrpt::maps::TSetOfMetricMapInitializers.
Internally builds a one-element mrpt::maps::CMultiMetricMap from the given initializer and returns its only submap. This is the very same mechanism Generator uses to create a custom-class layer the first time it processes a matching observation; it is exposed here as a standalone function so it can also be used without any observation at hand, e.g. to pre-create a layer for an mm-filter pipeline (see Generator::createTargetLayerIfNeeded()).
At least one of metricMapDefinition or metricMapDefinitionIniFile must be non-empty. If both are given, metricMapDefinitionIniFile takes precedence and metricMapDefinition is ignored.
Parameters:
metricMapDefinition |
YAML map with, at least, a |
metricMapDefinitionIniFile |
Alternative to the above: a path to an external |
logger |
Optional logger, forwarded to mp2p_icp::load_plugin() if a |
void mp2p_icp_filters::apply_filter_pipeline( const FilterPipeline& filters, mp2p_icp::metric_map_t& inOut, const mrpt::optional_ref<mrpt::system::CTimeLogger>& profiler = std::nullopt )
Applies a pipeline of filters to a given metric_map_t
FilterPipeline mp2p_icp_filters::filter_pipeline_from_yaml( const mrpt::containers::yaml& c, const mrpt::system::VerbosityLevel& vLevel = mrpt::system::LVL_INFO )
Creates a pipeline of filters from a YAML configuration block (a sequence). Refer to YAML file examples. Returns an empty pipeline for an empty or null yaml node. Returned filters are already initialize()’d.
bool mp2p_icp_filters::apply_generators( const GeneratorSet& generators, const mrpt::obs::CObservation& obs, mp2p_icp::metric_map_t& output, const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt, const mrpt::optional_ref<mrpt::system::CTimeLogger>& profiler = std::nullopt )
Applies a set of generators to a given input raw observation(s) and generates a metric_map_t.
The former contents on the output metric_map_t object are untouched, so calling this function several times can be used to accumulate point cloud elements from different sensors.
Returns:
true if any of the generators actually processed “obs”
GeneratorSet mp2p_icp_filters::generators_from_yaml( const mrpt::containers::yaml& c, const mrpt::system::VerbosityLevel& vLevel = mrpt::system::LVL_INFO )
Creates a set of generators from a YAML configuration block (a sequence). Returns an empty generators set for an empty or null yaml node. Refer to YAML file examples. Returned generators are already initialize()’d.
double mp2p_icp_filters::robust_max_range( const mrpt::maps::CPointsMap& pc, double percentile = 0.95, const mrpt::math::TPoint3Df& center = {0, 0, 0} )
Outlier-robust estimate of a point cloud’s maximum range (distance from a center point, default the origin).
Plain boundingBox().max.norm() is dominated by even a single spurious far return (e.g. specular-reflection artifacts observed on Livox sensors, hundreds of meters away in an otherwise <20 m scene): consumers that use such an estimate to size a downstream voxel grid or range filter can end up starving the real, near-field points. This function instead returns the given percentile of the per-point range distribution, so a small minority of extreme points cannot dominate it.
Implemented with std::nth_element (average O(n)), not a full sort.
Parameters:
pc |
The point cloud. May be empty, in which case 0 is returned. |
percentile |
In (0,1]. Ranges are sorted and the value at this fraction is returned; e.g. 0.95 (the default) discards the top 5% of ranges as potential outliers. 1.0 reproduces the plain maximum. |
center |
Ranges are measured from this point. |
void mp2p_icp_filters::simplemap_to_metricmap( const mrpt::maps::CSimpleMap& sm, mp2p_icp::metric_map_t& outMap, const mrpt::containers::yaml& pipeline, const sm2mm_options_t& options = {} )
Utility function to build metric maps (”*.mm”) from raw observations as a simple map (”*.sm”). For a ready-to-use CLI application exposing this function, as well as documentation on the meaning of each argument, see sm2mm.
The former contents of outMap are cleared.
If options.georeferencing is set, robot poses are transformed into the ENU frame (via T_enu_to_map \oplus robotPose) before being handed to the generators, and the output map is tagged with the corresponding georeferencing metadata (with T_enu_to_map set to identity).