pcl cmake 例子 linux,Ubuntu16.04下PCL点云库的安装及使用demo

必备组件安装

PCL点云库安装

sudo apt install libpcl-dev

注意:如果在Ubuntu14.04下安装的是libpcl-all,一般情况下在Ubuntu的软件仓库里首选带dev后缀的和什么后缀都不带的库版本。这里安装的是PCL1.7版本

最终安装到的路径为:

头文件目录:/usr/include

库文件目录:/usr/lib/x86_64-linux-gnu

所以实际上这个库安装后,只有一些.h文件和在库文件目录中的.so文件。

cmake中调用方法

CMakeLists.txt中:

find_package(PCL REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})

link_directories(${PCL_LIBRARY_DIRS})

并在最后的target_link_libraries()命令中加入${PCL_LIBRARIES}

注意:只要find_package能够找到库,那一定会产生如下几个变量:

PCL_INCLUDE_DIRS:存储的是PCL库所有的头文件所在的目录

PCL_LIBRARY_DIRS:存储的是PCL库所有的库文件(共享库或者静态库或者源文件)所在的目录

PCL_LIBRARIES:存储的是PCL库每个库文件(即共享库或者静态库或者源文件)的详细位置(包括文件名)

PCL_FOUND:存储是否找到了这个PCK库

PCL_DEFINITIONS:

注意:include_directories作用是添加一个新的目录到cmake的头文件搜索目录里。

link_directories作用是添加一个新的目录到cmake的库文件搜索目录里。然而很多库都喜欢把库文件放在/usr/lib/x86_64-linux-gnu这个文件夹下

VTK库安装

sudo apt install libvtk6-dev libvtk6.2

VTK库在cmake中的使用参见pcl库的使用,几乎一模一样。

注意:由于VTK库与PCL库是配套的,但是大于等于7.1的VTK库会与PCK库不兼容,其体现在InsertTupleValue等找不到。故最好安装小于7.1的版本。具体请参见VTK版本不兼容现象

另外注意在应用商店里python-vtk包和libpcl-dev包先后安装的时候会相互卸载没用到的组件,导致一个安装了,同时另一个被卸载了,请务必注意。

Eigen库的安装

Eigen库的安装,Eigen库是一个只有头文件没有库文件的库,所以使用的时候只需要include_directories导入头文件目录即可。

Boost库的安装

与上述类似,但是注意的是在Ubuntu16.04中,cmake不能自动找到Boost,需要先设置BOOST_ROOT

示例demo

CMakeLists.txt

其cmakelists.txt文件如下:

cmake_minimum_required(VERSION 3.9)

project(pcldemo)

set(CMAKE_CXX_STANDARD 17)

find_package(Eigen3 REQUIRED)

include_directories("/usr/include/eigen3")#很奇怪的是Eigen只有头文件没有库文件,所以只能通过这种方式导入即可使用Eigen

# pcl

find_package( PCL REQUIRED)

include_directories( ${PCL_INCLUDE_DIRS} )

link_directories(${PCL_LIBRARY_DIRS})

#Boost

set(BOOST_ROOT "/usr/local/boost") #这个是我自己加的,因为原来Findboost.cmake提示找不到boost库

find_package(Boost REQUIRED)

include_directories(${Boost_INCLUDE_DIRS})

link_directories(${Boost_LIBRARY_DIRS})

#VTK

find_package(VTK REQUIRED)

include_directories(${VTK_INCLUDE_DIRS})

link_directories(${VTK_LIBRARY_DIRS})

add_executable(pcldemo main.cpp)

target_link_libraries(pcldemo

"/usr/lib/x86_64-linux-gnu/libpcl_visualization.so.1.7.2"

libboost_system.so libboost_filesystem.so

${VTK_LIBRARIES}

)

尚待解决的问题:

最棒target_link_libraries的时候,visualization.so必须要用全路径,直接写名字却不行,尚待研究。其次,对于PCL库,直接在target_link_libraries中用${PCL_LIBRARIES}的调用却不行,尚待研究。

main函数

#include

#include

#include

int main(int argc, char* argv[]){

pcl::PointCloud<:pointxyzrgb>::ConstPtr cloud(new pcl::PointCloud<:pointxyzrgb>);

pcl::visualization::CloudViewer viewer("Simple Cloud Viewer");

viewer.showCloud(cloud);

while (!viewer.wasStopped())

{

}

}

注意,网上有些demo是错误的,就在于对cloud的定义上,少了一个ConstPtr子类,我就为这个问题折腾了好几天,果然不能笃信权威啊。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值