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.mzph.cn/news/141149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cut and Reorder

题目传送门 引 复杂度没算对导致不敢写&#xff0c;分析复杂度时还是多考虑势能&#xff0c;不然错过正解就亏了 解法 操作一可以一开始就做了 考虑状压 m a s k mask mask 是已加入序列的元素 转移枚举一段连续的区间即可 复杂度乍眼一看是 O ( n 2 2 n ) O(n^22^n) O(…

5G网络切片,到底是什么?

网络切片&#xff0c;是5G引入的一个全新概念。 一看到切片&#xff0c;首先想到的&#xff0c;必然是把一个完整的东西切成薄片。于是&#xff0c;切面包或者切西瓜这样的画面&#xff0c;映入脑海。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 然而…

找工作去哪个网站比较好

吉鹿力招聘网是一个专注于互联网岗位求职招聘的网站&#xff0c;提供海量的互联网人才储备。它主要覆盖了互联网类招聘&#xff0c;包括技术、产品、设计、运营、市场、销售等。吉鹿力招聘网的特点是用户量大&#xff0c;需求旺盛。如果你希望找工作&#xff0c;吉鹿力招聘网是…

Leetcode_46:全排列

题目描述&#xff1a; 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输…

如果让你重新开始学 C/C++,你的学习路线会是怎么选择?

1. 第一阶段 学好 C 语言和 Linux 1.1 学好 C 语言 无论你是科班还是非科班&#xff0c;建议你一定要学好 C 语言&#xff0c;它应该作为你必须掌握好的语言。你要熟悉 C 语言的基本语法&#xff0c;包括&#xff1a; 顺序、条件、循环三大控制语句 C 中几大基元数据类型的用…

Java 算法篇-深入了解单链表的反转(实现:用 5 种方式来具体实现)

&#x1f525;博客主页&#xff1a; 小扳_-CSDN博客 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 单链表的反转说明 2.0 单链表的创建 3.0 实现单链表反转的五种方法 3.1 实现单链表反转 - 循环复制&#xff08;迭代法&#xff09; 3.2 实现单链表反转 - 头插法 3…

基于springboot+vue的学生毕业离校信息网站

项目介绍 该学生毕业离校系统包括管理员、学生和教师。其主要功能包括管理员&#xff1a;首页、个人中心、学生管理、教师管理、离校信息管理、费用结算管理、论文审核管理、管理员管理、留言板管理、系统管理等&#xff0c;前台首页&#xff1b;首页、离校信息、网站公告、留…

Linux 命令——modprobe

Linux 命令——modprobe modprobe命令用于智能地向内核中加载模块或者从内核中移除模块。 modprobe可载入指定的个别模块&#xff0c;或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系&#xff0c;决定要载入哪些模块。若在载入过程中发生错误&#xff0c;在mo…

python 根据经纬度绘制点图 极投影

参考了python cartopy手动导入地图数据绘制底图/python地图上绘制散点图&#xff1a;Downloading:warnings/散点图添加图里标签_python add_feature-CSDN博客 点的颜色按照时间显示 # -*- coding: utf-8 -*- """ Created on Mon Nov 13 11:32:48 2023"&quo…

智慧工地源码:助力数字建造、智慧建造、安全建造、绿色建造

智慧工地围绕建设过程管理&#xff0c;建设项目与智能生产、科学管理建设项目信息生态系统集成在一起&#xff0c;该数据在虚拟现实环境中&#xff0c;将物联网收集的工程信息用于数据挖掘和分析&#xff0c;提供过程趋势预测和专家计划&#xff0c;实现工程建设的智能化管理&a…

postgresql安装

postgresql安装 1、windows下的安装 安装包下载地址&#xff1a;https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 这里选择14.5版本进行安装&#xff0c;具体的安装步骤&#xff1a; 双击软件打开运行&#xff0c;弹出如下界面&#xff1a; 点击nex…

CountDownLatch使用

常用于多线程场景&#xff0c;待多线程都结束后方可继续主线程逻辑处理 CodeConstant 常量类 import java.util.HashMap; import java.util.Map;public class CodeConstant {public static final Map<String, Map<String, String>> CODE new HashMap<>();…

VUE 组合式API

响应式 data 选项式API_响应式 <template><h3>选项式API</h3><p>{{ message }}</p> </template> <script> export default {data(){return{message:"选项式API 绑定数据"}} } </script>组合式API_响应式 <…

博弈论入门

目录 什么是博弈&#xff1f; 博弈论的发展历史&#xff1f; 博弈的要素有哪些&#xff1f; 博弈的分类&#xff1f; 博弈论的应用 收益矩阵 纳什均衡的定义 博弈论的例子 1、田忌赛马 2、穷途困境 2.1优化反应函数法 2.2Nashpy库 2.3顶点枚举算法 3、Nash游戏 …

飞书开发学习笔记(五)-Python快速开发网页应用

飞书开发学习笔记(五)-Python快速开发网页应用 一.下载示例代码 首先进入飞书开放平台: https://open.feishu.cn/app 凭证与基础信息 页面&#xff0c;在 应用凭证 中获取 App ID 和 App Secret 值。 教程和示例代码位置:https://open.feishu.cn/document/home/integrating-…

WebSocket在node端和客户端的使用

摘要 如果想要实现一个聊天的功能&#xff0c;就会想到使用WebSocket来搭建。那如果没有WebSocet的时候&#xff0c;我们会以什么样的思路来实现聊天功能呢&#xff1f; 假如有一个A页面 和 B页面进行通信&#xff0c;当A发送信息后&#xff0c;我们可以将信息存储在文件或者…

JDK更换版本不生效问题

JDK版本更换 问题: 当本地电脑拥有多个版本jdk时, 切换jdk版本不生效 解决方案: 1.查看环境变量(高版本的jdk安装时自动注入环境变量) 2.将Path里面的jdk的bin配置上移到最上面 3.查看jdk版本, java -version 启动项目,显示如下使用了jdk17

Adobe premiere裁剪视频尺寸并转为GIF格式

第 1 步&#xff1a;裁剪视频 修改序列设置以适应裁剪之后的图像区域&#xff1b;序列中的编辑模式不能使用默认的&#xff0c;这里使用的是“ProRes RAW” 第 2 步&#xff1a;设置背景色 需要设置“颜色遮罩”的大小和颜色&#xff0c;颜色遮罩放在下面。 第 3 步&#xff1…

ELK分布式日志

ELK是指Elasticsearch、Logstash和Kibana三个开源软件的集合&#xff0c;用于构建分布式日志处理系统。 Elasticsearch是一款基于Lucene搜索引擎库的分布式全文搜索和分析引擎&#xff0c;支持多种数据类型的存储、搜索和分析&#xff0c;常用于日志分析、安全监控等领域。 L…

RK3568开发笔记-amixer开机设置音量异常

目录 前言 一、amixer介绍 1. 显示音频设备信息 2. 显示音量信息