UM982 RTK 助手

UM982 RTK 助手 是一个面向 Windows 的桌面工具,使用 Python 3 + PyQt5 + pyserial 开发,主要用于配置、调试和测试 Unicore UM982 双天线 RTK 模块,并支持通过 NTRIP/CORS 向模块注入 RTCM 差分数据。

这个项目的目标用户是不熟悉 GNSS 命令和串口调试的无人车开发者,所以界面尽量做成了引导式、可视化、中文化,而不是传统“串口助手”风格。

当前能力

当前版本已经实现这些核心功能:

  • 扫描并打开 Windows 串口
  • 支持“单串口复用”模式
  • 引导式一键配置 UM982
  • 支持 MODE HEADING2 LOWDYNAMIC / TRACTOR
  • 支持 CONFIG HEADING LENGTH / OFFSET
  • 实时读取并解析:
    • GGA
    • RMC
    • VTG
    • GST
    • GSA
    • GSV
    • GPTHS2
    • GPTRA2
    • UNIHEADINGA
  • 首页提供“完整解析”总览
  • 支持连接 CORS / NTRIP
  • 支持上传最近一条 GGA
  • 支持接收 RTCM 并写入 UM982
  • 支持 RESET / FRESET
  • 支持日志显示、落盘、导出
  • 附带一个独立的 mqtt_test.py 调试工具

技术栈

  • Python 3
  • PyQt5
  • pyserial
  • keyring
  • paho-mqtt

目录结构

um982_rtk_assistant/
  main.py
  mqtt_test.py
  requirements.txt
  README.md
  app/
    __init__.py
    main_window.py
    serial_manager.py
    ntrip_client.py
    nmea_parser.py
    command_profiles.py
    config_manager.py
    logger.py
    widgets/
      __init__.py
      sidebar.py
      status_cards.py
      serial_page.py
      setup_wizard.py
      ntrip_page.py
      raw_data_page.py
      command_page.py
      reset_page.py
      log_page.py

环境准备

1. 安装 Python

推荐在 Windows 下使用 Miniconda。

如果你已经有环境,例如:

conda activate clear_conda_main

那后续直接在这个环境里安装依赖即可。

2. 安装依赖

pip install -r requirements.txt

3. 启动主程序

python main.py

4. 启动 MQTT 调试工具

python mqtt_test.py

UM982 接线说明

注意:UM982 使用的是 3.3V TTL,不要直接接 5V TTL。

推荐方案 1:只用一个串口

适合当前项目默认工作流:

  • 一个 USB-TTL 接 UM982 COM1
  • 配置命令、NMEA 输出、调试信息、RTCM 注入都复用这一条串口

接线方式:

  • USB-TTL TX -> UM982 RX1
  • USB-TTL RX -> UM982 TX1
  • USB-TTL GND -> UM982 GND

推荐方案 2:双串口

如果你想把定位调试和 RTCM 注入分开,可以这样接:

  • USB-TTL-1 -> UM982 COM1
  • USB-TTL-2 -> UM982 COM2

配置/数据串口

  • USB-TTL-1 TX -> UM982 RX1
  • USB-TTL-1 RX -> UM982 TX1
  • USB-TTL-1 GND -> UM982 GND

RTCM 注入串口

  • USB-TTL-2 TX -> UM982 RX2
  • USB-TTL-2 RX -> UM982 TX2(可选,仅调试时有帮助)
  • USB-TTL-2 GND -> UM982 GND

串口建议

  • 默认波特率:115200
  • 支持波特率:
    • 115200
    • 230400
    • 460800
    • 921600

如果完全没有 NMEA 输出,优先排查:

  • TX / RX 是否交叉
  • 是否接对了 COM1
  • 模块是否上电
  • 波特率是否正确
  • USB-TTL 是否是 3.3V TTL

默认一键配置逻辑

当前引导式配置页面支持:

  • LowDynamic 低动态
  • Tractor 农机应用

默认会生成这类命令:

MODE HEADING2 LOWDYNAMIC
CONFIG HEADING LENGTH 50 5
CONFIG HEADING OFFSET 0 0
CONFIG COM1 115200
CONFIG COM2 115200
CONFIG COM3 115200
GNGGA COM1 1
GNRMC COM1 1
GNVTG COM1 1
GPTHS2 COM1 1
GPTRA2 COM1 1
UNIHEADINGA COM1 1
GPGST COM1 1
GNGSA COM1 1
GNGSV COM1 3
SAVECONFIG

特点:

  • 支持先预览命令,不直接发送
  • 点击“应用这个配置”后会显示进度
  • 每条命令自动补 \r\n
  • 命令统一按大写发送

