Author: 瑯琊土肥圓
E-mail: wt_lor@163.com
Date: 2018-09-21
PCL(Point Cloud Library)全稱點云庫,用于處理LIDAR設備生成的點云數(shù)據(jù)。截止至本文檔的完成之日(2018-09-21),市場主流的LIDAR設備為Velodyne公司提供的。本文基于的設備是Velodyne的16線設備,屬于入門級的低密度LIDAR設備。
閑言少敘,進入正題。本文是PCL手記的首作,自然而然的要講講如何打開一個pcd文件——保存點云數(shù)據(jù)的文件,其具體格式可到這里詳細了解。具體代碼如下所示。
/* pcd_read.cpp */
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
int main(int argc, char **argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PCDReader reader;
reader.read<pcl::PointXYZ>("filename.pcd", *cloud);
return 0;
}
逐條解釋一下上面的源碼。
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
這兩行引入pcl的io內容以及點云類型(point_types),本例中使用的點云點因為不含有色彩信息,所以其類型為pcl::PointXYZ。有的LIDAR生成的點云點帶有色彩信息,其類型應該為pcl::PointXYZI(帶有灰度信息)和/或pcl::PointXYZRGB(帶有色彩信息)。
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PCDReader reader;
reader.read<pcl::PointXYZ>("filename.pcd", *cloud)
第一行定義一個PointCloud數(shù)據(jù)結構變量,用于暫存(hold)pcd文件中的點云數(shù)據(jù),通過其子域points可以對點云中的點進行 訪問(access)。
第二行定義一個PCDReader的對象,用于讀取pcd文件。
第三行讀取pcd文件。
由于PCL庫大量使用了模板編程,所以需要讀者對于C++的模板編程比較了解,包括模板函數(shù)與模板類。
接下來說明,如何編譯前述源文件。由于本身PCL比較龐大,有很多模塊——類似于OpenCV庫,所以編譯使用此類庫的源文件時,建議使用cmake,而非帶有-L以及-I選項的clang++或者g++。具體的編譯文件如下所示,CMakeLists.txt。
cmake_minimum_required(VERSION 3.0)
project(pcd_read)
find_package(
PCL 1.2 REQUIRED
)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_executable(pcd_read ./pcd_read.cpp)
target_link_libraries(pcd_read ${PCL_LIBRARIES})
將該CMakeLists.txt文件和pcd_read.cpp放在同一目錄下,在命令行終端運行
$ cmake CMakeLists.txt
即可生成Makefile文件,然后運行
$ make
即可生成可運行文件pcd_read。