Point Cloud Library (PCL)
1.11.1-dev
|
Globally Consistent Scan Matching based on an algorithm by Lu and Milios. More...
#include <pcl/registration/lum.h>
Classes | |
struct | EdgeProperties |
struct | VertexProperties |
Public Types | |
using | Ptr = shared_ptr< LUM< PointT > > |
using | ConstPtr = shared_ptr< const LUM< PointT > > |
using | PointCloud = pcl::PointCloud< PointT > |
using | PointCloudPtr = typename PointCloud::Ptr |
using | PointCloudConstPtr = typename PointCloud::ConstPtr |
using | SLAMGraph = boost::adjacency_list< boost::eigen_vecS, boost::eigen_vecS, boost::bidirectionalS, VertexProperties, EdgeProperties, boost::no_property, boost::eigen_listS > |
using | SLAMGraphPtr = shared_ptr< SLAMGraph > |
using | Vertex = typename SLAMGraph::vertex_descriptor |
using | Edge = typename SLAMGraph::edge_descriptor |
Public Member Functions | |
LUM () | |
Empty constructor. More... | |
void | setLoopGraph (const SLAMGraphPtr &slam_graph) |
Set the internal SLAM graph structure. More... | |
SLAMGraphPtr | getLoopGraph () const |
Get the internal SLAM graph structure. More... | |
SLAMGraph::vertices_size_type | getNumVertices () const |
Get the number of vertices in the SLAM graph. More... | |
void | setMaxIterations (int max_iterations) |
Set the maximum number of iterations for the compute() method. More... | |
int | getMaxIterations () const |
Get the maximum number of iterations for the compute() method. More... | |
void | setConvergenceThreshold (float convergence_threshold) |
Set the convergence threshold for the compute() method. More... | |
float | getConvergenceThreshold () const |
Get the convergence threshold for the compute() method. More... | |
Vertex | addPointCloud (const PointCloudPtr &cloud, const Eigen::Vector6f &pose=Eigen::Vector6f::Zero()) |
Add a new point cloud to the SLAM graph. More... | |
void | setPointCloud (const Vertex &vertex, const PointCloudPtr &cloud) |
Change a point cloud on one of the SLAM graph's vertices. More... | |
PointCloudPtr | getPointCloud (const Vertex &vertex) const |
Return a point cloud from one of the SLAM graph's vertices. More... | |
void | setPose (const Vertex &vertex, const Eigen::Vector6f &pose) |
Change a pose estimate on one of the SLAM graph's vertices. More... | |
Eigen::Vector6f | getPose (const Vertex &vertex) const |
Return a pose estimate from one of the SLAM graph's vertices. More... | |
Eigen::Affine3f | getTransformation (const Vertex &vertex) const |
Return a pose estimate from one of the SLAM graph's vertices as an affine transformation matrix. More... | |
void | setCorrespondences (const Vertex &source_vertex, const Vertex &target_vertex, const pcl::CorrespondencesPtr &corrs) |
Add/change a set of correspondences for one of the SLAM graph's edges. More... | |
pcl::CorrespondencesPtr | getCorrespondences (const Vertex &source_vertex, const Vertex &target_vertex) const |
Return a set of correspondences from one of the SLAM graph's edges. More... | |
void | compute () |
Perform LUM's globally consistent scan matching. More... | |
PointCloudPtr | getTransformedCloud (const Vertex &vertex) const |
Return a point cloud from one of the SLAM graph's vertices compounded onto its current pose estimate. More... | |
PointCloudPtr | getConcatenatedCloud () const |
Return a concatenated point cloud of all the SLAM graph's point clouds compounded onto their current pose estimates. More... | |
Protected Member Functions | |
void | computeEdge (const Edge &e) |
Linearized computation of C^-1 and C^-1*D (results stored in slam_graph_). More... | |
Eigen::Matrix6f | incidenceCorrection (const Eigen::Vector6f &pose) |
Returns a pose corrected 6DoF incidence matrix. More... | |
Globally Consistent Scan Matching based on an algorithm by Lu and Milios.
A GraphSLAM algorithm where registration data is managed in a graph:
Computation uses the first point cloud in the SLAM graph as a reference pose and attempts to align all other point clouds to it simultaneously. For more information:
Usage example:
using pcl::registration::LUM< PointT >::ConstPtr = shared_ptr<const LUM<PointT> > |
using pcl::registration::LUM< PointT >::Edge = typename SLAMGraph::edge_descriptor |
using pcl::registration::LUM< PointT >::PointCloud = pcl::PointCloud<PointT> |
using pcl::registration::LUM< PointT >::PointCloudConstPtr = typename PointCloud::ConstPtr |
using pcl::registration::LUM< PointT >::PointCloudPtr = typename PointCloud::Ptr |
using pcl::registration::LUM< PointT >::Ptr = shared_ptr<LUM<PointT> > |
using pcl::registration::LUM< PointT >::SLAMGraph = boost::adjacency_list<boost::eigen_vecS, boost::eigen_vecS, boost::bidirectionalS, VertexProperties, EdgeProperties, boost::no_property, boost::eigen_listS> |
using pcl::registration::LUM< PointT >::SLAMGraphPtr = shared_ptr<SLAMGraph> |
using pcl::registration::LUM< PointT >::Vertex = typename SLAMGraph::vertex_descriptor |
|
inline |
LUM< PointT >::Vertex pcl::registration::LUM< PointT >::addPointCloud | ( | const PointCloudPtr & | cloud, |
const Eigen::Vector6f & | pose = Eigen::Vector6f::Zero() |
||
) |
Add a new point cloud to the SLAM graph.
This method will add a new vertex to the SLAM graph and attach a point cloud to that vertex. Optionally you can specify a pose estimate for this point cloud. A vertex' pose is always relative to the first vertex in the SLAM graph, i.e. the first point cloud that was added. Because this first vertex is the reference, you can not set a pose estimate for this vertex. Providing pose estimates to the vertices in the SLAM graph will reduce overall computation time of LUM.
[in] | cloud | The new point cloud. |
[in] | pose | (optional) The pose estimate relative to the reference pose (first point cloud that was added). |
void pcl::registration::LUM< PointT >::compute |
Perform LUM's globally consistent scan matching.
Computation uses the first point cloud in the SLAM graph as a reference pose and attempts to align all other point clouds to it simultaneously.
Things to keep in mind:
Computation ends when either of the following conditions hold:
Computation will change the pose estimates for the vertices of the SLAM graph, not the point clouds attached to them. The results can be retrieved with getPose(), getTransformation(), getTransformedCloud() or getConcatenatedCloud().
Definition at line 221 of file lum.hpp.
References pcl::B.
|
protected |
Linearized computation of C^-1 and C^-1*D (results stored in slam_graph_).
Definition at line 308 of file lum.hpp.
References pcl::getTransformation().
LUM< PointT >::PointCloudPtr pcl::registration::LUM< PointT >::getConcatenatedCloud |
Return a concatenated point cloud of all the SLAM graph's point clouds compounded onto their current pose estimates.
Definition at line 294 of file lum.hpp.
References pcl::getTransformation(), and pcl::transformPointCloud().
|
inline |
Get the convergence threshold for the compute() method.
When the compute() method computes the new poses relative to the old poses, it will determine the length of the difference vector. When the average length of all difference vectors becomes less than the convergence_threshold the convergence is assumed to be met.
|
inline |
Return a set of correspondences from one of the SLAM graph's edges.
[in] | source_vertex | The vertex descriptor of the correspondences' source point cloud. |
[in] | target_vertex | The vertex descriptor of the correspondences' target point cloud. |
|
inline |
Get the internal SLAM graph structure.
All data used and produced by LUM is stored in this boost::adjacency_list. It is recommended to use the LUM class itself to build the graph. This method could otherwise be useful for managing several SLAM graphs in one instance of LUM.
|
inline |
LUM< PointT >::SLAMGraph::vertices_size_type pcl::registration::LUM< PointT >::getNumVertices |
|
inline |
|
inline |
|
inline |
Return a pose estimate from one of the SLAM graph's vertices as an affine transformation matrix.
[in] | vertex | The vertex descriptor of which to return the transformation matrix. |
Definition at line 171 of file lum.hpp.
References pcl::getTransformation().
LUM< PointT >::PointCloudPtr pcl::registration::LUM< PointT >::getTransformedCloud | ( | const Vertex & | vertex | ) | const |
Return a point cloud from one of the SLAM graph's vertices compounded onto its current pose estimate.
[in] | vertex | The vertex descriptor of which to return the transformed point cloud. |
Definition at line 285 of file lum.hpp.
References pcl::getTransformation(), and pcl::transformPointCloud().
|
inlineprotected |
void pcl::registration::LUM< PointT >::setConvergenceThreshold | ( | float | convergence_threshold | ) |
Set the convergence threshold for the compute() method.
When the compute() method computes the new poses relative to the old poses, it will determine the length of the difference vector. When the average length of all difference vectors becomes less than the convergence_threshold the convergence is assumed to be met.
[in] | convergence_threshold | The new convergence threshold (default = 0.0). |
void pcl::registration::LUM< PointT >::setCorrespondences | ( | const Vertex & | source_vertex, |
const Vertex & | target_vertex, | ||
const pcl::CorrespondencesPtr & | corrs | ||
) |
Add/change a set of correspondences for one of the SLAM graph's edges.
The edges in the SLAM graph are directional and point from source vertex to target vertex. The query indices of the correspondences, index the points at the source vertex' point cloud. The matching indices of the correspondences, index the points at the target vertex' point cloud. If no edge was present at the specified location, this method will add a new edge to the SLAM graph and attach the correspondences to that edge. If the edge was already present, this method will overwrite the correspondence information of that edge and will not alter the SLAM graph structure.
[in] | source_vertex | The vertex descriptor of the correspondences' source point cloud. |
[in] | target_vertex | The vertex descriptor of the correspondences' target point cloud. |
[in] | corrs | The new set of correspondences for that edge. |
|
inline |
Set the internal SLAM graph structure.
All data used and produced by LUM is stored in this boost::adjacency_list. It is recommended to use the LUM class itself to build the graph. This method could otherwise be useful for managing several SLAM graphs in one instance of LUM.
[in] | slam_graph | The new SLAM graph. |
void pcl::registration::LUM< PointT >::setMaxIterations | ( | int | max_iterations | ) |
|
inline |
Change a point cloud on one of the SLAM graph's vertices.
This method will change the point cloud attached to an existing vertex and will not alter the SLAM graph structure. Note that the correspondences attached to this vertex will not change and may need to be updated manually.
[in] | vertex | The vertex descriptor of which to change the point cloud. |
[in] | cloud | The new point cloud for that vertex. |
|
inline |
Change a pose estimate on one of the SLAM graph's vertices.
A vertex' pose is always relative to the first vertex in the SLAM graph, i.e. the first point cloud that was added. Because this first vertex is the reference, you can not set a pose estimate for this vertex. Providing pose estimates to the vertices in the SLAM graph will reduce overall computation time of LUM.
[in] | vertex | The vertex descriptor of which to set the pose estimate. |
[in] | pose | The new pose estimate for that vertex. |