4、传感器原理与选型:IMU、磁力计、GPS、气压计、光流传感器

各位同学,欢迎来到第四讲。今天咱们聊聊飞控的「眼睛」和「耳朵」——传感器。

说实话,我入行那会儿,飞控还主要靠惯性导航。现在可好,传感器种类多得让人眼花缭乱。但你别慌,核心就那几样:IMU、磁力计、GPS、气压计、光流。搞懂它们,你的飞控就成功了一半。

4.1 IMU:飞控的「内耳」

IMU(惯性测量单元)是飞控最核心的传感器。它包含加速度计和陀螺仪,有的还带磁力计。我习惯把IMU比作人的内耳前庭系统——感知姿态和运动。

4.1.1 加速度计

加速度计测量的是比力,说白了就是物体受到的惯性力与重力的合力。静止时,它测的就是重力加速度g。

工作原理:微机械结构(MEMS)中的质量块在加速度作用下发生位移,通过电容变化或压阻效应转换成电信号。

我在项目中遇到过一个问题:无人机悬停时,加速度计输出抖动很厉害。后来发现是机臂振动传到了传感器。嗯,这里要注意——加速度计对振动极其敏感

避坑指南:我曾经因为加速度计安装位置不当,导致姿态解算偏差超过5度。后来总结出经验:IMU一定要安装在飞控板的几何中心附近,远离电机和螺旋桨。

4.1.2 陀螺仪

陀螺仪测量角速度。它告诉你飞机转得有多快,而不是转了多少度。

工作原理:利用科里奥利效应。一个振动的质量块在旋转时会产生垂直于振动方向的位移,通过检测这个位移就能算出角速度。

你想想看,陀螺仪和加速度计是互补的:

  • 加速度计:长期稳定,但动态响应慢,受振动影响大
  • 陀螺仪:动态响应快,但存在零偏漂移,长期积分会发散

所以飞控里通常用互补滤波或卡尔曼滤波把两者融合。我个人习惯用Mahony滤波器,代码简单,效果也不错。

// 互补滤波示例(简化版)
void attitude_estimation(float gx, float gy, float gz, 
                         float ax, float ay, float az) {
    float dt = 0.004; // 250Hz采样
    float kp = 2.0;   // 比例增益
    float ki = 0.1;   // 积分增益
    
    // 加速度计归一化
    float norm = sqrt(ax*ax + ay*ay + az*az);
    ax /= norm; ay /= norm; az /= norm;
    
    // 误差计算(略)
    // 陀螺仪偏差补偿
    gx += ex * ki; gy += ey * ki; gz += ez * ki;
    
    // 四元数更新
    q0 += (-q1*gx - q2*gy - q3*gz) * dt / 2;
    q1 += ( q0*gx + q2*gz - q3*gy) * dt / 2;
    q2 += ( q0*gy - q1*gz + q3*gx) * dt / 2;
    q3 += ( q0*gz + q1*gy - q2*gx) * dt / 2;
}

4.2 磁力计:飞控的「指南针」

磁力计测量地球磁场,用来确定航向。说白了,就是电子指南针。

工作原理:磁阻效应或霍尔效应。当外部磁场变化时,传感器的电阻或电压会改变。

但磁力计有个大问题——容易受干扰。电机电流、电源线、甚至飞控板上的铜箔都会影响它。

我的经验:磁力计校准一定要在室外进行。我曾经在实验室里校准,结果飞到室外航向偏了20度。另外,安装时要远离大电流线路,至少保持2cm距离。

磁力计校准通常需要做硬铁和软铁校正。硬铁是固定偏差,软铁是比例偏差。我一般用椭球拟合算法,采集几百个点就能算出校正参数。

4.3 GPS:飞控的「眼睛」

GPS提供位置和速度信息。对于室外飞行,它是必不可少的。

工作原理:通过接收至少4颗卫星的信号,利用三角测量原理计算位置。精度受卫星几何分布、大气延迟、多径效应等因素影响。

普通GPS精度在2-5米,RTK(实时动态差分)GPS可以做到厘米级。我建议初学者先用普通GPS,等搞懂了定位原理再上RTK。

GPS类型 水平精度 更新率 适用场景
普通GPS 2-5m 5-10Hz 定点悬停、航线飞行
RTK GPS 1-3cm 10-20Hz 精准降落、测绘
差分GPS 0.5-1m 5-10Hz 低成本高精度方案
注意:GPS信号容易被遮挡。我在城市峡谷里飞过,GPS经常丢星。这时候就要靠IMU和光流来「撑场子」了。

4.4 气压计:飞控的「高度计」

气压计通过测量大气压力来推算高度。每升高8-10米,气压下降约1百帕。

工作原理:MEMS压力传感器内部有一个薄膜,气压变化会使薄膜变形,通过压阻效应转换成电信号。

气压计的问题在于:

  • 温度敏感:温度变化会引起零漂
  • 风敏感:强风会导致气压波动
  • 滞后性:响应速度慢

我习惯把气压计和加速度计融合来估计高度。加速度计提供短时精度,气压计提供长时稳定性。

// 气压计高度计算
float pressure_to_altitude(float pressure) {
    // 标准大气压模型
    float p0 = 101325.0; // 海平面标准气压
    float altitude = 44330.0 * (1.0 - pow(pressure / p0, 0.1903));
    return altitude;
}

4.5 光流传感器:飞控的「近眼」

光流传感器通过图像匹配来测量水平运动。它相当于一个「光学鼠标」,只不过装在飞机上。

工作原理:摄像头连续拍摄地面图像,通过特征点匹配计算像素位移,再结合高度信息换算成实际位移。

光流传感器在室内或低空飞行时特别有用。没有GPS信号时,它能提供水平速度信息,配合IMU实现定点悬停。

避坑指南:我曾经用光流在光滑地板上飞,结果飞机乱飘。后来发现光流需要纹理特征——地毯、草地、碎石路都行,但纯色地板不行。另外,光照太暗或太亮也会影响效果。

光流传感器的选型要点:

  • 分辨率:一般640x480就够用
  • 帧率:至少30fps,越高越好
  • 接口:SPI或I2C,注意延迟
  • 测距:最好带超声波或激光测距,用于高度补偿

4.6 传感器融合:1+1>2

单个传感器都有缺陷,但组合起来就能互补。我常用的融合策略:

  1. 姿态估计:陀螺仪+加速度计+磁力计 → 互补滤波/卡尔曼滤波
  2. 位置估计:GPS+光流+气压计 → 扩展卡尔曼滤波
  3. 速度估计:GPS+光流+加速度计 → 惯性导航

说白了,传感器融合就是「取长补短」。陀螺仪快但不准,加速度计准但慢,磁力计稳但易受干扰——把它们揉在一起,才能得到可靠的姿态和位置信息。

核心要点:选传感器时,别只看参数。要考虑实际应用场景、成本、功耗、安装空间。我见过有人用顶级IMU配垃圾GPS,结果定位精度还不如普通IMU配好GPS。记住:系统性能取决于最弱的那个环节。

好了,这一讲就到这里。下一讲咱们聊聊「传感器校准与数据处理」——这可是飞控调试的重头戏。到时候我会分享一些实战中踩过的坑,保证让你少走弯路。