1. 课程导论
1.1 激光雷达到底是怎么“看”世界的?
说实话,我入行那会儿,第一次拆开激光雷达时还挺震撼的。你想想看,一个旋转的“罐头”,里面藏着一排激光发射器,每秒射出几十万甚至上百万个激光脉冲。这些脉冲打到物体上再反射回来,雷达通过计算飞行时间(ToF),就能知道目标有多远。
嗯,这里有个关键点——激光雷达不是“拍照”,它是“测距”。它不关心物体是红色还是蓝色,它只关心“那里有个东西,距离我xx米”。
我个人习惯把激光雷达的工作流程拆成三步:
- 发射:激光器发出脉冲,经过旋转镜面或MEMS振镜扫描空间。
- 接收:反射回来的光被探测器捕获,记录时间差。
- 解算:根据角度编码器和时间差,算出每个点的(x, y, z)坐标。
我在项目中遇到过一种情况——多线激光雷达(比如16线、32线、64线)其实是在同一时刻发射多个激光束,每条线对应一个垂直角度。所以点云天然就是“按线排列”的。这个特性,后面讲滤波时会用到。
核心要点:激光雷达输出的是“稀疏的、带角度信息的距离测量值”,不是图像。这一点和相机有本质区别。
1.2 点云数据到底长什么样?
点云说白了就是一堆三维点的集合。每个点通常包含:
- 空间坐标:(x, y, z) —— 这是最基本的
- 反射强度:intensity —— 不同材质反射率不同,比如路标反光强,柏油路反光弱
- 时间戳:timestamp —— 尤其是运动场景下,每个点的时间可能不一样
- 线号/通道号:ring —— 多线雷达特有的属性
你想想看,一帧64线激光雷达的数据,大约有12万到20万个点。如果按10Hz的频率跑,每秒就是120万到200万个点。数据量其实不小。
点云有几个让我又爱又恨的特点:
| 特点 | 说明 | 对滤波的影响 |
|---|---|---|
| 稀疏性 | 点与点之间有空隙,不像图像像素连续 | 不能用图像滤波的“邻域连续假设” |
| 无序性 | 同一帧点云,交换点的顺序,内容不变 | 滤波算法要对顺序不敏感 |
| 密度不均匀 | 近处点密,远处点稀 | 固定半径滤波可能近处过密、远处漏检 |
| 噪声类型多 | 有高斯噪声、离群点、运动畸变等 | 需要多种滤波手段组合 |
我的经验:刚接触点云时,我总习惯用图像思维去理解它。后来发现,点云的“无序性”是最容易踩坑的地方。比如你用KD-tree做近邻搜索,如果没处理好点的顺序,结果可能完全不对。
1.3 滤波在SLAM中到底有多重要?
做SLAM的人都知道一句话:“Garbage in, garbage out”。你输入的点云质量不行,后面建图、定位全是白搭。
滤波在SLAM中的作用,我总结为三个层面:
- 去噪:激光雷达本身有测量噪声,雨雪天气还有“假点”。这些噪声如果不滤掉,匹配算法会跑偏。
- 降采样:原始点云太密了,直接做配准(比如ICP)计算量巨大。降采样后,既能保持几何特征,又能跑实时。
- 剔除离群点:有时候雷达会扫到一些“幽灵点”——比如玻璃上的反射、飞鸟、或者多路径效应产生的假点。这些点必须干掉。
我曾经在一个项目中,因为没做地面滤波,结果ICP匹配时把地面点当成了特征点,导致Z轴漂移了十几厘米。嗯,从那以后我再也不敢跳过地面滤波了。
避坑指南:滤波不是越狠越好。过度滤波会丢失细节,比如薄杆、路沿、树叶。我建议你根据场景调整参数——室内场景和高速场景的滤波策略完全不同。
1.4 本章知识体系总览
下面这张图是我自己梳理的,把本章的核心逻辑串起来了。你看完应该能明白,激光雷达、点云、滤波这三者是怎么咬合在一起的。
1.5 写在前面的话
做SLAM这些年,我最大的体会是:滤波不是万能的,但不滤波是万万不能的。很多初学者一上来就调ICP参数、调图优化,结果发现效果不好,回头一看——点云里全是噪点。
我个人习惯在SLAM流程的第一步就做滤波。哪怕只是做一个简单的体素降采样,都能让后续的匹配稳定很多。你想想看,如果输入的数据本身就有问题,后面再怎么优化也是白费力气。
好了,这一章我们先把基础打牢。从下一章开始,我会带你手撕各种滤波算法——从最基础的体素滤波,到统计滤波、半径滤波,再到更高级的基于深度学习的滤波方法。每一章我都会配上代码和实战案例,保证你能直接用到自己的项目里。
我的建议:如果你现在手头有激光雷达数据,不妨先打开看一眼原始点云是什么样的。看看有没有噪点?密度分布均匀吗?带着这些问题进入下一章,你会更有感觉。
可可精品资料库