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

news2024/11/24 3:48:29

前言

本文介绍在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.coloradmin.cn/o/1893975.html

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

相关文章

2.8亿东亚五国建筑数据分享

数据是GIS的血液&#xff01; 我们现在为你分享东亚5国的2.8亿条建筑轮廓数据&#xff0c;该数据包括中国、日本、朝鲜、韩国和蒙古5个东亚国家完整、高质量的建筑物轮廓数据&#xff0c;你可以在文末查看领取方法。 数据介绍 虽然开源的全球的建筑数据已经有微软的建筑数据…

​埃文科技受邀出席2024 “数据要素×”生态大会​

2024“数据要素”生态大会&#xff08;以下简称“大会”&#xff09;于2024年6月30日在河南省郑州市举办。大会在国家数据局、河南省人民政府等单位的指导下&#xff0c;由中国经济体制改革研究会、中国电子信息产业集团有限公司、郑州市人民政府等共同主办。大会主题为“加快数…

C++字体库开发之字体回退三

代码片段 class FontCoverage { public: using SP std::shared_ptr<FontCoverage>; virtual ~FontCoverage() default; virtual void set(int index, FontTypes::CoverageLevel level) 0; virtual FontTypes::Coverag…

架构 | 数据归档

INDEX 1 通用思路2 快速归档3 归档整体流程&#xff08;完整归档 & 快速归档&#xff09;4 准备阶段4.1 确认归档表4.2 思路&#xff1a;确认归档数据范围 & 归档方案待选&#xff08;重点&#xff09;4.3 归档方式选择 & 业务场景覆盖4.4 确认归档数据范围 & …

Spring源码十:BeanPostProcess

上一篇Spring源码九&#xff1a;BeanFactoryPostProcessor&#xff0c;我们看到ApplicationContext容器通过refresh方法中的postProcessBeanFactory方法和BeanFactoryPostProcessor类提供预留扩展点&#xff0c;他可以在Spring容器的层面对BeanFactroy或其他属性进行修改&#…

微信小程序遮罩层显示

效果展示&#xff1a; wxml页面&#xff1a; <view classmodal-mask wx:if{{showModal}}><view class"modal-container"><view classmodal-content></view><view classmodal-footer bindtap"closeImage">//这个/images/ind…

MATLAB——循环语句

一、for end语句 在该语法中&#xff0c;循环变量是用于迭代的变量名&#xff0c;它会在每次循环迭代中从向量或矩阵中取出一列的值。数值向量或者矩阵则表示了循环变量可以取值的范围&#xff0c;通常根据实际需要事先给定。一旦循环变量遍历完数值向量或者矩阵中的所有值&…

【server】3、注册中心与配置中心

1、服务注册与发现 1.1、consul 1.1.1 是什么 官网&#xff1a; Consul by HashiCorp spring-cloud-consul: Spring Cloud Consul :: Spring Cloud Consul gitHub 官网 &#xff1a;GitHub - hashicorp/consul: Consul is a distributed, highly available, and data cent…

如何检查购买的Facebook账号优劣?

Facebook 是全球最受欢迎的社交网络之一,为品牌广告提供了巨大的潜力。许多公司和营销人员使用 Facebook 来推广他们的产品和服务&#xff0c;经常会购买账号。当然也分出了很多账号&#xff0c;比如个人号&#xff0c;BM号&#xff0c;广告号&#xff0c;小黑号等等。 但是,有…

一键安装部署,在 Ubuntu 服务器上快速搭建基于 Ghost CMS的网站

我们在上一篇内容中讲过&#xff0c;如何使用 Helm 在 Kubernetes 集群上安装 WordPress&#xff0c;创建高可用性网站。而这次我们将基于另一个流行的内容管理系统 Ghost CMS 在 DigitalOcean 云主机进行建站。 Ghost 也是开源的内容管理系统&#xff08;CMS&#xff09;&…

【Arduino】ESP8266开发环境配置(图文)

ESP8266与ESP32开发很类似&#xff0c;相当于是低配版本的ESP32&#xff0c;其同样具有无线网络连接能力&#xff0c;功能强大&#xff0c;而且价格比ESP32更具有优势。接下来我们就来设置一下ESP8266的开发环境。 使用Arduino开发平台软件&#xff0c;选择首选项进行设置。 h…

论文解析——Transformer 模型压缩算法研究及硬件加速器实现

作者及发刊详情 邓晗珂&#xff0c;华南理工大学 摘要 正文 实验平台 选取模型&#xff1a; T r a n s f o r m e r b a s e Transformer_{base} Transformerbase​ 训练数据集&#xff1a;WMT-2014 英语-德语翻译数据集、IWSLT-2014 英语-德语互译数据集 Transformer模…

警翼警用记录仪视频格式化后恢复方法

警翼是国内较大的一家警用记录仪厂商&#xff0c;此品牌我们恢复过很多&#xff0c;此次遇到的是一个典型的误格式化的情况&#xff0c;我们来看看误格式化后如何恢复。 故障存储: 32G卡/fat32 故障现象: 客户提供的信息是在交接设备后没有及时备份而做出了初始化设备的操…

图像信号处理器(ISP)基础算法及处理流程

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

录屏软件哪个好?3款宝藏软件,分享给你

在数字化时代&#xff0c;录屏软件因其强大的功能性和实用性&#xff0c;逐渐成为工作和生活中的得力助手。然而&#xff0c;市面上的录屏软件众多&#xff0c;选择一款适合自己的录屏软件却成为了一个难题。 不同的录屏软件在功能、性能、易用性等方面都有所不同&#xff0c;…

js之模糊搜索

多的不说 少的不唠 直接上代码

2.5 C#视觉程序开发实例1----设计一个IO_Manager

2.5 C#视觉程序开发实例1----设计一个IO_Manager 第一步目标&#xff1a; 1 实现获取IO触发信号Trig0 2 能够实现程序切换 3 图像处理后能够输出一个脉冲 1 IO 引脚定义 1.1 输入信号定义 1.2 输出信号定义 2 IO时序图 2.1 触发时序 2.2 切换程序时序图 3 IO_Manager.cs …

数据库表导出到excel

数据库表导出到excel:前置知识1 ALL_TAB_COLS 数据库表导出到excel:前置知识2 Quartz基本使用 数据库表导出到excel:前置知识3 项目封装的Quartz实现动态定时任务 数据库表导出到excel:前置知识4 业务和效果 发起清单下载control层InventoryDownloadLogController /* * */ pa…

用户资料门户的构建

1. 需求背景 老的页面停止维护了,且老旧, 功能单一,且页面分散. 急需做功能集成的平台化建设原先的用户资料查询没有做权限管控, 每一次查询都会消耗我们组的人力资源. 2. 项目介绍 2.1. 项目地址 服务地址: [公司内网服务(略)] 工蜂地址: [公司内网仓库(略)] 2.2 项目的价…

女性经济崛起,天润融通用客户感知挖掘市场潜力

每逢一年一度的国际妇女节&#xff0c;“女性”话题都会被郑重地讨论。 从消费市场上来说&#xff0c;最近几年女性群体正在拥有越来越大的影响力&#xff0c;甚至出现了“她经济”这样的专属词汇在最近几年被市场反复讨论。 毫无疑问&#xff0c;女性消费群体的崛起已经成为…