Template Class CICPCriteriaNRD

Nested Relationships

Nested Types

Inheritance Relationships

Base Types

Class Documentation

template<class GRAPH_T>
class CICPCriteriaNRD : public virtual mrpt::graphslam::deciders::CNodeRegistrationDecider<GRAPH_T>, public mrpt::graphslam::deciders::CRangeScanOps<GRAPH_T>

ICP-based Fixed Intervals Node Registration.

Unnamed Group

using constraint_t = typename GRAPH_T::constraint_t

Handy typedefs.

type of graph constraints

using pose_t = typename GRAPH_T::constraint_t::type_value

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

using global_pose_t = typename GRAPH_T::global_pose_t
using InfMat = mrpt::math::CMatrixFixed<double, constraint_t::state_length, constraint_t::state_length>
using range_ops_t = mrpt::graphslam::deciders::CRangeScanOps<GRAPH_T>

Typedef for accessing methods of the RangeScanRegistrationDecider parent class.

using decider_t = CICPCriteriaNRD<GRAPH_T>

self type

using parent_t = mrpt::graphslam::deciders::CNodeRegistrationDecider<GRAPH_T>

Node Registration Decider.

Unnamed Group

mrpt::obs::CObservation2DRangeScan::Ptr m_last_laser_scan2D

handy laser scans to use in the class methods

2D LaserScan corresponding to the latest registered node in the graph

mrpt::obs::CObservation2DRangeScan::Ptr m_curr_laser_scan2D

Current LaserScan. Set during the new measurements acquisition in updateState method.

mrpt::obs::CObservation3DRangeScan::Ptr m_last_laser_scan3D
mrpt::obs::CObservation3DRangeScan::Ptr m_curr_laser_scan3D

Public Functions

CICPCriteriaNRD()
~CICPCriteriaNRD() override = default
virtual void loadParams(const std::string &source_fname) override

Load the necessary for the decider/optimizer configuration parameters.

virtual void printParams() const override

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 override

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) override

Update the decider state using the latest dataset measurements.

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

Note

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

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

Public Members

TParams params

Protected Functions

virtual bool checkRegistrationCondition() override

Check whether a new node should be registered in the graph.

This should be the key-method in any implementation of this interface. Should call registerNewNodeAtEnd method if the registration condition is satisfied.

Returns:

True upon successful node registration in the graph

bool checkRegistrationCondition2D()

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

bool checkRegistrationCondition3D()

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

Protected Attributes

bool m_is_using_3DScan
constraint_t m_latest_odometry_PDF

Odometry rigid-body transformation since the last accepted LaserScan.

Decider can use it to smoothen the trajectory in the case of high noise in the laser measurements

pose_t m_curr_odometry_only_pose

pose_t estimation using only odometry information.

Note

Utilized only in observation-only rawlogs.

pose_t m_last_odometry_only_pose

pose_t estimation using only odometry information.

Resets next time an ICP edge/Odometry measurement is utilized for updating the estimated robot position.

Note

Utilized only in observation-only rawlogs.

TSlidingWindow m_mahal_distance_ICP_odom

Keeps track of the last N measurements between the ICP edge and the corresponding odometry measurements.

Use the last odometry rigid body transformation instead of the ICP edge if the mahalanobis distance between them is greater than this limit.

bool m_use_angle_difference_node_reg
bool m_use_distance_node_reg
int m_times_used_ICP

How many times we used the ICP Edge instead of Odometry edge

int m_times_used_odom

How many times we used the Odometry Edge instead of the ICP edge

struct TParams : public mrpt::config::CLoadableOptions

Public Functions

TParams(decider_t &d)
~TParams() override = default
virtual void loadFromConfigFile(const mrpt::config::CConfigFileBase &source, const std::string &section) override
virtual void dumpToTextStream(std::ostream &out) const override

Public Members

decider_t &decider

Reference to outer decider class

double registration_max_distance

Maximum distance for new node registration

double registration_max_angle

Maximum angle difference for new node registration