stringtranslate.com

Biblioteca de nubes de puntos

La biblioteca de nubes de puntos ( PCL ) es una biblioteca de código abierto de algoritmos para tareas de procesamiento de nubes de puntos y procesamiento de geometría 3D, como los que ocurren en la visión por computadora tridimensional . La biblioteca contiene algoritmos para filtrado, estimación de características, reconstrucción de superficies, registro 3D , [5] ajuste de modelos , reconocimiento de objetos y segmentación . Cada módulo se implementa como una biblioteca más pequeña que se puede compilar por separado (por ejemplo, libpcl_filters, libpcl_features, libpcl_surface, ...). PCL tiene su propio formato de datos para almacenar nubes de puntos: PCD (Point Cloud Data), pero también permite cargar y guardar conjuntos de datos en muchos otros formatos. Está escrito en C++ y publicado bajo licencia BSD .

Estos algoritmos se han utilizado, por ejemplo, para la percepción en robótica para filtrar valores atípicos de datos ruidosos, unir nubes de puntos 3D , segmentar partes relevantes de una escena, extraer puntos clave y calcular descriptores para reconocer objetos en el mundo en función de su apariencia geométrica. y crear superficies a partir de nubes de puntos y visualizarlas. [6] [ verificación fallida ]

PCL requiere varias bibliotecas de terceros para funcionar, que deben estar instaladas. La mayoría de las operaciones matemáticas se implementan utilizando la biblioteca Eigen . El módulo de visualización de nubes de puntos 3D está basado en VTK . Boost se utiliza para punteros compartidos y la biblioteca FLANN para una búsqueda rápida de k vecinos más cercanos. Bibliotecas adicionales como Qhull, OpenNI o Qt son opcionales y amplían PCL con funciones adicionales.

PCL es un software multiplataforma que se ejecuta en los sistemas operativos más utilizados : Linux , Windows , macOS y Android . La biblioteca está completamente integrada con el sistema operativo de robot (ROS) y brinda soporte para bibliotecas OpenMP e Intel Threading Building Blocks (TBB) para paralelismo de múltiples núcleos . [7] [8]

La biblioteca se actualiza y amplía constantemente, y su uso en diversas industrias crece constantemente. Por ejemplo, PCL participó en la iniciativa Google Summer of Code 2020 con tres proyectos. Una fue la extensión de PCL para usar con Python usando Pybind11. [9]

Una gran cantidad de ejemplos y tutoriales están disponibles en el sitio web de PCL, ya sea como archivos fuente C++ o como tutoriales con una descripción detallada y explicación de los pasos individuales.

Aplicaciones

La biblioteca de nubes de puntos se usa ampliamente en muchos campos diferentes, aquí hay algunos ejemplos:

bibliotecas de terceros

