☰
QGroundControl 内置 NTRIP 客户端配置指南:RTCM 差分数据接收、过滤与 UDP 转发
2026/10/6 12:29:28 网站建设 项目流程
  • 无人机
  • 智能硬件

【免费下载链接】qgroundcontrol

Cross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)

项目地址:https://gitcode.com/gh_mirrors/qg/qgroundcontrol
点击查看免费下载

导读

QGroundControl(QGC)内置了一个完整的 NTRIP 客户端,可以直接连接 NTRIP caster 服务商,将 RTCM 差分改正数据流传输给飞控,实现厘米级 RTK 定位。本指南以官方用户手册 settings_view/ntrip_rtk.md 为骨架,结合仓库内 src/GPS/NTRIP 模块源码与 src/Settings/NTRIP.SettingsGroup.json 设置定义,逐项讲解服务器连接、挂载点浏览、RTCM 消息过滤、UDP 转发与 UDP RTCM 输入等配置项,并深入说明底层状态机、校验规则与 GGA 上报机制。读完本指南,你将能够独立完成 NTRIP caster 连接配置、故障排查,以及将差分数据二次分发给其他设备或程序的完整链路搭建。

功能定位:为什么需要 NTRIP 客户端

NTRIP(Networked Transport of RTCM via Internet Protocol)是互联网上传输 RTCM 差分改正数据的标准协议。QGC 将 NTRIP 客户端内置在"应用设置 → GPS 校正(GPS Corrections)"页面中,其作用链路为:

  • 地面端从 NTRIP caster 拉取 RTCM3 差分数据流;
  • 经 NTRIPManager 处理后,通过 MAVLinkGPS_RTCM_DATA消息转发给已连接的飞控;
  • 飞控结合本地卫星观测完成 RTK 定位解算,实现厘米级精度。

从源码结构看,该功能位于 src/GPS/NTRIP 模块,由以下几部分组成:

组件职责
NTRIPManager连接生命周期管理,事件驱动的状态机
NTRIPConfiguration.h连接、过滤、UDP 转发的配置数据结构与校验
NTRIPHttpTransport基于 HTTP 的 NTRIP 传输层实现
NTRIPSourceTableController从 caster 拉取挂载点列表(source-table)并解析
NTRIPConnectionStats连接状态、字节数、消息计数与数据速率统计
NTRIPGgaProvider向上游发送 NMEA GGA 定位句(VRS 网络需要)

连接状态(Connection Status)

页面顶部实时显示当前 NTRIP 连接状态,包含三部分信息:

  • 连接状态:连接中(Connecting)/ 已连接(Connected)/ 已断开(Disconnected);
  • 消息与字节计数:自本次连接开始累计收到的 RTCM 消息条数与字节数;
  • 数据速率:当前接收速率(字节/秒),以及差分数据的新鲜度(correction age)与是否过期(stale);
  • Connect / Disconnect 按钮:手动发起或断开连接。

底层实现上,NTRIPManager.h 定义了稳定的连接状态枚举:Disconnected、Connecting、Connected、Reconnecting、Error,QML 界面直接绑定该枚举。状态统计由 NTRIPConnectionStats.h 提供,其内部按 RTCM 消息 ID 分别计数(messageCountsById,按 ID 升序返回[id, count]对),并在超过 5 秒未收到新数据时将dataStale置为true(阈值常量见 NTRIPConnectionStats.h),用于判断差分数据是否中断。

服务器配置(Server)

Host address(主机地址)

NTRIP caster 的主机名或 IP 地址,对应设置项ntripServerHostAddress(见 NTRIP.SettingsGroup.json)。地址须为合法的域名或 IPv4/IPv6 地址。

Server port(服务器端口)

NTRIP caster 的端口,默认值2101,对应设置项ntripServerPort(类型uint16,见 NTRIP.SettingsGroup.json)。端口校验规则见 NTRIPConfiguration.cc:必须位于1 ~ 65535之间,否则报错Invalid port。

Username / Password(用户名与密码)

