传感器原理与特性:陀螺仪、加速度计、磁力计
各位同学好,我是你们这门课的老朋友。今天咱们来聊聊飞控系统里最核心的三个传感器:陀螺仪、加速度计和磁力计。
说实话,我见过太多新手一上来就急着调PID参数,结果飞机在天上乱飘。为什么?因为传感器数据都没整明白。你想想看,如果传感器给你的数据本身就是错的,那后面的姿态解算和稳定控制,不就是「垃圾进,垃圾出」吗?
所以这一章,咱们把这三个传感器的脾气秉性摸透。我会结合我这些年踩过的坑,把原理、误差模型和标定方法一次讲清楚。
一、陀螺仪:角速度的测量者
1.1 工作原理
陀螺仪测量的是角速度,单位是 °/s 或 rad/s。说白了,就是告诉你飞机转得有多快。
现代飞控用的基本都是MEMS陀螺仪。它的核心是一个微小的振动质量块。当有角速度输入时,科里奥利力会让质量块发生偏移,通过检测这个偏移量就能算出角速度。
嗯,这里要注意:陀螺仪测的是角速度,不是角度。要得到角度,你得对时间积分。但积分会累积误差,这就是后面要说的漂移问题。
1.2 误差模型
我在项目里遇到过最头疼的问题,就是陀螺仪的零偏。飞机明明静止不动,陀螺仪却输出一个非零值。时间一长,积分出来的角度就飞了。
陀螺仪的主要误差包括:
- 零偏(Bias):静止时的输出偏移。我见过最差的传感器,零偏能到 5°/s。
- 刻度因子误差(Scale Factor):实际角速度与测量值的比例偏差。
- 交叉轴耦合:X轴的转动在Y轴上产生串扰。
- 随机游走(Random Walk):积分后角度误差随时间发散。
核心结论:陀螺仪的短时精度很好,但长时稳定性差。所以它适合做短时间内的姿态跟踪,但需要其他传感器来修正长期漂移。
1.3 标定方法
标定陀螺仪,我个人习惯用六位置法。把传感器放在六个不同的静止位置,采集数据取平均,就能算出零偏。
// 陀螺仪零偏标定伪代码
float gyro_bias[3] = {0};
for (int i = 0; i < 1000; i++) {
gyro_bias[0] += read_gyro_x();
gyro_bias[1] += read_gyro_y();
gyro_bias[2] += read_gyro_z();
}
gyro_bias[0] /= 1000;
gyro_bias[1] /= 1000;
gyro_bias[2] /= 1000;
// 使用:gyro_raw - gyro_bias
小技巧:标定前让传感器预热30秒。我吃过这个亏,冷启动直接标定,结果零偏误差大了两倍。
二、加速度计:重力的感知者
2.1 工作原理
加速度计测量的是比力,也就是物体受到的惯性力与重力的合力。单位是 m/s² 或 g。
它的核心是一个质量块加弹簧系统。当有加速度时,质量块会移动,通过检测位移就能算出加速度。
这里有个关键点:加速度计无法区分重力加速度和运动加速度。所以当飞机做加速运动时,加速度计测出来的「重力方向」是错的。
2.2 误差模型
加速度计的误差和陀螺仪类似,但多了一个很讨厌的东西——振动噪声。
- 零偏:静止时输出不为0。我见过有些廉价传感器,零偏能到 0.1g。
- 刻度因子误差:不同轴向上的灵敏度不一致。
- 非线性误差:大加速度下输出失真。
- 振动整流误差:高频振动被整流成直流偏置。这个最坑人。
避坑指南:我曾经在四旋翼上遇到过,电机振动导致加速度计输出严重偏斜,姿态解算直接发散。后来加了低通滤波器才解决。记住,加速度计对振动非常敏感。
2.3 标定方法
加速度计的标定,我推荐六位置法加椭球拟合。六位置法用来算零偏和刻度因子,椭球拟合用来修正交叉轴误差。
// 加速度计六位置标定
// 每个位置采集100个样本取平均
// 位置1: X轴朝上 (0, 0, 1g)
// 位置2: X轴朝下 (0, 0, -1g)
// 位置3: Y轴朝上 (0, 1g, 0)
// 位置4: Y轴朝下 (0, -1g, 0)
// 位置5: Z轴朝上 (1g, 0, 0)
// 位置6: Z轴朝下 (-1g, 0, 0)
float acc_bias[3];
float acc_scale[3];
// 计算零偏和刻度因子...
个人经验:标定加速度计时,一定要确保传感器完全静止。我一般用水平仪把传感器调平,再用胶带固定好。手抖一下,标定结果就废了。
三、磁力计:方向的指引者
3.1 工作原理
磁力计测量的是磁场强度,单位是 μT 或 Gauss。它利用的是霍尔效应或磁阻效应。
说白了,磁力计就是电子指南针。它通过测量地球磁场的方向,来确定飞机的航向角(Yaw)。
但问题来了:地球磁场很弱,只有 0.25-0.65 Gauss。而电机、电源线产生的磁场干扰,可能比地磁场还大。
3.2 误差模型
磁力计的误差模型,比前两个传感器复杂得多。
- 硬铁干扰(Hard Iron):由永磁体或带磁性的金属产生。表现为一个固定的偏置。
- 软铁干扰(Soft Iron):由铁磁性材料对磁场的扭曲产生。表现为刻度因子和交叉轴误差。
- 罗差(Declination):地磁北极与地理北极之间的夹角。不同地区不一样。
关键认知:磁力计是三个传感器里最娇气的。它受环境干扰最大,标定也最麻烦。但航向角又离不开它,所以必须认真对待。
3.3 标定方法
磁力计的标定,我强烈推荐椭球拟合方法。你拿着传感器在空中画「8」字,采集各个方向的数据,然后用最小二乘法拟合出一个椭球。
// 磁力计椭球拟合标定
// 采集N个样本 (mag_x, mag_y, mag_z)
// 拟合椭球方程: Ax² + By² + Cz² + 2Dxy + 2Exz + 2Fyz + 2Gx + 2Hy + 2Iz = 1
// 解出参数后,得到偏移量和缩放矩阵
// 标定后的使用:
float mag_calibrated[3];
mag_calibrated[0] = (mag_raw[0] - offset[0]) * scale[0];
mag_calibrated[1] = (mag_raw[1] - offset[1]) * scale[1];
mag_calibrated[2] = (mag_raw[2] - offset[2]) * scale[2];
避坑指南:我曾经在无人机上装磁力计,怎么标定都不准。后来发现是电调的电流太大,产生的磁场干扰了传感器。解决办法是把磁力计装在远离电机的机臂末端,或者用一根杆子支起来。
四、传感器融合:取长补短
讲完了三个传感器,你可能会问:每个都有缺点,那怎么用?
答案是融合。陀螺仪短时准但长时漂,加速度计和磁力计长时稳但短时噪。把它们结合起来,就是互补滤波或卡尔曼滤波的核心思想。
我画了一张图,帮你理清这三个传感器的关系:
你看,三个传感器各有各的脾气。陀螺仪提供高频的姿态变化信息,加速度计和磁力计提供低频的绝对参考。融合算法就是让它们互相配合,取长补短。
五、标定流程总结
最后,我把标定流程整理成一张表,方便你对照操作:
| 传感器 | 标定方法 | 所需设备 | 标定参数 | 注意事项 |
|---|---|---|---|---|
| 陀螺仪 | 六位置静止法 | 水平台面 | 零偏 | 预热30秒,静止采集 |
| 加速度计 | 六位置法 + 椭球拟合 | 水平台面、转台 | 零偏、刻度因子、交叉轴 | 避免振动,完全静止 |
| 磁力计 | 椭球拟合(画8字) | 无磁环境 | 硬铁偏移、软铁矩阵 | 远离金属和电流 |
我的建议:每次更换传感器或改变安装位置后,都要重新标定。尤其是磁力计,换个地方就得重新画8字。别偷懒,标定做得好,后面调参能省一半时间。
好了,这一章的内容就到这里。传感器是飞控的「眼睛」,把它们的原理和标定搞明白,后面的姿态解算和稳定控制才能站得住脚。下一章咱们就进入姿态解算的核心算法,到时候见。
公众号:蓝海资料掘金营,微信deep3321