3. 常见传感器类型:温度传感器、压力传感器、加速度计、陀螺仪、磁力计、IMU
做传感器标定这么多年,我接触过各种各样的传感器。说实话,每种传感器都有自己的脾气。你如果不摸透它的特性,标定出来的数据就是废的。今天咱们就聊聊最常见的几种传感器,以及我在实际项目中是怎么对付它们的。
3.1 温度传感器
温度传感器,这玩意儿看着简单,坑其实不少。我最早做的一个项目是工业烤箱的温度监控,用的就是热电偶。当时以为插上就能用,结果数据飘得离谱。
常见的温度传感器有这几类:
- 热电偶:测量范围宽,但精度一般,需要冷端补偿
- RTD(铂电阻):精度高,稳定性好,就是贵
- 热敏电阻:响应快,但非线性严重
- 数字温度传感器(如DS18B20):接口简单,直接读数字
标定要点:温度传感器最常见的误差来源是自热效应。传感器本身通电会发热,你测到的温度其实比环境高那么一点点。我一般会在标定时用低电流驱动,或者做脉冲式测量。
我的经验:做多点标定时,别只盯着冰点和沸点。中间温度点往往非线性最严重。我习惯在量程内均匀取5-7个点,然后用多项式拟合。
3.2 压力传感器
压力传感器,说白了就是把压力变成电信号。常见的原理有压阻式、电容式、谐振式。我在做汽车胎压监测时,用的就是MEMS压阻式传感器。
标定压力传感器,有几个关键参数你得搞清楚:
| 参数 | 说明 | 我的建议 |
|---|---|---|
| 零点偏移 | 无压力时的输出值 | 每次上电都要重新校准零点 |
| 灵敏度 | 单位压力对应的输出变化 | 温度变化会影响灵敏度,注意补偿 |
| 非线性 | 实际输出与理想直线的偏差 | 用二阶或三阶多项式拟合 |
| 迟滞 | 升压和降压时的输出差异 | 标定时要正反行程都测 |
避坑指南:我曾经遇到过一批压力传感器,标定完放了一周再测,数据全变了。后来发现是封装应力释放导致的。所以标定完一定要做老化测试,至少放24小时再复测。
3.3 加速度计
加速度计,现在手机里都有。但你别以为它只用来计步。我在无人机飞控项目里,加速度计是核心传感器之一。
加速度计的标定,主要解决三个问题:
- 零偏:静止时输出不为0。我习惯把传感器放在水平台上,采集1分钟数据取平均。
- 标度因数:实际加速度与输出值的比例关系。这个需要精密转台来标定。
- 交叉轴耦合:X轴加速度会在Y轴上产生输出。嗯,这个最烦人。
标定加速度计有个经典方法——六位置法。就是把传感器分别朝上、朝下、朝左、朝右、朝前、朝后,记录六个位置的输出。然后解方程求出零偏和标度因数。
代码示例:六位置法标定加速度计
// 六个位置的测量值 (单位: LSB)
float meas[6] = {16384, 16400, 16380, 16395, 16410, 16385};
// 理论值 (单位: g)
float theory[6] = {1, -1, 0, 0, 0, 0};
// 计算零偏和标度因数
float bias = (meas[0] + meas[1]) / 2.0;
float scale = (meas[0] - meas[1]) / 2.0;
printf("零偏: %.2f LSB\n", bias);
printf("标度因数: %.2f LSB/g\n", scale);
3.4 陀螺仪
陀螺仪测的是角速度。你想想看,手机横竖屏切换靠的就是它。但陀螺仪有个致命问题——零偏漂移。温度一变,零偏就跟着跑。
我记得有一次做机器人姿态估计,陀螺仪零偏没校准好,积分出来的角度越偏越离谱。后来我加了个零偏在线估计,才把问题解决。
陀螺仪标定的关键点:
- 静态零偏:静止时采集数据取平均。但注意,采集时间要够长,至少30秒。
- 温度补偿:零偏随温度变化,一般做二阶拟合。我习惯在-20°C到60°C范围内取5个温度点。
- 标度因数:需要转台提供精确角速度。没有转台的话,可以用地球自转来粗标。
小技巧:陀螺仪的Allan方差分析很有用。它能帮你判断噪声类型,是白噪声还是随机游走。我每次拿到新陀螺仪,第一件事就是跑Allan方差。
3.5 磁力计
磁力计,说白了就是电子罗盘。它测的是地磁场方向。但问题是,周围铁磁性物质会干扰它。我在做室内定位时,磁力计被钢筋水泥搞得一塌糊涂。
磁力计标定,核心是消除硬铁和软铁干扰:
- 硬铁干扰:由永磁体引起,表现为固定偏移。标定时把传感器转一圈,找到最大最小值,取中点就是偏移量。
- 软铁干扰:由铁磁材料引起,表现为椭圆畸变。这个需要做椭圆拟合,然后校正到正圆。
标定流程:
- 把传感器在三维空间内转一圈,采集数据
- 找到X、Y、Z轴的最大最小值
- 计算偏移量:offset = (max + min) / 2
- 计算缩放因子:scale = (max - min) / 2
- 校正:corrected = (raw - offset) / scale
避坑指南:我曾经在工厂里标定磁力计,结果数据一直不对。后来发现是旁边的金属货架在捣鬼。所以标定环境一定要远离铁磁性物质,至少1米以上。
3.6 IMU(惯性测量单元)
IMU是加速度计、陀螺仪、磁力计的合体。说白了,就是三个传感器打包在一起。但你别以为把三个传感器分别标定好就完事了。IMU的标定,难点在于传感器之间的对齐。
IMU标定要解决的核心问题:
- 轴对齐:加速度计的X轴和陀螺仪的X轴是不是完全平行?我见过偏差2度的,姿态解算直接崩了。
- 时间同步:三个传感器的数据是不是同一时刻采集的?时间差会导致融合算法出问题。
- 交叉灵敏度:加速度计对陀螺仪有没有影响?有些IMU里,加速度计和陀螺仪会互相干扰。
我一般用六面体法来标定IMU。把IMU固定在精密六面体上,然后旋转到不同姿态,记录所有传感器的输出。最后用最小二乘法解出所有参数。
IMU标定参数矩阵:
// 标定后的加速度
acc_calib = K_acc * (acc_raw - bias_acc)
// 标定后的角速度
gyro_calib = K_gyro * (gyro_raw - bias_gyro)
// 其中K是3x3矩阵,包含标度因数和轴对齐参数
// bias是3x1向量,包含零偏
我的习惯:IMU标定完一定要做验证。把IMU放在已知姿态下,看解算出来的角度对不对。我一般会做静态验证和动态验证两轮。静态验证看零偏,动态验证看积分精度。
好了,这六种传感器是标定工作的基础。你想想看,不管做什么项目,最后都绕不开这些。下一章咱们聊聊标定工具链怎么搭,从硬件到软件,一步步来。