4. 固件与地面站
GPS 搜不到星,或者搜星慢得像蜗牛爬——这大概是飞控调试里最让人头疼的问题之一。你想想看,飞控没了位置信息,什么自主飞行、返航、航点规划全成了空谈。
我这些年处理过的 GPS 故障案例,少说也有上百个了。总结下来,90% 的问题都出在三个地方:模块类型选错了、波特率没对上、天线装得不对。今天咱们就把这三个坑一个一个填平。
核心结论:GPS 搜星慢,先别急着怀疑硬件坏了。按「类型 → 波特率 → 天线」的顺序排查,能解决绝大多数问题。
4.1 模块类型选择错误——你用的协议对吗?
很多人买 GPS 模块的时候只看「能不能用」,结果插上飞控发现没数据。为什么?因为 ArduPilot 支持的 GPS 协议有好几种,选错了就是白搭。
我个人习惯把 GPS 模块分成两大类:
- 串口 GPS(UART): 最常见,通过 TX/RX 引脚输出 NMEA 或 u-blox 二进制协议。比如 NEO-6M、NEO-8M、M8N、M9N 这些。
- I2C / SPI GPS: 比如一些带地磁计的二合一模块,或者像 u-blox F9 这种高速率模块。用得少,但特殊场景下会碰到。
在 ArduPilot 里,你得在参数里告诉飞控:「我用的是什么协议」。关键参数是 GPS_TYPE:
| GPS_TYPE 值 | 协议/模块 | 说明 |
|---|---|---|
| 1 | AUTO | 自动检测(推荐,但有时会失败) |
| 2 | u-blox | u-blox 二进制协议(M8N、M9N 等) |
| 3 | NMEA | 标准 NMEA 0183 协议(老模块常用) |
| 5 | NOVA | NovaTel / Trimble 协议 |
| 6 | SBF | Septentrio 协议 |
| 9 | DroneCAN | 通过 CAN 总线连接的 GPS |
我的经验:如果你用的是最常见的 u-blox 模块(比如 M8N、M9N),直接把 GPS_TYPE 设为 2(u-blox),别用 AUTO。AUTO 模式有时候会误判,尤其是模块刚上电还没输出数据的时候。
我曾经遇到一个用户,折腾了三天搜不到星。远程一看,他买的是 NMEA 协议的模块,但 GPS_TYPE 设成了 u-blox。改回 3(NMEA)之后,秒搜星。嗯,这种低级错误其实挺常见的。
4.2 波特率不匹配——飞控和模块「说不到一块去」
GPS 模块和飞控之间是通过串口通信的。串口通信有个关键参数叫波特率——说白了就是每秒传多少位数据。两边波特率不一样,数据就是一堆乱码。
大多数 GPS 模块出厂默认波特率是 9600 或 38400。但 ArduPilot 默认的 GPS 波特率是 115200(在 SERIALx_BAUD 参数里设置)。
这就出问题了:模块说「我每秒传 9600 位」,飞控说「我每秒收 115200 位」——两边根本对不上。
怎么解决?两个办法:
- 改飞控的波特率: 把
SERIALx_BAUD(x 是 GPS 所在的串口号)改成和模块一致。比如模块是 38400,你就设成 38。 - 改模块的波特率: 用 u-center(u-blox 的配置工具)把模块的波特率改成 115200,然后飞控保持默认。
我个人强烈推荐第二种方法。为什么?因为 115200 传输更快,数据更新率更高,尤其是用 RTK 或者多星座的时候,低波特率会丢数据。
注意:改模块波特率之前,先确认你当前的串口参数能连上模块。如果连不上,可以先用默认波特率(比如 9600)连接,改完再切到 115200。别问我怎么知道的——我曾经把模块波特率改乱了,最后只能恢复出厂设置。
这里有个快速检查波特率是否匹配的方法:打开 Mission Planner 的「终端」或「串口监视器」,看看收到的数据是不是可读的 $GPGGA、$GPRMC 之类的 NMEA 语句。如果全是乱码,十有八九是波特率不匹配。
4.3 天线安装位置干扰——信号被「吃」掉了
模块选对了,波特率也配好了,还是搜不到星?那问题大概率出在天线上。
GPS 信号本身就很弱,从两万公里外的卫星传下来,功率比灯泡还低。天线旁边稍微有点干扰,信号就「淹死」了。
常见的干扰源有哪些?我列个清单:
- 碳纤维机架: 碳纤维导电,会屏蔽 GPS 信号。天线绝对不能装在碳纤维板下面。
- 摄像头 / 图传: 尤其是模拟图传,发射功率大,谐波会干扰 GPS 的 L1 频段(1575.42 MHz)。
- 电源线 / 大电流线路: 电流变化会产生电磁场,干扰天线。
- 金属物体: 电池、金属支架、螺丝——任何金属靠近天线都会影响信号接收。
- 同轴线缆质量差: 天线到模块的馈线太长或屏蔽不好,信号衰减严重。
我遇到过最离谱的一个案例:用户把 GPS 天线直接贴在 4G 图传模块上面,还问我为什么搜不到星。你想想看,4G 模块发射功率那么大,GPS 信号早就被「盖」过去了。
正确的安装原则其实就几条:
- 天线朝上,无遮挡: 装在机架最顶部,陶瓷天线面朝天空。
- 远离干扰源: 离摄像头、图传、电源模块至少 10 厘米以上。
- 用有源天线: 如果馈线超过 30 厘米,一定要用带 LNA(低噪声放大器)的有源天线。
- 接地要可靠: 天线外壳和飞控 GND 要连通,减少共模干扰。
一个小技巧: 在 Mission Planner 的「状态」页面看 GPS_NSATS(可见卫星数)和 GPS_HDOP(水平精度因子)。HDOP 小于 1.0 说明信号很好,大于 2.0 就有点差了。如果室内 HDOP 显示 99.9——嗯,那是正常的,室内本来就没信号。
4.4 知识体系总览
下面这张图把 GPS 搜星问题的排查逻辑串起来了。你可以把它当成一张「故障树」,从根节点往下走,一步步定位问题。
4.5 实战排查步骤
如果你现在手里就有一台搜不到星的飞控,按下面的步骤来:
- 第一步:看灯。 大多数 GPS 模块都有指示灯——快闪表示在搜星,慢闪或常亮表示已定位。如果灯不亮,检查供电(3.3V 还是 5V?很多模块是 3.3V 的,接 5V 会烧)。
- 第二步:看参数。 连上 Mission Planner,检查
GPS_TYPE和SERIALx_BAUD。确保类型和波特率都对得上。 - 第三步:看数据。 打开「串口监视器」,看有没有 NMEA 语句出来。有数据但搜不到星——天线问题。没数据——类型或波特率问题。
- 第四步:看位置。 把飞控拿到室外空旷处,远离建筑物和高压线。室内搜不到星是正常的,别在屋里浪费时间。
- 第五步:看干扰。 如果以上都正常还是搜星慢,试试把天线用延长线拉出来,远离机架和电子设备。
避坑指南: 我曾经遇到过一块「新」GPS 模块,怎么调都不出数据。最后发现是库存太久,电池备份的 RAM 里还存着旧配置,导致和飞控冲突。解决办法:短接模块上的「备份电池」触点放电,或者用 u-center 执行「冷启动」——CFG-RST 命令,把模块恢复出厂设置。
好了,GPS 搜星的问题基本就这些。说白了就是三个变量:协议对不对、速率配没配、天线装没装好。把这三点吃透了,以后遇到 GPS 问题你心里就有底了。