3. 开发环境搭建
传感器校准,说白了就是让飞控知道「什么是水平」、「什么是静止」、「什么是北」。你想想看,如果飞控连水平都判断不准,那后面调PID、调航线全白搭。我见过太多新手一上来就调参数,结果炸机了才发现加速度计根本没校准——嗯,这种坑我踩过,所以今天咱们把这四个传感器一次讲透。
3.1 加速度计校准
加速度计测量的是重力在三个轴上的分量。理想情况下,静止时它应该输出 [0, 0, -9.81] m/s²(Z轴向上)。但实际器件有零偏、刻度误差和轴间非正交,所以必须校准。
校准流程
- 把飞控平放,Z轴朝上,静止5秒。
- 左侧朝上,静止5秒。
- 右侧朝上,静止5秒。
- 机头朝上(竖起来),静止5秒。
- 机头朝下,静止5秒。
- 背部朝上(倒扣),静止5秒。
一共6个姿态,每个姿态保持静止。QGroundControl里点「Accelerometer」→「Start Calibration」,按提示摆就行了。
验证方法
校准完成后,把飞控平放,看 sensor_accel 的 z 值。正常应该在 -9.8 ± 0.2 范围内。如果偏差超过 0.5,我建议重新校准。
3.2 陀螺仪校准
陀螺仪测量角速度。静止时,它应该输出 [0, 0, 0] rad/s。但温度变化、焊接应力都会导致零偏漂移。
校准流程
- 把飞控放在绝对静止的平面上。
- 在QGC里点「Gyroscope」→「Start Calibration」。
- 等待5-10秒,直到进度条走完。
- 校准完成后,检查
sensor_gyro的x/y/z值,应该在±0.01 rad/s以内。
为什么我强调「绝对静止」?因为陀螺仪对振动极其敏感。哪怕你手轻轻搭在桌子上,读数都可能飘到 0.05 rad/s。我记得有一次在户外校准,风把桌子吹得微微晃动,结果校准出来的零偏有 0.03 rad/s,飞起来后航向一直缓慢漂移。后来我都是把飞控放在水泥地上,人走开,等30秒再校准。
3.3 磁力计校准
磁力计测量地磁场。它的问题最多——因为地磁场很弱(约0.5高斯),而电机电流、铁质结构、甚至手机都能产生干扰。
校准流程
- 把飞控拿到室外,远离建筑物和金属物体。
- 在QGC里点「Compass」→「Start Calibration」。
- 拿着飞控,在空中画「8」字:先水平画,再垂直画,最后绕各个轴旋转。
- 持续30-60秒,直到进度条变绿。
校准质量判断
| 指标 | 正常范围 | 需要重校 |
|---|---|---|
| 磁场强度 | 0.4 - 0.6 高斯 | < 0.3 或 > 0.8 |
| 球体拟合半径 | 与磁场强度一致 | 偏差 > 0.1 |
| 硬铁偏移 | ±0.2 以内 | > 0.5 |
校准完成后,在QGC的「Mavlink Inspector」里看 MAG 数据。如果三个轴的读数画出来是一个球体,说明校准合格。如果是椭球体,说明有软铁干扰,需要重新校准或更换安装位置。
3.4 气压计校准
气压计测量大气压力,用于估算高度。它受温度影响很大,而且有滞后性。
校准流程
- 把飞控放在当前海拔的稳定环境中。
- 在QGC里点「Barometer」→「Start Calibration」。
- 等待5秒,系统会自动记录当前气压作为基准。
- 校准完成后,检查
sensor_baro的pressure值,应该与当地气象站数据一致(误差 ±1 hPa)。
温度补偿
气压计内部有温度传感器,但补偿效果有限。我建议:
- 校准前让飞控通电预热5分钟,让温度稳定。
- 不要在阳光直射下校准,因为局部温升会导致气压读数偏高。
- 如果飞行中高度漂移严重,可以开启
EKF2_BARO_GATE参数,限制气压计的最大变化率。
为什么会漂移?说白了,气压计对温度变化很敏感。你想想看,从地面飞到100米高空,温度可能下降0.6度,气压计读数就会变。如果飞控内部温度也在变,那误差就更大了。我一般会在起飞前看 sensor_baro 的 temperature 值,如果还在变化,就再等一等。
3.5 传感器校准知识体系
下面这张图总结了四个传感器的校准要点和相互关系。你可以把它当作校准前的检查清单。
3.6 校准顺序与注意事项
我个人习惯的校准顺序是:加速度计 → 陀螺仪 → 磁力计 → 气压计。为什么这么排?
- 加速度计和陀螺仪共用IMU,先校准加速度计,再校准陀螺仪,可以避免姿态估计误差。
- 磁力计需要飞控处于水平姿态(加速度计校准后),否则补偿算法会出错。
- 气压计放在最后,因为它的校准不受其他传感器影响,但需要稳定的环境。
最后说一句:传感器校准不是一劳永逸的。温度变化、机械冲击、时间老化都会导致参数漂移。我建议每飞行50小时或每3个月重新校准一次。如果你发现飞机悬停时高度漂移、航向偏转、或者姿态不稳,先别急着调PID——回去检查一下传感器校准,八成是这里出了问题。