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安装详解以及运行时遇到的一些错误

2018年03月16日 14:49:50 e_small 阅读数:1924
 

方式一:官网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才可以。

第二步:下载源码

第三步:编译源码

  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

ubuntu16.04 pcl安装教程的更多相关文章

  1. Ubuntu16.04上安装cudnn教程和opencv

    https://blog.csdn.net/wang15061955806/article/details/80791112 Ubuntu16.04上安装cudnn教程 2018年06月24日 14: ...

  2. SLAM+语音机器人DIY系列:(二)ROS入门——3.在ubuntu16.04中安装ROS kinetic

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  3. 通过Anaconda在Ubuntu16.04上安装 TensorFlow(GPU版本)

    一. 安装环境 Ubuntu16.04.3 LST GPU: GeForce GTX1070 Python: 3.5 CUDA Toolkit 8.0 GA1 (Sept 2016) cuDNN v6 ...

  4. Ubuntu16.04下安装多版本cuda和cudnn

    Ubuntu16.04下安装多版本cuda和cudnn 原文 https://blog.csdn.net/tunhuzhuang1836/article/details/79545625 前言 因为之 ...

  5. Ubuntu16.04编译安装php

    #Ubuntu16.04编译安装php Ubuntu16.04上面搭建基于Nginx的php服务.Nginx使用apt直接安装的. sudo apt install nginx php的安装部署步骤主 ...

  6. Ubuntu16.04下安装数据库oracle客户端

    在Ubuntu16.04下安装oracle数据库客户端,使Django项目连接到远程Oracle数据库. 1.下载oracle客户端安装包: 进入官网http://www.oracle.com/tec ...

  7. Ubuntu16.04下安装redis

    Ubuntu16.04下安装redis 保证网络畅通,选定好下载工作路径,执行以下命令下载redis-3.2.6: sudo wget http://download.redis.io/release ...

  8. ubuntu16.04 python3 安装selenium及环境配置

    环境 ubuntu16.04 python3 安装selenium sudo pip3 install seleium 默认安装完是支持firefox,但是更新得太慢对于较新的firefox已经不支持 ...

  9. Ubuntu16.04下安装Hadoop

    一.记录理由 刚开始只是想要学习怎么使用Hive的.想着安装应该很简单,没想到花了整整一天的时间来安装,为了避免下次犯同样的错误,特此记录. 二.安装Hadoop 网上教你怎么安装Hadoop的文章有 ...

随机推荐

  1. P1010 一元多项式求导

    1010 一元多项式求导 (转跳点:

  2. tensorflow学习笔记--dataset使用,创建自己的数据集

    数据读入需求 我们在训练模型参数时想要从训练数据集中一次取出一小批数据(比如50条.100条)做梯度下降,不断地分批取出数据直到损失函数基本不再减小并且在训练集上的正确率足够高,取出的n条数据还要是预 ...

  3. 二十一、JavaScript之访问对象属性

    一.代码如下 二.执行效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" cont ...

  4. 060-PHP函数定义和调用

    <?php function add($x,$y){ //定义函数add return $x+$y; } echo add(15,6); //调用函数并输出结果 ?>

  5. CF1209A Paint the Numbers

    You are given a sequence of integers a1,a2,…,an. You need to paint elements in colors, so that: If w ...

  6. 【转载】使用driver.findElement(By.id("txtPhoneNum")).getText();获取文本

    今天在写自动化测试脚本的时候要获取一个输入框中的文本写了如下脚本: getAndSwitch("http://cas.minshengnet.com:14080/register/eRegi ...

  7. 17 —— 服务端渲染 —— art-template

    一,前端渲染数据 的弊端 仿 apache 服务器与客户端的几次交互: 1,加载静态页面 2,加载静态资源 3,发送 ajax 请求 ,接收请求并处理返回 . 4,前端浏览器接收数据循环遍历. 存在的 ...

  8. Day1-T4

    原题目 Describe:注意是“两次及以上”而不是“两种及以上”!! code: #include<bits/stdc++.h> using namespace std; int k,m ...

  9. Session简单介绍

    Session 会话 , Session是基于Cookie的一种会话机制. Cookie是服务器返回一小份数据给客户端,并且存放在客户端上. Session是,数据存放在服务器端. 常用API //得 ...

  10. javascript中new操作符的原理

    javascript中的new是一个语法糖,对于学过c++,java 和c#等面向对象语言的人来说,以为js里面是有类和对象的区别的,实现上js并没有类,一切皆对象,比java还来的彻底 new的过程 ...