交互式模拟器入门

机器人传感器模拟器:标定与传感器融合

在一个结果完全可复现的交互式机器人传感器模拟器里,逐项探索噪声、偏置、漂移、量化、数据丢失、滤波与传感器融合。

类别
传感器
时长
60–150 分钟
平台
浏览器 · 单片机
机器人传感器模拟器:标定与传感器融合 技术示意图SAMPLE → FILTER → FUSE

01 / 从这里开始

简介

机器人依据的测量值总是带有延迟、偏置和噪声,而且并不完整。这个项目把这些局限变得看得见。比较真值、原始采样和滤波后的估计值;改变采样条件;了解标定如何影响下游的控制——同时不要把一个教学模型误当成某个具体的传感器。

Live lab / Deterministic measurement model

Robot sensor simulator

Compare a known signal with noisy absolute readings and a filtered estimate. Change one error source at a time to see what calibration can—and cannot—fix.

Browser native
This simulator compares truth, absolute samples, and the selected estimate over time. Use the controls below to run it, or read the theory and algorithm after this lab.

The main plot compares solid truth, individual absolute-sensor samples, and the thicker dashed estimate. The lower band shows signed estimation error around zero; gaps mark dropped absolute samples.

Simulation

Paused. Press Start or Step to collect samples.

Measurement
Reliability & filtering
Truth
—
Absolute
—
Estimate
—
Error
—
RMSE
—
Dropped
0

Keyboard: focus the plot, then use Space to run/pause, N to step, R to reset, and F for full screen.

控件

先选择一个平滑或阶跃的真值信号,然后调整采样率、量化、随机噪声、漂移、偏置、丢包和滤波记忆。可以把原始数据与滑动平均、低通、中值和互补估计放在一起比较。预设让有噪声、有偏置和不可靠的传感器行为变得可重复。

原理

每个传感器都有量程、分辨率、精度、带宽、延迟和失效行为。数据手册上的精度只描述了系统的一部分;安装方式、温度、电源噪声、电磁干扰和表面属性往往才主导真实结果。

当各个传感器提供互补的信息、并且它们的不确定性被诚实地表示出来时,融合才有效。把两次带偏置的测量结合起来,并不会自动产生真值。先从标定、时间戳、坐标系和数据质量检查做起。

时间曲线图,对比一条平滑的真值信号、散布在其周围的带噪声原始采样,以及一条低通滤波估计。滤波后的曲线滤掉了大部分噪声,但在快速上升段明显落后于真值。
低通滤波是用滞后换噪声:它把原始采样朝真值方向平滑,但只要信号变化很快,估计值就会落后。 下载 SVG

算法

  1. 在采集边界处为每个样本打时间戳并做范围检查。
  2. 用标定的比例系数、偏移和轴对齐把原始单位换算出来。
  3. 剔除不可能的跳变,或把它们标记为无效,而不是凭空编造数据。
  4. 施加满足下游噪声要求的最轻的一级滤波。
  5. 把测量值变换到一个共同的坐标系中,并按已知的不确定性做融合。
  6. 记录原始值和处理后的值,让故障仍可复现。

源代码

当时间常数是被有意挑选的时候,指数低通滤波很有用:

class LowPass:
    def __init__(self, alpha):
        self.alpha = alpha
        self.value = None

    def update(self, sample):
        if self.value is None:
            self.value = sample
        else:
            self.value += self.alpha * (sample - self.value)
        return self.value

把原始样本和滤波结果并排记录下来。否则一条看着漂亮的曲线可能掩盖了截断、丢包和标定错误。

假设与硬件差异

这个实验台是一个教学用的信号模型,而不是某一份具体的传感器数据手册。噪声是用一个由你控制的旋钮设定的种子化高斯或均匀分布;而真实的 IMU 或 ToF 传感器还会带来随温度变化的偏置、非高斯尖峰和总线时序抖动,这些都被这个模型简化了。这里的采样是完美周期的,但在单片机上,回路时序和中断延迟让时间戳变得不可或缺——这也正是控件里的每种处理模式都把真值、原始采样和估计值放在一起比较的原因。滤波在图上看着很吸引人,可每一种更平滑的滤波都会增加滞后,而它日后会以控制延迟的形式出现在硬件上;同一笔交易在传感器噪声教程里也有讨论。

电路图

接上多个传感器之前,先确认总线电压、上拉要求、地址和最大线缆长度。

混合传感器总线的框图。模拟传感器经 ADC 接入控制器,I²C 传感器共用 SDA 和 SCL 线,SPI 传感器使用片选、时钟和数据线。控制器写下一份带时间戳的日志。
不同的传感器总线汇聚到同一个控制器,控制器为每个样本打上时间戳,让原始值和处理后的值保持可复现。 下载 SVG

引导实验

这个实验台里的每一个旋钮,都是为了让你刻意造出某一种传感器故障, 再看看哪个工具能修好它。亲手做一遍,抵得上读很多东西。

1. 证明滤波修不好偏置

把噪声设为零,把偏置设成一个明显的偏移。然后依次试用每一种滤波——滑动平均、 低通、中值。它们没有一个会把估计值往真值方向拉,因为这三种滤波 都在衰减变化,而偏置本身并不变化。

然后把偏置设为零、噪声调高,看着同样的滤波工作得很好。这是传感器工作中 最有用的一个区分:噪声、偏置和漂移在图上看起来很像,却需要三种不同的修法, 而再多滤波也永远治不好偏置。

2. 看均值如何抹平一个中值会拒掉的尖峰

打开丢包或尖峰,把滑动平均和同样窗口长度的中值放在一起比较。

滤波 一个离群值会造成什么
5 点滑动平均 让估计值在连续五个样本上发生偏移
5 点中值 完全没有贡献

