<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 一文詳解點(diǎn)云庫PCL

一文詳解點(diǎn)云庫PCL

發(fā)布人:計算機視覺(jué)工坊 時(shí)間:2021-04-19 來(lái)源:工程師 發(fā)布文章

3D is here: Point Cloud Library (PCL)

摘要:

隨著(zhù)新型,低成本的3D傳感器硬件的出現(例如Kinect),以及科研人員在高級點(diǎn)云處理研究上的不斷努力,3D感知在機器人技術(shù)以及其他領(lǐng)域顯得愈發(fā)重要。

本文,我們將介紹在點(diǎn)云感知領(lǐng)域的一項最新舉措:PCL(點(diǎn)云庫– http://pointclouds.org)。PCL為3D感知領(lǐng)域提供了一種先進(jìn)且廣泛的方法,旨在為常見(jiàn)的需要用到3D功能的需求提供支持。該庫包含用于以下方面的最新算法:濾波,特征估計,表面重建,配準,模型擬合和分段。PCL得到了國際機器人技術(shù)和感知研究人員的支持。我們簡(jiǎn)要介紹下PCL,包括其算法功能和實(shí)現策略。

一、介紹

為了使機器人在非結構化環(huán)境中工作,他們需要能夠感知世界。在過(guò)去的20年中,我們走過(guò)了一段很長(cháng)的路。從簡(jiǎn)單的距離傳感器(基于聲納或紅外線(xiàn)),提供幾個(gè)字節的信息;到無(wú)處不在的相機;再到激光掃描儀。在過(guò)去的幾年中,像DARPA Urban Challenge上用的Velodyne旋轉激光雷達,和傾斜激光PR2上使用的掃描儀為我們提供了高質(zhì)量的3D世界的表示形式-點(diǎn)云。但是很遺憾,這些系統都很昂貴,要花費數千甚至數十萬(wàn)美元數千美元,因此很多機器人項目都無(wú)法承擔這樣的開(kāi)支。

但是最近幾年,3D傳感器變得很容易獲得,這改變了游戲規則。比如,用于微軟XBox 360游戲系統的Kinect傳感器,基于PrimeSense技術(shù)。只要150美元以下的價(jià)格就能買(mǎi)到。它像2D一樣提供實(shí)時(shí)的點(diǎn)云圖。因此, 我們可以預見(jiàn),未來(lái)大部分機器人都能以三維的視角看這個(gè)世界。所有這些需要的,就是一種有效處理點(diǎn)云的機制,這就是我們介紹的開(kāi)源點(diǎn)云庫-PCL,圖1是Logo.

1.png

PCL是一個(gè)完全免費的,BSD許可的庫,用于n維點(diǎn)云和3D幾何處理。此外,PCL完全集成在ROS中——機器人操作系統(請參閱http://ros.org),并且已經(jīng)被廣泛應用于機器人社區中的各種項目。

二、架構和實(shí)施

PCL完全是一個(gè)模塊化的現代C++3D點(diǎn)云處理庫??紤]到當今CPU的效率和性能,PCL中的底層數據結構大量使用了SSE優(yōu)化。其大部分數學(xué)運算的實(shí)現是基于Eigen(一個(gè)開(kāi)源的線(xiàn)性代數代數庫)。此外,PCL還提供了對OpenMP(請參閱http://openmp.org)和Intel線(xiàn)程構建模塊(TBB)庫的支持,以實(shí)現多核并行化??焖賙最近鄰搜索算法的主干是由FLANN提供(一個(gè)執行快速近似最近鄰搜索的庫) 。PCL中的所有模塊和算法均通過(guò)使用Boost共享指針的傳遞數據(參見(jiàn)圖2),因此避免重新復制系統中已經(jīng)存在的數據。從0.6版開(kāi)始,PCL已被移植到Windows,MacOS和Linux,并且Android端正在開(kāi)發(fā)中。

2.png從算法角度,PCL旨在集成多種3D處理算法來(lái)處理點(diǎn)云數據,包括:濾波,特征估計,表面重建,模型擬合,分割,配準等。每組算法都是通過(guò)基類(lèi)定義的,這些基類(lèi)試圖集成整個(gè)流程中所有通用功能,從而使實(shí)際算法的實(shí)現緊湊而簡(jiǎn)潔。PCL中處理這種流程的基本接口是:

創(chuàng )建處理對象(例如,濾波器,特征估計器,分割);

使用setInputCloud傳遞輸入點(diǎn)云數據集到處理模塊;

設置一些參數;

調用計算(或濾波,分割等)得到輸出。

圖2中展示的偽代碼程序顯示標準特征估算過(guò)程分兩步進(jìn)行,首先創(chuàng )建NormalEstimation對象并傳遞輸入數據集,然后結果和原始輸入一起傳遞給FPFH 估計對象。

為了進(jìn)一步簡(jiǎn)化開(kāi)發(fā),將PCL分為一系列較小的代碼庫,可以單獨編譯:

libpcl filters:實(shí)現采樣、去除離群點(diǎn)、特征提取、擬合估計等過(guò)濾器;

libpcl features:實(shí)現多種三維特征的篩選,如:曲面法線(xiàn)、曲率、邊界點(diǎn)估計等;

libpcl I/O:實(shí)現數據的輸入和輸出操作;

libpcl surface:實(shí)現表面重建技術(shù),如網(wǎng)格重建,凸包重建;

libpcl registeration:實(shí)現點(diǎn)云配準方法,如ICP等;

libpcl keypoints:實(shí)現不同的關(guān)鍵點(diǎn)提取方法;

libpcl range image:實(shí)現支持不同點(diǎn)云數據集生成的范圍圖像。

為了確保PCL中操作的正確性,上述每個(gè)庫中的方法和類(lèi)包含單元測試和回歸測試。單元測試套件是按需編譯的,并由專(zhuān)門(mén)的人員頻繁驗證構建,以及特定組件的各自作者組件測試失敗時(shí)被立即通知。這樣可以確保對代碼中的所有更改進(jìn)行全面測試,并且任何新功能或修改都不會(huì )破壞依賴(lài)于PCL的現有代碼。

另外,大量的示例和教程可通過(guò)C ++源文件或按照PCL Wiki網(wǎng)頁(yè)上一步步的操作說(shuō)明獲得。

三、PCL和ROS

PCL設計理念中的基石之一是由感知處理圖(PPG)表示。PPG背后的合理性在于,大多數點(diǎn)云處理的應用程序都可以表述為一組具體的構造塊,并對其進(jìn)行參數化以實(shí)現不同的結果。例如,墻面檢測算法,門(mén)檢測或桌子檢測之間在算法上沒(méi)有區別,它們都共享相同的構造塊,即平面約束分割算法。上述提到的案例中,發(fā)生的變化是用于運行算法的一系列參數。

考慮到這一點(diǎn),并基于以前設計其他3D處理庫的經(jīng)驗。在最近的ROS中,我們決定提供PCL中的每種算法作為一個(gè)獨立的構造塊,可以輕松連接其他塊,從而與ROS生態(tài)系統中節點(diǎn)連接的方式相同。

圖3展示了一個(gè)具體的節點(diǎn)模型PPG示例,該示例用于識別水平面區域上的一組點(diǎn)集。

3.png

四、可視化

PCL帶有自己的可視化庫,基于VTK 。VTK為渲染3D點(diǎn)云和表面數據提供了強大的多平臺支持,包括可視化張量,紋理和體積法。

PCL可視化庫旨在集成PCL和VTK,通過(guò)給 n 維點(diǎn)云結構提供全面的可視化層。其目的是能夠快速原型化并可視化在此類(lèi)超維數據上運行的算法的結果。從0.2版開(kāi)始,可視化庫提供:

對所有n維點(diǎn)云數據集渲染和設置視覺(jué)屬性的方法(顏色,點(diǎn)大小,不透明度等);

用點(diǎn)集或參數方程式的方法在屏幕上繪制基本3D形狀的方法(例如,圓柱體,球體,線(xiàn),多邊形等);

用于2D繪制的直方圖可視化模塊(PCLHistogramVisualizer);

大量的幾何和顏色處理程序。在這里,用戶(hù)可以指定將什么尺寸用于3D笛卡爾空間中的點(diǎn)位置(見(jiàn)圖4),或者應使用什么顏色來(lái)渲染點(diǎn)(見(jiàn)圖5);

4.png

深度圖可視化模塊(見(jiàn)圖6)。

5.png

處理程序交互器是描述如何計算空間中每個(gè)點(diǎn)的顏色和3D幾何形狀,在屏幕上顯示以及用戶(hù)如何與數據進(jìn)行交互。

6.png

該庫還提供了一些通用工具,用于可視化PCD文件以及在ROS中實(shí)時(shí)可視化來(lái)自傳感器的數據流。

五、使用范例

在本節中,我們提供了兩個(gè)代碼段,展示了使用PCL進(jìn)行濾波和分段操作的靈活性和簡(jiǎn)便性,隨后是三個(gè)使用PCL解決感知問(wèn)題的應用示例:i)導航和映射,ii)目標識別, iii)操縱和抓取。

