当前位置: 首页 > news >正文

PCL安装与使用

1 apt安装

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

sudo apt update
sudo apt install libpcl-dev

2 源码安装

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

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

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

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.9 libflann-dev 
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-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 libopenni-dev
sudo apt-get install libopenni2-dev
sudo apt-get install libomp-dev# 首先安装VTK的依赖:X11,OpenGL;cmake和cmake-gui在安装pcl依赖的时候安装过了的话可以跳过
# X11
sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
# OpenGL
sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
# cmake && cmake-gui
sudo apt-get install cmake cmake-gui

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

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

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

3 项目中使用PCL

完成上述编译操作后

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

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/common/common.h>int main(int argc, char **argv) {pcl::PointCloud<pcl::PointXYZ> cloud;// Fill in the cloud datacloud.width = 5;cloud.height = 1;cloud.is_dense = false;cloud.points.resize(cloud.width * cloud.height);for (auto &point: cloud) {point.x = 1024 * rand() / (RAND_MAX + 1.0f);point.y = 1024 * rand() / (RAND_MAX + 1.0f);point.z = 1024 * rand() / (RAND_MAX + 1.0f);}for (auto &point: cloud) {std::cout << point.x << point.y << point.z << std::endl;}pcl::io::savePCDFileASCII("test_pcd.pcd", cloud);std::cerr << "Saved " << cloud.size() << " data points to test_pcd.pcd." << std::endl;for (const auto &point: cloud)std::cerr << "    " << point.x << " " << point.y << " " << point.z << std::endl;return (0);
}

并在同级目录创建CMakeLists.txt 

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

编译运行

mkdir build
cd build
cmake ..
make -j
./pcd_write_test

http://www.lryc.cn/news/228521.html

相关文章:

  • 力扣刷题-二叉树-对称二叉树
  • 常见面试题-计算机网络相关
  • leetcode做题笔记231. 2 的幂
  • AI主播“败走”双11,想用AI省成本的商家醒醒吧,程序员不必担心失业,发展空间依旧很大
  • ◢Django 自写分页与使用
  • 某城高速综合管控大数据大屏可视化【可视化项目案例-04】
  • 如何在Linux下进行文件查看
  • OSG练习:模仿Ventsim制作三维矿井智能通风系统
  • 【数据结构】非递归实现二叉树的前 + 中 + 后 + 层序遍历(听说面试会考?)
  • 32 Feign性能优化
  • 星岛专栏|从Web3发展看金融与科技的融合之道
  • 什么是网络爬虫?
  • 酷柚易汛ERP - 商品库存余额表操作指南
  • 第27期 | GPTSecurity周报
  • 大数据-玩转数据-Flume
  • 【Linux】进程概念IV 进程地址空间
  • Flink在汽车行业的应用【面试加分系列】
  • 智慧工地源码:助力数字建造、智慧建造、安全建造、绿色建造
  • Spring Boot(二)
  • 上海亚商投顾:沪指缩量调整跌 高位强势股继续退潮
  • 药理学试卷
  • SpringBoot3-快速入门
  • 具名挂载和匿名挂载
  • ARM串口
  • C++ Qt 学习(文章链接汇总)
  • 2311d9月会议
  • 《算法通关村——二分查找在旋转数字中的应用》
  • C/S架构学习之基于TCP的本地通信(服务器)
  • 乡镇村污水处理智慧水务智能监管平台,助力污水监管智慧化、高效化
  • OSPF综合