PCL从理解到应用【02】PCL环境安装 | PCL测试| Linux系统

前言

本文介绍在Ubuntu18.04系统中,如何安装PCL。

源码安装方式:pcl版本1.91,vtk版本8.2.0,Ubuntu版本18.04。

安装好后,可以看到pcl的库,在/usr/lib/中;

通过编写C++代码,直接调用的pcl库

#include <iostream>

#include <pcl/point_types.h>

#include <pcl/io/pcd_io.h>

#include <pcl/visualization/pcl_visualizer.h>

...............

然后使用Cmake编译,生成可执行程序,可视化效果: 

一、安装pcl所需依赖

编写一个sh脚本,包含安装pcl依赖的命令,名称为:install_dependencies.sh

#!/bin/bash
sudo apt-get update # 更新包列表
sudo apt-get install -y git build-essential linux-libc-dev # 安装基础构建工具和库
sudo apt-get install -y cmake cmake-gui # 安装 cmake 和 cmake-gui
sudo apt-get install -y libusb-1.0-0-dev libusb-dev libudev-dev # 安装 libusb 相关库
sudo apt-get install -y mpi-default-dev openmpi-bin openmpi-common # 安装 MPI 相关库
sudo apt-get install -y libflann1.9 libflann-dev # 安装 FLANN 库
sudo apt-get install -y libeigen3-dev # 安装 Eigen 库
sudo apt-get install -y libboost-all-dev # 安装 Boost 库
sudo apt-get install -y libvtk7.1-qt libvtk7.1 libvtk7-qt-dev # 安装 VTK 库
sudo apt-get install -y libqhull* libgtest-dev # 安装 QHull 和 GTest 库
sudo apt-get install -y freeglut3-dev pkg-config libxmu-dev libxi-dev # 安装 FreeGLUT 和其他依赖库
sudo apt-get install -y mono-complete openjdk-8-jdk openjdk-8-jre # 安装 Mono 和 OpenJDK

然后在终端中运行以下命令来执行脚本:

chmod +x install_dependencies.sh
./install_dependencies.sh

需要确保没有遗漏,安装成功

二、源码安装vtk

VTK(Visualization Toolkit)是一个开源的软件系统,用于3D计算机图形、图像处理和可视化。

它由Kitware公司开发和维护,并且是众多可视化和数据处理应用程序的基础。功能包括:

  • 3D图形渲染:VTK支持3D图形渲染,可以生成高质量的3D图像和动画。
  • 数据处理:VTK提供了丰富的数据处理功能,包括数据过滤、转换、采样等。
  • 图像处理:VTK可以处理2D和3D图像,提供了图像过滤、分割、变换等功能。
  • 科学计算:VTK包含多种科学计算工具,可以用于科学数据的分析和可视化。

先安装cmake 和vtk 的依赖项

sudo apt-get install cmake-curses-gui
sudo apt-get install freeglut3-dev
sudo apt-get install libqt5x11extras5 libqt5x11extras5-dev

然后下载VTK-8.2.0库,VTK官网地址:https://vtk.org/download/

 需要下来网页,找到8.2.0版本,下载VTK-8.2.0. zipVTK-8.2.0.tar. gz

进入压缩包的下载目录,解压文件,然后进入文件夹所在位置的命令终端

比如:把压缩包放到了software目录,然后解压

注意:需要退出Conda环境!!!需要退出Conda环境!!!需要退出Conda环境!!!

创建build文件夹,然后cd到build中, 使用可视化的cmake进行工程分析

mkdir build
cd  build
cmake-gui

看到如下界面,当然会有差异(没有红色部分内容,因为之前编译过了,才会出现的)

  • 点击Browse Source,选择source code的路径
  • 勾选Grouped和Advanced
  • 点击底下的Configure按钮,等待执行完成,出现红色部分的内容

展开 Module ,勾选 Module_vtkGUISupportQt

展开VTK,勾选 VTK_Group_Qt

 接着点击Configure按钮,等待完成后,再点击Generate按钮

这一步完成了cmake分析,如果没什么问题,如上图所示

编译安装VTK-8.2.0

