3、传感器模型:激光雷达原理、声呐模型、深度相机模型、传感器噪声特性
各位同学,欢迎来到第三讲。今天咱们聊聊占用网格的「眼睛」——传感器模型。
做机器人感知这些年,我最大的体会是:算法再漂亮,传感器数据一塌糊涂,结果就是白搭。说白了,占用网格的精度上限,其实是由传感器决定的。你想想看,如果激光雷达扫出来的点都是歪的,那网格再精细也没用。
这一章,我会把三种主流传感器——激光雷达、声呐、深度相机——的原理和噪声特性掰开揉碎了讲。嗯,都是我在项目里踩过的坑,希望能帮你少走弯路。
3.1 激光雷达原理:从TOF到三角测距
激光雷达,目前占用网格里用得最多的传感器。它的核心任务就一个:测距。怎么测?主流有两种方法。
3.1.1 TOF(飞行时间法)
原理很简单:发射一束激光,打到物体上反射回来,记录时间差。距离 = 光速 × 时间差 / 2。
我个人习惯用TOF雷达做室外项目。为什么?因为它抗干扰能力强,测距远。我在做园区无人车时,用的就是16线TOF雷达,最远能测100米。
关键参数:
- 测距精度:通常 ±2cm ~ ±5cm
- 最大测距:几十米到上百米
- 更新频率:10Hz ~ 20Hz
3.1.2 三角测距法
另一种是三角测距。激光发射器和接收器之间有固定基线,通过光斑在成像传感器上的偏移量,用三角几何算出距离。
这种方案成本低,但精度随距离增加急剧下降。我曾经在室内扫地机器人上用过,近距离(<1米)精度不错,超过3米就开始飘了。
避坑指南: 我曾经在项目中混用TOF和三角测距雷达做融合,结果发现远距离时三角测距的噪声方差比TOF大一个数量级。后来统一用了TOF,数据一致性才好起来。
3.2 声呐模型:超声波的那些事儿
声呐,说白了就是超声波传感器。它发射声波,等回声回来,算时间差。原理和TOF激光雷达类似,但声速比光速慢得多,所以精度也差得多。
为什么还要用声呐?两个原因:便宜,不怕透明物体。激光打在玻璃上直接穿透,声呐能反射回来。我在做水下机器人时,声呐是唯一的选择。
3.2.1 声呐的锥形模型
声呐不是一条线,而是一个锥形波束。通常开角在30°~60°之间。这意味着:你只知道某个距离上有物体,但不知道具体在锥形里的哪个位置。
在占用网格里,我们通常用「反演模型」来处理:
- 锥形中心方向:高概率占用
- 锥形边缘:低概率占用
- 锥形内部但距离更近:空闲
我的经验: 声呐数据做占用网格时,千万别用「点」模型。一定要用「区域」模型。否则你会得到一堆假障碍物。
3.2.2 声呐的噪声特性
| 噪声类型 | 典型值 | 影响 |
|---|---|---|
| 距离噪声 | ±1cm ~ ±5cm | 近距离还行,远距离飘 |
| 角度噪声 | ±5° ~ ±15° | 方向不确定,网格模糊 |
| 多径反射 | 随机 | 产生假回波,最头疼 |
为什么会这样?因为声波波长长,容易衍射,也容易在墙角、桌腿之间来回弹。我曾经在实验室里用声呐建图,结果墙角处总是多出一块「虚拟障碍物」,后来发现是声波在两面墙之间弹了三次才回来。
3.3 深度相机模型:RGB-D的利与弊
深度相机,比如Kinect、RealSense、Intel D435,这几年很火。它同时输出彩色图和深度图,每个像素对应一个距离值。
3.3.1 结构光 vs ToF
深度相机也分两种:
- 结构光:投射红外光斑,通过变形计算深度。室内效果好,室外见光死。
- ToF深度相机:和激光雷达类似,但用面阵接收。室外勉强能用,但精度不如结构光。
我个人习惯:室内用结构光,室外用ToF。但要注意,深度相机普遍有「空洞」问题——黑色物体、反光表面、远距离,都会导致深度值缺失。
3.3.2 深度相机的噪声模型
深度相机的噪声不是均匀的。它和距离的平方成正比。也就是说:
噪声方差 ∝ 距离²
举个例子:1米处噪声±1cm,3米处噪声可能就±9cm了。所以深度相机通常只适合3米以内的场景。
重要结论: 在占用网格中,深度相机的远距离数据置信度很低。我建议只保留2米以内的深度数据用于建图,超过2米的直接丢弃。
3.4 传感器噪声特性:统一建模思路
好了,三种传感器都讲完了。现在问题来了:怎么把这些噪声统一到占用网格里?
我的做法是:用概率模型描述每个传感器的测量不确定性。
3.4.1 通用噪声模型
对于任意传感器,我们可以把测量值建模为:
z = z_true + ε
其中 ε 是噪声,通常假设为高斯分布:
ε ~ N(0, σ²)
但实际中,噪声往往不是纯高斯。比如激光雷达有「混叠噪声」,声呐有「多径噪声」,深度相机有「空洞噪声」。这些都需要单独处理。
3.4.2 传感器融合时的权重分配
在占用网格更新时,不同传感器的数据权重应该不同。我常用的经验公式:
| 传感器 | 权重系数 | 适用场景 |
|---|---|---|
| 激光雷达(TOF) | 1.0 | 室外、远距离 |
| 激光雷达(三角) | 0.5 | 室内、近距离 |
| 声呐 | 0.3 | 水下、透明物体 |
| 深度相机 | 0.7 | 室内、近距离 |
一个小技巧: 我通常在代码里把权重做成可配置参数。不同场景调一调,比死记硬背公式管用多了。
3.5 实战:传感器噪声标定
最后,分享一个我常用的标定方法。说白了,就是拿传感器去测已知距离的平面,然后统计误差分布。
步骤很简单:
- 把传感器固定,正对一面白墙
- 从0.5米到5米,每隔0.5米记录100次测量值
- 计算每个距离下的均值和方差
- 拟合出噪声模型参数
我曾经用这个方法标定过一个国产激光雷达,发现它在2米处的噪声方差比标称值大了3倍。嗯,后来果断换了供应商。
注意: 标定环境要干净。别在杂乱的房间里标定,否则你测出来的噪声里混了真实物体的反射,数据就废了。
好了,这一章就到这里。传感器模型是占用网格的基石,理解透了,后面的建图、定位、规划才能稳。下一章我们讲「贝叶斯更新与占用网格的数学推导」,嗯,有点硬核,但我会尽量讲得接地气。
有什么问题,欢迎在评论区留言。咱们下期见。