PCL點雲庫(Point Cloud Library)簡介

什麼是PCL

PCLPoint Cloud Library)是在吸取了前人點雲相關研究基礎上創建起來的大型跨平臺開源C++編程庫,它實現了大量點雲相關的通用算法和高效數據結構,涉及到點雲獲取、濾波、分割、配準、檢索、特徵提取、識別、追蹤、曲面重建、可視化等。支持多種操做系統平臺,可在WindowsLinuxAndroidMac OS X、部分嵌入式實時系統上運行。若是說OpenCV2D信息獲取與處理的結晶,那麼PCL就在3D信息獲取與處理上具備同等地位,PCLBSD受權方式,能夠免費進行商業和學術應用。android

PCL的發展與創景

PCL起初是ROSRobot Operating System)下由來自於慕尼黑大學(TUM - Technische Universität München)和斯坦福大學(Stanford UniversityRadu博士等人維護和開發的開源項目,主要應用於機器人研究應用領域,隨着各個算法模塊的積累,於2011年獨立出來,正式與全球3D信息獲取、處理的同行一塊兒,組建了強大的開發維護團隊,以多所知名大學、研究所和相關硬件、軟件公司爲主,可參考圖1。截止目前,發展很是迅速,不斷有新的研究機構等加入,在Willow Garage, NVidia, Google (GSOC 2011), Toyota, Trimble, Urban Robotics, Honda Research Institute等多個全球知名公司的資金支持下,可參考圖1,不斷提出新的開發計劃,代碼更新很是活躍,至今在不到一年的時間內從1.0版本已經發布到1.7.0版本。算法


1 加入或資助PCL的開發組織、研究所、公司編程


2 加入PCL開發的組織全球地理分佈ubuntu

PCL是集體智慧的結晶,是你們共同努力的結果。若是沒有這些人的貢獻,也就不可能有PCL的出現,筆者在此表示無比敬仰。網絡

隨着加入組織的增多,PCL官方目前的計劃是繼續加入不少新的功能模塊和算法的實現,包括當前最新的3D相關的處理算法,如基於PrimeSensor 3D設備,微軟Kinect或者華碩的XTionPRO智能交互應用等,詳細讀者能夠參考官方網站每期的新聞,並且也計劃進一步支持使用CUDA OpenCL等基於GPU的高性能計算的技術。筆者相信在近幾年內會有更多的人和組織加入到這個項目中來,共享開源PCL帶來的各自領域的成果。數據結構

PCL的潛在應用領域

前面講述了,在這麼短期,如此多的組織我的和公司加入到PCL開源項目中來,爲何?PCL能解決什麼問題呢?架構

機器人領域

移 動機器人對其工做環境的有效感知、辨識與認知,是其進行自主行爲優化並可靠完成所承擔任務的前提和基礎。如何實現場景中物體的有效分類與識別是移動機器人 場景認知的核心問題,目前基於視覺圖像處理技術來進行場景的認知是該領域的重要方法。但移動機器人在線獲取的視覺圖像質量受光線變化影響較大,特別是在光 線較暗的場景更難以應用,隨着RGBD獲取設備的大量推廣,在機器人領域勢必掀起一股深度信息結合2D信息的應用研究熱潮,深度信息的引入可以使機器人更好地對環境進行認知、辨識,與圖像信息在機器人領域的應用同樣,須要強大智能軟件算法支撐,PCL就爲此而生,最重要的是PCL自己就是爲機器人而發起的開源項目,PCL中不只提供了對現有的RGBD信息的獲取設備的支持,還提供了高效的分割、特徵提取、識別、追蹤等最新的算法,最重要的是它能夠移植到androidubuntu等主流Linux平臺上,PCL無疑將會成爲機器人應用領域一把瑞士軍刀。模塊化

CAD/CAM、逆向工程

大部分工業產品是根據二維或三維CAD模 型製造而成,但有時由於數據丟失、設計屢次更改、實物引進等緣由,產品的幾何模型沒法得到,於是經常須要根據現有產品實物生成物體幾何模型。逆向工程技術 可以對產品實物進行測繪,重構產品表面三維幾何模型,生成產品製造所需的數字化文檔。在一些工業領域,如汽車製造業,許多零件的幾何模型都經過逆向工程由 油泥模型或實物零件得到,目前在CAD/CAM領域利用激光點雲進行高精度測量與重建成爲趨勢,同時引來了新的問題,經過獲取的海量點雲數據,來提取重建模型的幾何參數,或者形狀模型,對模型進行智能檢索,從點雲數據獲取模型的曲面模型等,諸如此類的問題解決方案在PCL中都有涉及。例如kdtreeoctree對海量點雲進行高效壓縮存儲與管理,其中濾波、配準、特徵描述與提早基礎處理,能夠應用於模型的智能檢索,以及後期的曲面重建和可視化都在PCL中有相應的模塊。總之,三維點雲數據的處理是逆向工程中比較重要的一環,PCL中間全部的模塊正是爲此而生的。性能

激光遙感測量

能 夠直接獲取高精度三維地面點數據,是對傳統測量技術在高程數據獲取及自動化快速處理方面的重要技術補充。激光遙感測量系統在地形測繪、環境檢測、三維城市 建模、地球科學、行星科學等諸多領域具備普遍的發展前景,是目前最早進的能實時獲取地形表面三維空間信息和影像的遙感系統。目前,在各類提取地面點的算法 中,算法結果與世界結果之間差異較大,違背了實際狀況,PCL中強大的模塊能夠助力此處的各類需求。單元測試

虛擬現實、人機交互

    虛擬現實技術(簡稱VR), 又稱靈境技術,是以沉浸性、交互性和構想性爲基本特徵的計算機高級人機界面。它綜合利用了計算機圖形學、仿真技術、多媒體技術、人工智能技術、計算機網絡 技術、並行處理技術和多傳感器技術,模擬人的視覺、聽覺、觸覺等感受器官功能,令人可以沉浸在計算機生成的虛擬境界中,並可以經過語言、手勢等天然的方式 與之進行實時交互,建立了一種適人化的多維信息空間,具備廣闊的應用前景。目前各類交互式體感應用的推出,讓虛擬現實與人機交互發展很是迅速,以微軟、華 碩、三星等爲例,目前諸多公司推出的RGBD解決方案,勢必會讓虛擬現實走出實驗室,由於現有的RGBD設備已經開始大量推向市場,只是缺乏,其餘應用的跟進,這正是在爲虛擬現實和人機交互應用鑄造生態鏈的底部,筆者認爲這也正是PCL爲什麼在此時才把本身與世人分享的重要緣由所在,它將是基於RGBD設備的虛擬現實和人機交互應用生態鏈中最重要的一個環節。讓咱們抓住這一個節點,立足於交互式應用的一片小天地,希望本書來的不是太遲。

PCL在中國

PCL雖然在國際上,有如此多的組織和公司參與,因爲發展如此迅速,目前在google中檢索出中文相關的PCL探討,有且只有一條,固然這也是筆者出書緣由之一了,事實上,如圖1.2所示,在全球範圍內,惟獨在中國的版塊上,沒有參與組織,這裏但願廣大讀者,能夠爲中國板塊上添加一個小旗幟。固然,確定有科研工做者的在應用或者學習PCL了,筆者依託於中國農業大學、農業部信息獲取重點實驗室,在與創始人Ruda博士交流後,深感PCL在複雜的農業對象中有不可估量的做用,例如對動植物的重建測度、果蔬等分級檢測等應用領域,決定把PCL做爲基礎研究平臺來開展實際應用。同時用學習筆記撰寫了本書,把PCL與國人分享,相信在不久的未來,與2D信息處理庫OpenCV同樣,中國將是PCL最大的用戶和貢獻者基地。

PCL的結構和內容

如圖3PCL架構圖所示,對於3D點雲處理來講,PCL徹底是一個的模塊化的現代C++模板庫。其基於如下第三方庫:BoostEigenFLANNVTKCUDAOpenNIQhull,實現點雲相關的獲取、濾波、分割、配準、檢索、特徵提取、識別、追蹤、曲面重建、可視化等。

PCL利用OpenMPGPUCUDA等先進高性能計算技術,經過並行化提升程序實時性。K近鄰搜索操做的構架是基於FLANN (Fast Library for Approximate Nearest Neighbors)所實現的,速度也是目前技術中最快的。PCL中的全部模塊和算法都是經過Boost共享指針來傳送數據的,於是避免了屢次複製系統中已存在的數據的須要,從0.6版本開始,PCL就已經被移入到WindowsMacOSLinux系統,而且在Android系統也已經開始投入使用,這使得PCL的應用容易移植與多方發佈。

3 PCL架構圖

從算法的角度,PCL是 指歸入了多種操做點雲數據的三維處理算法,其中包括:過濾,特徵估計,表面重建,模型擬合和分割,定位搜索等。每一套算法都是經過基類進行劃分的,試圖把 貫穿整個流水線處理技術的全部常見功能整合在一塊兒,從而保持了整個算法實現過程當中的緊湊和結構清晰,提升代碼的重用性、簡潔可讀。在PCL中一個處理管道的基本接口程序是:

建立處理對象:(例如過濾、特徵估計、分割等);

使用setInputCloud經過輸入點雲數據,處理模塊;

設置算法相關參數;

調用計算(或過濾、分割等)獲得輸出。

爲了進一步簡化和開發,PCL被分紅一系列較小的代碼庫,使其模塊化,以便可以單獨編譯使用提升可配置性,特別適用於嵌入式處理中:

libpcl filters:如採樣、去除離羣點、特徵提取、擬合估計等數據實現過濾器;

 libpcl features:實現多種三維特徵,如曲面法線、曲率、邊界點估計、矩不變量、主曲率,PFHFPFH特徵,旋轉圖像、積分圖像,NARF描述子,RIFT,相對標準誤差,數據強度的篩選等等;

libpcl I/O:實現數據的輸入和輸出操做,例如點雲數據文件(PCD)的讀寫;

 libpcl segmentation:實現聚類提取,如經過採樣一致性方法對一系列參數模型(如平面、柱面、球面、直線等)進行模型擬合點雲分割提取,提取多邊形棱鏡內部點雲等等;

  • libpcl surface:實現表面重建技術,如網格重建、凸包重建、移動最小二乘法平滑等;

  libpcl register:實現點雲配準方法,如ICP等;

  libpclkeypoints:實現不一樣的關鍵點的提取方法,這能夠用來做爲預處理步驟,決定在哪兒提取特徵描述符;

 libpcl range :實現支持不一樣點雲數據集生成的範圍圖像。

爲了保證PCL中操做的正確性,上述提到的庫中的方法和類包含了單位和迴歸測試。這套單元測試一般都是由專門的構建部門按需求編譯和驗證的。當某一部分測試失敗時,這些特定部分的各自做者就會當即被告知。這完全地保證了代碼測試過程出現的任何變故,以及新功能或修改都不會破壞PCL中已經存在的代碼。

 

參考文獻

1.  http://pointclouds.org/2012/11/9

2.  朱德海,郭浩,蘇偉,點雲庫PCL學習教程,北京航空航天出版社,2012-10-1

相關文章
相關標籤/搜索