ros sensor_msgs::PointCloud2转pcl::PCLPointCloud2并保存读取显示文件

 .h文件

#include 
#include 
#include 
#include 
// 显示的头文件
#include 

.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::Ptr pointCloudData(new pcl::PointCloud);

    if (pcl::io::loadPCDFile("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}
)

你可能感兴趣的:(c++)