超声波和飞行时间传感器的噪声不是高斯的——它是在一个本来稳定的信号上 偶尔出现的反常数值。而这恰恰是平均值处理得最差的情形。

3. 量化滞后要付出多少代价

切换到阶跃真值信号,把滤波的 alpha 调小(或者把窗口加长)。估计值 变得更平滑,到达也更晚。在每个设置下从图上读出延迟:

滤波设置 典型滞后 在 0.3 m/s 下相当于
3 点中值 约 1 个样本 3 mm
10 点滑动平均 约 4.5 个样本 14 mm
低通,α = 0.1 约 9 个样本 27 mm
低通,α = 0.02 约 49 个样本 147 mm

最后一行会给出一条非常平滑的曲线,同时让机器人按照 15 厘米前障碍物的位置来转向。 一定要用机器人真正在意的单位去检查滞后,而不是用样本数——这是一个 出于好心的滤波反而把机器人弄坏的最常见方式。

4. 看清融合能做什么、不能做什么

把一个源设成有噪声但无偏置,另一个设成平滑但在漂移,观察互补估计 如何取走两者各自好的那一半。然后给两个源加上相同的偏置, 看着融合后的估计原样继承了它。

融合利用的是彼此独立的误差。共模误差会原封不动地存活下来, 这就是为什么标定要放在融合之前,而不是之后。

你应该观察到什么

配置 原始数据 最合适的滤波 原因
高斯噪声,无偏置 对称地散布 滑动平均或低通 噪声平均后趋向真值
偶发尖峰 大体正常,偶有反常数值 中值 直接把离群值拒掉
恒定偏移 紧密但错误 没有——去标定 滤波看不见这个偏移
缓慢漂移 起点正确,越走越远 没有——重新标定或做融合 需要一个绝对参考
丢包 缺口 中值,外加保持上一次有效值 编造一个值比标一个缺口更糟
量化 落在离散的台阶上 没有——这就是你的分辨率 在台阶之间滤波只增加滞后,不增加信息

硬件落地

这个实验台 真实传感器
采样是完美周期的 回路时序和中断延迟让时间戳变得不可或缺
噪声是种子化的高斯或均匀分布 非高斯尖峰,以及随温度变化的偏置
有真值可供对比 你没有真值——这正是你要对着已知输入做标定的原因
丢包是明确标出的 一次丢包可能看起来像一个合理的数值
一次只用一个传感器 多条总线、多种速率,以及它们之间的对齐问题

对真实传感器而言,实用的流程很短:把它静止地贴在一个已知输入上,记录几千个 带时间戳的样本,并且把时间序列和一张直方图都画出来。直方图是人们 会跳过的那一部分,却也是信息量最大的——高斯噪声会画出一个钟形, 离群值会让钟形在尾部多出几个远处的点,而这两者需要不同的滤波器。 完整方法见传感器噪声、偏置与滤波。

硬件清单

元器件

  • 单片机或单板计算机
  • 一个或多个数字或模拟传感器
  • 已知的标定基准
  • 稳定的稳压电源和正确的逻辑电平
  • 用于可重复实验的日志记录连接

探索关联图谱

哪里用到这个模拟器

以这个实验台为基础的项目、学习路线和教程。

继续搭建

下载资源

完成项目时可以参考本页上的这些资料。可下载的项目包只会在其源文件和版本发布之后才会添加。

常见问题

常见问题解答

信号越平滑就一定越好吗?

不是。强滤波可能会去掉有用的运动信息,并引入延迟。选择滤波器时,要依据噪声的频谱、所需的响应时间,以及要用这项测量值去做的决策。

偏置和噪声有什么区别?

偏置是相对真值的一个可重复的偏移,而噪声在样本之间变化。标定可以估计出偏置;取平均或滤波也许能减小随机噪声,却无法可靠地消除未知的偏置。

什么是传感器漂移,它和偏置有什么不同?

偏置是一个固定的偏移,测量一次就可以减掉。漂移则是这个偏移随时间缓慢变化,通常与温度或元件老化有关,所以开机时做的标定会逐渐与实际不再相符。正因为有漂移,长时间运行才需要定期重新标定,或者需要一个可供估计器据以修正的参考。

应该用哪种滤波:滑动平均、低通还是中值?

滑动平均和指数低通都能平滑高斯类噪声,它们通过窗口长度或时间常数,在响应速度和平滑程度之间做取舍。中值滤波更擅长去除偶发的尖峰和丢包,因为少数几个坏样本不会移动中间值。选择能满足下游要求的最轻的滤波,而不是看起来最平滑的那一种。

滤波会增加多少延迟?

每一种平滑滤波都会滞后于真实信号,平滑得越多,滞后就越大:时间常数长的低通滤波能抑制更多噪声,但在快速变化面前会落后得更多。一定要把滤波后的估计值与原始采样和真值画在一起,让滞后在你把它用进控制回路之前就清晰可见。

什么是传感器融合,它什么时候才真正有用?

融合把多个传感器合并成一个估计,只有当这些传感器提供互补的信息、并且它们的不确定性被诚实地表示出来时,它才有用。把两次带偏置的测量结合起来,并不会产生真值。例如,互补滤波在高频段信任一个传感器、在低频段信任另一个;在做融合之前,先把标定、时间戳和坐标系处理好。

为什么每个样本都应该打时间戳?

样本很少以完全固定的间隔到达,而融合和滤波都假定你知道每个值是在何时测得的。时间戳让你能够发现抖动、对齐来自不同传感器的数据,并剔除过期的读数。把原始值和处理后的值并排记录下来,能让截断、丢包和标定错误这类故障保持可复现。

延伸阅读

参考资料

权威资料,帮助你越过本模拟器有限的教学模型,进一步深入学习。