Point Cloud Library

Z Wikipedie, otevřené encyklopedie
Point Cloud Library
Logo
VývojářWillow Garage
První vydáníkvěten 2011
Aktuální verzePCL 1.11.1 (14. 8. 2020)
Operační systémmultiplatformní
Vyvíjeno vC++
Typ softwaruknihovna
LicenceBSD
Webwww.pointclouds.org
Některá data mohou pocházet z datové položky.

Point Cloud Library (PCL) je C++ knihovna pro 2D a 3D zpracování mračen bodů (point cloud) a obrazů. Byla vydána pod licencí BSD s otevřeným zdrojovým kódem. Knihovna nabízí řadu funkcí a algoritmů pro filtrování, rekonstrukci povrchu, registraci, model fitting, segmentaci, rozpoznávání objektů a odhad geometrických vlastností objektů (features). Každý modul je implementován jako menší samostatná knihovna, kterou lze kompilovat samostatně (například libpcl_filters, libpcl_features, libpcl_surface, ...). PCL má vlastní datový formát pro mračna bodů PCD (Point Cloud Data), ale umožňuje také načítání a ukládání datových sad v mnoha dalších formátech.

PCL pro svou funkčnost vyžaduje několik knihoven třetích stran, které musí být nainstalovány. Většina matematických operací je implementována s využitím knihovny Eigen. Vizualizační modul pro 3D mračna bodů je založen na VTK. Boost je využíván pro sdílené ukazatele a knihovna FLANN pro rychlé hledání nejbližších sousedů (k-nearest neighbor search). Další knihovny jako jsou QHULL, OpenNI nebo Qt jsou volitelné a rozšiřují PCL o další funkce.[1]

PCL je multiplatformní software, který běží na nejpoužívanějších operačních systémech: Linux, Windows, macOS a Android. Knihovna je plně integrována do robotického operačního systému (ROS) a poskytuje podporu pro knihovny OpenMP a Intel Threading Building Blocks (TBB) pro vícejádrový paralelismus.[1][2]

Knihovna je neustále aktualizována a rozšiřována a její využití v různých odvětvích stále roste. PCL se například se třemi projekty účastnila iniciativy Google Summer of Code 2020. Jedním z nich bylo rozšíření PCL pro použití s Pythonem pomocí Pybind11.[3]

Na webových stránkách PCL je k dispozici velké množství příkladů a cvičení buď jako zdrojové soubory C++, nebo jako tutoriály s podrobným popisem a vysvětlením jednotlivých kroků.

Využití[editovat | editovat zdroj]

Point cloud library je široce používána v mnoha různých oblastech, zde je několik příkladů:

  • spojování 3D mračen bodů dohromady
  • rozpoznávání 3D objektů podle jejich geometrického tvaru
  • filtrace a vyhlazení zašumělých dat
  • vytváření povrchu z mračen bodů
  • zarovnání dříve zachyceného modelu objektu s nově snímanými daty
  • rozpoznávání klastru a odhad pozice 6DOF
  • stream mračen bodů do mobilních zařízení s vizualizací v reálném čase

Knihovny třetích stran[editovat | editovat zdroj]

