第2章 · 传感器基础:LiDAR 工作原理、参数与噪声源
各位好,我是老周。在自动驾驶感知系统里,LiDAR 一直是我个人最偏爱的传感器之一。它不像摄像头那样依赖环境光照,也不像毫米波雷达那样稀疏。但 LiDAR 也有自己的脾气——噪声、干扰、退化,这些坑我几乎都踩过。今天咱们就把 LiDAR 的底细彻底聊透。
1. LiDAR 工作原理:光与时间的游戏
LiDAR 的核心思路其实很简单:发射一束激光,打到目标后反射回来,测量往返时间。距离 = 光速 × 时间 / 2。这就是 ToF(飞行时间)法。目前市面上绝大多数车载 LiDAR 都是这个路子。
但我得说,原理简单不代表工程容易。我记得 2018 年做第一代原型时,激光脉冲的上升沿抖动就让我们折腾了两个月。你想想看,要测厘米级的距离,时间分辨率得做到几十皮秒——这可不是闹着玩的。
除了 ToF,还有 FMCW(调频连续波)方式。它通过测量发射信号与回波信号的频率差来算距离,顺便还能直接测速度。我个人觉得 FMCW 是未来的趋势,抗干扰能力更强,但目前成本还偏高。
2. 关键性能参数——选型必看
做系统集成时,供应商给的 datasheet 参数一大堆。哪些是真正影响噪声建模的?我按重要性排个序:
| 参数 | 典型值 | 对噪声的影响 |
|---|---|---|
| 线束(扫描层数) | 16 / 32 / 64 / 128 | 线束越密,点云越密,但每束能量降低,信噪比下降 |
| 角分辨率(水平/垂直) | 0.1° ~ 0.4° | 分辨率越高,远距离目标点越稀疏,噪声越明显 |
| 测距精度 (1σ) | ±1 cm ~ ±3 cm | 直接决定距离噪声的方差 |
| 帧率 | 10 Hz / 20 Hz | 帧率越高,运动畸变越小,但每帧积分时间短,噪声增加 |
| 视场角 (FOV) | 水平 360° / 垂直 30° | 边缘视场往往噪声更大,像差和能量衰减 |
这里有个坑:很多厂商标称的“测距精度”是在实验室理想条件下测的。实际装车后,振动、温度、目标反射率都会让这个数字翻倍。我曾经遇到过一款 64 线 LiDAR,标称精度 ±1.5 cm,结果在雨天沥青路面上一测,跳动到了 ±5 cm。嗯,从此我对标称值都打个问号。
3. 常见噪声源分析——实战避坑
LiDAR 的噪声源可以分成三大类:光学噪声、电子噪声、环境耦合噪声。咱们一个一个说。
- 环境光干扰: 太阳光中的近红外成分会直接进入探测器,产生散粒噪声。正午强光下,信噪比可能下降 6 dB 以上。我习惯在仿真里给每个像素加一个与太阳辐照度成正比的噪声项。
- 多路径反射: 激光打到玻璃、镜面或积水表面时,会形成多个回波。算法如果只取第一个回波,距离就会偏近。这在城市峡谷场景里特别常见。
- 运动畸变: 旋转式 LiDAR 扫描一帧需要 100 ms,如果车辆在这期间转弯或颠簸,点云就会“扭曲”。我见过一个案例,高速过弯时点云里的护栏直接变成了弧形——这其实是时间戳对齐没做好。
- 大气衰减与雨雾: 雨滴或雾滴会让激光发生散射,回波能量衰减,远距离点变得稀疏且噪声增大。仿真时可以用 Beer-Lambert 定律来建模衰减系数。
4. 噪声建模的起点——从参数到概率分布
做仿真验证时,我们不能简单地把 LiDAR 当成“完美量尺”。每个测量值都应该附加一个随机误差。我个人习惯用高斯混合模型来拟合距离噪声:
# 伪代码:LiDAR 距离噪声注入
def add_lidar_noise(true_range, reflectivity, ambient_light):
sigma = base_sigma + k1 / sqrt(reflectivity) + k2 * ambient_light
noise = np.random.normal(0, sigma)
# 偶尔出现多路径野点
if np.random.rand() < 0.02:
noise += np.random.uniform(-0.5, 0.5) # 米
return true_range + noise
你看,这里我加了三个因子:基础精度、反射率影响、环境光影响。实际项目中,这些系数需要通过标定实验来拟合。别偷懒,拿你的 LiDAR 去不同场景下录几组数据,比看十篇论文都管用。
5. 本章小结
LiDAR 不是完美的“上帝之眼”。它有精度极限,有环境依赖,有各种噪声源。但只要我们理解它的工作原理,吃透关键参数,并且把噪声源量化到仿真模型里,就能在虚拟世界里提前暴露问题。
下一章我们会深入 Camera 传感器,但今天先把 LiDAR 的底子打好。你想想看,如果连传感器噪声的源头都搞不清楚,后面的仿真验证就是空中楼阁。