[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
mrpt::slam::CMonteCarloLocalization2D : Particle filter (Monte Carlo) localization for a robot in a planar scenario.
mrpt::slam::CMonteCarloLocalization3D : 3D particle-filter localization.
Metric-map-based SLAM
mrpt::slam::CMetricMapBuilder : Virtual base for ICP and RBPF-based SLAM.
mrpt::slam::CMetricMapBuilderICP : Incremental ICP-based mapping.
mrpt::slam::CMetricMapBuilderRBPF : Rao-Blackwellized Particle Filter SLAM.
Landmark-based (EKF) SLAM
mrpt::slam::CRangeBearingKFSLAM : Range-bearing EKF SLAM in 3D.
mrpt::slam::CRangeBearingKFSLAM2D : Range-bearing EKF SLAM in 2D.
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:
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.