1. fast-livo2点云保存功能深度改造指南
最近在调试fast-livo2项目时,发现原始的点云保存功能存在几个痛点:保存路径不够直观、缺少降采样处理、错误提示不够明确。经过多次实践,我对LIVMapper.cpp中的savePCD函数进行了全面改造,现在将完整的技术方案和思考过程分享给大家。
1.1 原始函数的问题诊断
原版savePCD函数存在三个主要问题:
- 保存路径需要手动指定,新手容易找不到生成的文件
- 点云数据直接保存,大场景下文件体积可能达到GB级别
- 错误处理简单,当保存失败时难以快速定位问题原因
这些问题在实际项目中尤为明显。比如在户外建图时,原始点云可能包含数百万个点,直接保存不仅占用磁盘空间,后续处理也会非常缓慢。
1.2 改造后的核心功能增强
新版函数主要实现了以下改进:
cpp复制// 自动获取系统主目录路径
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::VoxelGrid<pcl::PointXYZRGB> voxel_filter;
voxel_filter.setLeafSize(0.15, 0.15, 0.15); // 15cm的体素尺寸
voxel_filter.filter(*downsampled_cloud);
关键改进点包括:
- 自动检测用户主目录并保存到桌面,避免文件"失踪"
- 增加0.15m精度的体素降采样,文件体积平均减小80%
- 详细的运行时状态输出,包含点云数量统计和错误诊断
注意:体素尺寸0.15m是经过多次测试的平衡值,过小会导致降采样效果不明显,过大则会损失太多细节。室内场景建议调整为0.05-0.1m。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 完整实现解析
2.1 路径自动处理机制
原始代码需要手动指定路径,这对新手很不友好。改造后的方案:
cpp复制