关闭cmake-gui界面,然后输入sudo make进行编译,编译时间会较长;

如何电脑CPU性能较好,支持多线程,可以使用多线程加速编译

sudo make -j2

可以使用 -j 选项来指定线程数,其中 2 表示使用 2 个线程进行并行编译。

根据电脑性能的 CPU 核心数量调整这个数字,比如sudo make -j4

安装VTK-8.2.0

最后输入sudo make install进行安装,完成VTK的安装啦~

sudo make install

三、源码安装pcl

来到pcl开源地址,下载源码压缩包Source code 

https://github.com/PointCloudLibrary/pcl/releases/tag/pcl-1.9.1

解压下载的压缩包,然后打开终端,进入解压的目录,输入下面命令:

cd pcl-pcl-1.9.1
mkdir release
cd release

然后复制下面命令回车,用cmake分析整个源代码

cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_GPU=ON-DBUILD_apps=ON -DBUILD_examples=ON \ -DCMAKE_INSTALL_PREFIX=/usr ..

构建完成后,接着输入sudo make进行编译,时间比较长

最后输入sudo make install 进行安装,完成pcl安装啦~

sudo make install

四、测试pcl

创建一个test_pcl文件夹,然后创建一个源文件test_pcl.cpp,代码如下:

#include <iostream>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>int main(int argc, char** argv) {// 创建点云对象pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);// 定义立方体的边长和点的数量float edge_length = 1.0;int num_points_per_axis = 10; // 每个轴上的点数int total_points = num_points_per_axis * num_points_per_axis * num_points_per_axis;// 生成均匀分布的立方体点云for (int i = 0; i < num_points_per_axis; ++i) {for (int j = 0; j < num_points_per_axis; ++j) {for (int k = 0; k < num_points_per_axis; ++k) {pcl::PointXYZRGB point;point.x = static_cast<float>(i) / (num_points_per_axis - 1) * edge_length;point.y = static_cast<float>(j) / (num_points_per_axis - 1) * edge_length;point.z = static_cast<float>(k) / (num_points_per_axis - 1) * edge_length;// 根据z坐标设置颜色渐变,使渐变更加明显uint8_t r = static_cast<uint8_t>(255 * point.z / edge_length);uint8_t g = static_cast<uint8_t>(255 * (1 - point.z / edge_length));uint8_t b = static_cast<uint8_t>(255 * std::abs(0.5 - point.z / edge_length) * 2); // 增加蓝色成分以增强渐变uint32_t rgb = (static_cast<uint32_t>(r) << 16 |static_cast<uint32_t>(g) << 8 |static_cast<uint32_t>(b));point.rgb = *reinterpret_cast<float*>(&rgb);cloud->points.push_back(point);}}}cloud->width = static_cast<uint32_t>(cloud->points.size());cloud->height = 1;cloud->is_dense = true;// 保存点云到PCD文件pcl::io::savePCDFileASCII("cube_point_cloud.pcd", *cloud);std::cout << "Saved " << cloud->points.size() << " data points to cube_point_cloud.pcd." << std::endl;// 可视化点云pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);viewer->addPointCloud<pcl::PointXYZRGB>(cloud, rgb, "sample cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();// 显示点云直到窗口关闭while (!viewer->wasStopped()) {viewer->spinOnce(100);}return 0;
}

在test_pcl文件夹下再创建一个配置文件CMakeLists.txt,代码如下:

cmake_minimum_required(VERSION 2.6)

project(test_pcl)

find_package(PCL 1.9.1 REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})

link_directories(${PCL_LIBRARY_DIRS})

add_definitions(${PCL_DEFINITIONS})

add_executable(test_pcl test_pcl.cpp)

target_link_libraries (test_pcl ${PCL_LIBRARIES})

install(TARGETS test_pcl RUNTIME DESTINATION bin)

在项目目录中运行以下命令以编译并运行程序:

mkdir build
cd build
cmake ..
make
./test_pcl 

示例效果:

通过滑动鼠标,缩放大小:

恭喜完成安装啦~

报错与解决方案

如果遇到报错,显示刚才安装的vtk8.2库没有找到

