1. 课程导入
各位同学好,我是老张。做飞控这行十几年了,从最早的Pixhawk一路折腾到现在。今天咱们聊聊日志分析——说白了,就是给无人机做「飞行记录仪」的解读。
你可能遇到过这种情况:飞着飞着突然炸机了,或者某个模式切换时飞机抖了一下。这时候你第一反应是什么?我猜八成是「再飞一次试试」。但说实话,这种碰运气的方式,效率太低了。
日志分析的核心价值:把飞行中的每一个传感器读数、每一个控制指令、每一个状态变化都记录下来。出了问题,咱们能回放现场,找到根因。
1.1 为什么非看日志不可?
我刚开始做飞控时,也犯过傻。有一次飞机在空中突然偏航,我折腾了三天,换了电机、换了桨、甚至换了飞控板。最后实在没辙了,打开日志一看——原来是GPS的YAW偏移参数没校准。你说冤不冤?
日志能帮你解决三类问题:
- 故障排查:炸机后还原现场,找到是硬件问题还是参数问题
- 性能调优:看PID响应、看震动水平、看电池压降,把飞机调到最佳状态
- 安全验证:每次重大改动后,通过日志确认系统是否稳定
说白了,没有日志的飞控调试,就像闭着眼睛开车。你只能靠感觉,但感觉会骗人。
1.2 ArduPilot日志系统概述
ArduPilot的日志系统其实挺灵活的。它支持两种后端存储方式,由参数 LOG_BACKEND_TYPE 控制。
| 参数值 | 后端类型 | 说明 |
|---|---|---|
| 0 | 无日志 | 不记录任何日志,调试时别用 |
| 1 | SD卡(.bin) | 默认方式,二进制格式,体积小、写入快 |
| 2 | MAVLink(.log) | 通过数传实时传输,适合地面站实时监控 |
| 3 | 两者同时 | SD卡+MAVLink双备份,我习惯用这个 |
这里有个坑,我提醒一下:LOG_BACKEND_TYPE = 2 时,如果数传链路断了,日志就丢了。所以重要飞行,我建议用3,双保险。
日志文件格式:.bin vs .log
这两种格式有什么区别?我直接给你列个对比:
| 特性 | .bin(二进制) | .log(文本) |
|---|---|---|
| 存储位置 | SD卡 | MAVLink链路 |
| 文件大小 | 小(压缩率高) | 大(文本格式) |
| 解析速度 | 快 | 慢 |
| 可读性 | 需工具解析 | 可直接用文本编辑器打开 |
| 典型场景 | 飞行后分析 | 实时监控 |
我个人习惯是:日常调试用.bin,因为数据全、体积小。只有做数传链路测试时,才会切到.log模式。
1.3 常用分析工具介绍
工欲善其事,必先利其器。ArduPilot生态里,有三款工具我几乎天天用。
Mission Planner(MP)
这是最入门的工具,也是大多数人的第一选择。MP的日志分析功能集成在「Flight Data」页面里。
- 优点:图形化界面,拖拽就能看曲线,适合快速浏览
- 缺点:处理大日志时卡顿,高级分析功能有限
- 适用场景:快速检查震动、GPS状态、电池电压等基础参数
我记得有一次,用户说飞机悬停时左右晃动。我用MP打开日志,直接看IMU的加速度计曲线——好家伙,震动峰值都到40m/s²了。换了个减震垫,问题解决。前后不到10分钟。
MAVExplorer
这是命令行工具,也是我个人的最爱。它基于Python,可以写脚本做批量分析。
# 基本用法示例
mavexplorer.py 00000001.bin
# 查看所有消息类型
messages
# 绘制GPS高度和气压计高度对比
graph GPS.Alt, BARO.Alt
# 导出特定数据到CSV
export GPS.Alt, GPS.Lng, GPS.Lat --output=flight_path.csv
为什么我推荐MAVExplorer?因为它能处理超大日志。有一次我分析一个2小时的测绘飞行日志,MP直接崩溃了。MAVExplorer几秒钟就加载完,还能用Python脚本做自定义分析。
小技巧:MAVExplorer支持管道操作。比如 mavexplorer.py log.bin | grep "ERR" 可以直接过滤错误消息,比在MP里翻来翻去快多了。
pyulog
这是PX4生态的工具,但也能解析ArduPilot的ulog格式。如果你同时玩PX4和ArduPilot,这个工具很实用。
# 安装
pip install pyulog
# 解析日志
ulog_info flight.ulg
# 提取数据
ulog2csv flight.ulg
不过说实话,pyulog在ArduPilot社区用得不多。我只有在做跨平台对比测试时才会用它。
1.4 日志分析的整体流程
下面这张图,是我自己总结的日志分析流程。你照着这个思路走,基本不会漏掉关键信息。
1.5 避坑指南
最后,分享几个我踩过的坑:
坑1:日志没开够
我曾经帮一个用户分析炸机原因,结果他的日志只开了基本模式,关键数据都没记录。后来查了半天,发现是 LOG_BITMASK 参数没配置好。建议你一开始就把常用消息类型都打开,别省那点存储空间。
坑2:SD卡质量不行
有一次飞行中日志突然中断,我还以为是飞控坏了。折腾了两天,最后发现是SD卡是山寨货,写入速度跟不上。从那以后,我只用SanDisk或Samsung的工业级卡。
我的习惯:每次飞行前,检查一下 LOG_BACKEND_TYPE 和 LOG_BITMASK。飞行后,第一时间把日志拷贝到电脑上。别等炸机了才想起来看日志——那时候可能已经晚了。
好了,第一章就到这里。日志分析这件事,说白了就是「数据驱动调试」。你掌握得越早,踩的坑就越少。后面我们会一步步深入,从基础曲线看到高级诊断,把每一行日志都变成你手中的武器。