PCL requiere para su instalación varias bibliotecas de terceros, que se enumeran a continuación. Algunas bibliotecas son opcionales y amplían PCL con funciones adicionales. La biblioteca PCL está construida con el sistema de compilación CMake (http://www.cmake.org/) al menos en la versión 3.5.0. [10] [8]

Bibliotecas obligatorias:

Bibliotecas opcionales que habilitan algunas características adicionales:

Formato de archivo PCD

El PCD ( Point Cloud Data ) es un formato de archivo para almacenar datos de nubes de puntos 3D. Se creó porque los formatos existentes no admitían algunas de las funciones proporcionadas por la biblioteca PCL. PCD es el formato de datos principal en PCL, pero la biblioteca también ofrece la posibilidad de guardar y cargar datos en otros formatos (como PLY, IFS, VTK, STL, OBJ, X3D). Sin embargo, estos otros formatos no tienen la flexibilidad y velocidad de los archivos PCD. Una de las ventajas de PCD es la capacidad de almacenar y procesar conjuntos de datos de nubes de puntos organizados. Otra es guardar y cargar puntos muy rápidamente que se almacenan en forma binaria. [11] [12]

Versiones

La versión de PCD se especifica con los números 0.x (p. ej., 0,5, 0,6, etc.) en el encabezado de cada archivo. La versión oficial en 2020 es PCD 0.7 ( PCD_V7 ). La principal diferencia en comparación con la versión 0.6 es que se ha agregado un nuevo encabezado: VIEWPOINT. Especifica la información sobre la orientación del sensor en relación con el conjunto de datos. [13]

Estructura de archivos

El archivo PCD se divide en dos partes: encabezado y datos . El encabezado tiene un formato definido con precisión y contiene la información necesaria sobre los datos de la nube de puntos almacenados en él. El encabezado debe estar codificado en ASCII, sin embargo, los datos se pueden almacenar en formato ASCII o binario. Gracias al hecho de que el formato ASCII es más legible para los humanos, se puede abrir en herramientas de software estándar y editar fácilmente.

En la versión 0.7, la versión del archivo PCD está al principio del encabezado, seguida del nombre , tamaño y tipo de cada dimensión de los datos almacenados. También muestra una cantidad de puntos ( alto * ancho ) en toda la nube e información sobre si el conjunto de datos de la nube de puntos está organizado o no. El tipo de datos especifica en qué formato se almacenan los datos de la nube de puntos (ASCII o binario). El encabezado va seguido de una serie de puntos. Cada punto se puede almacenar en una línea separada (nube de puntos no organizada) o se almacenan en una estructura organizada similar a una imagen (nube de puntos organizada). [11] Puede encontrar información más detallada sobre las entradas del encabezado en la documentación. A continuación se muestra un ejemplo de un archivo PCD. ¡El orden de las entradas del encabezado es importante!

# .PCD v.7 - Formato de archivo de datos de nube de puntosVERSIÓN .7CAMPOS xyz rgbTAMAÑO 4 4 4 4TIPO FFFFCONTAR 1 1 1 1ANCHO 213ALTURA 1PUNTO DE VISTA 0 0 0 1 0 0 0PUNTOS 213DATOS ascii0,93773 0,33763 0 4,2108e+060,90805 0,35641 0 4,2108e+060,81915 0,32 0 4,2108e+060,97192 0,278 0 4,2108e+06......

Historia

El desarrollo de la biblioteca de nubes de puntos comenzó en marzo de 2010 en Willow Garage . El proyecto inicialmente residía en un subdominio de Willow Garage y luego se trasladó a un nuevo sitio web www.pointclouds.org en marzo de 2011. [1] La primera versión oficial de PCL (Versión 1.0) se lanzó dos meses después, en mayo de 2011. [2]

Módulos

PCL se divide en varias bibliotecas de código más pequeñas que se pueden compilar por separado. Algunos de los módulos más importantes y sus funciones se describen a continuación. [14] [15]

Filtros

Al escanear una nube de puntos 3D, pueden producirse errores y diversas desviaciones, lo que provoca ruido en los datos. Esto complica la estimación de algunas características de las nubes de puntos locales, como las normales de superficie. Estas imprecisiones pueden provocar errores importantes en el procesamiento posterior, por lo que es aconsejable eliminarlas con un filtro adecuado. La biblioteca pcl_filters proporciona varios filtros útiles para eliminar valores atípicos y ruido y también reducir la resolución de los datos. Algunos de ellos utilizan criterios simples para recortar puntos, otros utilizan análisis estadístico.

Características

La biblioteca pcl_features contiene algoritmos y estructuras de datos para la estimación de características 3D . Las características geométricas locales más utilizadas son la curvatura estimada de la superficie normal y subyacente del punto. Las características describen patrones geométricos en un punto determinado según el k-vecindario seleccionado (espacio de datos seleccionado alrededor del punto). La vecindad se puede seleccionar determinando un número fijo de puntos en el área más cercana o definiendo un radio de una esfera alrededor del punto.

Uno de los métodos implementados más sencillos para estimar la normal de la superficie es un análisis de los vectores propios y valores propios de una matriz de covarianza creada a partir de la vecindad del punto. Los descriptores de histogramas de características puntuales (o FPFH más rápido) son una representación de características avanzada y dependen de estimaciones normales en cada punto. Generaliza la curvatura media alrededor del punto utilizando un histograma multidimensional de valores. Algunos de los otros descriptores de la biblioteca son el descriptor de histograma de características de punto de vista (VFH), los descriptores NARF, los descriptores basados ​​en momento de inercia y excentricidad, los descriptores de distribución espacial globalmente alineada (GASD), y más.

Segmentación

La biblioteca pcl_segmentation contiene algoritmos para segmentar una nube de puntos en diferentes grupos. La agrupación se utiliza a menudo para dividir la nube en partes individuales que se pueden procesar posteriormente. Se implementan varias clases que admiten varios métodos de segmentación:

Visualización

La biblioteca pcl_visualization se utiliza para visualizar rápida y fácilmente datos de nubes de puntos 3D. El paquete utiliza la biblioteca VTK para la representación 3D de nubes e imágenes de rango. La biblioteca ofrece:

Registro

El registro es el problema de alinear varios conjuntos de datos de nubes de puntos adquiridos desde diferentes vistas en un único modelo de nube de puntos. La biblioteca pcl_registration implementa varios algoritmos de registro de nubes de puntos para conjuntos de datos organizados y no organizados. La tarea es identificar los puntos correspondientes entre los conjuntos de datos y encontrar una transformación que minimice su distancia.

El algoritmo iterativo del punto más cercano minimiza las distancias entre los puntos de dos nubes de puntos. Puede usarse para determinar si una PointCloud es solo una transformación rígida de otra. La Transformación de Distribución Normal (NDT) es un algoritmo de registro que se puede utilizar para determinar una transformación rígida entre dos nubes de puntos que tienen más de 100.000 puntos.

Ejemplo de consenso

La biblioteca sample_consensus contiene métodos SAmple Consensus (SAC) como RANSAC y modelos para detectar objetos específicos en nubes de puntos. Algunos de los modelos implementados en esta biblioteca incluyen modelos planos que a menudo se usan para detectar superficies interiores como paredes y pisos. Los siguientes modelos son las líneas, círculos 2D y 3D en un plano, esfera, cilindro, cono, un modelo para determinar una línea paralela a un eje dado, un modelo para determinar un plano perpendicular a un eje especificado por el usuario, un plano paralelo a un eje especificado por el usuario, etc. Se pueden utilizar para detectar objetos con estructuras geométricas comunes (por ejemplo, encajar un modelo cilíndrico en una taza).

Estimadores de consenso de muestra robustos que están disponibles en la biblioteca:

Superficie

En la biblioteca pcl_surface se implementan varios algoritmos para la reconstrucción de superficies de nubes de puntos 3D . Hay varias formas de reconstruir la superficie. Uno de los más utilizados es el mallado, y la biblioteca PCL tiene dos algoritmos: una triangulación muy rápida de puntos originales y una red más lenta, que también suaviza y rellena agujeros. Si la nube es ruidosa, es recomendable utilizar el suavizado de superficies mediante uno de los algoritmos implementados.

El método de reconstrucción de superficies de mínimos cuadrados en movimiento (MLS) es un algoritmo de remuestreo que puede reconstruir partes faltantes de una superficie. Gracias a las interpolaciones polinómicas de orden superior entre los puntos de datos circundantes, MLS puede corregir y suavizar pequeños errores causados ​​por el escaneo.

Greedy Projection Triangulation implementa un algoritmo para una rápida triangulación de superficies en una nube de puntos desordenada con normales. El resultado es una malla triangular que se crea proyectando la vecindad local de un punto a lo largo de la normal del punto. Funciona mejor si la superficie es localmente lisa y hay transiciones suaves entre áreas con diferentes densidades de puntos. Se pueden configurar muchos parámetros que se tienen en cuenta al conectar puntos (cuántos vecinos se buscan, la distancia máxima para un punto, ángulo mínimo y máximo de un triángulo).

La biblioteca también implementa funciones para crear un polígono de casco cóncavo o convexo para un modelo plano, algoritmo de reconstrucción de superficie de proyección de cuadrícula, cubos de marcha , algoritmo de triangulación de recorte de orejas , algoritmo de reconstrucción de superficie de Poisson , etc.

E/S

io_library le permite cargar y guardar nubes de puntos en archivos, así como capturar nubes desde varios dispositivos. Incluye funciones que permiten concatenar los puntos de dos nubes de puntos diferentes con el mismo tipo y número de campos. La biblioteca también puede concatenar campos (por ejemplo, dimensiones) de dos nubes de puntos diferentes con el mismo número de puntos.

A partir de PCL 1.0, la biblioteca ofrece una nueva interfaz de captura genérica que brinda fácil acceso a diferentes dispositivos y formatos de archivos. Los primeros dispositivos compatibles para la recopilación de datos fueron cámaras compatibles con OpenNI (probadas con cámaras Primesense Reference Design , Microsoft Kinect y Asus Xtion Pro ). A partir de PCL 1.7 , los datos de nubes de puntos también se pueden obtener del sistema Velodyne High Definición LiDAR (HDL), que produce nubes de puntos de 360 ​​grados. PCL admite tanto el HDL-64e como el HDL-32e originales . También hay un nuevo controlador para cámaras Dinast (probado con IPA-1110 , Cyclopes II e IPA-1002 ng T-Less NG ). PCL 1.8 brinda soporte para cámaras IDS-Imaging Ensenso, cámaras DepthSense (por ejemplo, Creative Senz3D , DepthSense DS325 ) y escáneres davidSDK.

KdTree

La biblioteca pcl_kdtree proporciona la estructura de datos kd-tree para organizar un conjunto de puntos en un espacio con k dimensiones. Se utiliza para encontrar los K vecinos más cercanos (usando FLANN) de un punto o ubicación específica.

octree

La biblioteca pcl_octree implementa la estructura de datos de árbol jerárquico octree para datos de nubes de puntos. La biblioteca proporciona algoritmos de búsqueda de vecinos más cercanos, como “Vecinos dentro de la búsqueda de Voxel”, “K Búsqueda de vecinos más cercanos” y “Vecinos dentro de la búsqueda de radio”. También hay varios tipos de octree que se diferencian por las propiedades de sus nodos foliares. Cada nodo hoja puede contener un único punto o una lista de índices de puntos, o no almacena ninguna información de puntos. La biblioteca también se puede utilizar para la detección de cambios espaciales entre múltiples nubes de puntos no organizadas mediante comparación recursiva de estructuras de árbol de octetos.

Buscar

La biblioteca pcl_search implementa métodos para buscar vecinos más cercanos utilizando diferentes estructuras de datos, que se pueden encontrar en otros módulos, como KdTree, Octree o búsqueda especializada de conjuntos de datos organizados.

Imagen de rango

La biblioteca range_image contiene dos clases para representar y trabajar con imágenes de rango cuyos valores de píxeles representan una distancia desde el sensor. La imagen de rango se puede convertir en una nube de puntos si se especifica la posición del sensor o se pueden extraer los bordes de él.

Puntos clave

La biblioteca pcl_keypoints contiene implementaciones de algoritmos de detección de puntos clave de nubes de puntos (detector de puntos de esquina AGAST, detector Harris , detector BRISK, etc.).

Común

La biblioteca pcl_common contiene las estructuras de datos principales para la nube de puntos, tipos para representación de puntos, normales de superficie, valores de color RGB, etc. También se implementan métodos útiles para calcular distancias, valores medios y covarianza, transformaciones geométricas y más. La biblioteca común la utilizan principalmente otros módulos PCL.

Referencias

  1. ^ ab B. Rusu, Radu (28 de marzo de 2011). "PointClouds.org: un nuevo hogar para la biblioteca de nubes de puntos (PCL)". Garaje de sauce . Consultado el 26 de noviembre de 2012 .
  2. ^ ab "¡PCL 1.0!". PCL. 12 de mayo de 2011 . Consultado el 24 de mayo de 2013 .Archivado el 6 de enero de 2020 en Wayback Machine.
  3. ^ "Versión 1.14.1" . Consultado el 4 de mayo de 2024 .
  4. ^ "Versiones · PointCloudLibrary/PCL". GitHub .
  5. ^ Holz, Dirk; Ichim, Alexandru E.; Tomari, Federico; Rusu, Radu B.; Behnke, Sven (2015). "Registro en la biblioteca de nubes de puntos: un marco modular para alinear en 3-D". Revista IEEE Robotics Automation . 22 (4): 110-124. doi :10.1109/MRA.2015.2432331. S2CID  2621807.
  6. ^ Sistema operativo del robot: http://www.ros.org/wiki
  7. ^ Hsieh, C. (2012). "Un desarrollo eficiente del registro de superficies 3D mediante Point Cloud Library (PCL)". 2012 Simposio Internacional sobre Sistemas Inteligentes de Procesamiento de Señales y Comunicaciones . págs. 729–734. doi :10.1109/ISPACS.2012.6473587. ISBN 978-1-4673-5082-2. S2CID  5449026.
  8. ^ ab Rusu, RB; Primos, S. (2011). "El 3D está aquí: Biblioteca de nubes de puntos (PCL)". Conferencia Internacional IEEE 2011 sobre Robótica y Automatización . págs. 1–4. doi :10.1109/ICRA.2011.5980567. ISBN 978-1-61284-386-5. S2CID  206849822.
  9. ^ "Google Verano del código 2020". Biblioteca de nubes de puntos . Consultado el 9 de noviembre de 2020 .
  10. ^ "Creación de dependencias de PCL desde el código fuente en Windows: documentación de Point Cloud Library 0.0". pcl.readthedocs.io . Consultado el 2 de noviembre de 2020 .
  11. ^ ab "El formato de archivo PCD (datos de nube de puntos): documentación de la biblioteca de nubes de puntos 0.0". pcl.readthedocs.io . Consultado el 2 de noviembre de 2020 .
  12. ^ "El formato de archivo PCD (datos de nube de puntos): documentación de la biblioteca de nubes de puntos 0.0".
  13. ^ "Biblioteca de nube de puntos (PCL): pcl :: Referencia de clase PCDReader". pointclouds.org . Consultado el 2 de noviembre de 2020 .
  14. ^ "Tutorial de PCL: documentación de la biblioteca de nube de puntos 0.0". pcl.readthedocs.io . Consultado el 3 de noviembre de 2020 .
  15. ^ "Introducción: documentación de la biblioteca de nubes de puntos 0.0". pcl.readthedocs.io . Consultado el 4 de noviembre de 2020 .

enlaces externos