README.md 4.0 KB

VK 飞控遥测监控

基于 PyQt6 的 Windows 串口上位机。除请求飞控 SN 外只接收 MAVLink,不发送心跳、参数、解锁或飞行控制命令。支持 MAVLink 2 VKFly 自定义方言及其包含的标准消息;校验失败的帧丢弃。连接后从串口收到的数据源并不自动区分多架飞机,多机共用链路时请勿把仪表作为单机状态依据。

界面展示

未连接时的初始界面:

上位机未连接界面

连接飞控后的遥测监控界面,包含姿态、电源和消息字段:

上位机连接飞控界面

连接界面截图来自真实飞控遥测,地理位置和 SN 已隐藏;实际显示内容以飞控返回的数据为准。

功能

  • 选择串口和波特率,显示连接状态。
  • 图形化姿态仪、机体朝向避障雷达;显示位置、地速、高度、GPS、电池、惯导状态和可用的 SN。
  • 消息观察器列出收到的所有已识别消息、ID、数量和最近状态;点击可查看原始字段。3 秒未更新的消息标记为陈旧。
  • 电源卡片使用最后收到的 SYS_STATUS 或 VK_BMS_STATUS:前者按 VKFly 协议的 cV 换算(不同于标准 MAVLink 的 mV),后者按 mV 换算;两者分别表示飞控供电与 BMS 电压。
  • 连接后首次收到飞控心跳时,向该飞控发送一次 MAV_CMD_REQUEST_MESSAGE,请求飞控的 VK_COMP_VERSION;收到回复后显示其中的 SN。未回复时可点击“重新请求 SN”,不自动请求其他消息;多机链路会选择第一个识别到的飞控。
  • 避障图只按 BODY_FRD(12)解释数据,过滤协议无效距离;其他坐标系不画图。10m 是显示量程,不代表传感器上限。

安全说明:此软件是监视工具,不能替代地面站及飞行安全检查。页面卡片暂显示最后收到的值;判断实时性请看消息观察器中的更新时间。不要在旋翼安装螺旋桨时进行桌面调试。

从源码运行

在仓库根目录(先安装 Python,并初始化子模块):

git submodule update --init --recursive
python -m venv venv
.\venv\Scripts\python.exe -m pip install -r requirements.txt
.\venv\Scripts\python.exe generate_dialect.py
.\venv\Scripts\python.exe app.py

关闭其他占用相同 COM 口的程序,再选择端口和波特率。MAVLink 串口(例如 GCS/LINK 或 OBV)必须有遥测输出;USB 控制台不一定是 MAVLink。

更新协议并构建 EXE

powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1

默认构建流程:初始化 MAVLink 子模块;检查子模块无本地文件更改;抓取 origin/main;只有当前子模块提交是远端祖先时才切到远端最新提交;安装依赖;从 VKFly.xml 生成 Python 方言;运行测试;调用 PyInstaller。子模块如有脏文件或本地分叉提交会停止,避免覆盖工作;更新后主仓库会显示子模块指针变化,应由开发者决定是否提交。网络、远端权限或依赖安装失败会使构建失败。脚本不会执行主仓库 git pull。

如果 Git 代理不可用、但内网仓库可直连,可仅对本次构建绕过 Git 代理(不会修改全局配置):

powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1 -NoGitProxy

如果需要严格使用主仓库当前检出的子模块版本或暂不更新:

powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1 -SkipSubmoduleUpdate

构建产物是 dist\VKGroundStation\VKGroundStation.exe 及其旁边依赖目录(PyInstaller --onedir),发布时需一起复制整个 VKGroundStation 文件夹。首次安装 PyQt6 体积较大;需要网络访问 PyPI 和子模块远端。

测试

.\venv\Scripts\python.exe -m unittest discover -s tests -v

测试包含标准/自定义方言的打包与解析及噪声后恢复;测试结果不等于对实机全部消息、视觉效果或飞行安全的验证。