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
Output Arguments
Tips
Removing the segments from the map using
deleteSegments
, before using thefindPose
function, 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
SelectedSubmap
property of the map.The last added view corresponds to a loop closure when the
findPose
function 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
pcviewset
object as a connection using theaddConnection
object function. Use theoptimizePoses
function 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
currentFeatures
and the submap specified by theSelectedSubmap
property ofsMap
. If it cannot estimate a valid geometric transformation cannot be estimated, the function returns an empty value for theabsPoseMap
output argument.Visualization — Use the
inlierFeatures
andinlierSegments
output arguments with thepcshowMatchedFeatures
function 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.