Ubuntu 18.04 安装 PCL 1.14.1

news2024/11/25 13:45:17

        在进行科研项目时,我们常常需要将 C++ 和 Python 结合起来编程。然而,每次将 PCL(Point Cloud Library)的内容添加到 CMakeLists.txt 文件中时都会报错。在深入分析后,我们推测可能是当前使用的 PCL 1.8 版本与现有程序不兼容。因此,我们决定尝试安装最新的 PCL 1.14.1 版本,以期望解决这些兼容性问题。

1. 卸载旧版本的 PCL

        首先,我们需要卸载系统中现有的 PCL 1.8 版本,以避免与新版本产生冲突。

sudo apt-get remove libpcl-dev

2. 安装依赖

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  #这里改成1.9
sudo apt-get install libeigen3-dev 
sudo apt-get install libboost-all-dev
sudo apt-get install libvtk7.1-qt libvtk7.1 libvtk7-qt-dev  # 这里用7.1 不要用8以上的
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 openjdk-8-jdk openjdk-8-jre

# 安装OpenNI,OpenNI2
sudo apt-get install libopenni-dev 
sudo apt-get install libopenni2-dev

# 安装QT5:
sudo apt install qtcreator
sudo apt install qt5-default

# 安装metslib
wget https://www.coin-or.org/download/source/metslib/metslib-0.5.3.tgz
tar xzvf metslib-0.5.3.tgz
cd metslib-0.5.3
./configure
make -j`nproc`
sudo make install

中间提示选择Y/N的全部选Y

3.下载最新版本的PCL库并编译

git clone https://github.com/PointCloudLibrary/pcl.git 

或者

git clone https://gitee.com/mirrors/pcl.git

        如果需要指定版本,请你点击下面连接进行下载。

Releases · PointCloudLibrary/pcl · GitHubPoint Cloud Library (PCL). Contribute to PointCloudLibrary/pcl development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/PointCloudLibrary/pcl/releases例如:

        选择source.zip 

解压进入 pcl 文件夹: 

cd pcl
# 切换到指定版本v1.14.1再编译
# git checkout pcl-1.14.1 # 也可以不要这一行命令,直接安装最新的版本
# 创建目录并进入目录
mkdir build && cd build

#安装在系统目录
cmake .. \
  -DCMAKE_BUILD_TYPE=None \
  -DCMAKE_INSTALL_PREFIX=/usr/local \
  -DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu \
  -DFREETYPE_LIBRARY=/usr/lib/x86_64-linux-gnu/libfreetype.so \
  -DBUILD_GPU=ON \
  -DBUILD_apps=ON \
  -DBUILD_simulation=ON \
  -DBUILD_examples=ON


#也可以安装在自己指定的目录,如下所示(主要是改下安装空间):
cmake .. \
  -DCMAKE_BUILD_TYPE=None \
  -DCMAKE_INSTALL_PREFIX=~/Programs/lib/PCL1141 \
  -DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu \
  -DFREETYPE_LIBRARY=/usr/lib/x86_64-linux-gnu/libfreetype.so \
  -DBUILD_GPU=ON \
  -DBUILD_apps=ON \
  -DBUILD_simulation=ON \
  -DBUILD_examples=ON

# Orin 切换到 MAXN POWER MODE
# 进行编译
make -j`nproc`

#编译完后,执行安装
sudo make install

 make -j`nproc`成功界面

sudo make install 成功界面 

问题1:

