3、传感器模型与噪声:IMU模型、轮式里程计模型、激光雷达模型、噪声特性分析
做定位这么多年,我越来越觉得一个道理特别朴素——你有多懂传感器,你的定位系统就有多稳。说白了,算法再花哨,如果传感器模型建得不对,噪声特性摸不透,那跑出来的轨迹就是空中楼阁。
这一节,咱们就扎进去看看三种最常用的传感器:IMU、轮式里程计、激光雷达。我会把它们的数学模型、噪声来源、以及我踩过的坑,一股脑儿倒出来。
3.1 IMU模型:加速度计与陀螺仪
IMU这东西,我刚开始接触时觉得挺简单的——不就是测加速度和角速度嘛。后来发现,它里面的门道深着呢。
3.1.1 理想模型 vs 实际模型
理想情况下,IMU的输出是这样的:
a_m = a_w + g // 加速度计测量值 = 真实加速度 + 重力加速度
ω_m = ω_w // 陀螺仪测量值 = 真实角速度
但实际呢?我当年在做一个AGV项目时,IMU数据飘得离谱,查了半天才发现是没考虑偏置。实际模型应该是:
a_m = a_w + g + b_a + n_a
ω_m = ω_w + b_g + n_g
其中:
- b_a, b_g:零偏(bias),随时间缓慢变化
- n_a, n_g:白噪声,高频随机波动
核心要点:IMU的噪声模型通常用「随机游走」来描述偏置的变化。你想想看,如果偏置不建模,积分出来的位置误差会以 t² 的速度增长,几秒钟就崩了。
3.1.2 噪声特性分析
我习惯用Allan方差来分析IMU噪声。它能把不同类型的噪声分离开来:
| 噪声类型 | Allan方差斜率 | 物理含义 |
|---|---|---|
| 角度随机游走 | -1/2 | 白噪声积分结果 |
| 偏置稳定性 | 0(平坦区) | 偏置波动的下限 |
| 速率随机游走 | +1/2 | 偏置的缓慢漂移 |
| 量化噪声 | -1 | AD转换精度限制 |
避坑指南:我曾经在选型时只看陀螺仪的量程,忽略了角度随机游走参数。结果在低速旋转场景下,定位误差大得没法看。记住,低成本的MEMS IMU,角度随机游走通常在 0.1~1 °/√h 之间,选型时一定要看这个数。
3.2 轮式里程计模型:从编码器到位移
轮式里程计是移动机器人最朴素的定位手段。它不依赖外部信号,但误差会累积——嗯,这就是它的宿命。
3.2.1 差速轮模型
对于两轮差速底盘,里程计的计算逻辑是这样的:
// 左右轮编码器读数(单位:脉冲)
ΔN_l, ΔN_r
// 转换为轮子位移
Δs_l = (ΔN_l / N_ppr) * π * D
Δs_r = (ΔN_r / N_ppr) * π * D
// 计算机器人位姿变化
Δs = (Δs_l + Δs_r) / 2
Δθ = (Δs_r - Δs_l) / L
// 更新位姿
x' = x + Δs * cos(θ + Δθ/2)
y' = y + Δs * sin(θ + Δθ/2)
θ' = θ + Δθ
这里 N_ppr 是编码器每圈脉冲数,D 是轮径,L 是轮距。每个参数都有误差,我一个个说。
3.2.2 噪声来源分析
轮式里程计的噪声,说白了来自三个方面:
- 系统误差:轮径标定不准、轮距测量误差。我见过有人直接用卡尺量轮距,结果差了2mm,转弯时误差就大了。
- 非系统误差:打滑、地面不平。这个最头疼,因为它是随机的。
- 量化误差:编码器分辨率有限,低速时尤其明显。
注意:轮式里程计的误差模型通常用协方差矩阵来近似。我个人的经验是,平移误差的方差与行驶距离成正比,旋转误差的方差与转弯角度成正比。这个假设虽然粗糙,但在工程上很实用。
3.3 激光雷达模型:从点到地图
激光雷达的模型,核心就是「光束模型」。它描述的是:给定一个位姿,激光束应该打到什么地方。
3.3.1 理想光束模型
对于2D激光雷达,一束激光的测量模型可以写成:
z_k = h(x, m) + v_k
其中:
- z_k:第k束激光的测量距离
- h(x, m):根据机器人位姿x和地图m,计算出的期望距离
- v_k:测量噪声
实际计算时,就是沿着激光方向做射线投射,找到第一个与地图障碍物相交的点。
3.3.2 噪声特性分析
激光雷达的噪声,我把它分成三类:
| 噪声类型 | 典型值 | 产生原因 |
|---|---|---|
| 测距噪声 | ±1~3cm | 飞行时间测量误差 |
| 角度噪声 | ±0.1~0.5° | 电机旋转抖动、编码器误差 |
| 混叠噪声 | 随机 | 多路径反射、玻璃透射 |
实战经验:我在做仓储机器人时,发现激光雷达在金属货架附近经常出现「鬼点」。后来分析发现是镜面反射导致的。解决办法是:在匹配时剔除强度异常的点,或者对反射面做特殊处理。
3.4 知识体系总览
下面这张图,是我梳理的传感器模型与噪声分析的整体框架。你可以把它当作一个检查清单,做定位系统时挨个过一遍:
3.5 噪声建模的工程实践
讲完了理论,咱们聊聊实际怎么做。我总结了一套「三步走」的方法:
- 采集静态数据:把传感器放在静止状态,记录5~10分钟的数据。这是分析噪声基底的基础。
- 计算统计特性:算均值、方差、功率谱密度。对于IMU,一定要做Allan方差分析。
- 参数化噪声模型:把分析结果转化成滤波器能用的参数。比如卡尔曼滤波里的Q矩阵、R矩阵。
小技巧:我习惯在代码里把噪声参数单独写成一个配置文件。这样换传感器时,只需要改参数,不用动算法逻辑。你想想看,是不是省了很多事?
嗯,传感器模型这块就聊到这儿。记住一句话:模型是骨架,噪声是血肉。只有把两者都搞清楚了,你的定位系统才能真正跑得稳、跑得准。