4. 点云预处理
激光雷达输出的原始点云并不是“干净”的三维地图,它同时包含测量噪声、雨雾尘埃、反光伪点、地面点、动态物体以及大量冗余点。若直接把这些点送入SLAM前端,配准会变慢、误匹配会增多、位姿漂移也会加剧。因此,点云预处理是LiDAR SLAM中承上启下的关键环节:它把原始扫描整理成“几何结构清晰、规模可控、语义相对干净”的点集,为后续特征匹配、帧间配准和回环检测提供可靠输入。
一、核心原理:预处理是一条逐级“提纯”的流水线
点云预处理通常遵循“先剔除明显错误,再压缩数据规模,再分离语义结构,最后提取可匹配特征”的顺序。顺序不能随意颠倒:如果先去噪再降采样,可能把噪声点当作体素中心保留;如果先聚类再地面分割,地面会把所有物体连成一片,聚类结果几乎不可用。因此,合理的处理链是:去噪 → 滤波 → 降采样 → 地面分割 → 聚类 → 特征提取。
去噪针对的是孤立离群点和测量粗差,常用统计滤波或半径滤波;滤波用于限制感兴趣区域,例如只保留车体前方一定距离和高度范围内的点;降采样通过体素栅格减少点数,同时尽量保持几何形状;地面分割把地面点与障碍物点分离,常用RANSAC平面拟合或坡度/高度阈值法;聚类把相邻的非地面点分成独立目标;特征提取则从点云中计算法线、曲率、边缘点、平面点等,供配准使用。
二、方法流程与关键参数
在工程实现中,常用PCL或Open3D完成上述步骤。下面给出一个典型的C++/PCL处理片段,展示从读取点云到地面分割与聚类的核心调用方式:
// 1. 统计滤波去噪
pcl::StatisticalOutlierRemoval<pcl::PointXYZI> sor;
sor.setInputCloud(cloud);
sor.setMeanK(50); // 邻域点数
sor.setStddevMulThresh(1.0); // 标准差倍数
sor.filter(*cloud_filtered);
// 2. 体素降采样
pcl::VoxelGrid<pcl::PointXYZI> vg;
vg.setInputCloud(cloud_filtered);
vg.setLeafSize(0.2f, 0.2f, 0.2f); // 体素边长 0.2m
vg.filter(*cloud_down);
// 3. RANSAC 地面分割
pcl::SACSegmentation<pcl::PointXYZI> seg;
seg.setOptimizeCoefficients(true);
seg.setModelType(pcl::SACMODEL_PLANE);
seg.setMethodType(pcl::SAC_RANSAC);
seg.setDistanceThreshold(0.15); // 地面距离阈值
seg.setInputCloud(cloud_down);
seg.segment(*inliers, *coefficients);
// 4. 欧氏聚类
pcl::EuclideanClusterExtraction<pcl::PointXYZI> ec;
ec.setClusterTolerance(0.5); // 聚类容差
ec.setMinClusterSize(10);
ec.setMaxClusterSize(2500);
ec.setInputCloud(cloud_non_ground);
ec.extract(clusters);
参数选择直接决定预处理质量。例如体素边长过大,路沿、杆状物会被“抹平”;地面距离阈值过小,缓坡会被误判为障碍物;聚类容差过小,同一辆车会被拆成多个簇。实际调试时,应结合雷达线数、安装高度和场景复杂度反复验证。
三、典型场景:城市道路与园区巡检
在城市道路场景中,16线或32线激光雷达每秒产生约30万点。若不做降采样,单帧配准耗时可能超过200ms,难以满足实时性。经过0.2m体素降采样后,点数可降至原来的20%~30%,配准速度显著提升。地面分割后,剩余的非地面点主要用于提取杆状物、车辆和建筑立面,这些结构在帧间配准中具有更强的几何约束。
在园区巡检场景中,地面较为平整但存在减速带和井盖。此时RANSAC平面模型可能把减速带误判为障碍物,导致聚类结果中出现大量小簇。解决方法是先做坡度滤波,或对地面点做二次拟合,保留缓变地形。对于动态行人,可在聚类后结合尺寸和高度过滤,避免其进入特征匹配环节。
四、常见误区与复盘
| 误区 | 现象 | 修正方法 |
|---|---|---|
| 先降采样再去噪 | 噪声点被体素保留,后续配准出现离群匹配 | 先去噪,再降采样 |
| 地面分割阈值过大 | 低矮障碍物被误删,漏检路沿 | 按雷达安装高度和坡度重新标定阈值 |
| 聚类容差过小 | 同一目标被拆成多个簇,特征碎片化 | 根据目标尺寸和点间距增大容差 |
| 忽略强度信息 | 反光板、车道线等特征未被利用 | 在特征提取中融合反射强度 |
| 参数一套用到底 | 换场景后性能骤降 | 按场景建立参数配置模板并在线切换 |
综上,点云预处理的核心在于建立一条稳定、可复现的处理链,并针对雷达型号和场景特点调优参数。去噪保证数据干净,滤波限定感知范围,降采样控制计算规模,地面分割分离语义层次,聚类划分独立目标,特征提取则为后续配准提供几何依据。只有这条链路稳定,LiDAR SLAM的位姿估计和建图精度才有可靠保障。