./test_pcl: error while loading shared libraries: libvtkRenderingCore-8.2.so.1: cannot open shared object file: No such file or directory ls /usr/local/lib/libvtkRenderingCore-8.2.so.1 /usr/local/lib/libvtkRenderingCore-8.2.so.1

需要添加库的环境遍历,执行命令:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

再并运行程序 ./test_pcl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/40805.shtml

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

相关文章

华为路由器静态路由配置(eNSP模拟实验)

实验目标 如图下所示&#xff0c;让PC1ping通PC2 具体操作 配置PC设备ip 先配置PC1的ip、掩码、网关。PC2也做这样的配置 配置路由器ip 配置G0/0/0的ip信息 #进入系统 <Huawei>system-view #进入GigabitEthernet0/0/0接口 [Huawei]int G0/0/0 #设置接口的ip和掩码 […

【UE5.3】笔记7 控制Pawn移动

使用A、D键控制角色左右移动 打开我们的BP_Player蓝图类&#xff0c;选择事件图表&#xff0c;添加我们的控制事件 右键&#xff0c;搜索A keyboard&#xff0c;选择A,如下图&#xff0c;D也是 添加扭矩力 首先我们要把我们的player上的模拟物理选项打开&#xff0c;这样我们…

JavaFx基础知识

1.Stage 舞台 如此这样的一个框框&#xff0c;舞台只是这个框框&#xff0c;并不管里面的内容 public void start(Stage primaryStage) throws Exception {primaryStage.setScene(new Scene(new Group()));primaryStage.getIcons().add(new Image("/icon/img.png"))…

【不锈钢酸退作业区退火炉用高温辐射计快速安装】

项目名称 不锈钢酸退作业区退火炉用高温辐射计快速安装 改造实施项目简介项目提出前状况:不锈钢生产过程中,各种型号的不锈钢带钢在退火工艺中对带钢温度的准确性要求很高,带钢温度的检测直接影响带钢的产品质量,不锈钢带钢温度测量依靠的是高温辐射计,其测量的准确性、稳…

【Python机器学习】算法链与管道——通用的管道接口

Pipeline类补单可以用于预处理和分类&#xff0c;实际上还可以将任意数量的估计器连接在一起。例如&#xff0c;我们可以构建一个包含特征提取、特征选择、缩放和分类的管道&#xff0c;总共有4个步骤。同样的&#xff0c;最后一步可以用聚类或回归代替。 对于管道中估计器的唯…

vue2使用use注册自定义指令实现权限控制

版本环境 vue的版本是^2.6.12&#xff0c;将会使用到Vue.use()、Vue.directive() 适用环境 页面某些按钮&#xff0c;需要受到当前登录用户的“角色”“权限”的影响&#xff0c;通过store获取角色role和权限permission&#xff0c;通过自定义指令的方式&#xff0c;控制某一…

antd DatePicker日期选择框限制最多选择一年

