在本教程中,我们将学习如何从PCD文件中读取点云数据。
#代码
首先,在你最喜欢的编辑器中创建一个名为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>);
if (pcl::io::loadPCDFile<pcl::PointXYZ> ("test_pcd.pcd", *cloud) == -1) //* load the file
{
PCL_ERROR ("Couldn't read file test_pcd.pcd \n");
return (-1);
}
std::cout << "Loaded "
<< cloud->width * cloud->height
<< " data points from test_pcd.pcd with the following fields: "
<< std::endl;
for (size_t i = 0; i < cloud->points.size (); ++i)
std::cout << " " << cloud->points[i].x
<< " " << cloud->points[i].y
<< " " << cloud->points[i].z << std::endl;
return (0);
}
#说明
现在,让我们逐一分解代码。
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
创建一个PointCloud <PointXYZ> boost
共享指针并初始化它。
if (pcl::io::loadPCDFile<pcl::PointXYZ> ("test_pcd.pcd", *cloud) == -1) //* load the file
{
PCL_ERROR ("Couldn't read file test_pcd.pcd \n");
return (-1);
}
从磁盘加载PointCloud
数据(我们假设test_pcd.pcd
已经从前面的教程中创建)到binary blob
中。
或者,您可以阅读PCLPointCloud2 blob
(仅在PCL 1.x中可用)。由于点云的动态特性,我们倾向于将它们读为binary blobs,然后转换为我们想要使用的实际表示。
pcl::PCLPointCloud2 cloud_blob;
pcl::io::loadPCDFile ("test_pcd.pcd", cloud_blob);
pcl::fromPCLPointCloud2 (cloud_blob, *cloud); //* convert from pcl/PCLPointCloud2 to pcl::PointCloud<T>
读取binary blob
并将其转换为模板化的PointCloud
格式,此处使用pcl::PointXYZ
作为基础点类型。
最后:
for (size_t i = 0; i < cloud->points.size (); ++i)
std::cout << " " << cloud->points[i].x
<< " " << cloud->points[i].y
<< " " << cloud->points[i].z << std::endl;
用于显示从文件加载的数据。
#编译和运行程序
将下面的行添加到您的CMakeLists.txt
文件中:
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(pcd_read)
find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable (pcd_read pcd_read.cpp)
target_link_libraries (pcd_read ${PCL_LIBRARIES})
制作好可执行文件之后,就可以运行它了。简单地做:
./pcd_read
你会看到类似于:
Loaded 5 data points from test_pcd.pcd with the following fields: x y z
0.35222 -0.15188 -0.1064
-0.39741 -0.47311 0.2926
-0.7319 0.6671 0.4413
-0.73477 0.85458 -0.036173
-0.4607 -0.27747 -0.91676
请注意,如果文件test_pcd.pcd
不存在(不是已创建或已被删除),则应该收到错误消息,如:
Couldn't read file test_pcd.pcd