小淼博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、点云概念

     点云Point Cloud是三维空间中,表达目标空间分布和目标表面特性的点的集合,点云通常可以从深度相机中直接获取,也可以从CAD等软件中生成。点云是用于表示多维点集合的数据结构,通常用于表示三维数据。在3D点云中,这些点通常代表采样表面的X,Y和Z几何坐标。当存在颜色信息时(请参见下图),点云变为4D。
     三维图像有以下几种表现形式:深度图(描述物体与相机的距离信息),几何模型(由CAD等软件生成),点云模型(逆向工程设备采集生成),一些常见的点云图如下:

人的侧脸3D 一只兔子3D 桌子及牛奶4D
image

二、什么是PCL (Point Cloud Library)

1. 基础概念

     PCL(Point Cloud Library)是用于2D / 3D图像和点云处理的大型开源跨平台的C++编程库。 PCL框架实现了大量点云相关的通用算法和高效的数据结构。内容涉及了点云的获取、滤波、分割、配准、检索、特征提取、特征估计,表面重建、识别、模型拟合、追踪、曲面重建、可视化等等,这些算法可用于从嘈杂的数据中过滤出异常值,将3D点云缝合在一起,分割场景的部分区域,提取关键点并计算描述符,根据物体的几何外观识别实际物体,创建表面点云并将其可视化。支持多种操作系统,可以在Windows、Linux、MacOS X、Android、部分嵌入式实时系统上运行。

     如果说OpenCV是2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上也具有相同的地位。相比图像数据,点云数据多了一个维度,因此能够更全面的刻画三维场景中的对象。随着智能机器人,包括机械臂,无人汽车,无人机,服务机器人等快速普及和应用,点云处理及其背后的3D视觉,正在成为一个越来越重要且越来越活跃的领域。

     此外,PCL是BSD授权方式,可以进行完全免费的商业和学术应用。

2. PCL的起源与发展

     PCL 起初是 ROS(Robot Operating System )下由来自斯坦福大学的年轻博士Radu等人维护和开发的开源项目。主要应用于机器人研究应用领域,随着各个算法模块的积累,于 2011 年独立出来,正式与全球 3D信息获取处理的同行一起,组建了强大的开发维护团队,以多所知名大学、研究所和相关硬件、软件公司为主。截止目前 , 发展非常迅速,不断有新的研究机构等加入,在 Willow Garage,Nvidia, Google, Toyota, Trimble, Urban Robotics, Honda Research Institute 等多个全球知名公司的资金支持下,不断提出新的开发计划,代码更新非常活跃 , 至今(2019年10月)从 1.0 版本已经发布到 1.9.1 版本。

     该项目是由来自许多不同组织的众多工程师和科学家开发的,分布在世界各地,包括:

🚀 Learning Tisps:

  1. 官网链接
  2. PCL官网介绍
  3. 官网链接
  4. 官方教程

三、环境搭建

1. Windows环境搭建

a. 安装 VCPKG

     为了解决这样的问题,微软C++ 团队开发了适用于C 和C++ 库的跨平台开源软件包管理器,它大大简化了Windows、Linux 和macOS 上第三方库相关的下载和配置操作。如果项目要使用第三方库,现在我建议各位读者通过 vcpkg来安装它们。vcpkg可以单独使用,也可以在vscode中使用。

参考信息

GitHub-VCPKG下载

操作命令:

git clone https://github.com/microsoft/vcpkg
cd vcpkg/
./bootstrap-vcpkg.sh
./vcpkg --version #(windows)是./vcpkg.exe --version 查看当前 VCPKG 版本

image

🌻 Tips:
     因为vcpkg在linux系统上默认安装库文件的release和debug版本,并且调用安装库时会默认调用debug版本(不知道具体原因),会给代码测试带来很大困扰,因此在正式使用vcpkg之前我们需要对vcpkg\triplets文件夹下的x64-linux.cmake文件进行修改。

手动打开vcpkg\triplets\vcpkg\triplets文本进行编辑,在最后一行输入 set(VCPKG_BUILD_TYPE release)

