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 - 实时读取并解析:
GGARMCVTGGSTGSAGSVGPTHS2GPTRA2UNIHEADINGA
- 首页提供“完整解析”总览
- 支持连接
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 RX1USB-TTL RX -> UM982 TX1USB-TTL GND -> UM982 GND
推荐方案 2:双串口
如果你想把定位调试和 RTCM 注入分开,可以这样接:
USB-TTL-1 -> UM982 COM1USB-TTL-2 -> UM982 COM2
配置/数据串口
USB-TTL-1 TX -> UM982 RX1USB-TTL-1 RX -> UM982 TX1USB-TTL-1 GND -> UM982 GND
RTCM 注入串口
USB-TTL-2 TX -> UM982 RX2USB-TTL-2 RX -> UM982 TX2(可选,仅调试时有帮助)USB-TTL-2 GND -> UM982 GND
串口建议
- 默认波特率:
115200 - 支持波特率:
115200230400460800921600
如果完全没有 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°
完整解析页面说明
首页已经合并成“完整解析”,包含:
总览GGARMCVTGGSTGSAGSV航向/定向最近消息
总览页重点字段
- 定位状态
- 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”分成了两步:
- 先连接 CORS
- 再决定是否开始把 RTCM 写入串口
这样更适合调试,因为你可以先观察:
- 是否登录成功
- 是否收到响应头
- 是否收到首包
- 是否真的开始流数据
页面里会看到这些状态
状态:未连接状态:已连接 ...注入状态:未开始注入状态:已连接,但尚未开始注入注入状态:注入中
GGA 上传逻辑
- 程序会缓存最近一条
GGA - 连接 CORS 后按需上传
- 如果当前没有
GGA,很多 CORS 不会下发差分
统计信息
- 连接时长
- RTCM 接收字节
- RTCM 写入字节
- 最近 5 秒平均速率
- 断线次数
如何判断 RTK Fixed
程序会从 GGA 的 quality 字段判断定位质量:
0:无定位1:单点定位2:差分定位4:RTK Fixed5: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,会清空配置并可能改变串口参数,请谨慎操作。