- 嵌入式
- 物联网
- 机器人
- 自动驾驶
- 智能硬件
【免费下载链接】PX4-Autopilot
PX4 Autopilot Software
导读
PX4 的统计飞行日志分析(Statistical Flight Log Analysis)建立在 Flight Review 托管的大规模公开 ULog 数据集之上:开发者可以利用这些真实飞行日志开展统计研究、机器学习训练、算法回归测试与故障模式分析。本文以官方统计日志分析文档为主线,完整介绍公共日志数据集的构成与许可、基于download_logs.py的批量下载工作流、基于pyulog的日志解析与二次开发方法,并结合本仓库(PX4-Autopilot)中的上传、下载与 EKF 分析脚本给出可直接落地的实践方案。
统计飞行日志分析:为什么要用公开日志
单次飞行的日志分析解决的是"这一架次飞得如何"的问题,而**统计性(statistical)**日志分析解决的是"一整批飞行数据的规律是什么"的问题。后者的典型场景包括:
- 对比不同机架、不同固件版本的振动分布,评估硬件与滤波配置的整体表现;
- 统计 EKF 估计器在大量飞行中的传感器融合失败率,定位共性问题;
- 为机器学习模型准备带标签的真实飞行样本(如正常/异常分类);
- 在固件发布前,用历史日志批量回归验证控制与估计性能。
围绕这一目标,PX4 官方提供了一条完整的工具链:Flight Review 在线平台负责托管与展示日志,download_logs.py负责批量获取日志,pyulog负责程序化解析日志,而本仓库中的 Tools/ecl_ekf/analyse_logdata_ekf.py 等脚本则展示了基于这些能力构建具体分析流水线的完整范例。
Flight Review 公共日志数据集
Flight Review 在线工具 是 PX4 官方的网页版日志分析与分享平台,它同时托管了一个大型公开日志库,供统计分析和机器学习等用途免费取用。这部分正是 统计飞行日志分析文档 的核心内容。
该数据集的覆盖范围包括多种维度:
| 维度 | 说明 |
|---|---|
| 机型(vehicle types) | 多旋翼、固定翼、垂直起降(VTOL)、无人车等不同机型 |
| PX4 版本 | 稳定版本以及开发版本(main 分支中间产物) |
| 硬件板卡(boards) | 不同飞控硬件平台上录制的日志 |
| 飞行模式 | 手动、自稳、任务、返航等不同模式下的数据 |
所有日志通过 Flight Review 的浏览页面按时间倒序提供访问,并采用CC-BY PX4(知识共享署名 4.0)许可发布,这意味着在保留署名的情况下,可以自由复制、分发、改编用于统计研究与再发布。数据集的来源与贡献机制是闭环的:使用者既可以通过网页界面上传日志,也可以使用本仓库中的 Tools/upload_log.py 脚本批量上传.ulg文件到 Flight Review 服务器(脚本支持--type flightreport|personal、--public、--description、--rating等参数,上传成功后返回可分享的分析报告 URL),从而不断扩充这个公共数据集。
批量下载日志:download_logs.py
对于统计研究而言,手动逐个下载日志是不可行的。Flight Review 项目提供了专用的download_logs.py批量下载脚本(该脚本维护在 flight_review 代码仓库中,与 PX4-Autopilot 仓库是不同项目),它具备以下关键能力:
- 按属性过滤:支持按飞行模式、机架名称(airframe name)或机架类型(airframe type)等属性筛选日志,只下载你关心的子集;
- 完整参数列表:使用
--help标志即可查看脚本支持的全部过滤与输出参数; - 最新优先:默认从最新上传的日志开始下载,便于始终拿到最新固件版本的数据;
- 断点续传:下载过程可以随时中断,之后重新运行脚本即可从断点继续,无需从头开始。
一个典型的工作流是:先用--help确认可用的过滤参数,构造一条只包含"某型号多旋翼 + 某 PX4 版本"的下载命令,把数 GB 的公开日志拉取到本地,再交给下面的解析工具链处理。
补充说明:本仓库中的 Tools/log_encryption/download_logs.py 是另一个方向的日志获取工具——它通过 MAVLink 协议(
LOG_REQUEST_LIST/LOG_REQUEST_DATA消息)直接从飞行器或 GCS 下载机载日志,并支持自动识别加密日志(.ulge)。如果你的目标是"从自己的飞机上批量取日志",可以参考它;如果目标是"从公共数据集批量取日志",则使用 Flight Review 的download_logs.py。
用 pyulog 解析 ULog
拿到日志后,需要程序化解析才能做统计分析。官方推荐的解析库是pyulog——一个用于读取 ULog 文件的 Python 包,同时提供一组命令行脚本用于提取、展示和转换 ULog 信息。详细介绍见 飞行日志分析。
核心命令行脚本
pyulog 安装后会注册为系统级命令(前提是本机装有 Python),所有脚本都支持-h查看用法:
| 脚本 | 用途 |
|---|---|
ulog_info | 显示 ULog 文件的基本信息(时长、丢弃点、消息与数据点统计) |
ulog_messages | 显示日志中记录的调试与状态消息 |
ulog_params | 从 ULog 文件中提取参数 |
ulog2csv | 将 ULog 转换为(多个)CSV 文件 |
ulog2kml | 将 ULog 转换为(多个)KML 文件 |
例如查看一条日志的信息:
$ ulog_info sample.ulg Logging start time: 0:01:52, duration: 0:01:08 Dropouts: count: 4, total duration: 0.1 s, max: 62 ms, mean: 29 ms Info Messages: sys_name: PX4 time_ref_utc: 0 ver_hw: AUAX_X21 ver_sw: fd483321a5cf50ead91164356d15aa474643aa73 Name (multi id, message size in bytes) number of data points, total bytes actuator_controls_0 (0, 48) 3269 156912 actuator_outputs (0, 76) 1311 99636 commander_state (0, 9) 678 6102 control_state (0, 122) 3268 398696 cpuload (0, 16) 69 1104 ekf2_innovations (0, 140) 3271 457940 estimator_status (0, 309) 1311 405099 sensor_combined (0, 72) 17070 1229040 sensor_preflight (0, 16) 17072 273152 telemetry_status (0, 36) 70 2520 vehicle_attitude (0, 36) 6461 232596 vehicle_attitude_setpoint (0, 55) 3272 179960 vehicle_local_position (0, 123) 678 83394 vehicle_rates_setpoint (0, 24) 6448 154752 vehicle_status (0, 45) 294 13230Dropouts一行直接给出日志记录过程中产生的数据丢失统计(次数、总时长、最大/最长的单次间隔),这正是 Flight Review 使用指南 中"采样规律性(Sampling Regularity)"图表所关注的指标来源。ver_hw/ver_sw字段则标明了录制日志的硬件与固件版本——当你要按"PX4 版本"过滤数据集做统计对比时,这个字段就是关键依据。
在 Python 中编程使用
pyulog 同样可以作为库导入使用,本仓库中的 EKF 分析工具就把它作为基础依赖。例如 Tools/ecl_ekf/analyse_logdata_ekf.py 顶部直接from pyulog import ULog,随后通过ulog.get_dataset('estimator_states', multi_instance).data等方式读取 EKF 估计器状态、状态标志与创新量等数据集,配合起飞检测器(InAirDetector)与指标计算模块,批量生成 EKF 健康度检查报告。这说明:公共日志数据集 + pyulog + 自研分析脚本可以组成可复用的统计流水线,对成千上万条日志做统一口径的自动评估。
从统计到结论:结合 Flight Review 图表解读
批量统计的价值最终要落到"如何解读指标"。当统计结果指出某类机架振动偏高或 EKF 融合异常时,可以回到 Log Analysis using Flight Review 中逐图定位根因:
- Actuator Controls FFT 与 Acceleration Power Spectral Density:用于评估振动水平与滤波配置,健康的频谱应在低频段之外保持平坦;
- Raw Acceleration:悬停或慢速飞行时 z 轴波形不应与 x/y 轴波形交叠;
- Estimator Watchdog:应恒为 0,非零表示估计器检测到传感器问题(如磁罗盘干扰);
- Sampling Regularity:丢包过多说明日志缓冲区过小、记录速率过高或 SD 卡质量不足,这直接影响统计数据集的可用性。
需要注意的是,公共日志来自大量不同用户与硬件配置,统计结论的边界条件(机型、版本、板卡、飞行模式)必须在报告中显式标注,才能保证可复现与可比对。
延伸阅读
- 飞行日志分析(工具总览):包含 Data Comets、FlightPlot、Flight Review、PlotJuggler、pyulog、PX4Tools 等全量工具对比;
- Log Analysis using Flight Review:Flight Review 各图表的逐项解读与问题定位方法;
- PlotJuggler 日志分析:桌面端深度可视化分析;
- ULog 文件格式:理解日志内部结构,便于自定义解析;
- 日志记录(Logging):了解 SDLOG_PROFILE 等记录配置,保证数据质量;
- Tools/upload_log.py:向公共数据集贡献日志的官方脚本;
- Tools/log_encryption/download_logs.py:MAVLink 方式批量下载机载日志的参考实现。
- 嵌入式
- 物联网
- 机器人
- 自动驾驶
- 智能硬件
【免费下载链接】PX4-Autopilot
PX4 Autopilot Software
相关推荐
Flight Review 飞行日志分析平台深度解析
Flight Review 飞行日志分析平台深度解析 Flight Review 是一款基于网页的专业飞行日志分析工具,专门用于处理和分析无人机飞行数据。该项目
后端数据分析数据可视化Notablog核心功能解析:Notion表格转静态博客的终极解决方案
Notablog核心功能解析:Notion表格转静态博客的终极解决方案 Notablog是一款基于Node.js开发的开源工具,能够将Notion表格无缝转换为
图像转文本只要3分钟:RapidOCR OCR 完整上手指南
图像转文本只要3分钟:RapidOCR OCR 完整上手指南 RapidOCR 是一款免费的开源 OCR 工具包,用一行代码就能把图片里的文字提取出来,支持 1
人工智能计算机视觉OCR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考