/usr/bin/ld: warning: //home/fairlee/anaconda3/lib/libicudata.so.73: unsupported GNU_PROPERTY_TYPE (5) type: 0xc0010001
/usr/bin/ld: warning: //home/fairlee/anaconda3/lib/libicudata.so.73: unsupported GNU_PROPERTY_TYPE (5) type: 0xc0010002
//home/fairlee/anaconda3/lib/libfontconfig.so.1: undefined reference to `FT_Done_MM_Var'
collect2: error: ld returned 1 exit status
tools/CMakeFiles/pcl_pcd_grabber_viewer.dir/build.make:170: recipe for target 'bin/pcl_pcd_grabber_viewer' failed
make[2]: *** [bin/pcl_pcd_grabber_viewer] Error 1
CMakeFiles/Makefile2:3197: recipe for target 'tools/CMakeFiles/pcl_pcd_grabber_viewer.dir/all' failed
make[1]: *** [tools/CMakeFiles/pcl_pcd_grabber_viewer.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

解决方案:

        这个错误可能是由于系统中存在多个版本的库,而编译器使用了不兼容的版本。在这种情况下,Anaconda环境中的库可能与系统库冲突。因此,完全移除Anaconda的影响: 临时重命名你的Anaconda目录,以确保系统不会使用任何Anaconda的库:

        最后安装成功后,别忘了把文件名改回去!!!!!!!!!

4. 安装验证

CMakeLists.txt

cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
project(pcl_version_check)

# 设置C++标准
set(CMAKE_CXX_STANDARD 14)

# 查找PCL包
find_package(PCL  REQUIRED)

# 添加PCL的头文件路径
include_directories(${PCL_INCLUDE_DIRS})

# 添加PCL的库路径
link_directories(${PCL_LIBRARY_DIRS})

# 添加编译选项
add_definitions(${PCL_DEFINITIONS})

# 添加可执行文件
add_executable(pcl_version_check pcl_version_check.cpp
        pcl_version_check.cpp)

# 链接PCL库
target_link_libraries(pcl_version_check ${PCL_LIBRARIES})

pcl_version_check.cpp 

#include <iostream>
#include <pcl/pcl_config.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <iostream>
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/console/parse.h>


int main() {
    std::cout << "PCL version: " << PCL_VERSION_PRETTY << std::endl;

    // 创建一个简单的点云对象来测试基本功能
    pcl::PointCloud<pcl::PointXYZ> cloud;
    std::cout << "Test PCL !" << std::endl;
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
    uint8_t r(255), g(15), b(15);
    for (float z(-1.0); z <= 1.0; z += 0.05) {
        for (float angle(0.0); angle <= 360.0; angle += 5.0) {
            pcl::PointXYZRGB point;
            point.x = 0.5 * cosf (pcl::deg2rad(angle));
            point.y = sinf (pcl::deg2rad(angle));
            point.z = z;
            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);
            point_cloud_ptr->points.push_back (point);
        }
        if (z < 0.0) {
            r -= 12;
            g += 12;
        }
        else {
            g -= 12;
            b += 12;
        }
    }

    point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
    point_cloud_ptr->height = 1;

    pcl::visualization::CloudViewer viewer ("test");
    viewer.showCloud(point_cloud_ptr);
    while (!viewer.wasStopped()){ };

    // 如果代码执行到这里没有错误,说明PCL基本功能正常
    std::cout << "PCL basic functionality test passed." << std::endl;

    return 0;
}

结果

致谢

ubuntu 18.04 安装PCL 1.12.1_the following subsystems will not be built:-- visu-CSDN博客

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

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

相关文章

大学物理-----电磁学安培环路定理

目录 1.声明 2.安培环路定理 3.安培环路定理的证明 4.安培环路定理的应用 &#xff08;1&#xff09;分析 &#xff08;2&#xff09;解释 &#xff08;3&#xff09;有旋场 &#xff08;4&#xff09;无限长导线 &#xff08;5&#xff09;载流圆柱面 &#xff08;6&…

Unity免费领6月开发者周100种预制幻想万圣节场景模型包幻想RPG南瓜头墓地场景素材Q萌TIDALFLASK20240621

结账时输入优惠码 TIDALFLASK 即可免费获取。无需购买。 Unity免费领6月开发者周100种预制幻想万圣节场景模型包幻想RPG南瓜头墓地场景素材Q萌TIDALFLASK202406211051 本周的开发商主要是一些Lowpoly幻想风格的场景模型素材 各种主题类型&#xff0c;非常多内容 适合RPG类型 …

python-赏月

[题目描述] 在某个星球上看到的月亮大小有一个规律&#xff0c;月亮为每30天一个周期&#xff0c;在这30天的周期里&#xff0c;月亮的大小分别为 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1。 虽然天气很冷&#xff0c;但这个星球上的某个居民今…

【机器学习 复习】第3章 K-近邻算法

一、概念 1.K-近邻算法&#xff1a;也叫KNN 分类 算法&#xff0c;其中的N是 邻近邻居NearestNeighbor的首字母。 &#xff08;1&#xff09;其中K是特征值&#xff0c;就是选择离某个预测的值&#xff08;例如预测的是苹果&#xff0c;就找个苹果&#xff09;最近的几个值&am…

谁拥有数字营销平台即拥有企业竞争力!

掌握数字营销平台&#xff0c;就等于掌握企业竞争力&#xff01; 宝子们&#xff0c;咱今天来聊聊这个事儿哈。在现在这个数字化的时代&#xff0c;拥有像蚓链这样的数字营销平台那可太重要啦&#xff01; 想想看&#xff0c;有了它&#xff0c;企业就能更广、更快地去推广…

【Win】小键盘不听话?一文教你在Windows中恢复数字输入

想象一下&#xff0c;你正坐在办公室里&#xff0c;手指在键盘上飞舞&#xff0c;突然间&#xff0c;你的小键盘变得不听话了——数字不再出现&#xff0c;而NumLock键似乎失去了它的魔力。这可能是由于Windows中的一个鲜为人知的功能——“鼠标键”被意外激活了。本文将带你一…

九、C#判断

判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 下面是大多数编程语言中典型的判断结构的一般形式&#xff1a; 判断语句 C# 提供了以…

“Docker之道:优雅管理容器数据的艺术“

目录 1. 容器数据卷 1.1 容器卷的概念 1.2 容器卷的使用 1.3 个人案例实现容器卷挂载 1.4 MySQL同步数据案例&#xff08;容器数据卷操作&#xff09; 1.4.1 获取 MySQL 镜像 1.4.2 运行 MySQL 容器并配置数据持久化 参数说明&#xff1a; 1.4.3 测试 MySQL 连接 1.4…