NTRIP 服务商提供的账户凭据,密码输入框带有显示/隐藏切换。需要注意的校验约束(源码见 NTRIPConfiguration.cc):

  • 根据 RFC 7617,Basic 认证的用户名中不允许出现冒号:,否则报错Invalid username (must not contain ':');
  • 主机名与挂载点名称不允许包含控制字符和空格(NTRIPConfiguration.cc)。

Use TLS encryption(TLS 加密)

启用 TLS/SSL 加密连接,对应设置项ntripUseTls(默认false,见 NTRIP.SettingsGroup.json)。部分 SPARTN 类型的 caster 要求使用 TLS,且通常运行在2102端口上。与之配套的设置项还有:

  • ntripAllowSelfSignedCerts(默认false):是否接受自签名 TLS 证书。启用后可连接使用自签名证书的 caster,但官方 longDesc 明确提示"禁用此选项会拒绝自签名证书以防止中间人攻击",即接受自签名证书会引入安全风险(见 NTRIP.SettingsGroup.json)。

当未启用 TLS 却输入了凭据时,NTRIPManager 会触发_onPlaintextCredentialsWarning(),通过securityWarning属性(见 NTRIPManager.h)向界面发出"明文凭据"安全警告。

挂载点配置(Mountpoint)

Mount Point(挂载点)

要连接的 NTRIP 挂载点名称,对应设置项ntripMountpoint。其 longDesc 明确指出:"Leave blank for RTCM over TCP"——即留空表示使用 RTCP(RTCM over TCP)直连模式,不经过 source-table(见 NTRIP.SettingsGroup.json)。

连接前的校验逻辑(streamValidationError,见 NTRIPConfiguration.cc):除了基础连接配置必须合法外,挂载点必须非空,否则报错Select a mountpoint before connecting。

Browse(浏览挂载点)

点击Browse会向服务器请求 source-table(挂载点列表),并以列表形式展示每个挂载点的信息:

  • 格式(Format):如 RTCM 3.2、RTCM 3.3、SPARTN 等;
  • 导航系统(Navigation System):GPS、GLONASS、Galileo、北斗等;
  • 国家/地区(Country);
  • 码率(Bitrate):该挂载点的数据流量速率;
  • 距离(Distance):基于本地位置估算的到该 caster 的近似距离,便于就近选择。

实现上,NTRIPSourceTableController 负责拉取并解析 source-table,其关键参数(见 NTRIPSourceTableController.h):

  • 挂载点列表缓存 60 秒(kCacheTtlMs = 60000),避免短时间内重复请求;
  • 请求超时 10 秒(kFetchTimeoutMs = 10000);
  • source-table 响应体最大限制为 8 MB(kMaxSourceTableBytes),防止超大响应拖垮客户端。

选中挂载点后,控制器通过mountpointSelected信号上报,由 NTRIPManager/QML 层将其持久化到ntripMountpoint设置(见 NTRIPSourceTableController.h)。

选项(Options):RTCM 消息过滤

  • RTCM Message Filter(RTCM 消息过滤):RTCM 消息类型 ID 白名单,逗号分隔;留空表示转发全部消息。对应设置项ntripWhitelist,示例值如1005,1077,1087(见 NTRIP.SettingsGroup.json)。

白名单的解析实现在 NTRIPConfiguration.cc:按逗号切分、去除首尾空白后转为正整数,非数字或小于等于 0 的条目会被静默丢弃。该配置仅影响"转发给飞控"的消息集合——被过滤掉的消息不会再经 MAVLink 转发,从而可以按需降低链路带宽。

典型应用场景:

  • 只需要基线解算(base station)信息的固定站网络,可只放行1005(基站天线参考点 ARP);
  • 多系统网络可放行1005,1077,1087(分别对应 GPS/GLONASS/Galileo 的 MSM7 消息);
  • 若不确定服务商具体推送哪些消息,保持留空即可完整转发。

NTRIP UDP 转发(UDP Forwarding)