PCL vyžaduje pro svou instalaci a plnou funkčnost několik knihoven třetích stran, které jsou uvedeny níže. Některé knihovny jsou volitelné a rozšiřují PCL o další funkce. Pro samotné sestavení PCL je zapotřebí software CMake build (http://www.cmake.org/) alespoň ve verzi 3.5.0. [1][4]

Povinné knihovny:

  • Boost (http://www.boost.org/) alespoň ve verzi 1.46.1. Tato sada C++ knihoven se používá pro vytváření vláken a především pro sdílené ukazatele, díky kterým není nutné znovu kopírovat data, která již v systému jsou.
  • Eigen (http://eigen.tuxfamily.org/) je vyžadován alespoň ve verzi 3.0.0. Jedná se o open-source knihovnu pro lineární algebru (matice, vektory). Většina matematických operací (optimalizovaných SSE) v PCL je implementována pomocí Eigen.
  • FLANN (http://www.cs.ubc.ca/research/flann/ Archivováno 22. 4. 2015 na Wayback Machine.) ve verzi alespoň 1.6.8. Jedná se o knihovnu, která provádí rychlé přibližné hledání nejbližších sousedů v prostorech s vysokou dimenzí. V PCL je důležitá především v modulu kdtree pro rychlé hledání nejbližších sousedů.
  • VTK - Visualization ToolKit (http://www.vtk.org/) alespoň ve verzi 5.6.1. Multiplatformní softwarový systém pro vykreslování 3D mračen bodů, modelování, zpracování obrazu, zobrazování objemových dat. Používá se ve vizualizačním modulu pro vykreslování a vizualizaci mračen bodů.

Volitelné knihovny, které umožňují některé další funkce:

Formát souboru PCD[editovat | editovat zdroj]

PCD (Point Cloud Data) je formát souboru pro ukládání 3D mračen bodů. Byl vytvořen, protože stávající formáty nepodporovaly některé funkce, které poskytuje knihovna PCL. PCD je primární formát dat v PCL, ale knihovna také nabízí možnost ukládat a načítat data v jiných formátech (například PLY, IFS, VTK, STL, OBJ, X3D). Tyto ostatní formáty však nemají flexibilitu a rychlost souborů PCD. Jednou z výhod PCD je schopnost ukládat a zpracovávat uspořádané datové sady mračen bodů. Další je velmi rychlé ukládání a načítání bodů, které jsou uloženy v binární podobě.[5]

Verze[editovat | editovat zdroj]

Verze PCD je uvedena v záhlaví každého souboru pomocí čísel 0.x (např. 0.5, 0.6). Oficiální verze v roce 2020 je PCD 0.7 (PCD_V7). Hlavní rozdíl oproti verzi 0.6 spočívá v tom, že byla přidána nová položka v hlavičce souboru - VIEWPOINT. Ta secifikuje informace o orientaci senzoru vůči datové sadě.[6]

Struktura souboru[editovat | editovat zdroj]

Soubor PCD je rozdělen na dvě části - hlavička (header) a data. Hlavička má přesně definovaný formát a obsahuje potřebné informace o mračnu bodů, které je v něm uloženo. Hlavička musí být kódována v ASCII, data ale mohou být uložena i v binární podobě. Díky tomu, že je formát ASCII lehce čitelný pro člověka, lze jej otevřít ve standardních softwarových nástrojích a snadno upravovat.

Ve verzi 0.7 se na začátku hlavičky nachází verze souboru PCD, následuje název, velikost a typ každé dimenze uložených dat. Je zde také uveden počet bodů (výška * šířka) v celém mračnu a informace o tom, zda je datová sada bodů uspořádaná (organized) nebo ne. Datový typ určuje, ve jakém formátu jsou body uloženy (ASCII nebo binárním). Za hlavičkou následuje samotná datová sada bodů. Každý bod může být uložený na samostatném řádku (potom se jedná o neuspořádaný dataset) nebo jsou uloženy v obrazové struktuře (uspořádané mračno bodů).[5] Detailnější informace o jednotlivých položkách záhlaví lze najít v dokumentaci. Níže je uveden příklad souboru ve formátu PCD. Pořadí položek záhlaví je důležité!

# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 213
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 213
DATA ascii
0.93773 0.33763 0 4.2108e+06
0.90805 0.35641 0 4.2108e+06
0.81915 0.32 0 4.2108e+06
0.97192 0.278 0 4.2108e+06
...
...

Moduly[editovat | editovat zdroj]

PCL je rozdělena do několika menších knihoven, které lze sestavit samostatně. Níže jsou popsány nejdůležitější moduly a jejich funkce. [1][7][8]

Filtry[editovat | editovat zdroj]

Při skenování 3D mračna bodů mohou vznikat chyby a různé odchylky, které způsobují šum v datech. To komplikuje odhad některých lokálních charakteristik bodů, jako jsou normály povrchu. Tyto nepřesnosti mohou vést k významným chybám při dalším zpracování, a proto je dobré odstranit je vhodným filtrem. Knihovna pcl_filters poskytuje několik užitečných filtrů pro odstranění odlehlých hodnot a šumu a také k převzorkování dat. Některé používají k ořezávání bodů jednoduchá kritéria, jiné statistickou analýzu.

  • PassThrough filtr - slouží k filtrování bodů v jedné vybrané dimenzi. To znamená, že může odříznout body, které nejsou v rozsahu určeném uživatelem.
  • VoxelGrid filtr - vytvoří mřížku voxelů v mračnu bodů. Body uvnitř každého voxelu jsou pak aproximovány jejich těžištěm. To vede k převzorkování (snížení počtu bodů) v mračnech bodů.
  • StatisticalOutlierRemoval - odstraňuje šum z datové sady pomocí technik statistické analýzy aplikované na okolí každého bodu a odstraňuje všechny body, jejichž střední vzdálenosti jsou mimo definovaný interval.
  • RadiusOutlierRemoval - odstraní ty body, které mají menší než vybraný počet sousedů v definované oblasti.

Vlastnosti[editovat | editovat zdroj]

Modul pcl_features obsahuje algoritmy a datové struktury pro odhad vlastností. Nejčastěji používané lokální geometrické vlastnosti jsou normály bodů a odhad zakřivení povrchu. Vlastnosti popisují geometrické vzory v určitém bodě na základě vybraného k-sousedství (prostor okolo zvoleného bodu). Okolí lze vybrat určením pevného počtu bodů z blízké oblasti nebo definováním poloměru koule kolem bodu.

Jednou z nejjednodušších implementovaných metod pro odhad normály povrchu je analýza vlastních vektorů a vlastních čísel kovarianční matice vytvořené z okolí bodu. Point Feature Histograms (nebo rychlejší FPFH) jsou pokročilou reprezentací vlastností a závisí na odhadu normály v každém bodě. Zobecňují střední zakřivení kolem bodu pomocí vícerozměrného histogramu hodnot. Další deskriptory vlastností jsou například: deskriptor VFH (Viewpoint Feature Histogram), deskriptory NARF, deskriptory založené na momentu setrvačnosti a výstřednosti, deskriptory GASD (Globally Aligned Spatial Distribution) a další.

Segmentace[editovat | editovat zdroj]

Knihovna pcl_segmentation obsahuje algoritmy pro segmentaci mračna bodů do různých klastrů. Shlukování se často používá k rozdělení cloudu na jednotlivé části, které se dále zpracovávají. V modulu je implementováno několik tříd, které podporují různé metody segmentace:

  • Segmentace rovinného modelu - jednoduchý algoritmus, který najde všechny body podporující rovinný model v mračnu bodů
  • Euklidovské shlukování - vytváří shluky bodů na základě euklidovské vzdálenosti
  • Podmíněné euklidovské shlukování - shlukování bodů na základě euklidovské vzdálenosti a uživatelem definované podmínky
  • Rostoucí oblasti (Region growing segmentation) - sloučí body, které jsou dostatečně blízko a splňují podmínky hladkosti
  • Rostoucí oblasti na základě barev (Color-based region growing) - stejný koncept jako region growing, ale místo normá používá barvu
  • Min-Cut binární segmentace - rozděluje data na body popředí a pozadí
  • segmentace založená na rozdílu normál (Difference of Normals) - segmentace založená na měřítku, hledání bodů, které patří do zadaných parametrů měřítka
  • Shlukování supervoxelů - generuje objemové segmentace bodů

Vizualizace[editovat | editovat zdroj]

Knihovna pcl_visualization se používá k rychlé a snadné vizualizaci 3D mračen bodů. Modul využívá knihovnu VTK pro 3D vykreslování mračen a ‘range‘ obrazů. Knihovna nabízí:

  • Třída CloudViewer je pro jednoduchou vizualizaci mračen bodů.
  • RangeImageVisualizer lze použít k vizualizaci ‘range‘ obrazu jako 3D mračno bodů nebo jako obrázek, kde barvy odpovídají hodnotám rozsahu.
  • PCLVisualizer je třída pro vizualizaci s několika aplikacemi. Může zobrazovat jednoduchý dataset i mračno bodů, které obsahuje barevná data. Na rozdíl od CloudVieweru může také vykreslovat další užitečné vlastnosti bodů a jejich okolí, jako jsou normály, zakřivení a geometrie. Tato třída umožňuje zobrazit více mračen bodů vedle sebe, takže je lze snadno porovnávat, nebo kreslit různé primitivní tvary (např. válce, koule, čáry, polygony atd.) buď z bodů, nebo z parametrických rovnic.
  • Třída PCLPlotter se používá pro snadné vykreslování grafů, od polynomiálních funkcí až po histogramy. Tato třída umí zpracovávat různé typy vstupů pro vykreslení (souřadnice, funkce) a provádět automatické barvení.
  • PCLHistogramVisualizer je modul pro vizualizaci histogramu pro 2D grafy.

Shoda vzorků[editovat | editovat zdroj]

Knihovna sample_consensus obsahuje metody SAmple Consensus (SAC) jako RANSAC a modely pro detekci konkrétních objektů v mračnech bodů. Některé modely implementované v této knihovně zahrnují rovinné modely, které se často používají k detekci vnitřních povrchů, jako jsou stěny a podlahy. Dále jsou to modely pro čáry, 2D a 3D kružnice v rovině, koule, válec, kužel, model pro určení přímky rovnoběžné s danou osou, model pro určení roviny kolmé k uživatelem zadané ose, rovina rovnoběžná s uživatelem specifikovanou osou atd. Tyt modely mohou být použity k detekci objektů s obecnou geometrickou strukturou. Robustní odhady shody vzorků, které jsou k dispozici v knihovně:

  • SAC_RANSAC - RANdom SAmple Consensus
  • SAC_LMEDS - Least Median of Squares
  • SAC_MSAC - M-Estimator SAmple Consensus
  • SAC_RRANSAC - Randomized RANSAC
  • SAC_RMSAC - Randomized MSAC
  • SAC_MLESAC - Maximum LikeLihood Estimation SAmple Consensus
  • SAC_PROSAC - PROgressive SAmple Consensus

Povrch[editovat | editovat zdroj]

V knihovně pcl_surface je implementováno několik algoritmů pro rekonstrukci povrchu z 3D mračen bodů. Existuje několik způsobů, jak rekonstruovat povrch. Jedním z nejběžněji používaných je meshing a knihovna PCL má dva algoritmy: velmi rychlou triangulaci původních bodů a pomalejší síťování, které také vyhlazuje a vyplňuje díry. Pokud je v datech šum, je vhodné vyhladit povrch některým z implementovaných algoritmů.

Metoda rekonstrukce povrchu MLS (Moving Least Squares) je algoritmus převzorkování, který dokáže rekonstruovat chybějící části povrchu. Díky polynomiálním interpolacím vyššího řádu mezi okolními body může MLS opravit a vyhladit malé chyby způsobené skenováním.

Greedy Projection Triangulation implementuje algoritmus pro rychlou triangulaci povrchu neuspořádaného mračna bodů s normálami. Výsledkem je trojúhelníková síť, která je vytvořena promítnutím okolí bodu na rovinu. Metoda funguje nejlépe, pokud je povrch hladký a existují plynulé přechody mezi oblastmi s různými hustotami bodů. Při spojování bodů lze nastavit mnoho parametrů, které se berou v úvahu (kolik sousedů se prohledává, maximální vzdálenost bodů, minimální a maximální úhel trojúhelníku).

Knihovna také implementuje funkce pro vytvoření konkávní nebo konvexní obálky pro rovinný model, algoritmus rekonstrukce povrchu Grid projection, marching cubes, ear clipping triangulační algoritmus, Poissonův algoritmus pro rekonstrulci povrchu, atd.

Vstup / Výstup[editovat | editovat zdroj]

Knihovna Io_library umožňuje načítat a ukládat mračna bodů do souborů a také zachytávat mračna z různých zařízení. Zahrnuje funkce, které umožňují sloučit body dvou různých mračen bodů se stejným typem a počtem polí. Knihovna může také zřetězit pole (např. rozměry) dvou různých mračen bodů se stejným počtem bodů.

Počínaje PCL 1.0 nabízí knihovna nové obecné rozhraní, které umožňuje snadný přístup k různým zařízením a formátům souborů. Prvními zařízeními podporovanými pro snímání dat byly kamery kompatibilní s OpenNI (testováno s kamerami Primesense Reference Design, Microsoft Kinect a Asus Xtion Pro). Od verze PCL 1.7 lze data získat také ze systému Velodyne High Definition LiDAR (HDL), který produkuje mračna bodů s rozsahem 360 stupňů. PCL podporuje jak původní HDL-64e, tak HDL-32e. K dispozici je také nový ovladač pro kamery Dinast (testováno s IPA-1110, Cyclopes II a IPA-1002 ng T-Less NG). PCL 1.8 přináší podporu pro kamery IDS-Imaging Ensenso, kamery DepthSense (např. Creative Senz3D, DepthSense DS325) a skenery davidSDK.

Kd Strom[editovat | editovat zdroj]

Knihovna pcl_kdtree implementuje datovou strukturu kd-strom pro organizaci bodů v prostoru s rozměry k. Slouží k vyhledání K nejbližších sousedů (pomocí FLANN) konkrétního bodu nebo místa.

Octree[editovat | editovat zdroj]

Modul pcl_octree implementuje hierarchickou datovou strukturu oktree pro ukládaní mračen bodů. Knihovna poskytuje algoritmy pro vyhledávání nejbližších sousedů, například Neighbors within Voxel Search, K Nearest Neighbor Search a Neighbors within Radius Search. Existuje zde také několik typů stromů, které se liší vlastnostmi svých listových uzlů. V každém z listových uzlů může být uložený jeden bod nebo seznam bodových indexů, nebo v listu nejsou uloženy žádné informace. Knihovnu lze také použít k detekci změn v prostoru mezi více neuspořádanými mračny bodů, která probíhá pomocí rekurzivního srovnání struktur stromů.

Prohledávání[editovat | editovat zdroj]

Knihovna pcl_search implementuje metody pro hledání nejbližších sousedů s využitím různých datových struktur, které lze najít v jiných modulech, jako je KdTree, Octree nebo specializované vyhledávání pro organizované datové sady.

Range Image[editovat | editovat zdroj]

Knihovna range_image obsahuje dvě třídy pro reprezentaci ‘range‘ obrazů a práci s nimi. Hodnoty pixelů těchto obrazů představují vzdálenost od snímače. Z ‘range‘ obrazu mohou být extrahovány hrany, nebo lze obraz převést na mračno bodů, pokud je zadána poloha snímače.

Klíčové body[editovat | editovat zdroj]

Knihovna pcl_keypoints obsahuje implementace algoritmů pro detekci klíčových bodů v mračnu bodů (detektor rohových bodů AGAST, Harrisův detektor, detektor BRISK atd.).

Common[editovat | editovat zdroj]

Knihovna pcl_common obsahuje základní datové struktury pro mračna bodů, datové typy pro reprezentaci bodů, normál povrchu, hodnot barev RGB atd. Jsou také implementovány užitečné metody pro výpočet vzdáleností, středních hodnot a kovariancí, geometrických transformací. Tuto knihovnu používají především ostatní PCL moduly.

Reference[editovat | editovat zdroj]

  1. a b c d RUSU, R. B.; COUSINS, S. 3D is here: Point Cloud Library (PCL). In: 2011 IEEE International Conference on Robotics and Automation. [s.l.]: [s.n.], 2011-05. ISSN 1050-4729. Dostupné online. DOI 10.1109/ICRA.2011.5980567. S. 1–4.
  2. HSIEH, C. An efficient development of 3D surface registration by Point Cloud Library (PCL). In: 2012 International Symposium on Intelligent Signal Processing and Communications Systems. [s.l.]: [s.n.], 2012-11. Dostupné online. DOI 10.1109/ISPACS.2012.6473587. S. 729–734.
  3. Google Summer of Code 2020 [online]. [cit. 2020-11-09]. Dostupné online. (anglicky) 
  4. Building PCL’s dependencies from source on Windows — Point Cloud Library 0.0 documentation. pcl.readthedocs.io [online]. [cit. 2020-11-09]. Dostupné online. 
  5. a b The PCD (Point Cloud Data) file format — Point Cloud Library 0.0 documentation. pcl.readthedocs.io [online]. [cit. 2020-11-09]. Dostupné online. 
  6. Point Cloud Library (PCL): pcl::PCDReader Class Reference. pointclouds.org [online]. [cit. 2020-11-09]. Dostupné online. 
  7. PCL Walkthrough — Point Cloud Library 0.0 documentation. pcl.readthedocs.io [online]. [cit. 2020-11-09]. Dostupné online. 
  8. Introduction — Point Cloud Library 0.0 documentation. pcl.readthedocs.io [online]. [cit. 2020-11-09]. Dostupné online. 

Externí odkazy[editovat | editovat zdroj]