4. 核心位置参数解析:GPS_* 系列参数

GPS 这玩意儿,说白了就是飞控的「眼睛」。眼睛要是瞎了,飞机在天上就是个无头苍蝇。我见过太多新手,上来就把 GPS 参数丢一边,结果飞机在天上画八字,还以为是 PID 没调好。

今天咱们就把 GPS_* 系列参数掰开揉碎了讲。你搞懂了这些,至少能解决 80% 的定位相关故障。

4.1 GPS 类型选择:GPS_TYPE

这个参数决定了飞控用哪种协议跟 GPS 模块通信。默认值是 1,代表 u-blox 协议。

GPS_TYPE 值 协议类型 常见模块
0 禁用 不使用 GPS
1 u-blox M8N、M9N、F9P
2 MTK 老式 MTK 模块
3 NMEA 部分航海级 GPS
4 SiRF SiRF 芯片组
5 u-blox RTK 高精度 RTK 模式

我个人习惯,只要不是特别老的模块,一律用 u-blox 协议。为什么?因为 PX4 对 u-blox 的支持最完善,能自动识别波特率、自动配置输出频率。你插上就能用,省心。

小技巧: 如果你用的是双 GPS 冗余配置,第二个 GPS 的 GPS_TYPE 要设为 0,然后在 GPS_2_CONFIG 里指定串口。别两个都设成 1,会打架。

4.2 定位精度参数:GPS_*_ACC 系列

这里有个常见的误区——很多人以为 GPS 的精度是模块自己报的,飞控只管收数据。其实不是。飞控需要知道「这个 GPS 数据到底有多可信」,才能决定要不要用它来融合位置。

4.2.1 GPS_ACC_ESTIMATED

这个参数控制飞控是否使用 GPS 模块自己估算的水平位置精度(EPH)。默认是 1,开启。

我建议你保持开启。因为现在的 u-blox 模块,EPH 估算已经相当准了。但如果你用的是山寨模块,它可能永远报 2.5 米精度,哪怕卫星信号差得要命。这时候你就得关掉它,手动设一个保守值。

4.2.2 GPS_ACC_EPH 和 GPS_ACC_EPV

这两个参数是手动设定的水平精度(EPH)和垂直精度(EPV),单位米。只有当 GPS_ACC_ESTIMATED 设为 0 时才会生效。

注意: 别把 EPH 设得太乐观。我曾经见过有人设成 0.5 米,结果飞控以为 GPS 精度很高,把位置权重拉得特别大。一旦 GPS 漂移,飞机直接跟着飘走。保守一点,设 3-5 米比较安全。

4.2.3 GPS_YAW_OFFSET

这个参数用来补偿 GPS 天线相对于机头方向的安装偏角。单位度,范围 -360 到 360。

嗯,这里要注意。如果你把 GPS 天线装歪了,比如天线指向跟机头方向差了 90 度,那飞控算出来的航向就会一直偏。特别是用双天线 GPS 做航向的时候,这个参数必须校准。

怎么校准?把飞机摆正,朝北,然后看 QGC 里的 GPS 航向值。如果显示 90 度,说明天线偏了 90 度,把 GPS_YAW_OFFSET 设成 -90 就行。

4.3 融合策略参数:EKF2 中的 GPS 相关设置

GPS 数据最终要进 EKF2 滤波器,跟 IMU、磁力计、气压计一起融合。这里有几个关键参数,直接决定了融合效果。

4.3.1 EKF2_GPS_POS_X, Y, Z

这三个参数是 GPS 天线相对于飞控重心的安装位置偏移。单位米。

很多人忽略这个。但你想,GPS 天线装在机尾,飞控在机头,中间差了半米。飞机转弯的时候,GPS 报的位置跟飞控实际位置就有偏差。EKF2 如果不做补偿,融合出来的位置就会抖动。

我建议你量一下实际偏移,填进去。哪怕只差 10 厘米,也比不填强。

4.3.2 EKF2_GPS_CHECK

这个参数控制 EKF2 对 GPS 数据的检查项。它是一个位掩码,每一位代表一项检查。

位 检查项 说明
0 GNSS 固定 必须有 3D 固定
1 PDOP 精度因子不能太高
2 水平精度 EPH 不能超限
3 垂直精度 EPV 不能超限
4 速度精度 速度误差不能太大
5 卫星数量 至少 6 颗

默认值是 7(位 0、1、2 开启),也就是检查固定、PDOP 和水平精度。我个人习惯把位 5 也加上,设成 39(0b100111)。卫星少于 6 颗的时候,数据真的不太靠谱。

4.3.3 EKF2_GPS_POS_REF

这个参数控制 EKF2 是否使用 GPS 位置作为参考点。默认是 1,开启。

为什么要关掉它?如果你在室内用光流或视觉定位,GPS 信号很差,这时候关掉这个参数,EKF2 就不会强行把 GPS 位置拉进来,避免位置跳变。

核心逻辑: GPS 数据不是「绝对真理」,它只是众多传感器中的一个。EKF2 会根据每个传感器的置信度,动态调整融合权重。你调这些参数,本质上就是在告诉 EKF2:「这个传感器有多可信」。

4.4 知识体系总览

下面这张图,把 GPS 相关参数的核心逻辑串起来了。你一看就明白。

GPS 参数知识体系 GPS 硬件模块 GPS_TYPE 协议选择 精度参数 安装补偿 航向校准 GPS_ACC_EPH / EPV EKF2_GPS_POS_X/Y/Z GPS_YAW_OFFSET EKF2 融合策略 EKF2_GPS_CHECK EKF2_GPS_POS_REF GPS_ACC_ESTIMATED 最终位置 / 速度 / 航向估计

4.5 实战避坑指南

讲了这么多理论,来点实际的。这些都是我踩过的坑。

坑一:GPS 数据跳变
我曾经遇到过一架飞机,悬停时位置突然跳了 5 米。查了半天,发现是 EKF2_GPS_CHECK 没开卫星数量检查。那天 GPS 只锁了 4 颗星,PDOP 高达 8,但飞控还是把数据送进了滤波器。后来我把位 5 加上,再也没出现过。
坑二:双 GPS 打架
有个客户装了两个 GPS,结果飞机起飞就偏。我一看日志,两个 GPS 报的位置差了 3 米。飞控不知道该信谁,位置估计一直在震荡。解决方案:把 GPS_ACC_EPH 设成一样的值,让 EKF2 公平对待两个 GPS。
调试建议: 每次改完 GPS 参数,别急着飞。先在地面用 QGC 看 EKF2 状态 页面,检查 GPS 数据是否被 EKF2 接受。如果看到「GPS 数据被拒绝」的提示,说明你的参数设得太严了。

好了,GPS 参数这块就讲这么多。你把这些参数吃透了,位置估计这块基本不会出大问题。下一组参数,咱们聊聊磁力计——那个让无数人头疼的传感器。