【PX4踩坑日记】为什么你的高端RTK定位极差?揭秘NMEA协议与天向速度的致命陷阱
前言
在 PX4 无人机开发中,很多朋友花大价钱买了诸如 Ublox ZED-F9P 或 和芯星通 UM982 这样的高端双天线 RTK 模块,结果插上飞控后却发现:定点疯狂画圈、定高上下漂移,表现甚至不如几十块钱的 M8N!
其实,这大概率不是硬件的问题,而是你选错了通信协议。今天就用实测数据,为大家扒一扒 PX4 底层 EKF2 算法与 GPS 协议之间那个极其隐蔽的坑——天向速度(Vertical Velocity)。
核心结论提前看
- ⚠️ 标准 NMEA 协议是残缺的:它只有水平对地速度(SOG),没有天向速度,会导致 PX4 垂直高度估计震荡。
- ❌ ZED-F9P 千万别用 NMEA:实测使用 NMEA 协议水平和垂直表现极烂;必须切换为 Ublox 专有协议,瞬间稳如老狗。
- ✅ UM982 用 NMEA 必须加拓展:厂商推荐加入
$AGRICA拓展语句,补齐了天向速度,融合效果极佳。
一、 EKF2 到底想要什么数据?(底层原理)
要理解这个问题,我们得钻进 PX4 的 EKF2(扩展卡尔曼滤波)源码里看看。
在 EKF2 中,GPS 的融合不仅仅是融合经纬度(Position),更重要的是融合 3D 速度(Velocity)。高精度的 3D 速度(NED:北、东、地)能极大程度地抑制 IMU 积分带来的漂移,是无人机稳定悬停的灵魂。
但是,如果你打开标准 NMEA 协议的报文(如 $GPRMC 或 $GPVTG),你会发现一个致命缺陷:
它们只提供 SOG(Speed Over Ground,对地速度)和 COG(航向)。
这意味着,标准的 NMEA 协议根本没有 Z 轴(天、地向)的速度信息!
当把残缺的 NMEA 送给飞控时,飞控在 Z 轴上失去了高精度的速度观测,只能依靠容易受风扰的气压计,或者通过 GPS 的绝对海拔进行粗糙的微分求导。结果就是:垂直高度估计崩溃,进而引发水平位置融合的连锁发散。
二、 实测案例 1:Ublox ZED-F9P
作为目前市面上最火的 RTK 模块之一,ZED-F9P 的性能毋庸置疑,但协议选择极其关键。
- 测试场景 A(使用纯 NMEA 协议):
- 现象:水平和垂直表现都很烂,无人机定点定高极不稳定。
- 原因:如上所述,缺失垂直速度,且标准 NMEA 的解析延迟较大、数据位短,完全喂不饱 PX4 饥渴的 EKF 引擎。
- 测试场景 B(使用 Ublox 专有协议):
- 现象:定位死死钉住,高度极其稳定。
- 原因:在 PX4 参数中将
GPS_1_PROTOCOL设置为1 (UBX)后,飞控会直接读取 Ublox 的私有二进制报文(如UBX-NAV-PVT和UBX-NAV-VELNED)。这个报文包含了极低延迟、高精度的 3D 速度向量(含极其精确的上下速度) 和 3D 位置误差方差。EKF2 拿到这些数据,立刻就能算出完美的卡尔曼增益。
三、 实测案例 2:和芯星通 UM982
UM982 是一款优秀的国产双天线测向 RTK 模块,默认输出通常是 NMEA 格式。那它为什么能用?
- 厂家的隐藏绝招:
$AGRICA拓展语句- 如果你直接拿标准的 UM982 NMEA 语句喂给 PX4,效果依然不会好。
- 但是,和芯星通官方强烈推荐在 NMEA 中配置开启一条私有的拓展语句——
AGRICA。 - 为什么加了这条语句就神了? 因为这条拓展语句硬生生地在 NMEA 协议流中补充了天向速度(Vertical Velocity)以及高精度的位置协方差信息!
- 测试现象:
- 在使用包含
AGRICA扩展语句的 NMEA 数据流时,PX4 的 EKF2 终于拿到了完整的 3D 速度数据。 - 实测表现:垂直方向高度估计非常精准,不再上下乱窜;配合 UM982 本身极其优秀的水平和双天线航向(Heading)解算能力,整体悬停和航线表现堪称完美。
- 在使用包含
四、 避坑指南与总结
对于广大 PX4/ArduPilot 的开发者,如果在集成高精度 GNSS 模块时遇到悬停不稳、高度乱跳的问题,请优先检查以下几点:
- 放弃标准 NMEA:尽量不要在高级飞控上使用纯净版的标准 NMEA 协议,它的信息量太少,完全限制了 EKF 算法的发挥。
- Ublox 认准 UBX:只要是 Ublox 的芯片(M8N, M9N, F9P 等),飞控端务必强制指定使用 Ublox 协议。
- 国产 RTK 认准拓展语句:如果是 UM982 等国产优秀模块,请务必联系厂家拿到适配飞控的配置脚本,确保开启类似
AGRICA这种包含 3D 速度和姿态/航向拓展的私有 NMEA 语句。
只有喂给 EKF2 完整的 3D 速度,你的无人机才能真正展现出 RTK 该有的实力!
作者注:
本文测试基于真实飞行日志与 PX4 底层源码分析得出。如果你在无人机硬件集成中也遇到过类似的“玄学”问题,欢迎在评论区交流探讨!
更多推荐
所有评论(0)