ubuntu16.04 pcl安裝教程
https://blog.csdn.net/zkj126521/article/details/80157351
pcl下載,網址https://github.com/PointCloudLibrary/pcl
使用git命令或者直接下載zip檔案即可。
1.安裝依賴
sudo apt-get update
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libflann1.8 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2.編譯原始碼
cmake -D CMAKE_BUILD_TYPE=None -D BUILD_GPU=ON -D BUILD_apps=ON -D BUILD_examples=ON .
make -j2
sudo make install
1
2
3
3.(可選 and 建議):如果需要PCLVisualizer。安裝OpenNI、OpenNI2
sudo apt-get install libopenni-dev
sudo apt-get install libopenni2-dev
1
2
安裝完成。
例程測試:
例1:學習向PCD檔案寫入點雲資料
來源於http://www.cnblogs.com/li-yao7758258/p/6435568.html
#include <iostream> //標準C++庫中的輸入輸出的標頭檔案
#include <pcl/io/pcd_io.h> //PCD讀寫類相關的標頭檔案
#include <pcl/point_types.h> //PCL中支援的點型別的標頭檔案
int
main (int argc, char** argv)
{
//例項化的模板類PointCloud 每一個點的型別都設定為pcl::PointXYZ
/*************************************************
點PointXYZ型別對應的資料結構
Structure PointXYZ{
float x;
float y;
float z;
};
**************************************************/
pcl::PointCloud<pcl::PointXYZ> cloud;
// 建立點雲 並設定適當的引數(width height is_dense)
cloud.width = 5;
cloud.height = 1;
cloud.is_dense = false; //不是稠密型的
cloud.points.resize (cloud.width * cloud.height); //點雲總數大小
//用隨機數的值填充PointCloud點雲物件
for (size_t i = 0; i < cloud.points.size (); ++i)
{
cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
}
//把PointCloud物件資料儲存在 test_pcd.pcd檔案中
pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);
//列印輸出儲存的點雲資料
std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;
for (size_t i = 0; i < cloud.points.size (); ++i)
std::cerr << " " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;
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
cmake_minimum_required ( VERSION 2.6 FATAL_ERROR) #對於cmake版本的最低版本的要求
project(ch2) #建立的工程名,例如原始碼目錄路徑的變數名為CH_DIR
#工程儲存目錄變數名為CH_BINARY_DIR
#要求工程依賴的PCL最低版本為1.3,並且版本至少包含common和IO兩個模組 這裡的REQUIRED意味著如果對應的庫找不到 則CMake配置的過程將完全失敗,
#因為PCL是模組化的,也可以如下操作:
# 一個元件 find_package(PCL 1.6 REQUIRED COMPONENTS io)
# 多個元件 find_package(PCL 1.6 REQUIRED COMPONENTS commom io)
# 所有元件 find_package(PCL 1.6 REQUIRED )
find_package(PCL 1.3 REQUIRED)
#下面的語句是利用CMake的巨集完成對PCL的標頭檔案路徑和連結路徑變數的配置和新增,如果缺少下面幾行,生成檔案的過程中就會提示
#找不到相關的標頭檔案,在配置CMake時,當找到了安裝的PCL,下面相關的包含的標頭檔案,連結庫,路徑變數就會自動設定
# PCL_FOUND:如果找到了就會被設定為1 ,否則就不設定
# PCL_INCLUDE_DIRS:被設定為PCL安裝的標頭檔案和依賴標頭檔案的目錄
# PCL_LIBRARIES:被設定成所建立和安裝的PCL庫標頭檔案
# PCL_LIBRARIES_DIRS:被設定成PCL庫和第三方依賴的標頭檔案所在的目錄
# PCL_VERSION:所找到的PCL的版本
# PCL_COMPONENTS:列出所有可用的元件
# PCL_DEFINITIONS:列出所需要的前處理器定義和編譯器標誌
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARIES_DIRS})
add_definitions(${PCL_DEFINITIONS})
#這句話告訴CMake從單個原始檔write_pcd建立一個可執行檔案
add_executable(write_pcd write_pcd.cpp)
#雖然包含了PCL的標頭檔案,因此編譯器知道我們現在訪問所用的方法,我們也需要讓連結器知道所連結的庫,PCL找到庫檔案由
#PCL_COMMON_LIBRARIES變數指示,通過target_link_libraries這個巨集來出發連結操作
target_link_libraries(write_pcd ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES})
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
mkdir build
cd build
cmake ..
make
1
2
3
4
結果如圖所示:
這裡寫圖片描述
例2:視覺化
來源於https://blog.csdn.net/a464057216/article/details/54864591
#include <iostream>
#include <string>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;
int main (int argc, char** argv){
typedef pcl::PointXYZRGB PointT;
pcl::PointCloud<PointT>::Ptr cloud (new pcl::PointCloud<PointT>);
std::string dir = "";//自行修改路徑
std::string filename = "sample.pcd";
if (pcl::io::loadPCDFile<PointT> ((dir+filename), *cloud) == -1){
//* load the file
PCL_ERROR ("Couldn't read PCD file \n");
return (-1);
}
printf("Loaded %d data points from PCD\n",
cloud->width * cloud->height);
pcl::visualization::PCLVisualizer viewer("Cloud viewer");
viewer.setCameraPosition(0,0,-3.0,0,-1,0);
viewer.addCoordinateSystem(0.3);
viewer.addPointCloud(cloud);
while(!viewer.wasStopped())
viewer.spinOnce(100);
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
執行結果如下:
這裡寫圖片描述
參考部落格:https://blog.csdn.net/dantengc/article/details/78446600
https://blog.csdn.net/xs1102/article/details/74736298
---------------------
作者:POFEI_IS_SHIT
來源:CSDN
原文:https://blog.csdn.net/zkj126521/article/details/80157351
版權宣告:本文為博主原創文章,轉載請附上博文連結!