Spec-Zone.ru › PointCloudLibrary

Глобально согласованное сопоставление сканов на основе алгоритма Lu и Milios. Подробнее...

#include <pcl/registration/lum.h>

Классы

struct EdgeProperties
struct VertexProperties

Открытые типы

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

Открытые функции-члены

LUM ()
Конструктор без параметров. Подробнее...
void setLoopGraph (const SLAMGraphPtr &slam_graph)
Задать внутреннюю структуру графа SLAM. Подробнее...
SLAMGraphPtr getLoopGraph () const
Получить внутреннюю структуру графа SLAM. Подробнее...
SLAMGraph::vertices_size_type getNumVertices () const
Получить количество вершин графа SLAM. Подробнее...
void setMaxIterations (int max_iterations)
Задать максимальное количество итераций для метода compute(). Подробнее...
int getMaxIterations () const
Получить максимальное количество итераций для метода compute(). Подробнее...
void setConvergenceThreshold (float convergence_threshold)
Задать порог сходимости для метода compute(). Подробнее...
float getConvergenceThreshold () const
Получить порог сходимости для метода compute(). Подробнее...
Vertex addPointCloud (const PointCloudPtr &cloud, const Eigen::Vector6f &pose=Eigen::Vector6f::Zero())
Добавить новое облако точек в граф SLAM. Подробнее...
void setPointCloud (const Vertex &vertex, const PointCloudPtr &cloud)
Изменить облако точек в одной из вершин графа SLAM. Подробнее...
PointCloudPtr getPointCloud (const Vertex &vertex) const
Вернуть облако точек из одной из вершин графа SLAM. Подробнее...
void setPose (const Vertex &vertex, const Eigen::Vector6f &pose)
Изменить оценку позы в одной из вершин графа SLAM. Подробнее...
Eigen::Vector6f getPose (const Vertex &vertex) const
Вернуть оценку позы из одной из вершин графа SLAM. Подробнее...
Eigen::Affine3f getTransformation (const Vertex &vertex) const
Вернуть оценку позы из одной из вершин графа SLAM в виде матрицы аффинного преобразования. Подробнее...
void setCorrespondences (const Vertex &source_vertex, const Vertex &target_vertex, const pcl::CorrespondencesPtr &corrs)
Добавить или изменить набор соответствий для одного из рёбер графа SLAM. Подробнее...
pcl::CorrespondencesPtr getCorrespondences (const Vertex &source_vertex, const Vertex &target_vertex) const
Вернуть набор соответствий для одного из рёбер графа SLAM. Подробнее...
void compute ()
Выполнить глобально согласованное сопоставление сканов методом LUM. Подробнее...
PointCloudPtr getTransformedCloud (const Vertex &vertex) const
Вернуть облако точек из одной из вершин графа SLAM, преобразованное с учётом текущей оценки позы. Подробнее...
PointCloudPtr getConcatenatedCloud () const
Вернуть объединённое облако точек из всех облаков графа SLAM, преобразованных с учётом текущих оценок позы. Подробнее...

Защищённые функции-члены

void computeEdge (const Edge &e)
Линеаризованное вычисление C^-1 и C^-1*D (результаты сохраняются в slam_graph_). Подробнее...
Eigen::Matrix6f incidenceCorrection (const Eigen::Vector6f &pose)
Возвращает скорректированную с учётом позы матрицу инцидентности для 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
Автор
Frits Florentinus, Jochen Sprickerhof

Определение в строке 108 файла lum.h.

Документация псевдонимов типов-членов

ConstPtr

template<typename PointT >
using pcl::registration::LUM< PointT >::ConstPtr = shared_ptr<const LUM<PointT> >

Определение в строке 111 файла lum.h.

Edge

template<typename PointT >
using pcl::registration::LUM< PointT >::Edge = typename SLAMGraph::edge_descriptor

Определение в строке 138 файла lum.h.

PointCloud

template<typename PointT >
using pcl::registration::LUM< PointT >::PointCloud = pcl::PointCloud<PointT>

Определение в строке 113 файла lum.h.

PointCloudConstPtr

template<typename PointT >
using pcl::registration::LUM< PointT >::PointCloudConstPtr = typename PointCloud::ConstPtr

Определение в строке 115 файла lum.h.

PointCloudPtr

template<typename PointT >
using pcl::registration::LUM< PointT >::PointCloudPtr = typename PointCloud::Ptr

Определение в строке 114 файла lum.h.

Ptr

