class mp2p_icp_filters::Generator

Overview

Generic base class providing process(), converting a generic mrpt::obs::CObservation into a metric_map_t with just a point cloud layer (named raw).

This metric_map_t can optionally then be passed through one or more FilterBase implementations to detect features, decimate it, etc.

Specializations of Generator may exist and could be implemented to exploit the structured information in the original CObservation data to be more efficient in detecting features (e.g. corners, etc.).

Internally, different signatures exists for:

  • 2D LiDAR range scans (mrpt::obs::CObservation2DRangeScan)

  • 3D Velodyne scans (mrpt::obs::CObservationVelodyneScan)

  • 3D RGBD camera images (mrpt::obs::CObservation3DRangeScan)

  • Generic 2D/3D point clouds (mrpt::obs::CObservationPointCloud)

  • Generic multi-beam rotating (or flash) Lidars (mrpt::obs::CObservationRotatingScan)

Derived classes may implement all or only one of those methods. An exception NotImplementedError will be thrown if an non-implemented method is called.

process() is not required to be thread (multientry) safe.

A set of generators can be loaded from a YAML file and applied together using mp2p_icp_filters::apply_generators().

#include <Generator.h>

class Generator:
    public mrpt::rtti::CObject,
    public mrpt::system::COutputLogger,
    public mp2p_icp::Parameterizable
{
public:
    // structs

    struct Parameters;

    // methods

    virtual void initialize(const mrpt::containers::yaml& cfg_block);

    virtual void process(
        const mrpt::obs::CObservation& input_raw,
        mp2p_icp::metric_map_t& inOut,
        const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt
        ) const;
};

// direct descendants

class GeneratorEdgesFromCurvature;
class GeneratorEdgesFromRangeImage;

Methods

virtual void initialize(const mrpt::containers::yaml& cfg_block)

Loads, from a YAML configuration block, all the common, and implementation-specific parameters. If you redefine this method, remember calling this method on the parent class.

virtual void process(
    const mrpt::obs::CObservation& input_raw,
    mp2p_icp::metric_map_t& inOut,
    const std::optional<mrpt::poses::CPose3D>& robotPose = std::nullopt
    ) const

See docs above for Generator. This method dispatches the observation by type to the corresponding virtual method