在將任何更高級別的運算應用于原始數據集之前,濾波是任何原始點(diǎn)云數據集通常都會(huì )經(jīng)過(guò)的最重要的運算之一。算法2和圖7給出了一個(gè)代碼段,以及在該圖左側部分的點(diǎn)云數據集上運行該代碼段后獲得的結果。該濾波器基于估算給定鄰域中的點(diǎn)的一組統計信息(此處k = 50),并使用它們選擇所有離平均距離μ在距離以?xún)鹊狞c(diǎn)作為內點(diǎn)。

7.png

第二個(gè)示例使用RANSAC 模型構成平面的分割操作,如算法3所示。輸入和輸出結果如圖8所示。在此示例中,我們使用RANSAC估計器隨機選擇 3個(gè)非共線(xiàn)點(diǎn),并根據整體計算出最佳模型內點(diǎn)數。內部閾值標準設置為每個(gè)點(diǎn)到平面模型的最大距離為1cm。

8.png

圖9的左側展示了一個(gè)更復雜的導航和地圖應用程序的示例,其中PR2機器人必須自主識別門(mén)及其把手,以便探索房間并找到電源插座。在這里,使用的模塊包括受約束的平面分割,區域增長(cháng)法,凸包估計和多邊形棱鏡提取算法。然后將這些算法的結果用于提取有關(guān)門(mén)和把手的形狀和尺寸的某些統計信息,以便唯一地識別它們并拒絕誤報。

圖9的右側部分顯示了一個(gè)從復雜3D場(chǎng)景進(jìn)行實(shí)時(shí)目標識別的實(shí)驗。在這里,在分割和配準框架中使用了一組復雜的3D關(guān)鍵點(diǎn)和特征描述符,旨在識別真實(shí)世界中以前見(jiàn)過(guò)的物體。

9.png

圖10提供了一個(gè)抓取和操控的應用程序。首先從水平桌面上分割出對象,將它們聚類(lèi)成獨立單元,然后應用配準運算,該運算將語(yǔ)義信息附加到每個(gè)找到的聚類(lèi)上。

10.png

*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 點(diǎn)云感知

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>