ubuntu16.04 pcl安裝教程


https://blog.csdn.net/zkj126521/article/details/80157351

https://blog.csdn.net/e_small/article/details/79581484

    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  
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 

 

PCL1.8+Ubuntu16.04安裝詳解以及運行時遇到的一些錯誤

方式一:官網prebuild版本

sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-all
可能是因為國內的關系,並沒有更新 apt-get 成功

方式二:安裝 prebuilt DEB file for PCL 1.8 for Ubunut 16.04

DEB-FILE

會報錯沒有相關依賴,解決方式: 

sudo apt-get -f update

方式三:自己編譯源碼(推薦)

以上兩種便捷方式在之后的使用中我都出現了一些問題,所以還是推薦自己編譯。

第一步:安裝依賴

 

  1. sudo apt-get update
  2. sudo apt-get install git build-essential linux-libc-dev
  3. sudo apt-get install cmake cmake-gui
  4. sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
  5. sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
  6. sudo apt-get install libflann1.8 libflann-dev
  7. sudo apt-get install libeigen3-dev
  8. sudo apt-get install libboost-all-dev
  9. sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev
  10. sudo apt-get install libqhull* libgtest-dev
  11. sudo apt-get install freeglut3-dev pkg-config
  12. sudo apt-get install libxmu-dev libxi-dev
  13. sudo apt-get install mono-complete
  14. sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre

此時運行的過程中,需要確認“需要確認是否執行‘Y/n’”,個人在時間的過程中,時而直接enter,時而輸入Y才可以。

第二步:下載源碼

git clone https://github.com/PointCloudLibrary/pcl.git
第三步:編譯源碼
 
  1. cd pcl
  2. mkdir release
  3. cd release
  4. cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \
  5. -DBUILD_GPU=ON -DBUILD_apps=ON -DBUILD_examples=ON \
  6. -DCMAKE_INSTALL_PREFIX=/usr ..
  7. make
sudo make install 
第四步(可選 and 建議):如果需要PCLVisualizer

安裝OpenNI、OpenNI2

  1. sudo apt-get install libopenni-dev
  2. sudo apt-get install libopenni2-dev

安裝ensensor

下載

sudo dpkg -i ensenso-sdk-2.0.147-x64.deb 
sudo dpkg -i codemeter_6.40.2402.501_amd64.deb

 

如缺少依賴:sudo apt-get -f install

 

Done!以上安裝步驟就完成了,但是在運行過程中遇到如下問題:

 

 

運行測試程序時出現以下錯誤

make[2]: *** No rule to make target '/usr/lib/x86_64-linux-gnu/libproj.so', needed by 'joinMap'.  Stop.

CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/joinMap.dir/all' failed
make[1]: *** [CMakeFiles/joinMap.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

*** Failure: Exit code 2 ***

解決方法,執行

sudo apt-get install libproj-dev

 

再次編譯出現以下錯誤

-- Build files have been written to: /home/wd/code/slambook-master/ch5/joinMap/build
[ 50%] Linking CXX executable joinMap
/usr/bin/ld: cannot find -lvtkproj4
collect2: error: ld returned 1 exit status
CMakeFiles/joinMap.dir/build.make:349: recipe for target 'joinMap' failed
make[2]: *** [joinMap] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/joinMap.dir/all' failed
make[1]: *** [CMakeFiles/joinMap.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
*** Failure: Exit code 2 ***

解決方法,需要在cmakelist中加一條指令修復,即在add_executable語句前面加上list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4")


 

轉自:http://blog.csdn.net/dantengc/article/details/78446600

http://blog.csdn.net/danmeng8068/article/details/77341532


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM