3. 日志采集与配置
做飞控日志分析,工具选对了,效率翻倍。我见过不少新手,手里拿着 bin 文件,却不知道从哪下手。其实 ArduPilot 的生态里,从图形界面到命令行,再到云端平台,已经给你配齐了一套完整的工具链。这一章,我就带你把这几个工具摸熟。
核心观点:没有最好的工具,只有最合适的场景。Mission Planner 适合快速浏览,MAVExplorer 适合批量处理,pyulog 适合深度定制,DroneLogViewer 适合团队协作。你都得会一点。
3.1 Mission Planner 日志查看器:零门槛上手
如果你刚接触日志分析,从 Mission Planner 开始准没错。它自带的日志查看器,说白了就是把二进制日志里的数据,画成你能看懂的曲线和表格。
基本操作流程:
- 打开 Mission Planner,点击顶部菜单 Flight Data 标签页。
- 在右侧面板找到 Log 按钮,点击后选择 Browse 或 Download。
- 加载 .bin 或 .log 文件后,左侧会出现消息类型列表(如 ATT、GPS、IMU 等)。
- 勾选你想看的消息类型,右侧就会绘制出对应的曲线图。
我的小技巧:我个人习惯先勾选 ATT(姿态) 和 GPS 这两组数据。看一眼姿态曲线是否平滑,GPS 星数和 HDOP 是否正常,基本就能判断这次飞行有没有大问题。如果姿态曲线有毛刺,再往下查 IMU 数据。
常用功能速查表:
| 功能 | 操作方式 | 适用场景 |
|---|---|---|
| 曲线缩放 | 鼠标滚轮 / 框选区域 | 查看特定时间段的细节 |
| 多曲线叠加 | 按住 Ctrl 勾选多个消息 | 对比油门与高度、姿态与遥控输入 |
| 数据导出 | 右键曲线 → Export to CSV | 导出到 Excel 或 MATLAB 做进一步分析 |
| 事件标记 | 查看 ERR 和 EV 消息 | 定位报错、解锁、切模式的时间点 |
注意:Mission Planner 的日志查看器在处理超大日志(超过 1GB)时可能会卡顿。我曾经遇到过加载一个 2.3GB 的日志,等了快 5 分钟才出来。这时候就该换 MAVExplorer 上场了。
3.2 MAVExplorer 命令行工具:批量处理的利器
MAVExplorer 是 ArduPilot 官方提供的命令行日志分析工具。它没有图形界面,但功能非常强大。你想想看,如果你有 100 个日志文件,要找出所有出现过 "EKF 故障" 的飞行,用 Mission Planner 一个个打开看,得累死。用 MAVExplorer,一条命令搞定。
安装方式:MAVExplorer 是 MAVProxy 工具集的一部分。安装 MAVProxy 后,在终端输入 mavlogdump.py 或 mavexplorer.py 即可使用。
常用命令示例:
# 查看日志文件头信息
mavlogdump.py --types MSG flight.bin
# 提取所有 GPS 数据
mavlogdump.py --types GPS flight.bin
# 统计各消息类型的出现次数
mavlogdump.py --types GPS,ATT,IMU flight.bin | wc -l
# 导出为 CSV 格式
mavlogdump.py --types GPS --format csv flight.bin > gps_data.csv
# 条件过滤:只显示 HDOP 小于 1.0 的 GPS 数据
mavlogdump.py --types GPS --condition "GPS.HDOP < 1.0" flight.bin
实战场景:有一次我排查一架飞机的偏航问题,需要对比左右两个 GPS 接收机的航向数据。用 MAVExplorer 分别提取两个 GPS 的日志,然后写了个小脚本计算差值,5 分钟就定位到是其中一个 GPS 的磁偏角设置错了。如果用 Mission Planner 手动对比,至少得半小时。
MAVExplorer 的交互模式:
除了命令行模式,MAVExplorer 还支持交互式分析。输入 mavexplorer.py flight.bin 后,你会进入一个类似 Python 的交互环境。在这里你可以:
- 用
graph ATT.Roll直接画曲线 - 用
module load graph加载图形模块 - 用
set condition "ATT.Roll > 30"设置过滤条件
3.3 pyulog 库:Python 开发者的瑞士军刀
pyulog 是 ArduPilot 官方维护的 Python 库,专门用来解析 ulog 格式的日志文件。注意,它主要支持 PX4 的 ulog 格式,但也能处理部分 ArduPilot 的日志。如果你要做深度定制分析,或者想把日志分析集成到自己的系统里,pyulog 是首选。
安装:
pip install pyulog
基本使用示例:
from pyulog import ULog
# 加载日志文件
ulog = ULog('flight.ulg')
# 获取所有消息类型
data_list = ulog.data_list
for d in data_list:
print(d.name)
# 提取特定消息的数据
gps_data = ulog.get_dataset('vehicle_gps_position')
print(gps_data.data['lat']) # 打印纬度数据
# 转换为 Pandas DataFrame
import pandas as pd
df = pd.DataFrame(gps_data.data)
print(df.head())
我的经验:pyulog 最实用的功能是能把日志数据直接转成 Pandas DataFrame。一旦进了 DataFrame,你就可以用 Python 的数据分析全家桶了——matplotlib 画图、scipy 做滤波、sklearn 做异常检测。我做过一个项目,用 pyulog 批量读取 500 个日志,自动计算每次飞行的振动水平,然后筛选出振动异常的架次。这种批量处理能力,图形工具是做不到的。
pyulog 核心 API 速览:
| API | 功能 | 返回值 |
|---|---|---|
ULog(filepath) |
加载日志文件 | ULog 对象 |
ulog.data_list |
获取所有消息类型列表 | 列表,每个元素包含 name, data 等属性 |
ulog.get_dataset(name) |
按名称提取数据集 | Dataset 对象,包含 data 字典 |
ulog.get_start_timestamp() |
获取日志起始时间戳 | 微秒级整数 |
dataset.data['field_name'] |
获取特定字段的数据数组 | numpy 数组 |
避坑指南:我曾经踩过一个坑——pyulog 默认把时间戳存为微秒整数,直接画图的话 X 轴会显示一长串数字。记得除以 1e6 转成秒,或者用 pd.to_datetime() 转成时间格式。另外,ulog 和 ArduPilot 的 bin 日志格式不同,pyulog 不能直接解析 .bin 文件,需要用 mavlogdump.py 先转成 .ulg 格式。
3.4 DroneLogViewer 云端分析平台
DroneLogViewer 是 Auterion 公司推出的云端日志分析平台。它最大的优势是——你不需要在本地装任何软件,打开浏览器就能用。对于团队协作来说,这简直是神器。
核心功能:
- 拖拽上传:直接把 .bin 或 .ulg 文件拖到浏览器窗口,自动解析。
- 自动诊断:上传后平台会自动跑一遍健康检查,标出潜在问题。
- 3D 飞行回放:在地图上回放飞行轨迹,比 Mission Planner 的 2D 视图更直观。
- 团队共享:生成分享链接,团队成员可以直接查看分析结果。
使用场景对比:
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 现场快速排查 | Mission Planner | 无需网络,本地加载快 |
| 批量数据挖掘 | MAVExplorer / pyulog | 脚本化处理,效率高 |
| 团队远程协作 | DroneLogViewer | 云端共享,无需传递文件 |
| 深度算法开发 | pyulog + Pandas | 灵活定制,生态丰富 |
我的建议:别只盯着一个工具用。我个人的工作流是这样的——现场测试时用 Mission Planner 快速看一眼有没有明显异常;回到办公室用 MAVExplorer 批量提取关键数据;遇到需要深入分析的问题,用 pyulog 写脚本做定制化处理;最后把分析结果上传到 DroneLogViewer 生成报告,分享给团队。这套组合拳打下来,基本没有搞不定的日志分析任务。