NTRIP 客户端收到 RTCM 数据后,除了转发给飞控,还可以通过 UDP 二次分发给另一台设备或程序:

  • UDP forward RTCM data:启用后把收到的 RTCM 数据以 UDP 形式转发出去,对应设置项ntripUdpForwardEnabled(默认false);
  • UDP target address:转发目标 IP 地址,对应设置项ntripUdpTargetAddress;
  • UDP target port:转发目标端口,对应设置项ntripUdpTargetPort(类型uint16,默认0)。

三个设置项的完整定义见 NTRIP.SettingsGroup.json。在设置界面中,地址和端口输入框仅在"启用转发"开关打开后才可用(enableWhen条件见 NTRIP.SettingsUI.json)。

底层实现由 NTRIPUdpForwardConfig 承载(enabled/address/port),NTRIPManager 通过_applyUdpForwarderConfig()在不重启传输层的情况下热更新转发配置(见 NTRIPManager.h)。值得注意,设置项 longDesc 中特别注明"NTRIP UDP forwarding is independent",即 NTRIP 的 UDP 转发与"Vehicle correction source"(飞行器校正源选择)中的 UDP 输入是相互独立的通道(见 GPSCorrection.SettingsGroup.json)。

UDP RTCM 输入(UDP RTCM Input)

除了从 NTRIP caster 拉取数据,QGC 也支持直接监听一个 UDP 端口接收 RTCM3 数据,作为 NTRIP 的替代输入源(例如同一局域网内的另一台设备充当差分源):

  • Enable UDP RTCM input:启用 UDP RTCM 输入,对应设置项rtcmUdpInputEnabled(默认false);
  • UDP RTCM input port:监听端口,默认13320,取值范围1024 ~ 65535(对应设置项rtcmUdpInputPort,类型uint32,默认值与 min/max 约束见 GPSCorrection.SettingsGroup.json);
  • UDP RTCM enable validation:对进入的 UDP 数据做 RTCM 帧校验并丢弃垃圾数据(默认开启,可提升安全性),对应设置项rtcmUdpValidate(见 GPSCorrection.SettingsGroup.json)。

启用后,监听端口收到的 RTCM3 数据会通过 MAVLinkGPS_RTCM_DATA消息转发给已连接的飞控(见 GPSCorrection.SettingsGroup.json 的 longDesc)。这三个设置项归属于gpsCorrectionSettings设置组,在设置界面中仅在gpsCorrectionSettings.userVisible为真时显示(见 NTRIP.SettingsUI.json)。

进阶:GGA 上报与校正源路由

除关联文档列出的配置外,NTRIP 设置页还包含两组与差分链路密切相关的进阶配置(定义见 NTRIP.SettingsUI.json 与 NTRIP.SettingsGroup.json):

GGA Position Reporting(GGA 位置上报)

  • GGA Position Source:向上游发送的 NMEA GGA 句的定位来源,可选Auto(自动选择最佳来源)、Vehicle GPS、Vehicle EKF、RTK Base Station、GCS Position(默认Auto);
  • GGA Send Interval:GGA 上报间隔,默认5 秒,范围1 ~ 60 秒。longDesc 提示:VRS(虚拟参考站)挂载点通常要求 1~10 秒上报间隔,间隔越短 VRS 跟踪越紧,间隔越长越省带宽。

这是 NTRIP 网络 RTK 的关键环节:部分 caster(尤其是 VRS 模式)依赖客户端周期性上报自身近似位置来选择虚拟参考站,GGA 上报由 NTRIPGgaProvider 实现。

Correction Routing(校正源路由)

NTRIP 输入与 UDP 输入最终统一由校正路由(correctionSource)管理,选项包括Automatic、Local base station、NTRIP、UDP、All sources(见 GPSCorrection.SettingsGroup.json)。自动模式下,QGC 优先选择本地基站、其次 NTRIP、最后 UDP;手动模式则锁定到指定源类,不会自动回退到其他类别。

底层原理:事件驱动的连接状态机

