3、传感器校准与预处理:加速度计校准的6面法、陀螺仪零偏与温漂、磁罗盘校准与干扰排查、气压计滤波与震动隔离

传感器校准,说白了就是给飞控的「眼睛」和「耳朵」做一次精准的视力听力测试。我见过太多新手,代码写得漂亮,PID调得飞起,结果一上天就翻车——最后发现是传感器数据本身就是歪的。嗯,这章咱们就把这些坑一个个填上。

3.1 加速度计校准:6面法,一个面都不能少

加速度计测的是重力在三个轴上的分量。理想情况下,静止时它应该输出[0, 0, 1]g(假设Z轴朝上)。但现实嘛……每个轴都有零偏,还有比例因子误差。

6面法的核心逻辑:让加速度计的每个轴分别朝上和朝下,记录6组数据,然后解算出零偏和比例因子。

实操步骤(我习惯的做法):

  1. 将飞控水平放置,Z轴朝上,记录数据。
  2. 翻转180度,Z轴朝下,记录数据。
  3. 侧放,X轴朝上,记录数据。
  4. 再翻转,X轴朝下,记录数据。
  5. 同理处理Y轴。

每个面至少采集200个样本,取均值。别偷懒,少一个面,你的姿态估计就会偏一度。

// 伪代码:6面法校准
float accel_bias[3] = {0};
float accel_scale[3] = {1, 1, 1};

// 采集6面数据后,解算公式
for (int i = 0; i < 3; i++) {
    accel_bias[i] = (data_positive[i] + data_negative[i]) / 2.0f;
    accel_scale[i] = 1.0f / ((data_positive[i] - data_negative[i]) / 2.0f);
}

我的小技巧: 校准用的平面一定要水平。我曾经用一张不平的桌子校准,结果飞控在天上一直往一边偏。后来我买了个气泡水平仪,再也没出过这问题。

3.2 陀螺仪零偏与温漂:静止时的「假动作」

陀螺仪测的是角速度。静止时它应该输出0,但实际会有个很小的非零值——这就是零偏。更麻烦的是,这个零偏会随着温度变化而漂移。

零偏校准方法:

  • 上电后保持飞控绝对静止,采集500-1000个样本,取均值作为零偏值。
  • 每次起飞前做一次静态零偏校准,这是最低要求。

温漂补偿(我踩过的坑):

有一次我在冬天调试,室内20度校准完,拿到室外零下5度飞,陀螺仪直接漂了0.5度/秒。你想想看,积分10秒就是5度,姿态直接崩了。

避坑指南: 我曾经以为一次校准管终身,结果吃了大亏。现在我的做法是:

  • 在飞控固件里加入温漂模型,用多项式拟合零偏-温度曲线。
  • 或者更简单——起飞前让飞控预热2分钟,等温度稳定后再校准。
// 温漂补偿示例(二阶多项式)
float gyro_temp_bias(float temp) {
    // 系数需通过实验标定
    float a = 0.0012f, b = -0.045f, c = 0.32f;
    return a * temp * temp + b * temp + c;
}

3.3 磁罗盘校准与干扰排查:别让钢筋水泥骗了你

磁罗盘(磁力计)测的是地磁场方向。但城市里到处都是干扰源——钢筋、电缆、电机、大电流导线。说白了,磁罗盘是最娇气的传感器。

校准方法:

  • 硬铁校准: 飞控在原地旋转360度,采集所有方向的数据,拟合出球心偏移。
  • 软铁校准: 需要做「8字」或「∞字」运动,让磁力计遍历所有姿态,拟合椭球到球体的变换矩阵。

干扰排查的实战经验:

我遇到过一架无人机,磁罗盘数据总是跳变。排查了三天,最后发现是机臂里的LED灯带供电线离磁罗盘太近。大电流产生的磁场直接干扰了读数。

排查步骤:

  1. 断开所有非必要用电设备,看磁罗盘数据是否稳定。
  2. 逐个通电,观察数据变化。
  3. 用示波器看磁罗盘的I2C/SPI信号,排除电气噪声。

我的建议: 磁罗盘安装位置尽量远离电机、电调和电源线。如果实在避不开,至少保证距离大于5cm。另外,机架用碳纤维的话要注意——碳纤维导电,也会产生干扰。

3.4 气压计滤波与震动隔离:高度数据的「呼吸」问题

气压计测的是大气压力,换算成高度。但它有个毛病——对气流和震动特别敏感。螺旋桨一转,气压数据就开始「呼吸式」波动。

滤波策略:

  • 低通滤波: 截止频率设在2-5Hz,滤掉螺旋桨带来的高频震动。
  • 滑动平均: 取最近10-20个样本的均值,平滑效果不错。
  • 互补滤波: 结合加速度计的数据,用加速度计补偿短时间的高度变化,用气压计保证长期稳定。
// 一阶低通滤波示例
float baro_altitude_filtered = 0;
float alpha = 0.2f;  // 滤波系数,越小越平滑

void baro_filter(float raw_altitude) {
    baro_altitude_filtered = alpha * raw_altitude + 
                             (1.0f - alpha) * baro_altitude_filtered;
}

震动隔离(硬件层面):

光靠软件滤波是不够的。我见过有人把气压计直接焊在主板上,结果震动直接传导到传感器内部,导致压力读数失真。

硬件隔离的要点:

  • 气压计模块用海绵或硅胶垫减震。
  • 在气压计上方加一个防风罩(用海绵或3D打印件),避免螺旋桨气流直吹。
  • 气压计的透气孔不要被遮挡,但也不能让风直接灌进去。

知识体系总览

下面这张图总结了传感器校准与预处理的核心逻辑。说白了,就是「先校准、再滤波、最后融合」三步走。

传感器校准与预处理知识体系 加速度计 陀螺仪 磁罗盘 6面法校准 零偏与比例因子 静态零偏校准 温漂模型与补偿 硬铁/软铁校准 干扰源排查 气压计:低通滤波 + 震动隔离 所有传感器数据最终进入姿态估计与融合算法

好了,这一章的内容就这些。传感器校准是飞控调试的基石,别嫌麻烦。你想想看,如果输入的数据都是歪的,后面再好的算法也救不回来。下一章咱们聊聊姿态解算——怎么把校准后的传感器数据变成可靠的姿态角。


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