4. 预解锁检查:GPS锁星、罗盘校准、加速度计校准、RC信号检查
好,前面我们把SITL环境跑起来了,也看到了终端里刷屏的状态数据。但别急着解锁电机——飞控在允许你解锁之前,会做一套「体检」。这套体检不过,电机就是纹丝不动。
这套体检,就是预解锁检查。说白了,飞控在问自己几个问题:
- 我在哪儿?(GPS锁星)
- 我朝哪边?(罗盘校准)
- 我平不平?(加速度计校准)
- 谁在操控我?(RC信号检查)
任何一个问题没答上来,解锁就被拒。我在项目里见过太多新手,一上来就抱怨「为什么解锁不了?」,结果一看,GPS一颗星都没锁上。嗯,咱们今天就把这四个检查项彻底讲透。
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里,这些检查的逻辑跟真机完全一致——所以你在仿真里养成的检查习惯,到了真机上一样管用。