template<typename PointT >
using pcl::registration::LUM< PointT >::Ptr = shared_ptr<LUM<PointT> >

Определение в строке 110 файла lum.h.

SLAMGraph

template<typename 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>

Определение в строке 129 файла lum.h.

SLAMGraphPtr

template<typename PointT >
using pcl::registration::LUM< PointT >::SLAMGraphPtr = shared_ptr<SLAMGraph>

Определение в строке 136 файла lum.h.

Vertex

template<typename PointT >
using pcl::registration::LUM< PointT >::Vertex = typename SLAMGraph::vertex_descriptor

Определение в строке 137 файла lum.h.

Документация конструкторов и деструкторов

LUM()

template<typename PointT >
pcl::registration::LUM< PointT >::LUM ( )
inline

Пустой конструктор.

Определение в строке 142 файла lum.h.

Документация функций-членов

addPointCloud()

template<typename PointT >
LUM< PointT >::Vertex pcl::registration::LUM< PointT >::addPointCloud ( const PointCloudPtr & cloud,
const Eigen::Vector6f & pose = Eigen::Vector6f::Zero()
)

Добавляет новое облако точек в граф SLAM.

Этот метод добавляет новую вершину в граф SLAM и связывает с этой вершиной облако точек. При необходимости можно указать оценку позы для этого облака точек. Поза вершины всегда задаётся относительно первой вершины графа SLAM, то есть первого добавленного облака точек. Поскольку эта первая вершина является опорной, для неё нельзя задать оценку позы. Передача оценок поз вершин графа SLAM сократит общее время вычислений LUM.

Примечание
Дескрипторы вершин можно преобразовать к типу int.
Параметры
[in] cloud Новое облако точек.
[in] pose (необязательно) Оценка позы относительно опорной позы (первого добавленного облака точек).
Возвращает
Дескриптор только что созданной вершины.

Определение в строке 101 файла lum.hpp.

compute()

template<typename PointT >
void pcl::registration::LUM< PointT >::compute

Выполняет глобально согласованное сопоставление сканов методом LUM.

Вычисления используют первое облако точек в графе SLAM в качестве опорной позы и пытаются одновременно выровнять относительно него все остальные облака точек.
Следует учитывать следующее:

  • Правильно выровняются относительно опорной позы только те части графа, которые связаны с ней.
  • Все наборы соответствий должны охватывать одно и то же пространство и содержать достаточно данных для определения жёсткого преобразования.
  • Алгоритм особенно эффективен при наличии циклов в графе, поскольку распределяет ошибки равномерно между ними.

Вычисления завершаются при выполнении одного из следующих условий:

  • Число итераций достигает max_iterations. Чтобы изменить это значение, используйте setMaxIterations().
  • Выполняется критерий сходимости. Чтобы изменить его, используйте setConvergenceThreshold().

В ходе вычислений изменяются оценки поз вершин графа SLAM, но не связанные с ними облака точек. Результаты можно получить с помощью getPose(), getTransformation(), getTransformedCloud() или getConcatenatedCloud().

Определение в строке 221 файла lum.hpp.

Ссылки: pcl::B.

computeEdge()

template<typename PointT >
void pcl::registration::LUM< PointT >::computeEdge ( const Edge & e )
protected

Линеаризованное вычисление C^-1 и C^-1*D (результаты сохраняются в slam_graph_).

Определение в строке 308 файла lum.hpp.

Ссылки: pcl::getTransformation().

getConcatenatedCloud()

template<typename PointT >
LUM< PointT >::PointCloudPtr pcl::registration::LUM< PointT >::getConcatenatedCloud

Возвращает объединённое облако точек, полученное из всех облаков графа SLAM и преобразованное с учётом их текущих оценок поз.

Возвращает
Объединённые преобразованные облака точек всего графа SLAM.

Определение в строке 294 файла lum.hpp.

Ссылки: pcl::getTransformation() и pcl::transformPointCloud().

getConvergenceThreshold()

template<typename PointT >
float pcl::registration::LUM< PointT >::getConvergenceThreshold
inline

Возвращает порог сходимости для метода compute().

При вычислении новых поз относительно старых методом compute() определяется длина вектора разности. Сходимость считается достигнутой, когда средняя длина всех векторов разности становится меньше convergence_threshold.

Возвращает
Текущий порог сходимости (по умолчанию = 0.0).

Определение в строке 94 файла lum.hpp.

getCorrespondences()

