1. QGC日志入门:什么是QGC日志、日志的作用、日志文件结构(.ulog)、如何获取日志文件
各位飞手、工程师朋友,咱们直接进入正题。
QGC日志,说白了就是无人机飞行时的“黑匣子”。它记录了飞控大脑里每一毫秒的思考过程。我做了这么多年飞控,可以负责任地告诉你:没有日志,排查问题就像蒙着眼睛修车。
1.1 什么是QGC日志?
QGC(QGroundControl)地面站与PX4/ArduPilot飞控通信时,会把飞控上传的所有数据打包成一个文件。这个文件就是.ulog文件。
它里面装了什么?
- 传感器原始数据:陀螺仪、加速度计、磁力计、气压计、GPS
- 状态估计:位置、速度、姿态(欧拉角/四元数)
- 控制输出:电机PWM值、舵机角度
- 系统事件:解锁、自检、报错、模式切换
- 参数快照:飞行时的全部参数值
嗯,这里要注意:.ulog是二进制文件,你不能用记事本直接打开。需要用QGC自带的日志分析工具,或者用Python的pyulog库来解析。
核心认知:QGC日志 = 飞控的“飞行日记”。它不会说谎,只会忠实地记录你犯的每一个错误。
1.2 日志的作用——为什么我离不开它?
我个人习惯,每次试飞完第一件事就是下载日志。哪怕飞得很顺,也要看一眼。为什么?
- 故障排查:炸机了?别急着骂飞控。日志会告诉你:是GPS丢星、电机堵转、还是你手抖切了自稳模式。
- 性能调优:悬停抖不抖?航线偏不偏?PID参数合不合理?日志里的振动频谱和跟踪误差一目了然。
- 合规取证:我在项目中遇到过,客户说飞控失控了。结果日志显示,他飞到了禁飞区边缘,飞控自动降落。日志就是铁证。
- 复现问题:有些bug在地面死活复现不了。但日志里记录了当时的全部环境参数,你可以用
ulog2csv导出数据,在MATLAB里回放。
我的经验:养成“飞完必导日志”的习惯。哪怕只是飞了3分钟,也要导。因为你永远不知道,下一次起飞会不会是最后一次。
1.3 日志文件结构(.ulog)——拆开看看里面长什么样
你想想看,一个.ulog文件,其实就是一个结构化的数据流。它由多个消息组成,每个消息都有固定的格式。
我画了一张图,帮你理解它的内部结构:
你看,结构其实不复杂。文件头告诉解析器“这是个ulog文件”,定义区告诉解析器“数据长什么样”,数据区就是真正的飞行数据流。
避坑指南:我曾经遇到过,日志文件损坏,打不开。原因是飞控在写日志时突然断电。所以,不要在写日志时拔掉飞控的电源。等飞控完全关机后再拔。
1.4 如何获取日志文件?
获取日志,有3种方式。我按推荐程度排个序:
| 方式 | 操作步骤 | 适用场景 | 我的评价 |
|---|---|---|---|
| QGC自动下载 | 飞控连接QGC → 点击“日志” → 选择日志 → 下载 | 日常飞行、快速排查 | 最方便,推荐首选 |
| SD卡直读 | 拔下飞控SD卡 → 插入电脑 → 复制/log文件夹 |
飞控死机、QGC连不上 | 最可靠,保底方案 |
| MAVLink实时流 | QGC设置中开启“实时日志流” → 飞行时自动记录到电脑 | 超长航时、数据备份 | 会占用数传带宽,慎用 |
我个人习惯用SD卡直读。为什么?因为QGC自动下载有时会丢包,尤其是日志文件很大的时候。SD卡直读,文件是完整的,一个字节都不会少。
小技巧:日志文件命名规则是 年月日_时分秒_序号.ulog。比如 2025_03_21_14_30_00_000.ulog。你可以在文件名里加个备注,比如 2025_03_21_14_30_00_000_测试PID.ulog。这样以后找日志,一眼就知道是哪次飞行。
1.5 日志文件存放位置
不同飞控,日志存放路径略有不同。我整理了一个对照表:
| 飞控固件 | SD卡路径 | 说明 |
|---|---|---|
| PX4 | /log/年份-月份/日期/序号.ulog |
例如: /log/2025-03/21/000.ulog |
| ArduPilot | /APM/LOGS/序号.BIN |
注意是.BIN格式,不是.ulog |
| CUAV V5+ | 同PX4路径 | 兼容PX4固件 |
| Holybro Pixhawk | 同PX4路径 | 兼容PX4固件 |
嗯,这里要注意:ArduPilot的日志是.BIN格式,不是.ulog。但QGC也能解析。不过咱们这门课主要讲.ulog,因为PX4生态更通用。