引言
pcl1.8.0,較pcl1.7和1.6多了不少算法,很多感興趣的方法都在pcl1.8中有所實(shí)現(xiàn)。當(dāng)pcl11.8.0rc1和rc2發(fā)布時(shí)就迫不及待的下載下來進(jìn)行使用,用了幾個(gè)月發(fā)現(xiàn)pcl1.8.0rc版有幾個(gè)bug無法解決,如:表面重建時(shí)無法映射紋理。得知2016/06/14 github 發(fā)布正式版pcl1.8.0時(shí),就立馬下載下來準(zhǔn)備編譯并記錄整個(gè)過程,感興趣的小伙伴可以參考。
pcl官網(wǎng)已經(jīng)有windows平臺(tái)下的編譯過程,現(xiàn)在我基于此教程編譯PCL1.8.0并配置。
PCL1.8.0源碼包下載
下載地址:https://github.com/PointCloudLibrary/pcl/releases
準(zhǔn)備工具
編譯器VS2013,CMakeGUI 3.3.2,系統(tǒng)版本win7 64位。
提示:軟件版本根據(jù)自己情況選擇,沒必要非要和博客中一致。
第三方依賴庫(kù)
第三方庫(kù) |
用途 |
是否必須 |
Boost |
用于智能指針等操作 |
必選 |
Eigen |
用于矩陣運(yùn)算等 |
必選 |
FLANN |
用于鄰域搜索等 |
必選 |
VTK |
可視化庫(kù),用于顯示點(diǎn)云等 |
必選 |
Qt |
用于圖像交互界面等 |
可選 |
QHULL |
used for convex/concave hull decompositions in surface |
可選 |
OpenNI |
用于獲取點(diǎn)云等 |
可選 |
提示:在編譯PCL1.8.0時(shí)請(qǐng)確保您已安裝了正確的第三方依賴庫(kù)。不能混合32位和64位代碼,并且不能混用不同編譯器編譯第三方庫(kù)。有些庫(kù)需要自己編譯,這篇博客里就不對(duì)如何編譯第三方依賴庫(kù)進(jìn)行講解了,只詳述PCL1.8.0的編譯過程。
編譯PCL1.8.0
官方編譯教程:http://www./documentation/tutorials/compiling_pcl_windows.php
提示:跟著官方教程操作即可成功。
(1) 將源碼包pcl-pcl-1.8.0.zip解壓到目錄:F:\pcl-1.8.0
提示:根據(jù)自己需要解壓即可,本博客一定程度上參考了官方教程。
(2)打開CMakeGUI
源碼路徑:F:/pcl-1.8.0
項(xiàng)目路徑:F:/pcl-1.8.0/build
如圖:
點(diǎn)擊configure,選擇合適的編譯器(VS2013 64位)
(3)出現(xiàn)無法找到Eigen庫(kù)
將變量EIGEN_INCLUDE_DIR對(duì)應(yīng)的值修改為Eigen庫(kù)所在目錄。
如:F:\Eigen\eigen3
重新configure
提示找不到Boost庫(kù),添加下面三個(gè)變量和相應(yīng)的路徑,重新configure。
BOOST_ROOT="F:\Boost"
Boost_LIBRARY_DIRS="F:\Boost\lib"
BOOST_INCLUDEDIR="F:\Boost\include\boost-1_59"
(4)修改安裝路徑
或者,打開CPackConfig.cmake文件,修改CPACK_INSTALL_PREFIX值為F:\PCL1.8.0
點(diǎn)Generate生成VS工程。
(5)打開PCL.sln
分別批生成Debug和Release版本,并分別安裝。
(6)Debug和Release版編譯、安裝成功
Debug
Release
(7)提示
Cmake構(gòu)建工程時(shí)可能會(huì)出現(xiàn)其他依賴庫(kù)缺失情況,一一補(bǔ)上就行。使用Cmake構(gòu)建工程成功,也可能在VS中編譯時(shí)會(huì)出現(xiàn)其他問題,根據(jù)提示也可以一一解決。整個(gè)編譯過程很耗時(shí),Debug和Release完全編譯一次要一個(gè)小時(shí)左右。如果需要All in One安裝包,在Cmake中勾選生成All in One包即可(特別費(fèi)時(shí)所以就沒勾選)。
配置
將下列路徑加入環(huán)境變量:
F:\PCL1.8.0C\bin;F:\PCL1.8.0C\3rdParty\FLANN\bin;F:\PCL1.8.0C\3rdParty\OpenNI2\Tools;F:\PCL1.8.0C\3rdParty\Qhull\bin;F:\PCL1.8.0C\3rdParty\VTK\bin;
測(cè)試Debug版
(1)打開VS2013新建項(xiàng)目,添加如下代碼
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
int user_data;
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer)
{
viewer.setBackgroundColor(1.0, 0.5, 1.0);
pcl::PointXYZ o;
o.x = 1.0;
o.y = 0;
o.z = 0;
viewer.addSphere(o, 0.25, "sphere", 0);
std::cout << "i only run once" << std::endl;
}
void viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{
static unsigned count = 0;
std::stringstream ss;
ss << "Once per viewer loop: " << count++;
viewer.removeShape("text", 0);
viewer.addText(ss.str(), 200, 300, "text", 0);
//FIXME: possible race condition here:
user_data++;
}
int main()
{
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::io::loadPCDFile("example.pcd的位置", *cloud);
pcl::visualization::CloudViewer viewer("Cloud Viewer");
//blocks until the cloud is actually rendered
viewer.showCloud(cloud);
//use the following functions to get access to the underlying more advanced/powerful
//PCLVisualizer
//This will only get called once
viewer.runOnVisualizationThreadOnce(viewerOneOff);
//This will get called once per visualization iteration
viewer.runOnVisualizationThread(viewerPsycho);
while (!viewer.wasStopped())
{
//you can also do cool processing here
//FIXME: Note that this is running in a separate thread from viewerPsycho
//and you should guard against race conditions yourself...
user_data++;
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
(2)新建屬性表PCLCDebug
VC++目錄,添加包含目錄
VC++目錄,添加庫(kù)目錄
連接器,輸入,附加依賴項(xiàng)
提示:我是把所有的Debug依賴庫(kù)都加上,因?yàn)橛玫亩?,懶得去挑?
(2)最終結(jié)果
編譯和配置結(jié)束
|