实现效果 实现逻辑 import React, { useState } from react;const ParentComponent () > {const [dates, setDates] useState(null);const disabledDate (current) > {if (!dates) {return false;}const tooLate dates[0] && current.diff(dates[0], days) &…

Appium自动化测试框架1

电脑的浏览器 手机的浏览器 手机上的app 原生的应用 纯java 手机上的app apk 移动网页应用 纯HTML CSS 手机的浏览器上 电脑的浏览器上 混合应用 java html css python代码 Appium python库 Appium 手机 都是代表本机 0.0.0.0 127.0.0.1 localhost 如何启动app 启动参…

土壤养分化验仪:农业生态与可持续发展

随着现代农业技术的不断进步&#xff0c;土壤养分化验仪在农业生产中扮演着越来越重要的角色。这款高科技设备以其高精度、高效率的特点&#xff0c;为农业生态与可持续发展提供了强有力的支撑。 一、农田土壤监测与管理 农田是土壤养分化验仪最主要的应用场所。通过对农田土壤…

【AI】DeepStream(14):图像分割deepstream-segmentation-test示例演示

【AI】AI学习目录汇总 1、简介 deepstream-segmentation-test示例演示了图像的语义分割。两个配置文件,分别加载U-Net和Res-UNet两种分割模型 unet_output_graph.uffunetres18_v4_pruned0.65_800_data.uffU-Net是一个在生物医学图像分割领域广泛应用的卷积神经网络(CNN),…

集团型企业组织架构复杂,业务线多,如何进行高效费用管控?

企业管理中流行这样一句话&#xff1a;“企业转型&#xff0c;财务先行”。对集团型企业而言&#xff0c;当今的发展形势下&#xff0c;通过财务战略全面转型、最终撬动企业价值提升&#xff0c;是一件难而正确的事情。 集团企业具有经营规模大、产业链多、分支机构多、地域跨度…

地下电子标识器探测仪ED8000选型注意事项

ED8000探测仪是一台集成了多频率、多种ID标识器调制模式、高低灵敏度调节、可读写标识器等全功能、高性能电子标识器探测仪。它有着极高的灵敏度,同时具备良好的噪声抑制能力&#xff0c;不仅适合专业测绘人员&#xff0c;普通操作人员也可以轻松掌握。 ED8000可支持模拟电子标…

2024亚洲国际餐饮展览会(北京餐饮展|火锅展|预制菜展会)

2024北京餐饮展会&#xff0c;2024北京食材展会&#xff0c;2024北京火锅展会&#xff0c;2024北京火锅食材展会&#xff0c;2024北京预制菜展会&#xff0c;2024北京预制食材展会&#xff0c; 2024亚洲国际餐饮展览会&#xff08;北京餐饮展|火锅展|预制菜展会&#xff09; …

【C语言】刷题笔记 Day2

【笔记】 【1】局部变量不初始化&#xff0c;默认放的随机值。 1 int n0; 2 scanf("%d",&n); //13.141 【2】这里虽然输入的是一个浮点数&#xff0c;但是只取整数部分。 【3】3.156e7 表示的是3.156*10的7次方。 【4】多组输入&#xff0c;保存和不保存…

基于 Windows Server 2019 部署域控服务器

文章目录 前言1. 域控服务器设计规划2. 安装部署域控服务器2.1. 添加 Active Directory 域服务2.2. 将服务器提升为域控制器2.3. 检查域控服务器配置信息 3. 管理域账号3.1. 新建域管理员账号3.2. 新建普通域账号 4. 服务器加域和退域4.1. 服务器加域操作4.2. 服务器退域操作 总…

记录一下简单导入导出excel二级表头

数据库导入导出表头 之前的工具类GenerateExcelToFile新增两个导出这种二级表头方法 package com.njry.utils;import cn.hutool.core.util.IdUtil; import com.njry.config.FileProperties; import com.njry.exception.BadRequestException; import org.apache.poi.hssf.user…

【VIM的使用】

Vim 是一个非常强大的文本编辑器&#xff0c;尤其在 Linux 环境下被广泛使用。它基于 vi 编辑器开发而来&#xff0c;增加了许多功能和改进。下面是一个简化的 Vim 教程&#xff0c;帮助你快速上手&#xff1a; 启动 Vim 要启动 Vim&#xff0c;只需在终端中输入 vim [filen…

Leetcode刷题2---两数相加 Python

目录 题目及分析解法一: 迭代法解法二: 递归法解法三&#xff1a;反转链表法 题目及分析 &#xff08;力扣序号2&#xff1a;两数相加&#xff09; 给你两个非空的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照逆序的方式存储的&#xff0c;并且每个节点只能存储…

Altium Designer专业PCB设计软件下载安装 Altium Designer安装包下载获取

在电子设计的广袤领域中&#xff0c;PCB设计无疑占据着重要的地位。而Altium Designer作为一款业界领先的电子设计自动化软件&#xff0c;其提供的先进布局工具&#xff0c;无疑为设计师们打开了一扇通往高效、精确设计的大门。 在PCB设计的核心环节——布局中&#xff0c;Alti…

初学Spring之自动装配 Bean

Bean 的作用域&#xff1a; 1.单例模式&#xff08;Spring 默认机制&#xff09; scope“singleton” 2.原型模式&#xff1a;每次从容器中 get 时&#xff0c;都会产生一个新对象 scope"prototype" 3. request、session、application&#xff0c;只能在 web 开…