[mrpt_slam]

Overview

SLAM and PF-localization algorithms

Library mrpt_slam

This library is part of MRPT and can be installed in Debian-based systems with:

sudo apt install libmrpt-slam-dev

Read also how to import MRPT into your CMake scripts.

mrpt_slam provides SLAM and probabilistic localization algorithms:

Localization

Metric-map-based SLAM

Landmark-based (EKF) SLAM

Multi-metric maps

  • mrpt::maps::CMultiMetricMap : Contains an arbitrary combination of metric maps (occupancy grids, point clouds, landmark maps, etc.) updated simultaneously.

Data association

The data_association.h header provides both NN and JCBB algorithms as generic templates — suitable for any measurement/landmark combination.

See also: For Graph-SLAM, see the namespace mrpt::graphslam in mrpt_graphslam.

Library contents

// typedefs

typedef std::function<double(const map_keyframe_t&kf1, const map_keyframe_t&kf2, const mrpt::poses::CPose3D&relPose2wrt1)> mrpt::slam::similarity_func_t;

// enums

enum mrpt::slam::TICPCovarianceMethod;
enum mrpt::slam::similarity_method_t;

// structs

struct mrpt::maps::CLandmark;
struct mrpt::slam::TMetricMapAlignmentResult;
struct mrpt::slam::TMonteCarloLocalizationParams;
struct mrpt::slam::TPathFromRTKInfo;
struct mrpt::slam::map_keyframe_t;

// classes

class mrpt::slam::CICP;
class mrpt::slam::CIncrementalMapPartitioner;
class mrpt::maps::CLandmarksMap;
class mrpt::slam::CMetricMapsAlignmentAlgorithm;
class mrpt::slam::CMonteCarloLocalization2D;
class mrpt::slam::CMonteCarloLocalization3D;
class mrpt::maps::CRBPFParticleData;
class mrpt::slam::CRejectionSamplingRangeOnlyLocalization;

template <
    class PARTICLE_TYPE,
    class MYSELF,
    mrpt::bayes::particle_storage_mode STORAGE
    >
class mrpt::slam::PF_implementation;

class mrpt::slam::TKLDParams;

// global functions

double mrpt::slam::observationsOverlap(const mrpt::obs::CObservation* o1, const mrpt::obs::CObservation* o2, const mrpt::poses::CPose3D* pose_o2_wrt_o1 = nullptr);
double mrpt::slam::observationsOverlap(const mrpt::obs::CObservation::Ptr& o1, const mrpt::obs::CObservation::Ptr& o2, const mrpt::poses::CPose3D* pose_o2_wrt_o1 = nullptr);
double mrpt::slam::observationsOverlap(const mrpt::obs::CSensoryFrame& sf1, const mrpt::obs::CSensoryFrame& sf2, const mrpt::poses::CPose3D* pose_sf2_wrt_sf1 = nullptr);
double mrpt::slam::observationsOverlap(const mrpt::obs::CSensoryFrame::Ptr& sf1, const mrpt::obs::CSensoryFrame::Ptr& sf2, const mrpt::poses::CPose3D* pose_sf2_wrt_sf1 = nullptr);

void mrpt::slam::path_from_rtk_gps(
    mrpt::poses::CPose3DInterpolator& robot_path,
    const mrpt::obs::CRawlog& rawlog,
    size_t rawlog_first,
    size_t rawlog_last,
    bool disableGPSInterp = false,
    int path_smooth_filter_size = 2,
    TPathFromRTKInfo* outInfo = nullptr
    );

void mrpt::slam::registerAllClasses_mrpt_slam();

Typedefs

typedef std::function<double(const map_keyframe_t&kf1, const map_keyframe_t&kf2, const mrpt::poses::CPose3D&relPose2wrt1)> mrpt::slam::similarity_func_t

Type of similarity evaluator for map keyframes.

For use in CIncrementalMapPartitioner <>

Global Functions

double mrpt::slam::observationsOverlap(
    const mrpt::obs::CObservation* o1,
    const mrpt::obs::CObservation* o2,
    const mrpt::poses::CPose3D* pose_o2_wrt_o1 = nullptr
    )

Estimates the “overlap” or “matching ratio” of two observations (range [0,1]), possibly taking into account their relative positions.

This is used in mrpt::slam::CIncrementalMapPartitioner

double mrpt::slam::observationsOverlap(
    const mrpt::obs::CObservation::Ptr& o1,
    const mrpt::obs::CObservation::Ptr& o2,
    const mrpt::poses::CPose3D* pose_o2_wrt_o1 = nullptr
    )

Estimates the “overlap” or “matching ratio” of two observations (range [0,1]), possibly taking into account their relative positions.

This is used in mrpt::slam::CIncrementalMapPartitioner

double mrpt::slam::observationsOverlap(
    const mrpt::obs::CSensoryFrame& sf1,
    const mrpt::obs::CSensoryFrame& sf2,
    const mrpt::poses::CPose3D* pose_sf2_wrt_sf1 = nullptr
    )

Estimates the “overlap” or “matching ratio” of two set of observations (range [0,1]), possibly taking into account their relative positions.

This method computes the average between each of the observations in each SF. This is used in mrpt::slam::CIncrementalMapPartitioner

double mrpt::slam::observationsOverlap(
    const mrpt::obs::CSensoryFrame::Ptr& sf1,
    const mrpt::obs::CSensoryFrame::Ptr& sf2,
    const mrpt::poses::CPose3D* pose_sf2_wrt_sf1 = nullptr
    )

Estimates the “overlap” or “matching ratio” of two set of observations (range [0,1]), possibly taking into account their relative positions.

This method computes the average between each of the observations in each SF. This is used in mrpt::slam::CIncrementalMapPartitioner

void mrpt::slam::path_from_rtk_gps(
    mrpt::poses::CPose3DInterpolator& robot_path,
    const mrpt::obs::CRawlog& rawlog,
    size_t rawlog_first,
    size_t rawlog_last,
    bool disableGPSInterp = false,
    int path_smooth_filter_size = 2,
    TPathFromRTKInfo* outInfo = nullptr
    )

Reconstruct the path of a vehicle equipped with 3 RTK GPSs.

For more details on the method, refer to the paper: (…)

Parameters:

robot_path

[OUT] The reconstructed vehicle path

rawlog

[IN] The dataset. It must contain mrpt::obs::CObservationGPS observations with GGA datums.

rawlog_first

[IN] The index of the first entry to process (first=0)

rawlog_last

[IN] The index of the last entry to process

disableGPSInterp

[IN] Whether to interpolate missing GPS readings between very close datums.

path_smooth_filter_size

[IN] Size of the window in the pitch & roll noise filtering.

outInfo

[OUT] Optional output: additional information from the optimization

See also:

mrpt::topography

void mrpt::slam::registerAllClasses_mrpt_slam()

Forces manual RTTI registration of all serializable classes in this namespace.

Should never be required to be explicitly called by users, except if building MRPT as a static library.