# VK 飞控遥测监控 基于 PyQt6 的 Windows 串口上位机。除请求飞控 SN 外只接收 MAVLink,不发送心跳、参数、解锁或飞行控制命令。支持 MAVLink 2 VKFly 自定义方言及其包含的标准消息;校验失败的帧丢弃。连接后从串口收到的数据源并不自动区分多架飞机,多机共用链路时请勿把仪表作为单机状态依据。 ## 功能 - 选择串口和波特率,显示连接状态。 - 图形化姿态仪、机体朝向避障雷达;显示位置、地速、高度、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,并初始化子模块): ```powershell 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 powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1 ``` 默认构建流程:初始化 MAVLink 子模块;检查子模块无本地文件更改;抓取 `origin/main`;只有当前子模块提交是远端祖先时才切到远端最新提交;安装依赖;从 `VKFly.xml` 生成 Python 方言;运行测试;调用 PyInstaller。子模块如有脏文件或本地分叉提交会停止,避免覆盖工作;更新后主仓库会显示子模块指针变化,应由开发者决定是否提交。网络、远端权限或依赖安装失败会使构建失败。脚本不会执行主仓库 `git pull`。 如果 Git 代理不可用、但内网仓库可直连,可仅对本次构建绕过 Git 代理(不会修改全局配置): ```powershell powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1 -NoGitProxy ``` 如果需要严格使用主仓库当前检出的子模块版本或暂不更新: ```powershell powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1 -SkipSubmoduleUpdate ``` 构建产物是 `dist\VKGroundStation\VKGroundStation.exe` 及其旁边依赖目录(PyInstaller `--onedir`),**发布时需一起复制整个 `VKGroundStation` 文件夹**。首次安装 PyQt6 体积较大;需要网络访问 PyPI 和子模块远端。 ## 测试 ```powershell .\venv\Scripts\python.exe -m unittest discover -s tests -v ``` 测试包含标准/自定义方言的打包与解析及噪声后恢复;测试结果不等于对实机全部消息、视觉效果或飞行安全的验证。