当前位置:   article > 正文

PCL安装与使用_pcl 安装

pcl 安装

1 apt安装

ubuntu20.04及以上版本下可以直接通过apt方式安装pcl编译好的二进制文件,二进制安装的版本为1.10。

  1. sudo apt update
  2. sudo apt install libpcl-dev

2 源码安装

在pcl的github上下载对应的版本进行安装:

https://github.com/PointCloudLibrary/pcl/releases

本例程使用pcl-1.12.1为默认版本进行学习,下载如下图的版本即可;注意不是pre-release预览版哦。

  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.9 libflann-dev
  7. sudo apt-get install libeigen3-dev
  8. sudo apt-get install libboost-all-dev
  9. sudo apt-get install libqhull* libgtest-dev
  10. sudo apt-get install freeglut3-dev pkg-config
  11. sudo apt-get install libxmu-dev libxi-dev
  12. sudo apt-get install mono-complete
  13. sudo apt-get install libopenni-dev
  14. sudo apt-get install libopenni2-dev
  15. sudo apt-get install libomp-dev
  16. # 首先安装VTK的依赖:X11,OpenGL;cmake和cmake-gui在安装pcl依赖的时候安装过了的话可以跳过
  17. # X11
  18. sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
  19. # OpenGL
  20. sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
  21. # cmake && cmake-gui
  22. sudo apt-get install cmake cmake-gui

1 解压下载的文件后,cmake可能默认为debug模型进行编译,因此此处加上了-DCMAKE_BUILD_TYPE=Release。

  1. mv pcl pcl-1.12.1
  2. cd pcl-1.12.1
  3. mkdir install
  4. mkdir build && cd build
  5. cmake -DCMAKE_BUILD_TYPE=Release \
  6. -DCMAKE_INSTALL_PREFIX=/填写你自己的pcl根目录路径/pcl-1.12.1/install .. \
  7. -DBUILD_apps=ON \
  8. -DBUILD_examples=ON
  9. # 如果需要pcl支持显卡的cuda加速,可以加上-DBUILD_GPU=ON命令,但需要安装cuda相关库
  10. make -j8
  11. sudo make install

clion调试PCL源码可以按照如下设置

3 项目中使用PCL

完成上述编译操作后

在工程下创建如下文件:pcd_write.cpp

  1. #include <iostream>
  2. #include <pcl/io/pcd_io.h>
  3. #include <pcl/point_types.h>
  4. #include <pcl/common/common.h>
  5. int main(int argc, char **argv) {
  6. pcl::PointCloud<pcl::PointXYZ> cloud;
  7. // Fill in the cloud data
  8. cloud.width = 1000;
  9. cloud.height = 1;
  10. cloud.is_dense = false;
  11. cloud.points.resize(cloud.width * cloud.height);
  12. for (auto &point: cloud) {
  13. point.x = 1024 * rand() / (RAND_MAX + 1.0f);
  14. point.y = 1024 * rand() / (RAND_MAX + 1.0f);
  15. point.z = 1024 * rand() / (RAND_MAX + 1.0f);
  16. }
  17. for (auto &point: cloud) {
  18. std::cout << point.x << point.y << point.z << std::endl;
  19. }
  20. pcl::io::savePCDFileASCII("test_pcd.pcd", cloud);
  21. std::cerr << "Saved " << cloud.size() << " data points to test_pcd.pcd." << std::endl;
  22. for (const auto &point: cloud)
  23. std::cerr << " " << point.x << " " << point.y << " " << point.z << std::endl;
  24. return (0);
  25. }

并在同级目录创建CMakeLists.txt 。

