4. 固件配置基础:ArduPilot/PX4固件中GPS参数总览、双GPS使能开关

好,我们进入第四章。前面我们把硬件搭好了,线也焊好了,现在该聊聊固件里怎么配置了。说白了,硬件是骨架,固件参数才是灵魂。你硬件接得再漂亮,参数没设对,双GPS系统照样罢工。

这一章,我带你过一遍ArduPilot和PX4里跟GPS相关的核心参数。重点讲清楚双GPS的使能开关在哪,怎么打开。我个人习惯是先搞清楚参数结构,再去动遥控器,这样心里有底。

4.1 GPS参数总览:别被几百个参数吓到

第一次打开Mission Planner或者QGroundControl的参数列表,你可能会懵。几百个参数,光带GPS前缀的就几十个。嗯,别慌。其实真正核心的,就那么十来个。

我按功能把它们分成三类,你记牢了:

  • 基础配置类:GPS类型、端口、波特率
  • 双GPS专用类:主从选择、融合模式
  • 性能调优类:精度阈值、故障切换逻辑

下面这张图,是我自己画的知识结构。你看一眼,心里就有谱了。

GPS参数知识体系 基础配置类 双GPS专用类 性能调优类 GPS_TYPE / GPS_AUTO_CONFIG SERIALx_PROTOCOL / 波特率 GPS_TYPE2 / GPS_AUTO_CONFIG2 GPS_DRV_OPTIONS (位掩码) GPS_HDOP_GOOD / GPS_GLITCH_RADIUS GPS_BLEND_MASK / GPS_SAVE_CFG 核心原则 先配基础 → 再开双GPS → 最后调精度阈值

4.2 ArduPilot下的GPS参数详解

ArduPilot的参数命名很直观。GPS开头的,基本就是GPS相关的。我挑几个你一定会碰到的,一个一个说。

4.2.1 单GPS基础参数

参数名 作用 我常用的值
GPS_TYPE GPS模块类型。1=Auto, 2=uBlox, 3=MTK, 5=NMEA 1(自动检测)
GPS_AUTO_CONFIG 是否让飞控自动配置GPS模块。0=关闭, 1=开启 1(省心)
SERIALx_PROTOCOL 对应串口的协议。GPS一般用5(GPS协议) 5
SERIALx_BAUD 串口波特率。uBlox常用115或230 115(稳定)

这里有个坑。我曾经遇到过GPS_TYPE设成Auto,但飞控死活识别不了模块。后来发现是固件版本太老,对某些新模块支持不好。解决办法很简单:手动指定GPS_TYPE为2(uBlox)。

4.2.2 双GPS使能开关

好,重点来了。双GPS怎么打开?

在ArduPilot里,双GPS不是靠一个「双GPS开关」来打开的。它是通过配置第二个GPS的端口和类型来实现的。具体步骤:

  1. 确定第二个GPS接在哪个串口上。比如接在Serial4。
  2. 设置 SERIAL4_PROTOCOL = 5(GPS协议)
  3. 设置 SERIAL4_BAUD = 115(跟模块匹配)
  4. 设置 GPS_TYPE2 = 1(启用第二个GPS,Auto模式)

就这么简单。你设完GPS_TYPE2,飞控就知道你有两个GPS了。剩下的融合逻辑,固件会自动处理。

关键参数:GPS_DRV_OPTIONS

这个参数是个位掩码,控制双GPS的行为。我常用的设置:

  • Bit 0 (值1):启用GPS融合(默认开启)
  • Bit 1 (值2):启用GPS故障切换
  • Bit 3 (值8):启用GPS偏航校正(双天线时用)

一般设成3(1+2),既融合又故障切换。

4.3 PX4下的GPS参数详解

PX4的参数命名风格跟ArduPilot不太一样。它用下划线分层,比如 gps_1_type。但核心逻辑是一样的。

4.3.1 单GPS基础参数

参数名 作用 我常用的值
gps_1_type GPS1类型。0=uBlox, 1=MTK, 2=NMEA 0
gps_1_config GPS1配置。0=禁用, 1=启用 1
gps_1_baud GPS1波特率 115200

4.3.2 双GPS使能开关

PX4的双GPS配置,比ArduPilot多一个步骤。你需要先确保第二个GPS的驱动被编译进了固件。不过现在主流固件都默认包含了。

配置步骤:

  1. 设置 gps_2_config = 1(启用第二个GPS)
  2. 设置 gps_2_type = 0(uBlox)
  3. 设置 gps_2_baud = 115200
  4. 设置 gps_2_uart = 对应UART编号(比如UART4)

小技巧: 在PX4里,你可以通过 gps_1_uartgps_2_uart 来指定每个GPS用的物理UART。这个比ArduPilot灵活,但也容易搞错。我建议你先确认硬件上GPS2接的是哪个UART,再填参数。

4.4 双GPS融合模式选择

两个GPS都配好了,它们怎么协同工作?这里有两种模式,你根据场景选。

  • 融合模式(Blending):两个GPS的位置数据取加权平均。精度更高,但抗干扰能力一般。适合城市峡谷等信号遮挡场景。
  • 故障切换模式(Failover):主GPS工作,从GPS待命。主GPS故障时自动切换。可靠性高,适合长航时飞行。

我个人习惯,在ArduPilot里通过 GPS_BLEND_MASK 来控制。设成0就是纯故障切换,设成1就是纯融合。你也可以混合使用。

注意: 融合模式下,两个GPS的精度差异不能太大。我曾经遇到过主GPS精度0.5米,从GPS精度3米,融合后的位置反而比单个还差。解决办法:设一个精度阈值,差异过大时自动切回单GPS。

4.5 避坑指南:我踩过的三个坑

做双GPS配置,有几个地方特别容易出问题。我把自己踩过的坑列出来,你绕开走。

  1. 波特率不匹配:GPS模块的波特率跟飞控串口设的不一样。表现是GPS灯正常闪,但飞控收不到数据。解决办法:用U-Center确认模块实际波特率。
  2. GPS_TYPE2设了但没生效:有时候你设了GPS_TYPE2=1,但参数列表里看不到第二个GPS的状态。原因往往是第二个串口的协议没设成GPS。检查SERIALx_PROTOCOL。
  3. 双GPS融合后航向抖动:两个GPS的安装位置太近,或者天线相位中心不一致。解决办法:拉开两个天线的距离,至少30厘米以上。

嗯,这一章的内容就这些。你先把参数结构搞清楚,双GPS的使能开关其实就几个参数的事。下一章我们聊怎么验证双GPS是否正常工作,以及如何通过日志分析问题。


专注资料整理