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。嗯,这种传感器如果不做温度补偿,基本没法用。
2.1.2 灵敏度误差(Scale Factor / Sensitivity)
灵敏度误差,说白了就是「放大倍数不准」。理想情况下,你给传感器施加1g的加速度,它应该输出1g。但实际可能是0.98g。这个比例偏差,就是灵敏度误差。
我个人的习惯是,把灵敏度误差拆成两部分看:
- 比例因子误差:整体缩放,比如所有轴都偏小2%
- 比例因子非线性:不同量程下缩放比例不一样
举个例子,某款陀螺仪在±100°/s量程下灵敏度误差是0.5%,但到了±500°/s量程下变成了1.2%。这种非线性问题,在低成本MEMS里特别常见。
2.1.3 非线性误差(Nonlinearity)
非线性误差,是让我最头疼的一种。为什么?因为它不好建模。
理想传感器的输入输出关系是一条直线。但实际器件总会有弯曲。这个弯曲程度,就是非线性误差。通常用最佳拟合直线的偏差百分比来表示。
我曾经调试过一个压力传感器,在低压段线性度很好,但到了高压段就开始飘。查了半天,发现是敏感膜片的非线性形变导致的。这种问题,光靠简单的线性标定根本搞不定。
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个参数。
2.2.2 简化模型与适用场景
不是所有场景都需要12参数模型。我一般这样选:
| 应用场景 | 推荐模型 | 参数数量 |
|---|---|---|
| 消费电子(手机、手环) | 6参数(偏移+灵敏度) | 6 |
| 工业级(机器人、AGV) | 9参数(偏移+灵敏度+交叉轴) | 9 |
| 高精度(导航、测绘) | 12参数+温度补偿 | 12+ |
你想想看,如果做手机里的加速度计,搞12参数标定,成本上根本划不来。但如果是自动驾驶的IMU,少标一个参数可能都会出事故。
2.3 标定坐标系
坐标系这个话题,看起来简单,但坑特别多。我见过不少工程师,标定算法写得飞起,结果坐标系定义错了,整个标定白做。
2.3.1 三个关键坐标系
做标定,你至少要搞清楚三个坐标系:
- 传感器坐标系(Sensor Frame):芯片本身的坐标系,由晶圆设计和封装决定
- 载体坐标系(Body Frame):传感器安装在设备上的坐标系,比如手机、无人机
- 参考坐标系(Reference Frame):标定设备提供的标准坐标系,比如转台、六面体
标定的本质,就是建立这三个坐标系之间的变换关系。
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 本章知识体系
说了这么多,咱们用一张图来总结一下本章的核心逻辑:
这张图把本章的核心逻辑串起来了。从误差来源出发,建立误差模型,定义坐标系,最后选择标定方法。每一步都环环相扣。
好了,这一章的内容就到这里。误差模型和坐标系是标定的地基,地基打不牢,后面盖什么楼都得塌。下一章咱们会聊具体的标定设备和数据采集流程,到时候我会分享一些实际项目中的操作细节。
公众号:蓝海资料掘金营,微信deep3321