#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读取方式。