手机怎么恢复回收站清空的照片?这里有找回相册的3个重要指南

生活里&#xff0c;从家庭聚会的美好瞬间到重要的工作文件&#xff0c;都在我们的手机相册中留下了痕迹。然而意外常常降临&#xff0c;这些数据也有可能突然消失不见&#xff0c;并且恢复回收站清空的照片失败的情况也不少见。请别着急&#xff0c;在这篇文章中&#xff0c;我…

视频智能分析平台LntonAIServer安防监控视频平台行人入侵检测算法核心特点及其应用价值

LntonAIServer行人入侵检测算法是一种基于深度学习和计算机视觉技术的先进解决方案&#xff0c;旨在提高监控系统的智能化水平&#xff0c;有效预防未经授权的人员进入重要场所&#xff0c;保障安全生产和管理。以下是关于该算法的主要特点和应用的详细介绍&#xff1a; 核心特…

性能工具之 JMeter 常用组件介绍(五)

文章目录 一、Jmeter中参数取值1、Test Plan中添加变量2、User Defined Variables 二、Jmeter中CSV Data Set Config三、Timer:定时器4、Gaussian Random Timer 高斯随机定时器5、JSR223 Timer JSR223定时器6、Poisson Random Timer 泊松随机定时器7、Synchronizing Timer 同步…

文件处理的基本操作

一、文件与流 为什么要使用文件&#xff1a;程序的处理结果在程序结束后就消失&#xff0c;要想将程序运行的结果保存下来&#xff0c;就可以将相关内容保存在文件&#xff08;file&#xff09;中。 针对文件、键盘、显示器、打印机等外部设备的数据的读写操作都是通过流&…

阿里AI图片编辑新项目,人人都可做设计师。MimicBrush本地一键整合包下载

最近阿里巴巴联合香港大学开源了一个创新图像编辑工具&#xff1a;MimicBrush&#xff0c;这个工具相当于是一个局部重绘工具。它通过先进的AI技术&#xff0c;能够将一张图片的某一部分融合到另一张图片上。 MimicBrush&#xff0c;一款颠覆传统的图像编辑神器&#xff0c;不过…

在idea里使用github copilot ,就是这么好用

Github Copilot 代码补全等功能&#xff0c;提高写代码的效率 获取地址&#xff1a;https://web.52shizhan.cn/activity/copilot 如果之前是激活器激活的&#xff0c;请到环境变量里删除相关的copilot配置。 ① 发你注册的github账号的邮箱或用户名给客服&#xff0c;客服邀…

openppp2 控制台回显窗口输出内容详解

本文介绍 openppp2 的控制窗口回显内容&#xff0c;以LINUX平台为例子&#xff0c;其它平台大同小异&#xff0c;区别只是多了一些额外的输出选项内容&#xff0c;本文会在下面补充。 在本文开始之前请查阅关联内容&#xff1a;openppp2 命令行接口详解-CSDN博客 控制台客户端…

SpringEvent扩展性利器

使用Spring Event机制可以保证高扩展性&#xff1a; 使用Spring Event来发布应用内部领域事件&#xff0c;对于事件监听器可通过注解或类的方式来扩展&#xff0c;Spring Event内部使用观察者模式&#xff0c;但api使用层面可以完全解耦事件发布和事件监听&#xff1a; 常用方式…

建筑驱鸟设备 | 建筑专用超声波驱鸟器

从半夜的鸣叫到频繁的鸟粪污染&#xff0c;鸟类活动有时会成为城市居民不得不面对的小小困扰。通过合理的驱鸟方法&#xff0c;我们可以有效地减少鸟类对建筑物的侵扰&#xff0c;保护建筑物的完好和安全&#xff0c;同时维护城市居民的生活质量。 建筑专用超声波驱鸟器&#x…

spl序表字段批量修改

如果没有条件&#xff0c;全量修改,使用run 如果没有条件&#xff0c;是可以直接使用run函数&#xff0c;对指定一个列的所有都操作&#xff0c;但是没有任何条件 如果使用了筛选条件&#xff0c;使用了select函数&#xff0c;会返回一个被筛选并且修改的序表&#xff08;有条件…

ai assistant激活成功后,如何使用

ai assistant激活成功后&#xff0c;如图 ai assistant渠道&#xff1a;https://web.52shizhan.cn/activity/ai-assistant 在去年五月份的 Google I/O 2023 上&#xff0c;Google 为 Android Studio 推出了 Studio Bot 功能&#xff0c;使用了谷歌编码基础模型 Codey,Codey 是…

【贪心算法初级训练】在花坛上是否能种下n朵花、碰撞后剩余的行星

1、在花坛上是否能种下n多花 一个很长的花坛&#xff0c;一部分地已经种植了花&#xff0c;另一部分却没有&#xff0c;花不能种植在相邻的地块上否则它们会争夺水源&#xff0c;两者都会死去。给你一个整数数组表示花坛&#xff0c;由若干个0和1组成&#xff0c;0表示没种植花…