findPose
Syntax
Description
Map Building
finds the absolute pose of the last added view that aligns the segment matches
of the detected loop closure. The function looks for segment matches between the
last added view and the segment features inside the submap specified by the
absPoseMap = findPose(sMap,refPose)SelectedSubmap property of
sMap.
[
returns the view identifier for the view that contains the most inliers. Use
absPoseMap,matchViewId] = findPose(sMap,refPose)matchViewId to add the loop closure as a connection in
a pcviewset, using the addConnection object function. Correct for accumulated drift
using optimizePoses.
Localization
finds the absolute pose that aligns the segments that correspond to the current
features absPoseMap = findPose(sMap,currentFeatures)currentFeatures to the segments in the submap
specified by the SelectedSubmap property of
sMap.
specifies the segments absPoseMap = findPose(sMap,currentFeatures,currentSegments)currentSegments that correspond to
the current features currentFeatures.
Visualization
[___,
returns the inlier features inlierFeatures,inlierSegments] = findPose(___)inlierFeatures and inlier
segments inlierSegments in addition to any combination of
arguments from previous syntaxes.
Optional Name-Value Arguments
[___] = findPose(___,
specifies options using one or more name-value arguments in addition to the
input arguments in previous syntaxes. For example,
Name,Value)'MaxThreshold',1.5 sets the matching threshold to
1.5 percent.
Examples
Input Arguments
Name-Value Arguments
Output Arguments
Tips
Removing the segments from the map using
deleteSegments, before using thefindPosefunction, can improve performance.
Algorithms
findPose finds the absolute pose of a segmented point cloud
using the SegMatch [1] algorithm for place
recognition. It uses the Euclidean distance between segment features to find segment
matches. The function finds the matches between the segments of interest and the
segments in the map, and returns the absolute pose that aligns the segment matches in
the map.
Map Building: Loop Closure Detection — Loop closure starts with finding the absolute pose by finding the segment matches between the last added view and the segment features in the selected submap, which is specified by the
SelectedSubmapproperty of the map.The last added view corresponds to a loop closure when the
findPosefunction can estimate a valid geometric transformation. If the function cannot estimate this transformation, then the function returns an empty value forabsPoseMap.Map Building: Correct Drift — To correct for drift, add the view that contains the most inliers for loop closure as a connection to the point cloud view set
pcviewsetobject as a connection using theaddConnectionobject function. Use theoptimizePosesfunction to correct for accumulated drift.Localization — To find the absolute pose of the point cloud in the map, the function looks for segment matches between the current features
currentFeaturesand the submap specified by theSelectedSubmapproperty ofsMap. If it cannot estimate a valid geometric transformation cannot be estimated, the function returns an empty value for theabsPoseMapoutput argument.Visualization — Use the
inlierFeaturesandinlierSegmentsoutput arguments with thepcshowMatchedFeaturesfunction to visualize the segment matches between the features and segments included in the map.
References
[1] Dube, Renaud, Daniel Dugas, Elena Stumm, Juan Nieto, Roland Siegwart, and Cesar Cadena. “SegMatch: Segment Based Place Recognition in 3D Point Clouds.” In 2017 IEEE International Conference on Robotics and Automation (ICRA), 5266–72. Singapore, Singapore: IEEE, 2017. https://doi.org/10.1109/ICRA.2017.7989618.

