4. 预解锁检查:GPS锁星、罗盘校准、加速度计校准、RC信号检查

好,前面我们把SITL环境跑起来了,也看到了终端里刷屏的状态数据。但别急着解锁电机——飞控在允许你解锁之前,会做一套「体检」。这套体检不过,电机就是纹丝不动。

这套体检,就是预解锁检查。说白了,飞控在问自己几个问题:

  • 我在哪儿?(GPS锁星)
  • 我朝哪边?(罗盘校准)
  • 我平不平?(加速度计校准)
  • 谁在操控我?(RC信号检查)

任何一个问题没答上来,解锁就被拒。我在项目里见过太多新手,一上来就抱怨「为什么解锁不了?」,结果一看,GPS一颗星都没锁上。嗯,咱们今天就把这四个检查项彻底讲透。

预解锁检查四步走 GPS锁星 ≥6颗星 罗盘校准 磁场偏差 < 300 加速度计校准 三轴偏差 < 0.1g RC信号检查 油门最低、模式正确 💡 检查顺序说明 • 四个检查项是「与」关系:必须全部通过,飞控才允许解锁。 • 在SITL仿真中,GPS和罗盘数据由仿真器提供,但校准参数仍需正确配置。 • 任何一个检查失败,Mission Planner或QGC都会显示对应的错误码。

4.1 GPS锁星检查

GPS锁星,是飞控判断「我在哪儿」的基础。在SITL里,GPS数据是仿真出来的,但飞控的逻辑跟真机一模一样——它只看卫星数量,不看数据来源。

飞控要求至少锁定6颗卫星,才能通过检查。为什么是6颗?因为解算三维位置(经度、纬度、高度)至少需要4颗,但留点余量更稳妥。我个人习惯,在真机里至少等到8颗星才解锁,SITL里无所谓,仿真器一般直接给你12颗。

关键参数:

  • GPS_TYPE:SITL里设为1(UBlox),仿真器会自动模拟。
  • GPS_HDOP:水平精度因子,小于1.0才算好。SITL里通常0.8左右。
  • GPS_SAT_COUNT:卫星数量,≥6才通过。

在Mission Planner里,你可以打开「状态」页面,找到 gps.sat_count 和 gps.hdop 两个字段。如果卫星数不够,检查一下SITL启动时有没有加载GPS模型——我记得有一次我忘了加 --gps 参数,结果飞控一直报「GPS失败」,折腾了半小时才发现。

小技巧: 在SITL终端里输入 gps status,可以直接看到当前卫星数量和HDOP。比翻GUI快多了。

4.2 罗盘校准检查

罗盘,也就是磁力计,告诉飞控「哪边是北」。在SITL里,罗盘数据也是仿真的,但飞控会检查罗盘的偏差值——如果偏差太大,说明罗盘可能被干扰了,飞控会拒绝解锁。

罗盘校准的核心指标是 偏移量(offset)。每个轴(X、Y、Z)都有一个偏移值,单位是毫高斯。飞控要求三个轴的偏移量绝对值都小于300。你想想看,如果偏移量达到500甚至1000,那飞控判断的方向可能偏了十几度,飞起来不炸才怪。

参数 含义 SITL典型值 通过标准
COMPASS_OFS_X X轴偏移量 0 ~ 50 |值| < 300
COMPASS_OFS_Y Y轴偏移量 0 ~ 50 |值| < 300
COMPASS_OFS_Z Z轴偏移量 0 ~ 50 |值| < 300

在SITL里,罗盘偏移默认是0,所以这个检查一般不会出问题。但如果你改了参数,或者加载了旧的参数文件,就可能触发检查失败。我曾经在测试时不小心加载了一套真机的参数,结果SITL里罗盘偏移量有400多,解锁死活过不去——后来才想起来,真机罗盘校准是在有磁场干扰的环境下做的。

注意: 在真机上,罗盘校准必须在室外远离金属物体的地方进行。SITL里虽然没这个限制,但参数值必须合理。如果你在SITL里看到「Compass calibration required」的报错,去全参数表里把 COMPASS_OFS_X/Y/Z 都改成0,再重启飞控就好了。

4.3 加速度计校准检查

