2. 标定基础理论:传感器误差来源与模型建立

做MEMS传感器标定这么多年,我最大的体会就是:不懂误差,就别谈标定。你想想看,如果连传感器为什么不准都搞不清楚,那标定不就是瞎调参数吗?

这一章,咱们就把误差的底裤扒干净。我会从最基础的误差来源讲起,然后带你建立误差模型,最后聊聊标定坐标系。嗯,内容有点干,但都是硬货。

2.1 传感器误差的四大来源

我在项目里遇到过不少工程师,一上来就问「标定算法怎么选」。我的回答永远是:先搞清楚你的传感器到底哪里不准。MEMS传感器的误差,说白了就四种:

2.1.1 偏移误差(Bias/Offset)

偏移是最常见的误差。你拿一个加速度计放在桌面上,理论上应该输出0g(水平方向)和1g(垂直方向)。但实际读出来可能是0.05g和1.02g。这多出来的0.05g和0.02g,就是偏移。

为什么会这样? 制造工艺的微小差异、封装应力、温度变化,都会导致偏移。我见过最夸张的一个案例——某款IMU在-40°C到85°C的温度范围内,偏移漂了整整200mg。嗯,这种传感器如果不做温度补偿,基本没法用。

核心要点: 偏移误差是加性误差,数学上表现为 y = x + b,其中b就是偏移量。

2.1.2 灵敏度误差(Scale Factor / Sensitivity)

灵敏度误差,说白了就是「放大倍数不准」。理想情况下,你给传感器施加1g的加速度,它应该输出1g。但实际可能是0.98g。这个比例偏差,就是灵敏度误差。

我个人的习惯是,把灵敏度误差拆成两部分看:

  • 比例因子误差:整体缩放,比如所有轴都偏小2%
  • 比例因子非线性:不同量程下缩放比例不一样

举个例子,某款陀螺仪在±100°/s量程下灵敏度误差是0.5%,但到了±500°/s量程下变成了1.2%。这种非线性问题,在低成本MEMS里特别常见。

2.1.3 非线性误差(Nonlinearity)

非线性误差,是让我最头疼的一种。为什么?因为它不好建模。

理想传感器的输入输出关系是一条直线。但实际器件总会有弯曲。这个弯曲程度,就是非线性误差。通常用最佳拟合直线的偏差百分比来表示。

我曾经调试过一个压力传感器,在低压段线性度很好,但到了高压段就开始飘。查了半天,发现是敏感膜片的非线性形变导致的。这种问题,光靠简单的线性标定根本搞不定。

避坑指南: 如果你发现标定后残差呈现明显的「S形」或「抛物线形」,大概率是非线性误差没处理好。这时候可以考虑分段线性标定或者多项式拟合。

2.1.4 交叉轴误差(Cross-Axis Sensitivity)

交叉轴误差,也叫串扰。理想情况下,X轴的加速度只影响X轴的输出。但实际器件中,Y轴和Z轴的加速度也会在X轴上产生响应。

为什么会这样?说白了就是安装不对齐。敏感轴和封装外壳之间有个小角度偏差,导致其他轴的分量耦合进来了。

我记得有一次做六轴IMU标定,发现Z轴陀螺仪在X轴旋转时居然有输出。一开始以为是算法问题,后来拆开一看,是芯片贴片时偏了0.5度。嗯,这种误差,标定模型里必须考虑交叉轴项。

2.2 误差模型的建立

搞清楚了误差来源,接下来就是建立数学模型。我个人习惯用线性+交叉轴的模型框架,对于大多数MEMS传感器来说已经够用了。

2.2.1 通用误差模型

对于一个三轴MEMS传感器,输出和输入的关系可以写成:

y = S * (R * x + b) + n

其中:

  • y:传感器输出(3×1向量)
  • x:真实物理量(3×1向量)
  • S:灵敏度矩阵(3×3对角矩阵,主对角线元素是各轴灵敏度)
  • R:交叉轴耦合矩阵(3×3矩阵,非对角线元素表示交叉轴误差)
  • b:偏移向量(3×1向量)
  • n:噪声项

展开写就是:

y_x = S_x * (x_x + R_xy * x_y + R_xz * x_z) + b_x + n_x
y_y = S_y * (R_yx * x_x + x_y + R_yz * x_z) + b_y + n_y
y_z = S_z * (R_zx * x_x + R_zy * x_y + x_z) + b_z + n_z