template<typename PointT >
pcl::CorrespondencesPtr pcl::registration::LUM< PointT >::getCorrespondences ( const Vertex & source_vertex,
const Vertex & target_vertex
) const
inline

Возвращает набор соответствий из одного из рёбер графа SLAM.

Примечание
Дескрипторы вершин можно преобразовать к типу int.
Параметры
[in] source_vertex Дескриптор вершины, соответствующей исходному облаку точек.
[in] target_vertex Дескриптор вершины, соответствующей целевому облаку точек.
Возвращает
Текущий набор соответствий для этого ребра.

Определение в строке 200 файла lum.hpp.

getLoopGraph()

template<typename PointT >
LUM< PointT >::SLAMGraphPtr pcl::registration::LUM< PointT >::getLoopGraph
inline

Возвращает внутреннюю структуру графа SLAM.

Все данные, используемые и создаваемые LUM, хранятся в этом boost::adjacency_list. Для построения графа рекомендуется использовать сам класс LUM. Этот метод также может быть полезен для управления несколькими графами SLAM в одном экземпляре LUM.

Возвращает
Текущий граф SLAM.

Определение в строке 59 файла lum.hpp.

getMaxIterations()

template<typename PointT >
int pcl::registration::LUM< PointT >::getMaxIterations
inline

Возвращает максимальное число итераций для метода compute().

Метод compute() завершается при достижении max_iterations или выполнении критерия сходимости.

Возвращает
Текущее максимальное число итераций (по умолчанию = 5).

Определение в строке 80 файла lum.hpp.

getNumVertices()

template<typename PointT >
LUM< PointT >::SLAMGraph::vertices_size_type pcl::registration::LUM< PointT >::getNumVertices

Возвращает число вершин в графе SLAM.

Возвращает
Текущее число вершин в графе SLAM.

Определение в строке 66 файла lum.hpp.

getPointCloud()

template<typename PointT >
LUM< PointT >::PointCloudPtr pcl::registration::LUM< PointT >::getPointCloud ( const Vertex & vertex ) const
inline

Возвращает облако точек из одной из вершин графа SLAM.

Примечание
Дескрипторы вершин можно преобразовать к типу int.
Параметры
[in] vertex Дескриптор вершины, облако точек которой требуется вернуть.
Возвращает
Текущее облако точек этой вершины.

Определение в строке 130 файла lum.hpp.

getPose()

template<typename PointT >
Eigen::Vector6f pcl::registration::LUM< PointT >::getPose ( const Vertex & vertex ) const

Возвращает оценку позы одной из вершин графа SLAM.

Примечание
Дескрипторы вершин можно преобразовать к типу int.
Параметры
[in] vertex Дескриптор вершины, оценку позы которой требуется вернуть.
Возвращает
Текущая оценка позы этой вершины.

Определение в строке 159 файла lum.hpp.

getTransformation()

template<typename PointT >
Eigen::Affine3f pcl::registration::LUM< PointT >::getTransformation ( const Vertex & vertex ) const
inline

Возвращает оценку позы одной из вершин графа SLAM в виде аффинной матрицы преобразования.

Примечание
Дескрипторы вершин можно преобразовать к типу int.
Параметры
[in] vertex Дескриптор вершины, матрицу преобразования которой требуется вернуть.
Возвращает
Текущая матрица преобразования этой вершины.

Определение в строке 171 файла lum.hpp.

Ссылки: pcl::getTransformation().

getTransformedCloud()

template<typename PointT >
LUM< PointT >::PointCloudPtr pcl::registration::LUM< PointT >::getTransformedCloud ( const Vertex & vertex ) const

Возвращает облако точек из одной из вершин графа SLAM, преобразованное с учётом текущей оценки её позы.

Примечание
Дескрипторы вершин можно преобразовать к типу int.
Параметры
[in] vertex Дескриптор вершины, преобразованное облако точек которой требуется вернуть.
Возвращает
Преобразованное облако точек этой вершины.

Определение в строке 285 файла lum.hpp.

Ссылки: pcl::getTransformation() и pcl::transformPointCloud().

incidenceCorrection()

template<typename PointT >
Eigen::Matrix6f pcl::registration::LUM< PointT >::incidenceCorrection ( const Eigen::Vector6f & pose )
inlineprotected

Возвращает матрицу инцидентности 6DoF с поправкой на позу.

Определение в строке 445 файла lum.hpp.

setConvergenceThreshold()

