在一家AI公司工作了将近两年时间,从视觉到点云的神经网络,其中经历了很多,也学到了不少不东西;由于自己主要是做算法仿真的,一直没有特别的去深入学习pcl库;只知道它用于处理点云数据,但不知道它包含了什么样的功能,可以利用点云数据去做些什么功能操作。于是下定决心来学习PCL库。
1. PCL库介绍
官网:pointclouds.org
GitHub:github.com/PointCloudLibrary/pcl
Point Cloud Library:
1. PCL库为点云数据的处理可以采用获得最广泛应用的开源库。
2. PCL库实现了大量和点云相关的通用算法及高效的数据管理,实在2013年开源的C++库。
3. PCL库支持跨平台操作(包含Windows、Linux、Max OS、Android以及部分嵌入式实时系统)。
4. PCL是BSD授权方式,可以免费进行商业和学术的应用。
2. 安装依赖库
PCL库的编译需要依赖很多环境,需要我们自己去安装配置;
必须安装的环境:Boost、Eigen、FLANN、vtk
可选择的安装环境:Qhull、OpenNI、CUDA
安装依赖库指令:
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.8 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
建议在安装QT和vtk时,用源码安装更为合适一些:
sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev
sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre
vtk8.2.0安装方法
下载地址:https://vtk.org/download/
需要下载VTK-8.2.0.tar.gz和VTKData-8.2.0.tar.gz;
首先解压VTK-8.2.0.tar.gz包,在解压VTKData-8.2.0.tar.gz(默认会将vtkdata解压到vtk包的路径下面),若为解压到vtk路径下面,需要手动指定,或者拷贝。
解压完成后,指令编译,如下所示:
mkdir vtk-8.2.0-build
cd vtk-8.2.0-build
cmake ../ -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Release -DVTK_WRAP_PYTHON=ON
make -j8
sudo make install
qt5.9.9安装方法
下载地址:qt-everywhere-opensource-src-5.9.9.tar.xz
解压:
xz -d qt-everywhere-opensource-src-5.9.9.tar.xz
tar -xvf qt-everywhere-opensource-src-5.9.9.tar
安装依赖:
1)安装flex词法分析器和bison语法分析器
sudo apt-get install flex
sudo apt-get install bison
2)安装gperf哈希函数生成器
sudo apt-get install gperf
3)安装opengl
sudo apt-get install build-essential
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglu1-mesa-dev
sudo apt-get install libegl1-mesa-dev
sudo apt-get install freeglut3-dev
编译安装:
mkdir qt-5.9.9-build
cd qt-5.9.9-build
./../configure -release
备注:-prefix 配置qt安装路径,目前采用默认安装路径
在执行configure过程中,会有一下选择提示:
1)版本提示,输入o,回车:
2)询问是否接收协议,输入y,回车:
3)configure成功:
编译命令:
make
sudo make install
配置环境变量:
sudo gedit ~/.profile
配置内容:
export QT_DIR=/usr/local/Qt-5.9.9/
export PATH=$QT_DIR/bin:$PATH
export LD_LIBRARY_PATH=$QT_DIR/lib:$LD_LIBRARY_PATH
配置完成后,需要重启电脑/虚拟机。
在终端中输入qmake -v命令,若输出一下信息,则表示qt源码编译安装成功:
3. pcl源码编译安装
- 源码下载:https://github.com/PointCloudLibrary/pcl/releases
- 解压pcl-pcl-1.9.1.tar.gz
- 安装
cd pcl-pcl-1.9.1
mkdir pcl-1.9.1-build
cd pcl-1.9.1-build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j2
sudo make install
4. 测试程序
测试程序
#include <iostream>
#include <pcl/io/pcd_io.h> //PCD读写类相关的头文件
#include <pcl/point_types.h> //PCL中支持的点类型的头文件
int
main (int argc, char** argv)
{
//实例化的模板类PointCloud 每一个点的类型都设置为pcl::PointXYZ
/*************************************************
点PointXYZ类型对应的数据结构
Structure PointXYZ{
float x;
float y;
float z;
};
**************************************************/
pcl::PointCloud<pcl::PointXYZ> cloud;
// 创建点云 并设置适当的参数(width height is_dense)
cloud.width = 5;
cloud.height = 1;
cloud.is_dense = false; //不是稠密型的
cloud.points.resize (cloud.width * cloud.height); //点云总数大小
//用随机数的值填充PointCloud点云对象
for (size_t i = 0; i < cloud.points.size (); ++i)
{
cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
}
//把PointCloud对象数据存储在 test_pcd.pcd文件中
pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);
//打印输出存储的点云数据
std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;
for (size_t i = 0; i < cloud.points.size (); ++i){
std::cerr << " " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;
}
return (0);
}
cmake文件
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
project(pcl_test)
find_package(PCL REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
include_directories(/usr/include)
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(pcl_test pcl_test.cpp)
target_link_libraries(pcl_test
${PCL_COMMON_LIBRARIES}
${PCL_IO_LIBRARIES}
boost_system
)
运行结果
cmake .
make
./pcl_test
result:
Saved 5 data points to test_pcd.pcd.
0.352222 -0.151883 -0.106395
-0.397406 -0.473106 0.292602
-0.731898 0.667105 0.441304
-0.734766 0.854581 -0.0361733
-0.4607 -0.277468 -0.916762