template class mrpt::graphslam::deciders::CICPCriteriaNRD

ICP-based Fixed Intervals Node Registration.

Current Decider is meant for adding nodes in 2D datasets recorded using a laser range finder or RGB-D camera (e.g. Kinect). No odometry data from encoders is needed. Using ICP to match consecutive RangeScan measurements, the decider keeps track of the pose transformation since the last registered node. If the norm or the angle of the latter surpasses certain thresholds (which are read from an external .ini file) then a new node is added to the graph) Decider does not guarantee thread safety when accessing the GRAPH_T resource. This is handled by the CGraphSlamEngine class.

  • Map type: 2D

  • MRPT rawlog format: #1, #2

  • Graph Type: CPosePDFGaussianInf

  • Observations Used: CObservation2DRangeScan, CObservation3DRangeScan

  • Node Registration Strategy: Fixed Intervals

  • class_verbosity

  • registration_max_distance

    • Section : NodeRegistrationDeciderParameters

    • Default value : 0.5 // meters

    • Required : FALSE

  • registration_max_angle

    • Section : NodeRegistrationDeciderParameters

    • Default value : 10 // degrees

    • Required : FALSE

Since the decider inherits from the CRangeScanOps class, it parses the configuration parameters of the latter as well from the “ICP” section. Refer to the CRangeScanOps documentation for its list of configuration parameters

Class contains an instance of the TSlidingWindow class and it parses the configuration parameters of the latter from the “NodeRegistrationDeciderParameters” section. Refer to TSlidingWindow documentation for its list of configuration parameters

See also:

loadParams, TParams::loadFromConfigFile

#include <mrpt/graphslam/NRD/CICPCriteriaNRD.h>

template <class GRAPH_T>
class CICPCriteriaNRD:
    public mrpt::graphslam::deciders::CNodeRegistrationDecider,
    public mrpt::graphslam::deciders::CRangeScanOps
{
public:
    // typedefs

    typedef typename GRAPH_T::constraint_t constraint_t;
    typedef typename GRAPH_T::constraint_t::type_value pose_t;
    typedef typename GRAPH_T::global_pose_t global_pose_t;
    typedef mrpt::math::CMatrixFixed<double, constraint_t::state_length, constraint_t::state_length> InfMat;
    typedef mrpt::graphslam::deciders::CRangeScanOps<GRAPH_T> range_ops_t;
    typedef CICPCriteriaNRD<GRAPH_T> decider_t;
    typedef mrpt::graphslam::deciders::CNodeRegistrationDecider<GRAPH_T> parent_t;

    // structs

    struct TParams;

    //
fields

    TParams params;

    //
methods

    virtual void loadParams(const std::string& source_fname);
    virtual void printParams() const;
    virtual void getDescriptiveReport(std::string* report_str) const;
    virtual bool updateState(mrpt::obs::CActionCollection::Ptr action, mrpt::obs::CSensoryFrame::Ptr observations, mrpt::obs::CObservation::Ptr observation);
    bool updateState2D(mrpt::obs::CObservation2DRangeScan::Ptr observation);
    bool updateState3D(mrpt::obs::CObservation3DRangeScan::Ptr observation);
};

Inherited Members

public:
    // typedefs

    typedef typename GRAPH_T::constraint_t::type_value pose_t;
    typedef typename GRAPH_T::global_pose_t global_pose_t;
    typedef mrpt::math::CMatrixFixed<double, constraint_t::state_length, constraint_t::state_length> inf_mat_t;

    // structs

    struct TMsg;
    struct TParams;

    //
methods

    virtual void setClassName(const std::string& name);
    bool isMultiRobotSlamClass();
    std::string getClassName() const;

Typedefs

typedef typename GRAPH_T::constraint_t constraint_t

Handy typedefs.

type of graph constraints

typedef typename GRAPH_T::constraint_t::type_value pose_t

type of underlying poses (2D/3D).

typedef mrpt::graphslam::deciders::CRangeScanOps<GRAPH_T> range_ops_t

Typedef for accessing methods of the RangeScanRegistrationDecider parent class.

typedef CICPCriteriaNRD<GRAPH_T> decider_t

self type

typedef mrpt::graphslam::deciders::CNodeRegistrationDecider<GRAPH_T> parent_t

Node Registration Decider.

Methods

virtual void loadParams(const std::string& source_fname)

Load the necessary for the decider/optimizer configuration parameters.

virtual void printParams() const

Print the problem parameters - relevant to the decider/optimizer to the screen in a unified/compact way.

virtual void getDescriptiveReport(std::string* report_str) const

Fill the provided string with a detailed report of the decider/optimizer state.

Report should include (part of) the following:

  • Timing of important methods

  • Properties fo class at the current time

  • Logging of commands until current time

virtual bool updateState(mrpt::obs::CActionCollection::Ptr action, mrpt::obs::CSensoryFrame::Ptr observations, mrpt::obs::CObservation::Ptr observation)

Update the decider state using the latest dataset measurements.

Depending on the observations at hand, update of the state is handled either by updateState2D, or by updateState3D methods. This helps in separating the 2D, 3D RangeScans handling altogether, which in turn simplifies the overall procedure

Order of calls: updateState (calls) ==> updateState2D/3D ==> checkRegistrationCondition2D/3D ==> CheckRegistrationCondition

See also:

updateState2D, updateState3D

bool updateState2D(mrpt::obs::CObservation2DRangeScan::Ptr observation)

Specialized updateState method used solely when dealing with 2DRangeScan information.

See also:

updateState3D

bool updateState3D(mrpt::obs::CObservation3DRangeScan::Ptr observation)

Specialized updateState method used solely when dealing with 3DRangeScan information.

See also:

updateState2D