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
Section : NodeRegistrationDeciderParameters
default value : 1 (mrpt::system::LVL_INFO)
Required : FALSE
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:
bool updateState2D(mrpt::obs::CObservation2DRangeScan::Ptr observation)
Specialized updateState method used solely when dealing with 2DRangeScan information.
See also:
bool updateState3D(mrpt::obs::CObservation3DRangeScan::Ptr observation)
Specialized updateState method used solely when dealing with 3DRangeScan information.
See also: