Возвращает скорректированную с учётом позы матрицу инцидентности для 6 степеней свободы. Подробнее...
Подробное описание
template<typename PointT> class pcl::registration::LUM< PointT >
Глобально согласованное сопоставление сканов на основе алгоритма Lu и Milios.
Алгоритм GraphSLAM, в котором данные регистрации организованы в виде графа:
Вершины представляют позы и содержат данные облака точек и относительные преобразования.
Рёбра представляют ограничения поз и содержат данные соответствий между двумя облаками точек.
Вычисления используют первое облако точек в графе SLAM в качестве опорной позы и одновременно пытаются совместить с ним все остальные облака точек. Дополнительная информация:
F. Lu, E. Milios, Globally Consistent Range Scan Alignment for Environment Mapping, Autonomous Robots 4, апрель 1997 г.
Dorit Borrmann, Jan Elseberg, Kai Lingemann, Andreas Nüchter и Joachim Hertzberg, The Efficient Extension of Globally Consistent Scan Matching to 6 DoF, в материалах 4-го международного симпозиума по обработке, визуализации и передаче 3D-данных (3DPVT '08), июнь 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
(необязательно) Оценка позы относительно опорной позы (первого добавленного облака точек).
Выполняет глобально согласованное сопоставление сканов методом LUM.
Вычисления используют первое облако точек в графе SLAM в качестве опорной позы и пытаются одновременно выровнять относительно него все остальные облака точек. Следует учитывать следующее:
Правильно выровняются относительно опорной позы только те части графа, которые связаны с ней.
Все наборы соответствий должны охватывать одно и то же пространство и содержать достаточно данных для определения жёсткого преобразования.
Алгоритм особенно эффективен при наличии циклов в графе, поскольку распределяет ошибки равномерно между ними.
Вычисления завершаются при выполнении одного из следующих условий:
Число итераций достигает max_iterations. Чтобы изменить это значение, используйте setMaxIterations().
При вычислении новых поз относительно старых методом compute() определяется длина вектора разности. Сходимость считается достигнутой, когда средняя длина всех векторов разности становится меньше convergence_threshold.
Все данные, используемые и создаваемые LUM, хранятся в этом boost::adjacency_list. Для построения графа рекомендуется использовать сам класс LUM. Этот метод также может быть полезен для управления несколькими графами SLAM в одном экземпляре LUM.
При вычислении новых поз относительно старых методом compute() определяется длина вектора разности. Сходимость считается достигнутой, когда средняя длина всех векторов разности становится меньше convergence_threshold.
Параметры
[in]
convergence_threshold
Новое значение порога сходимости (по умолчанию = 0.0).
Добавляет/изменяет набор соответствий для одного из рёбер SLAM-графа.
Рёбра SLAM-графа направлены от исходной вершины к целевой. Индексы запросов соответствий указывают на точки в облаке точек исходной вершины. Индексы совпадений соответствий указывают на точки в облаке точек целевой вершины. Если в указанном месте ребра нет, этот метод добавит новое ребро в SLAM-граф и присоединит к нему соответствия. Если ребро уже существует, этот метод перезапишет информацию о соответствиях для этого ребра, не изменяя структуру SLAM-графа.
Все данные, используемые и создаваемые LUM, хранятся в этом boost::adjacency_list. Для построения графа рекомендуется использовать сам класс LUM. В противном случае этот метод может быть полезен для управления несколькими SLAM-графами в одном экземпляре LUM.
Изменяет облако точек в одной из вершин SLAM-графа.
Этот метод изменяет облако точек, связанное с существующей вершиной, не изменяя структуру SLAM-графа. Обратите внимание: соответствия, связанные с этой вершиной, останутся без изменений, поэтому их может потребоваться обновить вручную.
Примечание
Дескрипторы вершин можно преобразовать в int.
Параметры
[in]
vertex
Дескриптор вершины, облако точек которой требуется изменить.
Изменяет оценку позы в одной из вершин SLAM-графа.
Поза вершины всегда задаётся относительно первой вершины SLAM-графа, то есть первого добавленного облака точек. Поскольку эта первая вершина является опорной, задать для неё оценку позы нельзя. Задание оценок позы для вершин SLAM-графа позволяет сократить общее время вычислений LUM.
Примечание
Дескрипторы вершин можно преобразовать в int.
Параметры
[in]
vertex
Дескриптор вершины, для которой задаётся оценка позы.