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 噪声来源分析

轮式里程计的噪声,说白了来自三个方面:

  1. 系统误差:轮径标定不准、轮距测量误差。我见过有人直接用卡尺量轮距,结果差了2mm,转弯时误差就大了。
  2. 非系统误差:打滑、地面不平。这个最头疼,因为它是随机的。
  3. 量化误差:编码器分辨率有限,低速时尤其明显。

注意:轮式里程计的误差模型通常用协方差矩阵来近似。我个人的经验是,平移误差的方差与行驶距离成正比,旋转误差的方差与转弯角度成正比。这个假设虽然粗糙,但在工程上很实用。

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 知识体系总览

下面这张图,是我梳理的传感器模型与噪声分析的整体框架。你可以把它当作一个检查清单,做定位系统时挨个过一遍:

传感器模型与噪声分析知识体系 IMU 测量模型: a_m = a_w + g + b_a + n_a ω_m = ω_w + b_g + n_g 噪声参数: • 角度随机游走 • 偏置稳定性 • 速率随机游走 分析方法: Allan方差分析 典型应用: • 姿态估计 • 短时积分定位 • 与其它传感器融合 轮式里程计 测量模型: Δs = (Δs_l + Δs_r) / 2 Δθ = (Δs_r - Δs_l) / L 误差来源: • 系统误差(轮径、轮距) • 非系统误差(打滑) • 量化误差(编码器分辨率) 误差模型: 协方差与距离/角度成正比 典型应用: • 短距离定位 • 速度估计 • 与IMU融合(航位推算) 激光雷达 测量模型: z_k = h(x, m) + v_k 噪声类型: • 测距噪声(±1~3cm) • 角度噪声(±0.1~0.5°) • 混叠噪声(多路径) 匹配方法: • ICP / PL-ICP • 相关性匹配 典型应用: • 建图与定位 • 障碍物检测 • 回环检测 核心思想:没有完美的传感器,只有合理的模型与噪声处理策略

3.5 噪声建模的工程实践

讲完了理论,咱们聊聊实际怎么做。我总结了一套「三步走」的方法:

  1. 采集静态数据:把传感器放在静止状态,记录5~10分钟的数据。这是分析噪声基底的基础。
  2. 计算统计特性:算均值、方差、功率谱密度。对于IMU,一定要做Allan方差分析。
  3. 参数化噪声模型:把分析结果转化成滤波器能用的参数。比如卡尔曼滤波里的Q矩阵、R矩阵。

小技巧:我习惯在代码里把噪声参数单独写成一个配置文件。这样换传感器时,只需要改参数,不用动算法逻辑。你想想看,是不是省了很多事?

嗯,传感器模型这块就聊到这儿。记住一句话:模型是骨架,噪声是血肉。只有把两者都搞清楚了,你的定位系统才能真正跑得稳、跑得准。

可可精品资料库