加速度计,飞控用它来判断「我平不平」。在解锁前,飞控会检查加速度计的三轴读数——如果某个轴的偏差超过0.1g(约0.98 m/s²),它就认为飞机没放平,拒绝解锁。

为什么是0.1g?因为正常情况下,飞机静止放在水平面上,Z轴应该读到1g(重力加速度),X和Y轴应该接近0。如果偏差太大,要么是飞机没放平,要么是加速度计没校准。

在SITL里,加速度计数据也是仿真的,默认就是完美的水平状态。但如果你在仿真中移动了飞机模型(比如用 sim_vehicle.py -L 改变了初始位置),或者加载了错误的参数,加速度计读数就可能漂移。

检查方法:

  • 在Mission Planner的「状态」页面,查看 accel.x、accel.y、accel.z。
  • 正常值:X≈0, Y≈0, Z≈9.8 (m/s²)。
  • 如果Z轴偏离9.8超过0.5,建议重新做加速度计校准。

加速度计校准在SITL里怎么做?很简单,在Mission Planner里进入「初始设置」→「加速度计校准」,然后按照提示把飞机放平、左侧、右侧、机头向下、机头向上——虽然SITL里你没法真的去动飞机,但点击「校准」按钮后,仿真器会自动生成一组标准校准值。嗯,这里要注意,校准完成后记得保存参数。

4.4 RC信号检查

最后一个检查,也是最容易被忽略的——RC信号。飞控要确认:遥控器信号正常,油门在最低位,而且飞行模式开关在正确的位置(通常是「自稳模式」或「悬停模式」)。

在SITL里,RC信号由仿真器模拟。默认情况下,SITL会生成一组虚拟的RC通道值:油门(通道3)在1000左右(最低),方向舵、副翼、升降舵在中位(1500)。如果你用Mission Planner连接了SITL,可以在「无线电校准」页面看到这些值。

RC检查失败通常有几种情况:

  • 油门不在最低位: 通道3的值大于1050。SITL里默认是1000,一般不会出问题。但如果你在启动SITL时用了 --rc-in 参数覆盖了默认值,就可能触发。
  • 飞行模式不对: 飞控要求解锁时处于一个「安全」的模式,比如自稳(Stabilize)或悬停(AltHold)。如果你把模式开关拨到了「特技」(Acro)或「返航」(RTL),飞控可能拒绝解锁。具体看 FLTMODE_CH 参数的配置。
  • RC信号丢失: 如果飞控检测到RC信号超时(比如 RC_CHANNELS 的接收时间戳超过1秒),也会拒绝解锁。SITL里一般不会丢信号,但如果你在调试时暂停了仿真进程,恢复后可能触发这个检查。

避坑指南: 我曾经在SITL里折腾了半天解锁不了,最后发现是Mission Planner的「飞行模式」选项卡里,我把通道7映射到了「RTL」。而我的虚拟遥控器通道7默认是1900(高位),飞控以为我要切返航,直接拒绝解锁。把通道7改成1500(中位),问题解决。

4.5 检查失败时的排查思路

如果预解锁检查失败了,别慌。飞控会通过地面站告诉你具体原因。在Mission Planner里,状态栏会显示红色的错误信息,比如:

  • Pre-arm: GPS: 3D fix required → GPS卫星不够
  • Pre-arm: Compass: offsets too high → 罗盘偏移超限
  • Pre-arm: Accel: not calibrated → 加速度计未校准
  • Pre-arm: RC: throttle not low → 油门不在最低位

你想想看,这些错误信息其实就是飞控在告诉你「我哪里不舒服」。对症下药就好。我个人习惯,每次启动SITL后,先打开Mission Planner的「状态」页面,把GPS、罗盘、加速度计、RC这四个关键数据扫一眼,确认都正常再尝试解锁。花不了30秒,但能省下后面排查的半小时。

总结一下: 预解锁检查是飞控的安全底线。GPS锁星保证位置已知,罗盘校准保证航向准确,加速度计校准保证姿态可信,RC信号检查保证操控可控。四个检查全部通过,飞控才敢让你解锁电机。在SITL里,这些检查的逻辑跟真机完全一致——所以你在仿真里养成的检查习惯,到了真机上一样管用。