NTRIP 连接管理并非简单的"连上/断开",而是由 NTRIPManager.h 实现的一个显式事件驱动状态机。所有连接状态变化都经由_dispatch()与状态转移表完成,状态机的核心要素:

  • 五种公开状态:Disconnected、Connecting、Connected、Reconnecting、Error(NTRIPManager.h);
  • 十一种外部事件:StartRequested、StopRequested、ConfigInvalid、TransportConnected、RTCMBeforeConnected(在 connected 信号处理前 RTCM 数据就已到达的竞态场景)、TransportError、TransportFatalError、ReconnectDue、ReconnectGaveUp、HotReconfigure(连接期间传输相关设置变更,原地重连)等(NTRIPManager.h);
  • 重连退避策略:最小间隔 1 秒、最大 30 秒、最多尝试 100 次(NTRIPManager.h),呈指数退避(backoff);
  • 设置去抖:设置变更后延迟 250 ms 再应用,避免频繁点击造成连接抖动(NTRIPManager.h)。

从源码结构看,生产环境统一使用NTRIPHttpTransport作为传输层(NTRIPManager.h 注释确认),测试则通过注入MockNTRIPTransport来驱动状态机。协议层按 NTRIP 规范实现 HTTP 源表拉取与流式数据传输(NTRIPHttpTransport.h、NTRIPHttpDecoder.cc)。

连接排查与验证

结合 NTRIPConfiguration.cc 的校验逻辑与状态机设计,常见的排查路径如下:

现象可能原因与处置
连接后立即报Invalid port端口不在 1~65535 范围,检查ntripServerPort
报Invalid host (contains spaces)主机地址含空格或控制字符,删除非法字符
报Invalid username (must not contain ':')Basic 认证用户名含冒号,更换凭据
提示Select a mountpoint before connecting挂载点为空且未走 RTCP 直连模式,先用 Browse 选择一个挂载点
已连接但dataStale为真超过 5 秒未收到 RTCM 数据,检查 caster 是否推送该挂载点数据、白名单是否误过滤
明文凭据安全警告未启用 TLS 却填写了用户名/密码,建议改用 TLS(端口 2102)或确认网络环境可信

仓库为 NTRIP 模块提供了完整的单元测试与模糊测试,可用于验证或扩展连接行为:test/GPS/NTRIP 目录下包含NTRIPManagerTest、NTRIPConnectionStatsTest、NTRIPSourceTableControllerTest、NTRIPHttpTransportTest、NTRIPGgaProviderTest、NTRIPReentrancyTest等;协议解析层另有独立的模糊测试工程 test/Fuzz/NTRIPHttpDecoder。设置界面的 QML 元数据验证位于 test/GPS/NTRIP/NTRIPQmlMetadata.qml。

小结

QGroundControl 的 NTRIP 客户端覆盖了从"连接 caster、选择挂载点"到"消息过滤、UDP 二次分发、UDP 替代输入"的完整差分数据链路。配置层面需要把握五个关键点:端口默认 2101(TLS 场景多为 2102)、挂载点可用 Browse 自动获取、RTCM 白名单留空即全量转发、UDP 转发与 UDP 输入是相互独立的通道、VRS 网络需按服务商要求配置 GGA 上报间隔。若需要二次开发或深入排查,可从 src/GPS/NTRIP/NTRIPManager.h 的状态机与 src/Settings/NTRIP.SettingsGroup.json 的设置定义入手,结合 test/GPS/NTRIP 下的测试用例验证行为。

  • 无人机
  • 智能硬件

【免费下载链接】qgroundcontrol

Cross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)

项目地址:https://gitcode.com/gh_mirrors/qg/qgroundcontrol
点击查看免费下载

相关推荐

上一篇:NVIDIA Profile Inspector 教程:3 步调好显卡隐藏设置,让帧率和画质一起提升
下一篇:CANN ops-nn 中 aclnnLogit 算子详解:概率到对数几率(log-odds)变换的两段式接口调用实践

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询