PCL 从PCD文件中读取点云数据

在本小节我们学习如何从PCD文件中读取点云数据。

代码
首先,在PCL(Point Cloud Learning)中国协助发行的书[1]提供光盘的第4章例1文件夹中,打开名为pcd_read.cpp的代码文件。同目录下可找到测试点云文件test_pcd.pcd。

解释说明
现在,我们解析上面打开的代码。

#include //标准C++库中的输入输出类相关头文件。
#include <pcl/io/pcd_io.h> //pcd 读写类相关的头文件。
#include <pcl/point_types.h> //PCL中支持的点类型头文件。
与本程序相关的头文件声明。

pcl::PointCloudpcl::PointXYZ::Ptrcloud(newpcl::PointCloudpcl::PointXYZ);
创建一个PointCloud boost共享指针并进行实例化。

if(pcl::io::loadPCDFilepcl::PointXYZ(“test_pcd.pcd”,*cloud)==-1)//打开点云文件
{
PCL_ERROR(“Couldn’t read file test_pcd.pcd\n”);
return(-1);
}
从磁盘上加载PointCloud数据(假设test_pcd.pcd文件已经被创建了)到二进制存储块中。或者,你可以读取PointCloud2存储块(仅仅在PCL 1.x中可用)。由于点云的动态性质,我们更愿意以二进制块来读取,然后转换成我们要使用的表示方式。

sensor_msgs::PointCloud2 cloud_blob;//PointCloud2适合版本低的点云文件
pcl::io::loadPCDFile(“test_pcd.pcd”,cloud_blob);
pcl::fromROSMsg(cloud_blob,cloud);
//
sensor_msgs/PointCloud2 转换为 pcl::PointCloud
//错误说明

把二进制块读取并转换到模板化的PointCloud格式里,这里用pcl::PointXYZ作为点类型。

for(size_ti=0;ipoints.size();++i)
std::cout<<" “<points[i].x
<<” “<points[i].y
<<” "<points[i].z<<std::endl;
最后在标准输出上打印出从文件中加载的数据。

编译并运行该程序
利用光盘提供的CMakeLists.txt文件,在cmake中建立工程文件,并生成相应的可执行文件,生成可执行程序之后,就可以运行了。在cmd中键入以下命令:

…>pcd_read.exe
运行之后,可看见如图1所示的输出结果,在本例中提供的是点云文件版本0.7,所以在代码中没有涉及到PointCloud2,如果用户需要读取版本较低的pcd文件,需要替换点云读取代码为上面描述的PointCloud2读取方式。

在这里插入图片描述

图1 点云读取例子运行结果

注意,如果test_pcd.pcd文件不存在(没有创建或者被删除了),将会提示如下错误信息:

Couldn’t read file test_pcd.pcd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值