4、GPS与定位状态检查:查看GPS Fix状态,检查EKF定位源,模拟GPS信号或强制启用非GPS模式

电机解锁失败,十有八九跟定位有关。我见过太多新手一上来就查电机、查电调,折腾半天,结果问题出在GPS上。说白了,飞控在解锁前会做一系列安全检查,其中定位状态是优先级最高的几项之一。它觉得你位置不对,或者压根没定位,就不让你解锁。

这一节,我们就来彻底搞明白GPS和定位状态怎么查、怎么修。

4.1 先看GPS Fix状态

GPS Fix,就是GPS有没有锁定卫星。没Fix,飞控就不知道自己在哪,自然不让解锁。怎么查?最直接的办法是用param命令或者地面站。

我个人习惯在终端里直接敲:

param fetch GPS_FIX_TYPE
param show | grep GPS

这会返回当前GPS的Fix类型。正常值应该是3(3D Fix)或者4(RTK Fix)。如果返回0或1,说明GPS没定位。

你也可以用nsh命令看更详细的信息:

gps status

输出里会有一行satellites used,这个数字最好大于8。低于6颗星,定位精度就很差了。

小技巧: 在SITL里,GPS信号是模拟的。默认情况下,SITL启动后会自动生成一个虚拟GPS,位置固定在你设置的起始点。如果这个模拟信号没起来,Fix状态就会异常。我建议你启动SITL后先跑一次gps status确认一下。

4.2 EKF定位源检查

光有GPS Fix还不够。飞控内部有个叫EKF(扩展卡尔曼滤波器)的东西,它负责融合GPS、IMU、磁力计等数据,算出最终的定位结果。如果EKF认为GPS数据不可靠,它可能会切换到别的定位源,或者干脆报错。

检查EKF状态,我常用这个命令:

ekf2 status

输出里重点看这几项:

  • GPS quality:0-1之间的值,越接近1越好。低于0.5就要警惕。
  • Innovation test:如果显示FAIL,说明GPS数据和IMU数据打架了,EKF不信任GPS。
  • Position source:显示当前用的是GPS还是别的(比如视觉、光流)。

我记得有一次排查一个解锁问题,GPS Fix明明是3,但EKF一直报GPS innovation check failed。后来发现是模拟的IMU噪声参数设得太离谱,导致EKF认为GPS数据异常。调回默认值就好了。

注意: EKF的定位源优先级是:GPS > 视觉/光流 > 气压计(高度)> 惯性推算。如果GPS信号不好,EKF会自动降级。但降级后,飞控可能认为定位精度不够,依然拒绝解锁。

4.3 模拟GPS信号

在SITL里,GPS信号是模拟的。但有时候这个模拟器会抽风,或者你改了某些参数导致它不工作。这时候需要手动干预。

最常用的方法是设置SIM_GPS_DISABLED参数:

param set SIM_GPS_DISABLED 0
param save

如果设为1,就是关闭GPS模拟。我建议你检查一下这个参数,确保它是0。

另外,你还可以手动设置GPS位置:

simulator set-position 47.397742 8.545594 488.0

这是苏黎世的一个坐标。设完之后,再查GPS Fix,应该就正常了。

核心思路: SITL里的GPS模拟,本质上是一个虚拟的NMEA数据流。如果这个数据流断了,飞控就认为GPS丢失。所以排查时,先确认模拟器在跑,再确认参数没关。

4.4 强制启用非GPS模式

有些场景下,你不需要GPS也能飞。比如室内飞行,或者用光流定位。这时候可以绕过GPS检查,强制飞控进入非GPS模式。

怎么做?修改COM_ARM_WO_GPS参数:

param set COM_ARM_WO_GPS 1
param save

这个参数设为1,表示允许在没有GPS的情况下解锁。但要注意,这只是一个权宜之计。飞控在非GPS模式下,定位精度会大幅下降,只能靠IMU惯性推算,时间长了会漂移。

另外,你还可以设置EKF2_AID_MASK来指定定位源:

param set EKF2_AID_MASK 0
param save

设为0表示不使用任何外部定位源(GPS、视觉等),只靠IMU。这通常用于测试,不建议实际飞行。

我曾经踩过的坑: 有一次为了快速测试电机,我把COM_ARM_WO_GPS设成了1,结果忘了改回来。第二天飞真机时,GPS明明正常,但飞控就是不用,导致定位漂移,差点炸机。所以,测试完一定要恢复参数。

4.5 知识体系总览

下面这张图,把GPS与定位状态检查的核心逻辑串起来了。你可以把它当作排查路线图。

GPS与定位状态检查流程图 GPS与定位状态检查流程 电机解锁失败 检查GPS Fix状态 Fix ≥ 3? 是 否 检查EKF定位源 模拟GPS信号 EKF正常? Fix恢复? 是 否 是 否 解锁成功 强制非GPS模式 检查参数 说明:EKF正常且Fix≥3 → 解锁成功;否则需要模拟GPS或强制非GPS模式

4.6 常见问题速查表

最后,我把几个常见问题整理成了一张表。你排查时可以直接对照。

现象 可能原因 解决方法
GPS Fix = 0 或 1 模拟GPS未启动或参数关闭 检查SIM_GPS_DISABLED,设为0;或手动设置位置
GPS Fix = 3,但EKF报错 IMU噪声参数异常,或GPS数据与IMU冲突 重置IMU参数,或检查EKF2_*参数
EKF定位源不是GPS GPS信号被EKF判定为不可靠 检查EKF2_AID_MASK,确保包含GPS
解锁时提示“Need GPS Fix” COM_ARM_WO_GPS为0,且GPS无Fix 设COM_ARM_WO_GPS为1,或修复GPS
卫星数少于6颗 模拟GPS信号弱,或起始位置设置不当 重新设置起始坐标,或重启SITL

嗯,到这里,GPS与定位状态检查这部分就讲完了。你下次遇到解锁失败,先别急着拆电机,按这个流程走一遍,大概率能找到问题。记住,定位是飞控的“眼睛”,眼睛没睁开,它是不敢动的。