template<typename PointT >
void pcl::registration::LUM< PointT >::setConvergenceThreshold ( float convergence_threshold )

Задаёт порог сходимости для метода compute().

При вычислении новых поз относительно старых методом compute() определяется длина вектора разности. Сходимость считается достигнутой, когда средняя длина всех векторов разности становится меньше convergence_threshold.

Параметры
[in] convergence_threshold Новое значение порога сходимости (по умолчанию = 0.0).

Определение в строке 87 файла lum.hpp.

setCorrespondences()

template<typename PointT >
void pcl::registration::LUM< PointT >::setCorrespondences ( const Vertex & source_vertex,
const Vertex & target_vertex,
const pcl::CorrespondencesPtr & corrs
)

Добавляет/изменяет набор соответствий для одного из рёбер SLAM-графа.

Рёбра SLAM-графа направлены от исходной вершины к целевой. Индексы запросов соответствий указывают на точки в облаке точек исходной вершины. Индексы совпадений соответствий указывают на точки в облаке точек целевой вершины. Если в указанном месте ребра нет, этот метод добавит новое ребро в SLAM-граф и присоединит к нему соответствия. Если ребро уже существует, этот метод перезапишет информацию о соответствиях для этого ребра, не изменяя структуру SLAM-графа.

Примечание
Дескрипторы вершин можно преобразовать в int.
Параметры
[in] source_vertex Дескриптор вершины, соответствующей исходному облаку точек.
[in] target_vertex Дескриптор вершины, соответствующей целевому облаку точек.
[in] corrs Новый набор соответствий для этого ребра.

Определение в строке 179 файла lum.hpp.

setLoopGraph()

template<typename PointT >
void pcl::registration::LUM< PointT >::setLoopGraph ( const SLAMGraphPtr & slam_graph )
inline

Задаёт внутреннюю структуру SLAM-графа.

Все данные, используемые и создаваемые LUM, хранятся в этом boost::adjacency_list. Для построения графа рекомендуется использовать сам класс LUM. В противном случае этот метод может быть полезен для управления несколькими SLAM-графами в одном экземпляре LUM.

Параметры
[in] slam_graph Новый SLAM-граф.

Определение в строке 52 файла lum.hpp.

setMaxIterations()

template<typename PointT >
void pcl::registration::LUM< PointT >::setMaxIterations ( int max_iterations )

Задаёт максимальное число итераций для метода compute().

Метод compute() завершает работу при достижении max_iterations или выполнении критерия сходимости.

Параметры
[in] max_iterations Новое максимальное число итераций (по умолчанию = 5).

Определение в строке 73 файла lum.hpp.

setPointCloud()

template<typename PointT >
void pcl::registration::LUM< PointT >::setPointCloud ( const Vertex & vertex,
const PointCloudPtr & cloud
)
inline

Изменяет облако точек в одной из вершин SLAM-графа.

Этот метод изменяет облако точек, связанное с существующей вершиной, не изменяя структуру SLAM-графа. Обратите внимание: соответствия, связанные с этой вершиной, останутся без изменений, поэтому их может потребоваться обновить вручную.

Примечание
Дескрипторы вершин можно преобразовать в int.
Параметры
[in] vertex Дескриптор вершины, облако точек которой требуется изменить.
[in] cloud Новое облако точек для этой вершины.

Определение в строке 118 файла lum.hpp.

setPose()

template<typename PointT >
void pcl::registration::LUM< PointT >::setPose ( const Vertex & vertex,
const Eigen::Vector6f & pose
)
inline

Изменяет оценку позы в одной из вершин SLAM-графа.

Поза вершины всегда задаётся относительно первой вершины SLAM-графа, то есть первого добавленного облака точек. Поскольку эта первая вершина является опорной, задать для неё оценку позы нельзя. Задание оценок позы для вершин SLAM-графа позволяет сократить общее время вычислений LUM.

Примечание
Дескрипторы вершин можно преобразовать в int.
Параметры
[in] vertex Дескриптор вершины, для которой задаётся оценка позы.
[in] pose Новая оценка позы для этой вершины.

Определение в строке 142 файла lum.hpp.


Документация этого класса сгенерирована на основе следующих файлов:
  • pcl/registration/lum.h
  • pcl/registration/impl/lum.hpp

© 2009–2012, Willow Garage, Inc.
© 2012–, Open Perception, Inc.
Licensed under the BSD License.
https://pointclouds.org/documentation/classpcl_1_1registration_1_1_l_u_m.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API