如果指定了PCL的安装目录,则需要通过set()命令告诉cmake去何处搜索,被搜索的目录下需要包含FindXXX.cmake or XXXConfig.cmake;否则会在系统的目录上/usr/local下进行搜索,如若使用apt安装,便是在系统目录上。

  1. cmake_minimum_required(VERSION 3.2 FATAL_ERROR) # #对于cmake版本的最低版本的要求
  2. project(pcd_write) # 建立的工程名,例如源代码目录路径的变量名为CH_DIR
  3. #因为PCL是模块化的,也可以如下操作:
  4. # 一个组件 find_package(PCL 1.12 REQUIRED COMPONENTS io)
  5. # 多个组件 find_package(PCL 1.12 REQUIRED COMPONENTS commom io)
  6. # 所有组件 find_package(PCL 1.12 REQUIRED )
  7. # 这里通过设置PCL_DIR为我们之前install的目录,来指定使用系统中的PCL版本
  8. set(PCL_DIR /home/nathan/app/pcl-1.12.1/install/share/pcl-1.12)
  9. find_package(PCL 1.12 REQUIRED)
  10. # 若找到PCL,则PCL_FOUND为真
  11. MESSAGE("PCL FOUND ${PCL_FOUND}")
  12. # 输出当前PCL的版本
  13. MESSAGE("PCL VERSION ${PCL_VERSION}")
  14. # PCL安装的头文件与依赖文件的目录
  15. MESSAGE("PCL INCLUDE DIRS ${PCL_INCLUDE_DIRS}")
  16. # 设置PCL的库文件与依赖库文件的目录
  17. MESSAGE("PCL LIBRARIES ${PCL_LIBRARIES}")
  18. # 列出所有可用的PLC组件
  19. MESSAGE("PCL COMPONENTS ${PCL_COMPONENTS}")
  20. # 列出所需的预处理器定义和编译器标志
  21. MESSAGE("PCL DEFINITIONS ${PCL_DEFINITIONS}")
  22. # 使用include_directories宏设置本项目中会使用的PCL头文件
  23. include_directories(${PCL_INCLUDE_DIRS})
  24. # 使用link_directories宏设置本项目中会使用的PCL库文件
  25. link_directories(${PCL_LIBRARIES})
  26. add_definitions(${PCL_DEFINITIONS})
  27. #这句话告诉CMake从单个源文件write_pcd建立一个可执行文件
  28. add_executable(pcd_write pcd_write.cpp)
  29. #虽然包含了PCL的头文件,因此编译器知道我们现在访问所用的方法,
  30. #但我们也需要让执行程序知道所链接的库,PCL找到库文件由
  31. #PCL_COMMON_LIBRARIES变量指示,通过target_link_libraries这个宏来出发链接操作
  32. target_link_libraries(pcd_write ${PCL_LIBRARIES})

编译运行

  1. mkdir build
  2. cd build
  3. cmake ..
  4. make -j
  5. ./pcd_write_test

运行后会在当前目录下生成名为test_pcd.pcd的文件,可以使用pcl_viewer工具进行查看。

如果你是跟我一样指定了安装目录的话,生成的工具则在安装目录的bin文件夹下;如果是直接通过apt安装,直接打开任意终端即可使用

生成的点云数据可视化结果

注:如果你只是简单使用PCL,下面的内容可以不需要查看了。

4 自定义安装PCL组件与编译模式

1 PCL组件

  1. sudo apt install cmake-curses-gui
  2. cd $PCL_ROOT
  3. mkdir build && cd build
  4. cmake ..
  5. #通过如下命令可以查看cmake中哪些选项被开启了
  6. ccmake ..

此处可以根据自己的需求对PCL进行自定义的安装

BUILD_common:启用/禁用公共库构建的选项

BUILD_features:启用/禁用要素库构建的选项

BUILD_filters:启用/禁用过滤器库构建的选项

BUILD_global_tests:启用/禁用全局单元测试构建的选项

BUILD_io:启用/禁用io库构建的选项

BUILD_kdtree:启用/禁用kdtree库构建的选项

BUILD_keypoints:启用/禁用关键点库构建的选项

BUILD_ctree:启用/禁用八叉树库构建的选项

BUILD_range_image:启用/禁用range_iimage库构建的选项

BUILD_registration:启用/禁用注册库构建的选项

BUILD_sample_consensus:启用/禁用sample_consensos库构建的选项

BUILD_segmentation:启用/禁用分段库构建的选项

BUILD_surface:启用/禁用构建曲面库的选项

BUILD_visualization:启用/禁用可视化库构建的选项

CMAKE_BUILD_TYPE:在此处指定生成类型。在CMake中,CMake_BUILD_TYPE对应于传递给编译器的一组选项和标志,用于激活/停用功能并约束构建过程。

CMAKE_INSTALL_PREFIX:将在其中安装头文件和构建的库

PCL_SHARED_LIBS:启用共享库构建的选项。默认值为yes。

PCL_VERSION:PCL库版本,会影响编译后生成的库名称。

VTK_DIR:VTK库的目录

2 编译模式

对于编译的选项,PCL有四种不同的模式:

Debug:不对代码进行优化,所有调试符号都嵌入到库文件中。由平台和编译器决定。在使用gcc的Linux上,这相当于使用-O0 -g -ggdb -Wall运行gcc。

Release:编译后的代码经过优化,不会打印出任何调试信息。也就是gcc优化参数为-O3和clang的优化参数-O5。

RelWithDebInfo:编译后的代码得到了优化,但调试数据也嵌入了库中。这是前两者之间的折衷。(如果你想尝试当前正在开发中的PCL的某个功能(或者想为PCL做出自己的贡献),可以使用该方式来尝试Experimental版本,如下操作即可)

  1. git clone https://github.com/PointCloudLibrary/pcl pcl-trunk
  2. cd pcl-trunk && mkdir build && cd build
  3. cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
  4. make -j2
  5. sudo make -j2 install

MinSizeRel:这通常会产生您可以构建的最小库。当为Android或内存/空间受限的系统构建时,这很有趣。

5 PCL依赖库

pcl_*表示所有pcl库,也就是PCL中所有组件都需要依赖该库。

1 必须依赖

2 可选依赖

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/893144
推荐阅读
相关标签
  

闽ICP备14008679号