双天线安装建议

  • 两个天线必须刚性固定,不能相对晃动
  • 要测量两个天线相位中心之间的真实距离
  • 低速无人车建议基线长度至少 50 cm
  • 如果天线连线方向不是车头方向,需要设置 heading offset
  • 左右横装常见需要修正 90° 或 -90°
  • 前后纵装常见需要修正 0° 或 180°

完整解析页面说明

首页已经合并成“完整解析”,包含:

  • 总览
  • GGA
  • RMC
  • VTG
  • GST
  • GSA
  • GSV
  • 航向/定向
  • 最近消息

总览页重点字段

  • 定位状态
  • RTK 状态
  • UTC 时间
  • 经纬度
  • 海拔
  • 卫星数
  • HDOP
  • 速度
  • 地面航向
  • 双天线航向
  • 双天线俯仰
  • 基线长度
  • 航向状态

航向消息说明

当前程序按手册区分不同消息来源:

  • GPTHS2
    • 只用于提取基础航向角和状态
  • GPTRA2
    • 作为 HEADING2 模式下更完整的姿态消息
    • 解析 heading / pitch / roll / quality / satellites / age
  • UNIHEADINGA
    • 解析 baseline length / heading / pitch / stddev / 解类型 / 卫星数量

如果超过 2 秒没有新的航向数据,界面会显示 航向无效。

CORS / NTRIP 说明

默认中国移动 CORS 参数:

  • Caster IP: 120.253.239.161
  • Port: 8002
  • Mountpoint: RTCM33_GRCEJ
  • 坐标系说明:8002 对应 WGS84

用户名和密码由用户在界面输入,不写死到源码里。

当前逻辑

程序现在把“连接 CORS”和“开始注入 RTCM”分成了两步:

  1. 先连接 CORS
  2. 再决定是否开始把 RTCM 写入串口

这样更适合调试,因为你可以先观察:

  • 是否登录成功
  • 是否收到响应头
  • 是否收到首包
  • 是否真的开始流数据

页面里会看到这些状态

  • 状态:未连接
  • 状态:已连接 ...
  • 注入状态:未开始
  • 注入状态:已连接,但尚未开始注入
  • 注入状态:注入中

GGA 上传逻辑

  • 程序会缓存最近一条 GGA
  • 连接 CORS 后按需上传
  • 如果当前没有 GGA,很多 CORS 不会下发差分

统计信息

  • 连接时长
  • RTCM 接收字节
  • RTCM 写入字节
  • 最近 5 秒平均速率
  • 断线次数

如何判断 RTK Fixed

程序会从 GGA 的 quality 字段判断定位质量:

  • 0:无定位
  • 1:单点定位
  • 2:差分定位
  • 4:RTK Fixed
  • 5:RTK Float

一般来说:

  • 4 表示固定解
  • 5 表示浮点解
  • 1 长时间不变,通常说明还没真正吃到差分或环境不好

RESET 和 FRESET

RESET

  • 发送:RESET
  • 作用:重启接收机
  • 不会清空配置

FRESET

  • 发送:FRESET
  • 作用:清空用户配置、星历和位置信息
  • 常见结果:串口恢复到 115200

程序里已经做了:

  • 二次确认
  • 发送后自动关闭串口
  • 等待 5 秒后尝试用 115200 重新连接

日志和配置

日志

  • UI 内可查看
  • 自动保存到 logs/
  • 支持导出
  • 支持清空
  • 会对密码做脱敏处理

配置

  • 保存在 config.json
  • 会记录上次串口和 CORS 参数
  • 是否保存密码由用户决定
  • 密码优先使用 keyring

MQTT 调试工具

项目包含一个独立的 mqtt_test.py,用于验证 MQTT Broker、Topic 和消息上报情况。

支持:

  • 图形界面连接 MQTT Broker
  • 输入 Broker / Port / Username / Password / Client ID
  • 订阅多个 Topic
  • 实时显示消息
  • 查看文本、HEX、JSON 预览
  • 调试连接、订阅和消息流

后续建议

这个项目已经适合继续做版本化迭代,比较适合优先往这几个方向增强:

  • 把总览页做成更明显的大卡片布局
  • 把 GSV 改成表格视图
  • 继续扩展更多 Unicore 专有消息的精确解析
  • 增加导出当前配置快照
  • 增加串口自动重连策略
  • 增加项目发布包,例如 PyInstaller 打包

免责声明

本工具用于工程调试和开发辅助,发送配置命令前请确认你理解这些命令的作用。
尤其是 FRESET,会清空配置并可能改变串口参数,请谨慎操作。

S
Description
UM982 RTK ???Windows ?? UM982 ??? RTK ??????NTRIP ? MQTT ????
Readme
67 KiB
0 Stars 1 Watchers 0 Forks
Languages
Python 100%