.h文件
#include <sensor_msgs/PointCloud2.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
// 显示的头文件
#include <pcl/visualization/cloud_viewer.h>
.cpp文件
// ros消息接受点云并压缩保存文件
void pointCloud2Callback(const sensor_msgs::PointCloud2ConstPtr &msg)
{
// 点云2的数据格式
pcl::PCLPointCloud2 *pointCloud2 = new pcl::PCLPointCloud2;
// 转化为PCL中的点云的数据格式
pcl_conversions::toPCL(*msg, *pointCloud2);
// 这里使用压缩保存接口
pcl::PCDWriter pcdWriter;
int ret = pcdWriter.writeBinaryCompressed ("your_path", *pointCloud2);
if (ret != 0)
{
ROS_ERROR("writeBinaryCompressed error");
}
delete pointCloud2;
}
// 读取点云文件并显示
void readPointCloudFile()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr pointCloudData(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>("your_path", *pointCloudData) != 0)
{
return;
}
static pcl::visualization::CloudViewer viewer("123");//直接创造一个显示窗口
viewer.showCloud(pointCloudData);//窗口显示点云
viewer.wasStopped();
}
CMakeLists.txt中增加
find_package(PCL REQUIRED)
include_directories(
${PCL_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME}
${PCL_LIBRARIES}
)