b. 安装依赖库 & PCL

vcpkg 可以通过下面的方法找到能够安装的库

.\vcpkg search
# .\vcpkg help triplet

常见的库基本都有,Ogre、Osg、OpenCV、PCL、Eigen、Ceres、g2o等等,这些库的安装直接敲命令,内部所有依赖关系都被人维护并测试通过.

image

🚀 然后就可以通过下面的指令完成安装,vcpkg默认把开源库编译成x86的Windows版本的库 【一定要用VPN@ClashForLinux】

.\vcpkg install 库名字:架构-平台-是否静态库
# .\vcpkg install PCL:x64-windows-static
./vcpkg install pcl --triplet x64-windows # 安装 PCL 库 并在所有 Visual Studio 创建的工程中包含该库

基于VCPKG微软包管理器安装

如果移除一个已经安装的开源库,那么执行remove指令即可。比如我们要移除PCL,那么执行命令:

.\vcpkg remove 库名字
# .\vcpkg remove PCL
# .\vcpkg remove --outdated # 如果想要一键移除“过时”的包

Notice:
如果你想使用VS,打开任何新建工程都有环境的话,可以使用 ./vcpkg integrate install XXLibrary

c. Vcpkg环境集成

     上面我们已经安装了一些第三方库,那如何使用呢?常规情况下,我们需要设置include目录、lib目录等,会有很多工作量。Vcpkg提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。这是Vcpkg的一大优势。

     如果你想使用VS,打开任何新建工程都有环境的话vcpkg integrate install只是想让某一个project有环境的话vcpkg integrate project然后在*\vcpkg\scripts\buildsystems目录下会有.nupkg文件,借助VS的nuget管理器导入该配置文件即可。打开Visual Studio,点击菜单“工具->NuGet包管理器->程序包管理器设置”,进入设置界面,点击“程序包源”。

2. Ubuntu@JetsonNano 环境搭建

a. 基本条件准备

  1. PCL版本:pcl-1.11.0
  2. 基础依赖安装 install_pcl_dependences.sh
    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 libpcap-dev
    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 vtk6 libvtk6.3 libvtk6-dev libvtk6.3-qt libvtk6-qt-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 libopenni2-dev
    
  3. 下载 PCL 源代码:git clone https://github.com/PointCloudLibrary/pcl.git

b. 编译安装

I. Compile

cd pcl
git checkout pcl-1.11.0
mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=None \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DBUILD_GPU=ON \ -DBUILD_apps=ON \ -DBUILD_examples=ON .. # 配置cmake
make # 进行编译  ,也可以`make -j11`11为内核数 按自己的cpu内核填写 不写数字默认使用全部核心编译

II. Install

make install
/usr/local/include/pcl-1.11.0 # pcl 安装路径

c. 程序测试

调用基本自带的PCD文件测试 pcl_viewer ../test/pcl_logo.pcd

https://blog.csdn.net/taifyang/article/details/113854969

e. Install Error

Quetion001
编译出现了 C++: internal compiler error: Killed (program cc1plus)

考虑到可能是内存不足导致的结果,增加交换空间来解决这个问题,如下所示:

# 1. 创建分区
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024    # 1 * 1024 = 1024 创建 1 g 的内存分区
sudo mkswap /swapfile
sudo swapon /swapfile

#free -m    #可以查看内存使用
#创建完交换分区之后就可以继续编译
#编译若是还不成功,试着创建更大的分区,比如count=2048
#2g的分区,基本可以解决。

#2. 关闭分区
sudo swapoff /swapfile
sudo rm /swapfile

🌻 注意: 编译完之后记得用以上命令关闭交换分区

Reference

  1. Ubuntu18.04安装PCL1.9.1(20200929)
  2. PCL Document
posted on 2023-09-15 23:04  小淼博客  阅读(74)  评论(0)    收藏  举报

大家转载请注明出处!谢谢! 在这里要感谢GISPALAB实验室的各位老师和学长学姐的帮助!谢谢~