传感器原理与特性:陀螺仪、加速度计、磁力计

各位同学好,我是你们这门课的老朋友。今天咱们来聊聊飞控系统里最核心的三个传感器:陀螺仪、加速度计和磁力计。

说实话,我见过太多新手一上来就急着调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];

避坑指南:我曾经在无人机上装磁力计,怎么标定都不准。后来发现是电调的电流太大,产生的磁场干扰了传感器。解决办法是把磁力计装在远离电机的机臂末端,或者用一根杆子支起来。

四、传感器融合:取长补短

讲完了三个传感器,你可能会问:每个都有缺点,那怎么用?

答案是融合。陀螺仪短时准但长时漂,加速度计和磁力计长时稳但短时噪。把它们结合起来,就是互补滤波或卡尔曼滤波的核心思想。

我画了一张图,帮你理清这三个传感器的关系:

传感器融合逻辑图 陀螺仪 角速度 (ω) 短时准,长时漂 加速度计 比力 (a) 长时稳,短时噪 磁力计 磁场 (B) 长时稳,易受干扰 姿态解算算法 互补滤波 / 卡尔曼滤波 姿态角 (Roll, Pitch, Yaw)

你看,三个传感器各有各的脾气。陀螺仪提供高频的姿态变化信息,加速度计和磁力计提供低频的绝对参考。融合算法就是让它们互相配合,取长补短。

五、标定流程总结

最后,我把标定流程整理成一张表,方便你对照操作:

传感器 标定方法 所需设备 标定参数 注意事项
陀螺仪 六位置静止法 水平台面 零偏 预热30秒,静止采集
加速度计 六位置法 + 椭球拟合 水平台面、转台 零偏、刻度因子、交叉轴 避免振动,完全静止
磁力计 椭球拟合(画8字) 无磁环境 硬铁偏移、软铁矩阵 远离金属和电流

我的建议:每次更换传感器或改变安装位置后,都要重新标定。尤其是磁力计,换个地方就得重新画8字。别偷懒,标定做得好,后面调参能省一半时间。

好了,这一章的内容就到这里。传感器是飞控的「眼睛」,把它们的原理和标定搞明白,后面的姿态解算和稳定控制才能站得住脚。下一章咱们就进入姿态解算的核心算法,到时候见。


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