關於PCL的那些事——環境搭配(PCL1.8 64bitWIN8.1 VS2013)

新項目是3D重建,最近都在查資料看論文,關於生成3D點雲,特徵檢測,點雲匹配,曲面重建等等。有篇知乎寫得不錯,講了實現3D重建的相關體系和方法。不過我也是從那裏面得到了啓發,方法和裏面也不太相同,因爲裏面主要是多幅2D圖像三維重建和單目三維重建,他們都沒有深度信息而是通過SFM等一些算法計算出景深。而我使用的是RGBD傳感器如kinect,xtion。所以我關注與3D特徵檢測匹配等。大家可以看看微軟的KinectFusion和PCL的kinfu以及MIT的Kintinuous。關於PCL,相信能看到這篇博客的童鞋們都是知道的:Point Cloud Library是處理三維點雲的第三方庫,非常的強大,地位相當於opencv。PCL集成了很多有名的處理3D點雲的算法,學習使用PCL以及瞭解背後的算法非常重要。那麼進入正題,今天我來給大家講一下如何配置PCL(博主也是走了好多彎路啊..)。

首先我們知道網上大多數都是PCL1.72以前的配置,網上有個老外的教程關於PCL1.72在win8.1,vs2012/2013/2015的配置,其中我們看到1.72還不支持opennigrabber所以只能用他提供的kinectgrabber。但是我用的是xtion不是kinect,所以我必須使用opennigrabber,怎麼辦呢?opennigrabber支持openni1.x但是openni1.x只支持vs2010以前 openni2.x支持新的vs但是PCL1.72不支持openni2.x。所以使用xtion的孩子怎麼半呢(使用kinect的孩子們不需要擔心)?要麼使用單獨的openni2.x去獲得3D點云然後用PCL做其他研究,要麼,嗯,配置PCL1.8吧哈哈。福音來了,PCL1.8開始支持openni2.x了,所以我們開始在win8.1上配置PCL1.8,使用vs2013和cmake3.3。

下載PCL1.8之前,第一步是下載配置PCL所需的第三方庫(全是最新版本官網下載鏈接,如果國內沒法下載的話大家說一下,我會上傳到CSDN並給出鏈接):
Boost 1.59.0
Eigen 3.2.7
FLANN 1.8.4
Qhull 2012.1
VTK 6.3.0
OpenNI 2.2.0.33 Beta

除了openni2.2之外都是源碼,需要使用cmake編譯出include和lib,dll(Boost不同)。openni2直接安裝就好,注意即使我們是64位系統,但是我們要根據開發的應用來決定下載32位還是64位的三方庫。如要開發win32就下載32位,要開發x64就下載64位。接下來介紹其他5個庫的配置方法:

Boost 1.59.0
首先下載微軟的mpi,然後在boost\tools\build\src\tools中找到mpi.jam,修改其中的這三行:
249 line            local cluster_pack_path_native = "C:\\Program Files\\Microsoft MPI" ; 
251 line            if [ GLOB $(cluster_pack_path_native)\\Inc : mpi.h ] 
260 line            options = <include>$(cluster_pack_path)/Inc
然後打開cmd,進入boost文件夾,運行: bootstrap.bat    運行結束後會生成project-config.jam,打開並在第四行加上:using mpi ; 
接下來還是用cmd進入boost文件夾,運行:b2.exe toolset=msvc-12.0 address-model=32 --build-dir=build\x86 install --prefix="X:\X\Boost" -j8
注意如果要開發x64的程序而不是64位系統,請運行:b2.exe toolset=msvc-12.0 address-model=64 --build-dir=build\x64 install --prefix="X:\X\Boost" -j8
(其中沒事msvc-12.0代表vs2013,如果是11.0是vs2012,14.0是vs2015  後面的X:\X\Boost是boost的文件夾,b2.exe就在裏面)
然後等着就好了,時間有點久,耐心等。完成後在環境變量中建立BOOST_ROOT變量,值爲boost文件夾地址X:\X\Boost

Eigen 3.2.7
這個簡單,使用cmake,sourse選eigen文件夾(如C:\eigen),build目錄選eigen下的build(如C:\eigen\build)。點擊Configure會提示新建build文件夾,選擇vs12 2013編譯器(編譯x64版本的話選擇vs12 2013 win64),然後注意找到CMAKE_INSTALL_PREFIX這個選項,很重要,默認爲C:\Program Files (x86)\Eigen,請修改爲你的eigen所在文件夾,如上面的C:\eigen,不然在之後的install會出錯。修改完後再次點Configure,然後Generate。在eigen\build文件夾中打開eigen.sln工程文件,待加載完文件後,生成all_build,完成後生成install。完成後可以看到eigen文件夾中出現include。(PS:沒有生成lib,所以debug或者release都無所謂,include都一樣)最後在環境變量中建立EIGEN_ROOT變量,值爲eigen文件夾地址。

FLANN 1.8.4
使用cmake,sourse選flann文件夾(如C:\flann),build目錄選flann下的build(如C:\flann\build)。點擊Configure會提示新建build文件夾,選擇vs12 2013編譯器(編譯x64版本的話選擇vs12 2013 win64),然後注意找到CMAKE_INSTALL_PREFIX這個選項,很重要,默認爲C:\Program Files (x86)\flann,請修改爲你的flann所在文件夾,如上面的C:\flann,不然在之後的install會出錯。然後添加一個entry:
Name: CMAKE_DEBUG_POSTFIX
Type: STRING
Value: -gd
修改完後再次點Configure,然後Generate。在C:\flann\src\cpp\flann\util中找到serialization.h文件 在92行BASIC_TYPE_SERIALIZER(bool);之後加入以下代碼:
#ifdef _MSC_VER
BASIC_TYPE_SERIALIZER( unsigned __int64 );
#endif

