目前钻研的方向是基于车载激光雷达进行路线环境的三维高精地图的构建。这种高精地图是以车载激光雷达采集的点云为基准,以图像为辅助来进行路线环境信息的辨认的提取。其中对点云的解决非常重要,针对点云进行工作,肯定绕不开 PCL 库。PCL(PointCloudLibrary) 是一个独立凋谢的 2D/3D 点云跨平台 C ++ 库。PCL 蕴含多个模块,如点云获取、滤波、宰割、配准、检索、特征提取、辨认、追踪、曲面重建、可视化等,为点云解决提供了极大的便当。
之前学习 PCL 的时候是在 win10 下,win10 配置 PCL 库非常繁琐,容易出错。此外,当初小组的工作站和我本人的集体笔记本都是 Ubuntu20.04,因而在 Ubuntu20.04 上进行 PCL 库的装置和配置。
整顿了网上的攻略,装置步骤如下:
1. 装置各种依赖
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
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
sudo apt-get install libopenni-dev
sudo apt-get install libopenni2-dev
sudo apt-get install libvtk7-deb libvtk6-dev
sudo apt-get install qt5-default
其中依照网上攻略执行 sudo apt-get install libflann1.8 libflann-dev 一步时产生谬误,显示显示无奈定位包 libflann1.8。查阅 Ubuntu Packages 后发现 18.04 后须要 libflann1.9 版本,改成 sudo apt-get install libflann1.9 libflann-dev 后胜利装置
2. 装置 PCL
sudo apt-get install libpcl-dev
这里我采纳了比拟简便的 apt-get 指令,当然也能够去 pcl 官网 github 下载须要的 pcl 版本放到主目录下,而后进行源码装置。
至此,PCL 库的装置和配置就算是实现了,接下来测试一下 PCL 库是否能够失常运行
3. 编写 CPP 源码
test.cpp 源文件
#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(int argc, char **argv) {
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()){ };
return 0;
}
4. cmake
在目录下创立 TestPCL 文件夹,用于存储测试项目的文件,将 test.cpp 和 CMakeLists.txt 存储至 TestPCL 文件夹,创立 TestPCL/bulid 文件夹以贮存两头文件。
CMakeLists.txt 内容如下
cmake_minimum_required(VERSION 2.6)
project(TEST)
find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(TEST test.cpp)
target_link_libraries (TEST ${PCL_LIBRARIES})
install(TARGETS TEST RUNTIME DESTINATION bin)
间隔上次学习 cmake 根底语法曾经过来大半年了,此处须要再复习一遍。
首先 cd 到 TestPCL 文件夹,在 shell 里输出一下命令:make 后失去可执行文件 TEST,间接执行,就能够失去用于测试的点云模型。
cd build
cmake ..
make
./TEST