1. QGC日志入门:什么是QGC日志、日志的作用、日志文件结构(.ulog)、如何获取日志文件

各位飞手、工程师朋友,咱们直接进入正题。

QGC日志,说白了就是无人机飞行时的“黑匣子”。它记录了飞控大脑里每一毫秒的思考过程。我做了这么多年飞控,可以负责任地告诉你:没有日志,排查问题就像蒙着眼睛修车。

1.1 什么是QGC日志?

QGC(QGroundControl)地面站与PX4/ArduPilot飞控通信时,会把飞控上传的所有数据打包成一个文件。这个文件就是.ulog文件。

它里面装了什么?

  • 传感器原始数据:陀螺仪、加速度计、磁力计、气压计、GPS
  • 状态估计:位置、速度、姿态(欧拉角/四元数)
  • 控制输出:电机PWM值、舵机角度
  • 系统事件:解锁、自检、报错、模式切换
  • 参数快照:飞行时的全部参数值

嗯,这里要注意:.ulog是二进制文件,你不能用记事本直接打开。需要用QGC自带的日志分析工具,或者用Python的pyulog库来解析。

核心认知:QGC日志 = 飞控的“飞行日记”。它不会说谎,只会忠实地记录你犯的每一个错误。

1.2 日志的作用——为什么我离不开它?

我个人习惯,每次试飞完第一件事就是下载日志。哪怕飞得很顺,也要看一眼。为什么?

  1. 故障排查:炸机了?别急着骂飞控。日志会告诉你:是GPS丢星、电机堵转、还是你手抖切了自稳模式。
  2. 性能调优:悬停抖不抖?航线偏不偏?PID参数合不合理?日志里的振动频谱和跟踪误差一目了然。
  3. 合规取证:我在项目中遇到过,客户说飞控失控了。结果日志显示,他飞到了禁飞区边缘,飞控自动降落。日志就是铁证。
  4. 复现问题:有些bug在地面死活复现不了。但日志里记录了当时的全部环境参数,你可以用ulog2csv导出数据,在MATLAB里回放。

我的经验:养成“飞完必导日志”的习惯。哪怕只是飞了3分钟,也要导。因为你永远不知道,下一次起飞会不会是最后一次。

1.3 日志文件结构(.ulog)——拆开看看里面长什么样

你想想看,一个.ulog文件,其实就是一个结构化的数据流。它由多个消息组成,每个消息都有固定的格式。

我画了一张图,帮你理解它的内部结构:

.ulog 文件内部结构 .ulog 文件内部结构 文件头 (File Header) magic: 0x55 0x4C 0x6F 0x67 | version: 1 | timestamp: 0 定义区 (Definition Section) 消息格式定义 (Message Format Definitions) 参数快照 (Parameter Defaults) 例如: sensor_accel, vehicle_attitude, actuator_outputs 数据区 (Data Section) 消息 1: sensor_accel timestamp: 1000ms 消息 2: vehicle_attitude timestamp: 1002ms 消息 3: actuator_outputs timestamp: 1005ms ... 持续追加,直到飞行结束 每条消息都包含: msg_id + timestamp + data 说明:数据区是循环追加的,飞行时间越长,文件越大。定义区只在文件开头出现一次。

你看,结构其实不复杂。文件头告诉解析器“这是个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生态更通用。