Возвращает матрицу инцидентности 6 степеней свободы, скорректированную по позе. Подробнее...
Подробное описание
шаблон<typename PointT> класс pcl::registration::LUM< PointT >
Глобальное согласованное соответствие сканов на основе алгоритма Лу и Милиоса.
Алгоритм GraphSLAM, в котором данные регистрации управляются в графе:
Узлы представляют позы и содержат данные облака точек и относительные преобразования.
Рёбра представляют ограничения позы и содержат данные соответствий между двумя облаками точек.
Вычисление использует первую точку облака точек в графе SLAM в качестве опорной позы и пытается одновременно выровнять все остальные облака точек относительно неё. Дополнительная информация:
F. Lu, E. Milios, Globally Consistent Range Scan Alignment for Environment Mapping, Autonomous Robots 4, April 1997
Dorit Borrmann, Jan Elseberg, Kai Lingemann, Andreas Nüchter, and Joachim Hertzberg, The Efficient Extension of Globally Consistent Scan Matching to 6 DoF, In Proceedings of the 4th International Symposium on 3D Data Processing, Visualization and Transmission (3DPVT '08), June 2008
Пример использования:
pcl::registration::LUM<pcl::PointXYZ> lum;
// Add point clouds as vertices to the SLAM graph
lum.addPointCloud (cloud_0);
lum.addPointCloud (cloud_1);
lum.addPointCloud (cloud_2);
// Use your favorite pairwise correspondence estimation algorithm(s)
corrs_0_to_1 = someAlgo (cloud_0, cloud_1);
corrs_1_to_2 = someAlgo (cloud_1, cloud_2);
corrs_2_to_0 = someAlgo (lum.getPointCloud (2), lum.getPointCloud (0));
// Add the correspondence results as edges to the SLAM graph
lum.setCorrespondences (0, 1, corrs_0_to_1);
lum.setCorrespondences (1, 2, corrs_1_to_2);
lum.setCorrespondences (2, 0, corrs_2_to_0);
// Change the computation parameters
lum.setMaxIterations (5);
lum.setConvergenceThreshold (0.0);
// Perform the actual LUM computation
lum.compute ();
// Return the concatenated point cloud result
cloud_out = lum.getConcatenatedCloud ();
// Return the separate point cloud transformations
for(int i = 0; i < lum.getNumVertices (); i++)
{
transforms_out[i] = lum.getTransformation (i);
}
pcl::registration::LUMGlobally Consistent Scan Matching based on an algorithm by Lu and Milios.Definition: lum.h:108
pcl::registration::LUM
Globally Consistent Scan Matching based on an algorithm by Lu and Milios.
Definition: lum.h:108
pcl::registration::LUM::computevoid compute()Perform LUM's globally consistent scan matching.Definition: lum.hpp:221
pcl::registration::LUM::compute
void compute()
Perform LUM's globally consistent scan matching.
Definition: lum.hpp:221
pcl::registration::LUM::getPointCloudPointCloudPtr getPointCloud(const Vertex &vertex) constReturn a point cloud from one of the SLAM graph's vertices.Definition: lum.hpp:130
pcl::registration::LUM::getPointCloud
PointCloudPtr getPointCloud(const Vertex &vertex) const
Return a point cloud from one of the SLAM graph's vertices.
Definition: lum.hpp:130
pcl::registration::LUM::getNumVerticesSLAMGraph::vertices_size_type getNumVertices() constGet the number of vertices in the SLAM graph.Definition: lum.hpp:66
pcl::registration::LUM::getNumVertices
SLAMGraph::vertices_size_type getNumVertices() const
Get the number of vertices in the SLAM graph.
Definition: lum.hpp:66
pcl::registration::LUM::setConvergenceThresholdvoid setConvergenceThreshold(float convergence_threshold)Set the convergence threshold for the compute() method.Definition: lum.hpp:87
pcl::registration::LUM::setConvergenceThreshold
void setConvergenceThreshold(float convergence_threshold)
Set the convergence threshold for the compute() method.
Definition: lum.hpp:87
pcl::registration::LUM::setMaxIterationsvoid setMaxIterations(int max_iterations)Set the maximum number of iterations for the compute() method.Definition: lum.hpp:73
pcl::registration::LUM::setMaxIterations
void setMaxIterations(int max_iterations)
Set the maximum number of iterations for the compute() method.
Definition: lum.hpp:73
pcl::registration::LUM::getConcatenatedCloudPointCloudPtr getConcatenatedCloud() constReturn a concatenated point cloud of all the SLAM graph's point clouds compounded onto their current ...Definition: lum.hpp:294
pcl::registration::LUM::getConcatenatedCloud
PointCloudPtr getConcatenatedCloud() const
Return a concatenated point cloud of all the SLAM graph's point clouds compounded onto their current ...
Definition: lum.hpp:294
pcl::registration::LUM::addPointCloudVertex addPointCloud(const PointCloudPtr &cloud, const Eigen::Vector6f &pose=Eigen::Vector6f::Zero())Add a new point cloud to the SLAM graph.Definition: lum.hpp:101
pcl::registration::LUM::addPointCloud
Vertex addPointCloud(const PointCloudPtr &cloud, const Eigen::Vector6f &pose=Eigen::Vector6f::Zero())
Add a new point cloud to the SLAM graph.
Definition: lum.hpp:101
pcl::registration::LUM::getTransformationEigen::Affine3f getTransformation(const Vertex &vertex) constReturn a pose estimate from one of the SLAM graph's vertices as an affine transformation matrix.Definition: lum.hpp:171
pcl::registration::LUM::getTransformation
Eigen::Affine3f getTransformation(const Vertex &vertex) const
Return a pose estimate from one of the SLAM graph's vertices as an affine transformation matrix.
Definition: lum.hpp:171
pcl::registration::LUM::setCorrespondencesvoid 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.Definition: lum.hpp:179
pcl::registration::LUM::setCorrespondences
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.
Definition: lum.hpp:179
Этот метод добавит новую вершину в граф SLAM и прикрепит к ней облако точек. По желанию, вы можете указать оценку позы для этого облака точек. Поза вершины всегда относительна к первой вершине в графе SLAM, то есть к первому облаку точек, которое было добавлено. Поскольку эта первая вершина является эталоном, вы не можете установить оценку позы для этой вершины. Предоставление оценок позы вершинам в графе SLAM уменьшит общее время вычисления LUM.
Примечание
Дескрипторы вершин могут быть преобразованы к типу int.
Параметры
[in]
cloud
Новое облако точек.
[in]
pose
(необязательно) Оценка позы, относительная к эталонной позе (первое облако точек, которое было добавлено).
Вычисления используют первое облако точек в графе SLAM в качестве эталонной позы и пытаются одновременно согласовать все остальные облака точек с ним. Важные моменты:
Только те части графа, которые соединены с эталонной позой, будут должным образом согласованы с ней.
Все наборы соответствий должны охватывать одно и то же пространство и должны быть достаточны для определения жесткого преобразования.
Алгоритм черпает свою силу из петель в графе, так как он будет равномерно распределять ошибки между этими петлями.
Вычисления завершаются, когда выполняются одно из следующих условий:
Количество итераций достигает max_iterations. Используйте setMaxIterations(), чтобы изменить это.
Когда метод compute() вычисляет новые положения относительно старых, он определяет длину вектора разницы. Когда средняя длина всех векторов разницы становится меньше порога сходимости, предполагается, что сходимость достигнута.
Все данные, используемые и производимые классом LUM, хранятся в этом boost::adjacency_list. Рекомендуется использовать сам класс LUM для построения графа. Этот метод может быть полезен для управления несколькими графами SLAM в одном экземпляре LUM.
Устанавливает порог сходимости для метода compute().
Когда метод compute() вычисляет новые позы относительно старых, он определяет длину вектора разницы. Когда средняя длина всех векторов разницы становится меньше порога сходимости, считается, что сходимость достигнута.
Добавить/изменить набор соответствий для одного из рёбер графа SLAM.
Рёбра в графе SLAM являются направленными и указывают от вершины-источника к вершине-цели. Индексы запросов соответствий индексируют точки в облаке точек вершины-источника. Соответствующие индексы соответствий индексируют точки в облаке точек вершины-цели. Если ребро не было присутствует в указанном месте, этот метод добавит новое ребро в граф SLAM и прикрепит соответствия к этому ребру. Если ребро уже присутствует, этот метод перезапишет информацию о соответствиях этого ребра и не изменит структуру графа SLAM.
Примечание
Дескрипторы вершин могут быть приводимы к типу int.
Все данные, используемые и производимые LUM, хранятся в этом boost::adjacency_list. Рекомендуется использовать сам класс LUM для построения графа. Этот метод может быть полезен для управления несколькими графами SLAM в одном экземпляре LUM.
Изменить облако точек на одной из вершин графа SLAM.
Этот метод изменит облако точек, прикреплённое к существующей вершине, и не изменит структуру графа SLAM. Обратите внимание, что соответствия, прикреплённые к этой вершине, не изменятся и могут потребовать ручного обновления.
Примечание
Дескрипторы вершин могут быть приводимы к типу int.
Параметры
[in]
vertex
Дескриптор вершины, облако точек которой нужно изменить.
Изменить оценку позы на одной из вершин графа SLAM.
Поза вершины всегда относительна первой вершине в графе SLAM, то есть первому добавленному облаку точек. Поскольку эта первая вершина является эталоном, вы не можете установить оценку позы для этой вершины. Предоставление оценок позы вершинам в графе SLAM сократит общее время вычисления LUM.
Примечание
Дескрипторы вершин могут быть приводимы к типу int.
Параметры
[in]
vertex
Дескриптор вершины, для которой нужно установить оценку позы.