Several implementations of ICP (Iterative closest point) algorithms for aligning two point maps or a point map wrt a grid map.
CICP::AlignPDF() or CICP::Align() are the two main entry points of the algorithm.
To choose among existing ICP algorithms or customizing their parameters, see CICP::TConfigParams and the member options.
There exists an extension of the original ICP algorithm that provides multihypotheses-support for the correspondences, and which generates a Sum-of-Gaussians (SOG) PDF as output. See mrpt::tfest::se2_l2_robust()
For further details on the implemented methods, check the web: http://www.mrpt.org/Iterative_Closest_Point_(ICP)_and_other_matching_algorithms
For a paper explaining some of the basic equations, see for example: J. Martinez, J. Gonzalez, J. Morales, A. Mandow, A. Garcia-Cerezo, "Mobile robot motion estimation by 2D scan matching with genetic and iterative closest point algorithms", Journal of Field Robotics, vol. 23, no. 1, pp. 21-34, 2006. ( http://babel.isa.uma.es/~jlblanco/papers/martinez2006gil.pdf )
#include <mrpt/slam/CICP.h>
Classes | |
class | TConfigParams |
The ICP algorithm configuration data. More... | |
struct | TReturnInfo |
The ICP algorithm return information. More... | |
Public Member Functions | |
CICP () | |
Constructor with the default options. More... | |
CICP (const TConfigParams &icpParams) | |
Constructor that directly set the ICP params from a given struct. More... | |
virtual | ~CICP () |
Destructor. More... | |
mrpt::poses::CPosePDFPtr | AlignPDF (const mrpt::maps::CMetricMap *m1, const mrpt::maps::CMetricMap *m2, const mrpt::poses::CPosePDFGaussian &initialEstimationPDF, float *runningTime=NULL, void *info=NULL) |
An implementation of CMetricMapsAlignmentAlgorithm for the case of a point maps and a occupancy grid/point map. More... | |
mrpt::poses::CPose3DPDFPtr | Align3DPDF (const mrpt::maps::CMetricMap *m1, const mrpt::maps::CMetricMap *m2, const mrpt::poses::CPose3DPDFGaussian &initialEstimationPDF, float *runningTime=NULL, void *info=NULL) |
The virtual method for aligning a pair of metric maps, aligning the full 6D pose. More... | |
mrpt::poses::CPosePDFPtr | Align (const mrpt::maps::CMetricMap *m1, const mrpt::maps::CMetricMap *m2, const mrpt::poses::CPose2D &grossEst, float *runningTime=NULL, void *info=NULL) |
The method for aligning a pair of metric maps, aligning only 2D + orientation. More... | |
mrpt::poses::CPose3DPDFPtr | Align3D (const mrpt::maps::CMetricMap *m1, const mrpt::maps::CMetricMap *m2, const mrpt::poses::CPose3D &grossEst, float *runningTime=NULL, void *info=NULL) |
The method for aligning a pair of metric maps, aligning the full 6D pose. More... | |
Public Attributes | |
TConfigParams | options |
The options employed by the ICP align. More... | |
Protected Member Functions | |
float | kernel (const float &x2, const float &rho2) |
Computes:
or just return the input if options.useKernel = false. More... | |
mrpt::poses::CPosePDFPtr | ICP_Method_Classic (const mrpt::maps::CMetricMap *m1, const mrpt::maps::CMetricMap *m2, const mrpt::poses::CPosePDFGaussian &initialEstimationPDF, TReturnInfo &outInfo) |
mrpt::poses::CPosePDFPtr | ICP_Method_LM (const mrpt::maps::CMetricMap *m1, const mrpt::maps::CMetricMap *m2, const mrpt::poses::CPosePDFGaussian &initialEstimationPDF, TReturnInfo &outInfo) |
mrpt::poses::CPose3DPDFPtr | ICP3D_Method_Classic (const mrpt::maps::CMetricMap *m1, const mrpt::maps::CMetricMap *m2, const mrpt::poses::CPose3DPDFGaussian &initialEstimationPDF, TReturnInfo &outInfo) |
|
inline |
|
inline |
|
inlinevirtual |
|
inherited |
The method for aligning a pair of metric maps, aligning only 2D + orientation.
The meaning of some parameters and the kind of the maps to be aligned are implementation dependant, so look into the derived classes for instructions. The target is to find a PDF for the pose displacement between maps, thus the pose of m2 relative to m1. This pose is returned as a PDF rather than a single value.
m1 | [IN] The first map |
m2 | [IN] The second map. The pose of this map respect to m1 is to be estimated. |
grossEst | [IN] An initial gross estimation for the displacement. If a given algorithm doesn't need it, set to CPose2D(0,0,0) for example. |
runningTime | [OUT] A pointer to a container for obtaining the algorithm running time in seconds, or NULL if you don't need it. |
info | [OUT] See derived classes for details, or NULL if it isn't needed. |
Definition at line 26 of file CMetricMapsAlignmentAlgorithm.cpp.
References info.
Referenced by ICPTests::align2scans(), mrpt::slam::CGridMapAligner::AlignPDF_robustMatch(), mrpt::hmtslam::CTopLCDetector_GridMatching::computeTopologicalObservationModel(), mrpt::maps::CMultiMetricMapPDF::prediction_and_update_pfOptimalProposal(), mrpt::hmtslam::CLSLAM_RBPF_2DLASER::prediction_and_update_pfOptimalProposal(), and mrpt::slam::CMetricMapBuilderICP::processObservation().
|
inherited |
The method for aligning a pair of metric maps, aligning the full 6D pose.
The meaning of some parameters and the kind of the maps to be aligned are implementation dependant, so look into the derived classes for instructions. The target is to find a PDF for the pose displacement between maps, thus the pose of m2 relative to m1. This pose is returned as a PDF rather than a single value.
m1 | [IN] The first map |
m2 | [IN] The second map. The pose of this map respect to m1 is to be estimated. |
grossEst | [IN] An initial gross estimation for the displacement. If a given algorithm doesn't need it, set to CPose3D(0,0,0) for example. |
runningTime | [OUT] A pointer to a container for obtaining the algorithm running time in seconds, or NULL if you don't need it. |
info | [OUT] See derived classes for details, or NULL if it isn't needed. |
Definition at line 40 of file CMetricMapsAlignmentAlgorithm.cpp.
References info, and mrpt::poses::CPose3DPDFGaussian::mean.
Referenced by TEST_F().
|
virtual |
The virtual method for aligning a pair of metric maps, aligning the full 6D pose.
The meaning of some parameters are implementation dependant, so look at the derived classes for more details. The goal is to find a PDF for the pose displacement between maps, that is, the pose of m2 relative to m1. This pose is returned as a PDF rather than a single value.
m1 | [IN] The first map (MUST BE A COccupancyGridMap2D derived class) |
m2 | [IN] The second map. (MUST BE A CPointsMap derived class) The pose of this map respect to m1 is to be estimated. |
initialEstimationPDF | [IN] An initial gross estimation for the displacement. |
runningTime | [OUT] A pointer to a container for obtaining the algorithm running time in seconds, or NULL if you don't need it. |
info | [OUT] See derived classes for details, or NULL if it isn't needed. \return A smart pointer to the output estimated pose PDF. \sa CICP |
Implements mrpt::slam::CMetricMapsAlignmentAlgorithm.
Definition at line 893 of file CICP.cpp.
References ICP3D_Method_Classic(), mrpt::slam::CICP::TConfigParams::ICP_algorithm, mrpt::slam::icpClassic, mrpt::slam::icpLevenbergMarquardt, info, MRPT_END, MRPT_START, MRPT_TODO, options, THROW_EXCEPTION, and THROW_EXCEPTION_FMT.
|
virtual |
An implementation of CMetricMapsAlignmentAlgorithm for the case of a point maps and a occupancy grid/point map.
This method computes the PDF of the displacement (relative pose) between two maps: the relative pose of m2 with respect to m1. This pose is returned as a PDF rather than a single value.
m1 | [IN] The first map (CAN BE A mrpt::poses::CPointsMap derived class or a mrpt::slam::COccupancyGrid2D class) |
m2 | [IN] The second map. (MUST BE A mrpt::poses::CPointsMap derived class)The pose of this map respect to m1 is to be estimated. |
initialEstimationPDF | [IN] An initial gross estimation for the displacement. |
runningTime | [OUT] A pointer to a container for obtaining the algorithm running time in seconds, or NULL if you don't need it. |
info | [OUT] A pointer to a CICP::TReturnInfo, or NULL if it isn't needed. |
Implements mrpt::slam::CMetricMapsAlignmentAlgorithm.
Definition at line 52 of file CICP.cpp.
References mrpt::slam::icpClassic, mrpt::slam::icpLevenbergMarquardt, info, MRPT_END, MRPT_START, and THROW_EXCEPTION_FMT.
|
protected |
Definition at line 936 of file CICP.cpp.
References mrpt::slam::CICP::TConfigParams::ALFA, mrpt::maps::TMatchingParams::angularDistPivotPoint, ASSERT_, CLASS_ID, mrpt::maps::TMatchingExtraResults::correspondencesRatio, mrpt::slam::CICP::TConfigParams::corresponding_points_decimation, mrpt::maps::TMatchingParams::decimation_other_map_points, mrpt::utils::TRuntimeClassId::derivedFrom(), mrpt::maps::CMetricMap::determineMatching3D(), mrpt::maps::CMetricMap::GetRuntimeClass(), mrpt::slam::CICP::TReturnInfo::goodness, mrpt::maps::TMatchingParams::maxAngularDistForCorrespondence, mrpt::maps::TMatchingParams::maxDistForCorrespondence, mrpt::slam::CICP::TConfigParams::maxIterations, mrpt::poses::CPose3DPDFGaussian::mean, mrpt::slam::CICP::TConfigParams::minAbsStep_rot, mrpt::slam::CICP::TConfigParams::minAbsStep_trans, MRPT_END, MRPT_START, mrpt::slam::CICP::TReturnInfo::nIterations, mrpt::maps::TMatchingParams::offset_other_map_points, mrpt::slam::CICP::TConfigParams::onlyClosestCorrespondences, mrpt::maps::TMatchingParams::onlyKeepTheClosest, mrpt::maps::TMatchingParams::onlyUniqueRobust, mrpt::slam::CICP::TConfigParams::onlyUniqueRobust, options, mrpt::poses::CPose3D::pitch(), mrpt::slam::CICP::TReturnInfo::quality, mrpt::poses::CPose3D::roll(), mrpt::tfest::se3_l2(), mrpt::slam::CICP::TConfigParams::skip_cov_calculation, mrpt::slam::CICP::TConfigParams::smallestThresholdDist, mrpt::slam::CICP::TConfigParams::thresholdAng, mrpt::slam::CICP::TConfigParams::thresholdDist, mrpt::math::wrapToPi(), mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::x(), mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::y(), and mrpt::poses::CPose3D::yaw().
Referenced by Align3DPDF().
|
protected |
Definition at line 227 of file CICP.cpp.
References mrpt::slam::CICP::TConfigParams::ALFA, mrpt::maps::TMatchingParams::angularDistPivotPoint, ASSERT_, mrpt::maps::TMatchingExtraResults::correspondencesRatio, mrpt::slam::CICP::TConfigParams::corresponding_points_decimation, mrpt::slam::CICP::TConfigParams::covariance_varPoints, mrpt::maps::TMatchingParams::decimation_other_map_points, mrpt::maps::CMetricMap::determineMatching2D(), mrpt::slam::CICP::TConfigParams::doRANSAC, mrpt::slam::CICP::TReturnInfo::goodness, mrpt::slam::CICP::TConfigParams::ICP_covariance_method, mrpt::slam::icpCovFiniteDifferences, mrpt::slam::icpCovLinealMSE, mrpt::maps::CMetricMap::isEmpty(), kernel(), mrpt::slam::CICP::TConfigParams::kernel_rho, mrpt::maps::TMatchingParams::maxAngularDistForCorrespondence, mrpt::maps::TMatchingParams::maxDistForCorrespondence, mrpt::slam::CICP::TConfigParams::maxIterations, mrpt::poses::CPosePDFGaussian::mean, mrpt::slam::CICP::TConfigParams::minAbsStep_rot, mrpt::slam::CICP::TConfigParams::minAbsStep_trans, MRPT_END, MRPT_START, mrpt::slam::CICP::TReturnInfo::nIterations, mrpt::slam::CICP::TConfigParams::normalizationStd, mrpt::maps::TMatchingParams::offset_other_map_points, mrpt::slam::CICP::TConfigParams::onlyClosestCorrespondences, mrpt::maps::TMatchingParams::onlyKeepTheClosest, mrpt::maps::TMatchingParams::onlyUniqueRobust, mrpt::slam::CICP::TConfigParams::onlyUniqueRobust, options, mrpt::poses::CPose2D::phi(), mrpt::math::TPose2D::phi, mrpt::slam::CICP::TReturnInfo::quality, mrpt::slam::CICP::TConfigParams::ransac_fuseByCorrsMatch, mrpt::slam::CICP::TConfigParams::ransac_fuseMaxDiffPhi, mrpt::slam::CICP::TConfigParams::ransac_fuseMaxDiffXY, mrpt::slam::CICP::TConfigParams::ransac_mahalanobisDistanceThreshold, mrpt::slam::CICP::TConfigParams::ransac_maxSetSize, mrpt::slam::CICP::TConfigParams::ransac_minSetSize, mrpt::slam::CICP::TConfigParams::ransac_nSimulations, mrpt::tfest::se2_l2(), mrpt::tfest::se2_l2_robust(), mrpt::slam::CICP::TConfigParams::skip_cov_calculation, mrpt::slam::CICP::TConfigParams::skip_quality_calculation, mrpt::slam::CICP::TConfigParams::smallestThresholdDist, mrpt::math::square(), mrpt::slam::CICP::TConfigParams::thresholdAng, mrpt::slam::CICP::TConfigParams::thresholdDist, THROW_EXCEPTION_FMT, mrpt::tfest::TSE2RobustResult::transformation, mrpt::math::wrapToPi(), mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::x(), mrpt::math::TPose2D::x, mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::x_incr(), mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::y(), mrpt::math::TPose2D::y, and mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::y_incr().
|
protected |
Definition at line 555 of file CICP.cpp.
References mrpt::slam::CICP::TConfigParams::ALFA, mrpt::maps::TMatchingParams::angularDistPivotPoint, ASSERT_, mrpt::slam::CICP::TConfigParams::Axy_aprox_derivatives, CLASS_ID, mrpt::math::closestSquareDistanceFromPointToLine(), mrpt::maps::TMatchingExtraResults::correspondencesRatio, mrpt::slam::CICP::TConfigParams::corresponding_points_decimation, mrpt::maps::TMatchingParams::decimation_other_map_points, mrpt::utils::TRuntimeClassId::derivedFrom(), mrpt::maps::CMetricMap::GetRuntimeClass(), mrpt::slam::CICP::TReturnInfo::goodness, mrpt::maps::CMetricMap::isEmpty(), kernel(), mrpt::slam::CICP::TConfigParams::kernel_rho, mrpt::slam::CICP::TConfigParams::LM_initial_lambda, mrpt::maps::TMatchingParams::maxAngularDistForCorrespondence, mrpt::maps::TMatchingParams::maxDistForCorrespondence, mrpt::slam::CICP::TConfigParams::maxIterations, mrpt::poses::CPosePDFGaussian::mean, mrpt::slam::CICP::TConfigParams::minAbsStep_rot, mrpt::slam::CICP::TConfigParams::minAbsStep_trans, MRPT_END, MRPT_START, mrpt::slam::CICP::TReturnInfo::nIterations, mrpt::maps::TMatchingParams::offset_other_map_points, mrpt::slam::CICP::TConfigParams::onlyClosestCorrespondences, mrpt::maps::TMatchingParams::onlyKeepTheClosest, mrpt::maps::TMatchingParams::onlyUniqueRobust, mrpt::slam::CICP::TConfigParams::onlyUniqueRobust, mrpt::utils::operator<<(), options, mrpt::system::pause(), mrpt::poses::CPose2D::phi(), mrpt::slam::CICP::TReturnInfo::quality, mrpt::slam::CICP::TConfigParams::smallestThresholdDist, mrpt::math::square(), mrpt::utils::TMatchingPairList::squareErrorVector(), mrpt::math::sum(), mrpt::slam::CICP::TConfigParams::thresholdAng, mrpt::slam::CICP::TConfigParams::thresholdDist, mrpt::math::wrapToPi(), mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::x(), and mrpt::poses::CPoseOrPoint< DERIVEDCLASS >::y().
|
protected |
Computes:
or just return the input if options.useKernel = false.
Definition at line 217 of file CICP.cpp.
References options, and mrpt::slam::CICP::TConfigParams::use_kernel.
Referenced by ICP_Method_Classic(), and ICP_Method_LM().
TConfigParams mrpt::slam::CICP::options |
The options employed by the ICP align.
Definition at line 119 of file CICP.h.
Referenced by ICPTests::align2scans(), Align3DPDF(), mrpt::slam::CGridMapAligner::AlignPDF_robustMatch(), ICP3D_Method_Classic(), ICP_Method_Classic(), ICP_Method_LM(), kernel(), mrpt::hmtslam::CLSLAM_RBPF_2DLASER::prediction_and_update_pfOptimalProposal(), mrpt::slam::CMetricMapBuilderICP::processObservation(), and TEST_F().
Page generated by Doxygen 1.8.14 for MRPT 1.5.9 Git: 690a4699f Wed Apr 15 19:29:53 2020 +0200 at miƩ abr 15 19:30:12 CEST 2020 |