1 在fast-livox2/src/LIVMapper.cpp下找到savePCD函数,将这段函数改为下面这段
void LIVMapper::savePCD()
{
std::cout << "\n=======================================================" << std::endl;
std::cout << ">>> 收到 Ctrl+C 退出指令,正在执行保存 PCD 的终极操作... <<<" << std::endl;
std::cout << "内存中已收集的 RGB 点云数量: " << pcl_wait_save->points.size() << std::endl;
std::cout << "内存中已收集的 Intensity 点云数量: " << pcl_wait_save_intensity->points.size() << std::endl;
// 自动获取你的系统主目录,强制保存到桌面,避开所有路径陷阱
std::string home_dir = getenv("HOME");
std::string raw_points_dir = home_dir + "/Desktop/fast_livo2_raw.pcd";
std::string downsampled_points_dir = home_dir + "/Desktop/fast_livo2_downsampled.pcd";
pcl::PCDWriter pcd_writer;
if (pcl_wait_save->points.size() > 0)
{
std::cout << "正在以二进制格式保存【RGB彩色点云】到: " << raw_points_dir << std::endl;
pcd_writer.writeBinary(raw_points_dir, *pcl_wait_save);
std::cout << "正在进行体素降采样以减小文件体积..." << std::endl;
pcl::PointCloud<pcl::PointXYZRGB>::Ptr downsampled_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::VoxelGrid<pcl::PointXYZRGB> voxel_filter;
voxel_filter.setInputCloud(pcl_wait_save);
voxel_filter.setLeafSize(0.15, 0.15, 0.15);
voxel_filter.filter(*downsampled_cloud);
pcd_writer.writeBinary(downsampled_points_dir, *downsampled_cloud);
std::cout << ">>> 成功!已保存原始点云与降采样点云至桌面! <<<" << std::endl;
}
else if (pcl_wait_save_intensity->points.size() > 0)
{
std::cout << "正在以二进制格式保存【Intensity单色点云】到: " << raw_points_dir << std::endl;
pcd_writer.writeBinary(raw_points_dir, *pcl_wait_save_intensity);
std::cout << ">>> 成功!已保存 Intensity 点云至桌面! <<<" << std::endl;
}
else
{
std::cout << ">>> 致命错误:内存容器中没有任何点云!建图过程中数据未能进入保存队列。 <<<" << std::endl;
}
std::cout << "=======================================================\n" << std::endl;
}
2 关于运行后pcd的保存路径
在savePCD()函数下的std::string raw和string downsampled 把路径改成删去desktop
3 catkinmake再source
用pcl看pcd:
pcl_viewer ~/fast_livo2_raw.pcd
cloudcompare.CloudCompare