这个模型里,我们一共要标定多少个参数?数一下:3个偏移、3个灵敏度、6个交叉轴系数(因为R矩阵对角线为1),总共12个参数。

注意: 对于高精度应用,可能还需要考虑非线性项、温度项、甚至迟滞项。但12参数模型是绝大多数工程场景的起点。

2.2.2 简化模型与适用场景

不是所有场景都需要12参数模型。我一般这样选:

应用场景 推荐模型 参数数量
消费电子(手机、手环) 6参数(偏移+灵敏度) 6
工业级(机器人、AGV) 9参数(偏移+灵敏度+交叉轴) 9
高精度(导航、测绘) 12参数+温度补偿 12+

你想想看,如果做手机里的加速度计,搞12参数标定,成本上根本划不来。但如果是自动驾驶的IMU,少标一个参数可能都会出事故。

2.3 标定坐标系

坐标系这个话题,看起来简单,但坑特别多。我见过不少工程师,标定算法写得飞起,结果坐标系定义错了,整个标定白做。

2.3.1 三个关键坐标系

做标定,你至少要搞清楚三个坐标系:

  1. 传感器坐标系(Sensor Frame):芯片本身的坐标系,由晶圆设计和封装决定
  2. 载体坐标系(Body Frame):传感器安装在设备上的坐标系,比如手机、无人机
  3. 参考坐标系(Reference Frame):标定设备提供的标准坐标系,比如转台、六面体

标定的本质,就是建立这三个坐标系之间的变换关系。

警告: 很多MEMS芯片的数据手册里,坐标轴定义和你的安装方式可能不一致。比如某款加速度计,数据手册说Z轴向上为正,但你装在电路板上是Z轴向下。这时候如果不做坐标系对齐,标定结果全是错的。

2.3.2 坐标系对齐方法

我个人习惯用六位置法来做坐标系对齐。具体做法是:

  • 把传感器分别朝六个方向放置(±X, ±Y, ±Z)
  • 记录每个方向下的输出
  • 利用重力矢量作为参考,计算旋转矩阵

这里有个小技巧:不要只依赖一个方向的数据。我曾经犯过这个错误——只用了Z轴向上和向下两个位置来标定,结果交叉轴误差完全没暴露出来。后来加了X和Y方向的数据,才发现问题。

2.3.3 坐标系转换的数学表达

从传感器坐标系到载体坐标系的转换,通常用一个旋转矩阵R_sb来表示:

x_body = R_sb * x_sensor

这个R_sb矩阵,就是标定过程中需要确定的参数之一。注意,它和前面误差模型里的交叉轴矩阵R不是一回事——R是器件本身的误差,R_sb是安装引起的偏差。

嗯,这里要特别强调:不要把这两个矩阵混在一起。我见过有人把安装偏差直接塞进交叉轴矩阵里,结果换了个安装方式,标定参数全得重来。正确的做法是分开建模,分开标定。

经验之谈: 如果你用的是六面体标定夹具,建议在夹具上刻好坐标系标记。每次装夹时,确保传感器和夹具的坐标系对齐。这样可以减少安装重复性误差,提高标定一致性。

2.4 本章知识体系

说了这么多,咱们用一张图来总结一下本章的核心逻辑:

标定基础理论:知识体系 误差来源 误差模型 标定坐标系 标定方法 偏移 · 灵敏度 · 非线性 · 交叉轴 12参数模型 · 简化模型 传感器 · 载体 · 参考坐标系 六位置法 · 最小二乘 核心目标:建立准确的输入-输出映射关系 输出 = 灵敏度 × (输入 + 交叉轴耦合) + 偏移 + 噪声 图2-1 标定基础理论知识体系

这张图把本章的核心逻辑串起来了。从误差来源出发,建立误差模型,定义坐标系,最后选择标定方法。每一步都环环相扣。

好了,这一章的内容就到这里。误差模型和坐标系是标定的地基,地基打不牢,后面盖什么楼都得塌。下一章咱们会聊具体的标定设备和数据采集流程,到时候我会分享一些实际项目中的操作细节。


公众号:蓝海资料掘金营,微信deep3321