修改完後在flann\build文件夾中打開flann.sln工程文件,待加載完文件後,(debug和release)生成all_build,完成後生成install。完成後可以看到flann文件夾中出現include和lib文件夾。最後在環境變量中建立FLANN_ROOT變量,值爲flann文件夾地址。

Qhull 2012.1
使用cmake,sourse選qhull文件夾(如C:\qhull),build目錄選qhull下的build(如C:\qhull\build)。點擊Configure(不會提示創建build文件夾因爲build已經存在),選擇vs12 2013編譯器(編譯x64版本的話選擇vs12 2013 win64),然後注意找到CMAKE_INSTALL_PREFIX這個選項,很重要,默認爲C:\Program Files (x86)\qhull,請修改爲你的qhull所在文件夾,如上面的C:\qhull,不然在之後的install會出錯。然後添加一個entry:
Name: CMAKE_DEBUG_POSTFIX
Type: STRING
Value: -d
修改完後再次點Configure,然後Generate。在qhull\build文件夾中打開qhull.sln工程文件,待加載完文件後,修改libqhull和user_eg2的項目屬性,C/C++ -> 高級 -> 編譯爲 C++ 代碼 (/TP),完成後生成all_build(debug和release)即可,然後生成install。完成後可以看到qhull文件夾中出現include和lib文件夾。最後在環境變量中建立QHULL_ROOT變量,值爲qhull文件夾地址。

VTK 6.3.0
使用cmake,sourse選VTK文件夾(如C:\VTK),build目錄選VTK下的build(如C:\VTK\build)。點擊Configure會提示新建build文件夾,選擇vs12 2013編譯器(編譯x64版本的話選擇vs12 2013 win64),然後注意找到CMAKE_INSTALL_PREFIX這個選項,很重要,默認爲C:\Program Files (x86)\VTK,請修改爲你的VTK所在文件夾,如上面的C:\VTK,不然在之後的install會出錯。然後添加一個entry:
Name: CMAKE_DEBUG_POSTFIX
Type: STRING
Value: -gd
修改完後再次點Configure,然後Generate。在VTK\build文件夾中打開VTK.sln工程文件,待加載完文件後,(debug和release)生成all_build(時間有點久,耐心等待),完成後生成install。完成後可以看到VTK文件夾中出現include和lib文件夾。最後在環境變量中建立VTK_ROOT變量,值爲VTK文件夾地址。

第三方庫都配置好後開始配置PCL1.8
使用cmake:
Where is the source code: C:\PCL-master
Where is build the binaries: C:\PCL-master\build
點擊Configure提示新建build文件夾,選擇vs12 2013編譯器(編譯x64版本的話選擇vs12 2013 win64),正常情況下不會出現什麼問題,修改CMAKE_INSTALL_PREFIX爲C:\PCL-master,再次點擊Configure,然後generate生成PCL.sln。下圖是顯示在cmake中的結果:
(如果出現找不到eigen,vtk等等說明環境變量沒搞好,修改並重啓。建議上面配置好第三方庫時重啓電腦使環境變量生效)打開PCL.sln並生成all_build(時間很久,耐心等待),下圖爲all_build成功結果截圖:
然後到build文件夾中找到cmake_install.cmake修改第46行:file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/3rdParty/Boost" TYPE DIRECTORY FILES "X:/X/Boost/" REGEX "/[^/]*\\/uninstall\\.exe$" EXCLUDE)  其中X:/X/Boost/爲boost所在文件夾。我電腦上只有boost這個出現了錯誤,大家可以檢查一下上下文中其他第三方庫的文件夾地址有沒有正確,錯誤的可以改正。下圖是我這裏的cmake_install.cmake的這一部分:

然後生成install即可(debug和release)。成功截圖如下:

最後在環境變量中建立PCL_ROOT變量,值爲PCL文件夾地址。在PATH中加入%PCL_ROOT%\bin;%PCL_ROOT%\3rdParty\FLANN\bin;%PCL_ROOT%\3rdParty\VTK\bin  
大家可以到C:\PCL-master\test中找到大量的xx.pcd點雲文件,拷貝到bin中,然後使用cmd進入bin文件夾,運行 pcl_viewer_debug.exe xx.pcd或者pcl_viewer_release.exe xx.pcd來觀察三維點雲。我選了一個five_people.pcd,結果如下:

最後再給大家看一張我使用pclwrite類保存的pcd文件的view:

關於PCL1.8的配置就到這裏爲止,歡迎大家和我討論PCL~!

======================================================================================

2016/03/11補充:

6個第三方庫和PCL庫我放在了百度網盤裏。(鏈接: http://pan.baidu.com/s/1hrv9CGW 密碼: gbr3)

======================================================================================

2016/08/12補充:

前段時間幫學弟配pcl,才發現網上已經有了1.8的all-in-one,真是方便多了,不再需要我們自己配置各種第三方庫了。無論是win7,win8還是win10,只要你有vs2013或者vs2015,都能直接用。網址是 PCL 1.8.0  All-in-one Installer,裏面有vs2013的32位和64位版本, vs2015的32位和64位版本,還提供了各自的PDB調試文件(解壓後放入pcl安裝目錄的bin下),打開installer只需一直下一步就好了(注意更改openni的安裝路徑到PCL路徑下的3rdParty文件夾下)。安裝好後設置環境變量,PCL_ROOT裏寫pcl的安裝路徑,Path里加上;%PCL_ROOT%\bin;%OPENNI2_REDIST64% (安裝的32位的話寫%OPENNI2_REDIST%)。然後進入vs裏創建項目後,記得添加include和lib就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章