text: (window.webpackJsonp=window.webpackJsonp||[]).push([[161],{1146:function(t,e,a){t.exports=a.p+"assets/img/flight-review-example.fe13792d.png"},1147:function(t,e,a){t.exports=a.p+"assets/img/pyflightanalysis.9b49333e.png"},1148:function(t,e,a){t.exports=a.p+"assets/img/flightplot_0.2.16.47e04e2d.png"},1149:function(t,e,a){t.exports=a.p+"assets/img/px4tools.14f88879.png"},1150:function(t,e,a){t.exports=a.p+"assets/img/time_series.3ae56801.png"},1151:function(t,e,a){t.exports=a.p+"assets/img/plotjuggler.34dfa05a.png"},1152:function(t,e,a){t.exports=a.p+"assets/img/data_comets_overview.6b3e3597.gif"},2626:function(t,e,a){"use strict";a.r(e);var r=a(18),o=Object(r.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"飞行日志分析"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#飞行日志分析"}},[t._v("#")]),t._v(" 飞行日志分析")]),t._v(" "),r("p",[t._v("本主题概述了用于 PX4 飞行日志分析的方法和软件包。")]),t._v(" "),r("h2",{attrs:{id:"飞行报告"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#飞行报告"}},[t._v("#")]),t._v(" 飞行报告")]),t._v(" "),r("p",[r("RouterLink",{attrs:{to:"/zh/getting_started/flight_reporting.html"}},[t._v("飞行报告")]),t._v(" 说明了如何下载日志并与开发团队报告/讨论有关飞行的问题。")],1),t._v(" "),r("h2",{attrs:{id:"结构化分析"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#结构化分析"}},[t._v("#")]),t._v(" 结构化分析")]),t._v(" "),r("p",[t._v("在分析飞行日志之前，重要的是建立它的上下文：")]),t._v(" "),r("ul",[r("li",[t._v("如果分析是在故障发生之后进行的，那么日志是捕捉到了这次故障还是在半空中停止了记录呢？")]),t._v(" "),r("li",[t._v("所有的控制器都跟踪到了它的设定值吗？ 最简单的方法是将的横滚和俯仰的角速度与它们的设定值进行比较。")]),t._v(" "),r("li",[t._v("传感器数据看起来有效吗？ 是否有非常强的震动（一个合理的判断强烈震动的阈值是所有的峰峰值是否超过 2-3m/s/s）。")]),t._v(" "),r("li",[t._v("如果根本原因不针对于特定车辆，请确保在 "),r("a",{attrs:{href:"https://github.com/PX4/PX4-Autopilot/issues/new",target:"_blank",rel:"noopener noreferrer"}},[t._v("PX4问题跟踪器"),r("OutboundLink")],1),t._v(" 的报告中有日志文件的链接（以及视频如果有的话）。")])]),t._v(" "),r("h2",{attrs:{id:"排除电力故障"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#排除电力故障"}},[t._v("#")]),t._v(" 排除电力故障")]),t._v(" "),r("p",[t._v("如果日志文件在半空中结束了，可能有两个主要原因：电源故障 "),r("em",[t._v("或")]),t._v(" 操作系统的硬故障。")]),t._v(" "),r("p",[t._v("在基于 "),r("a",{attrs:{href:"http://www.st.com/en/microcontrollers/stm32-32-bit-arm-cortex-mcus.html?querycriteria=productId=SC1169",target:"_blank",rel:"noopener noreferrer"}},[t._v("STM32系列"),r("OutboundLink")],1),t._v(" 的自动驾驶仪上，会将操作系统的硬故障记录到SD卡上。 它位于SD卡的顶层目录且被命名为 "),r("em",[t._v("fault_date.log")]),t._v(" 比如 "),r("strong",[t._v("fault_2017_04_03_00_26_05.log")]),t._v("。 如果飞行日志突然终止，请一直检查此文件是否存在。")]),t._v(" "),r("h2",{attrs:{id:"分析工具"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#分析工具"}},[t._v("#")]),t._v(" 分析工具")]),t._v(" "),r("h3",{attrs:{id:"flight-review-在线工具"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#flight-review-在线工具"}},[t._v("#")]),t._v(" Flight Review（在线工具）")]),t._v(" "),r("p",[r("a",{attrs:{href:"http://logs.px4.io",target:"_blank",rel:"noopener noreferrer"}},[t._v("Flight Review"),r("OutboundLink")],1),t._v(" 是 "),r("em",[t._v("Log Muncher")]),t._v(" 的继承者。 他能与新的 "),r("RouterLink",{attrs:{to:"/zh/dev_log/ulog_file_format.html"}},[t._v("ULog")]),t._v(" 日志格式结合使用。")],1),t._v(" "),r("p",[t._v("主要特性：")]),t._v(" "),r("ul",[r("li",[t._v("基于 web，非常适合终端用户。")]),t._v(" "),r("li",[t._v("用户可以上传、下载、并且与他人分享报告。")]),t._v(" "),r("li",[t._v("交互式绘图。")])]),t._v(" "),r("p",[r("img",{attrs:{src:a(1146),alt:"Flight Review Charts"}})]),t._v(" "),r("p",[t._v("关于介绍，请参阅 "),r("RouterLink",{attrs:{to:"/zh/log/flight_review.html"}},[t._v("Log Analysis using Flight Review")]),t._v("。")],1),t._v(" "),r("h3",{attrs:{id:"pyulog"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pyulog"}},[t._v("#")]),t._v(" pyulog")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/PX4/pyulog",target:"_blank",rel:"noopener noreferrer"}},[t._v("pyulog"),r("OutboundLink")],1),t._v(" 是用于分析 ulog 文件的 python 包，以及一组用于提取/显示 ulog 信息并转换为其他文件格式的命令行脚本。")]),t._v(" "),r("p",[t._v("主要特性：")]),t._v(" "),r("ul",[r("li",[t._v("用于分析 ulog 文件的 python 库。 许多其他 ULog 分析和可视化工具使用的基本库。")]),t._v(" "),r("li",[t._v("提取/显示 ulog 信息的脚本：\n"),r("ul",[r("li",[r("em",[t._v("ulog_info")]),t._v(": 显示 ulog 文件中的信息。")]),t._v(" "),r("li",[r("em",[t._v("ulog_messages")]),t._v(": 显示从 ulog 文件中加载的日志报文。")]),t._v(" "),r("li",[r("em",[t._v("ulog_params")]),t._v(": 从 ulog 文件中提取参数。")])])]),t._v(" "),r("li",[t._v("转换 ulog 文件为其他格式的脚本：\n"),r("ul",[r("li",[r("em",[t._v("ulog2csv")]),t._v(" : 转换 ulog 为 CSV 文件（多个）。")]),t._v(" "),r("li",[r("em",[t._v("ulog2kml")]),t._v(" : 转换 ulog 为 KML 文件（多个）。")])])])]),t._v(" "),r("p",[t._v("所有脚本都作为系统范围的应用程序安装 (例如，在命令行上调用它们-前提是安装了 Python)，并支持 "),r("code",[t._v("-h")]),t._v(" 标志来获取使用说明。 例如：")]),t._v(" "),r("div",{staticClass:"language- extra-class"},[r("pre",[r("code",[t._v("$ ulog_info -h\nusage: ulog_info [-h] [-v] file.ulg\n\nDisplay information from an ULog file\n\npositional arguments:\n  file.ulg       ULog 输入文件\n\noptional arguments:\n  -h, --help     显示这个帮助信息然后退出\n  -v, --verbose  详细输出\n")])])]),r("p",[t._v("下面我们将看到使用 "),r("em",[t._v("ulog_info")]),t._v(" 从示例文件导出的信息类型。")]),t._v(" "),r("div",{staticClass:"language- extra-class"},[r("pre",[r("code",[t._v("$ ulog_info sample.ulg\nLogging start time: 0:01:52, duration: 0:01:08\nDropouts: count: 4, total duration: 0.1 s, max: 62 ms, mean: 29 ms\nInfo Messages:\n sys_name: PX4\n time_ref_utc: 0\n ver_hw: AUAV_X21\n ver_sw: fd483321a5cf50ead91164356d15aa474643aa73\n\nName (multi id, message size in bytes)    number of data points, total bytes\n actuator_controls_0 (0, 48)                 3269     156912\n actuator_outputs (0, 76)                    1311      99636\n commander_state (0, 9)                       678       6102\n control_state (0, 122)                      3268     398696\n cpuload (0, 16)                               69       1104\n ekf2_innovations (0, 140)                   3271     457940\n estimator_status (0, 309)                   1311     405099\n sensor_combined (0, 72)                    17070    1229040\n sensor_preflight (0, 16)                   17072     273152\n telemetry_status (0, 36)                      70       2520\n vehicle_attitude (0, 36)                    6461     232596\n vehicle_attitude_setpoint (0, 55)           3272     179960\n vehicle_local_position (0, 123)              678      83394\n vehicle_rates_setpoint (0, 24)              6448     154752\n vehicle_status (0, 45)                       294      13230\n")])])]),r("h3",{attrs:{id:"pyflightanalysis"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pyflightanalysis"}},[t._v("#")]),t._v(" pyFlightAnalysis")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/Marxlp/pyFlightAnalysis",target:"_blank",rel:"noopener noreferrer"}},[t._v("pyFlightAnalysis"),r("OutboundLink")],1),t._v(" 是一个跨平台的 PX4 飞行日志 (ulog) 可视化分析工具，灵感来源于 "),r("a",{attrs:{href:"#flightplot"}},[t._v("FlightPlot")]),t._v("。")]),t._v(" "),r("p",[t._v("主要特性：")]),t._v(" "),r("ul",[r("li",[t._v("用于显示数据的动态筛选器")]),t._v(" "),r("li",[t._v("无人机姿态和位置三维可视化")]),t._v(" "),r("li",[t._v("使用 pyqtgraph 的 ROI (感兴趣的区域) 轻松回放")]),t._v(" "),r("li",[t._v("基于 Python 的，跨平台的。")])]),t._v(" "),r("p",[r("img",{attrs:{src:a(1147),alt:"pyFlightAnalysis 1.0.1b1"}})]),t._v(" "),r("p",[r("span",{attrs:{id:"flightplot"}})]),t._v(" "),r("h3",{attrs:{id:"flightplot"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#flightplot"}},[t._v("#")]),t._v(" FlightPlot")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/PX4/FlightPlot",target:"_blank",rel:"noopener noreferrer"}},[t._v("FlightPlot"),r("OutboundLink")],1),t._v(" 是一个基于桌面的日志分析工具。 可以从 "),r("a",{attrs:{href:"https://github.com/PX4/FlightPlot/releases",target:"_blank",rel:"noopener noreferrer"}},[t._v("FlightPlot Downloads"),r("OutboundLink")],1),t._v(" (Linux, MacOS, Windows) 下载。")]),t._v(" "),r("p",[t._v("主要特性：")]),t._v(" "),r("ul",[r("li",[t._v("基于 Java 的，跨平台的")]),t._v(" "),r("li",[t._v("直观的图形用户界面，不需要编程知识")]),t._v(" "),r("li",[t._v("支持新的和旧的 PX4 日志格式 (比如 .px4log，.ulg，.bin)")]),t._v(" "),r("li",[t._v("允许保存图形为图像")])]),t._v(" "),r("p",[r("img",{attrs:{src:a(1148),alt:"FlightPlot Charts"}})]),t._v(" "),r("h3",{attrs:{id:"px4tools"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#px4tools"}},[t._v("#")]),t._v(" PX4Tools")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/dronecrew/px4tools",target:"_blank",rel:"noopener noreferrer"}},[t._v("PX4Tools"),r("OutboundLink")],1),t._v(" 是一个用 Python 编写的 PX4 autopilot 的日志分析工具箱。 推荐的安装过程是使用 "),r("a",{attrs:{href:"https://conda.io/docs/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("anaconda3"),r("OutboundLink")],1),t._v("。 详见 "),r("a",{attrs:{href:"https://github.com/dronecrew/px4tools",target:"_blank",rel:"noopener noreferrer"}},[t._v("px4tools github 页面"),r("OutboundLink")],1),t._v("。")]),t._v(" "),r("p",[t._v("主要特性：")]),t._v(" "),r("ul",[r("li",[t._v("易于分享，用户可以查看笔记本电脑上的 Github (比如：[https://github.com/jgoppert/lpe-analysis/blob/master/15-09-30%20Kabir%20Log.ipynb](https://github.com/jgoppert/lpe-analysis/blob/master/15-09-30 Kabir Log.ipynb))")]),t._v(" "),r("li",[t._v("基于Python的，跨平台的，与 anaconda2 和 anaconda3 一起使用。")]),t._v(" "),r("li",[t._v("使用 iPython/jupyter notebooks 可以方便地共享分析")]),t._v(" "),r("li",[t._v("高级绘图功能，允许进行详细分析")])]),t._v(" "),r("p",[r("img",{attrs:{src:a(1149),alt:"PX4Tools-based analysis"}})]),t._v(" "),r("h3",{attrs:{id:"mavgcl"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#mavgcl"}},[t._v("#")]),t._v(" MAVGCL")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/ecmnet/MAVGCL",target:"_blank",rel:"noopener noreferrer"}},[t._v(" MAVGCL "),r("OutboundLink")],1),t._v("是 PX4 在飞行中的日志分析器。 它还可以与下载的 uLog 文件一起在离线模式下使用。")]),t._v(" "),r("p",[t._v("主要特性：")]),t._v(" "),r("ul",[r("li",[t._v("基于 MAVLink 消息或 MAVLink 上 ULOG 数据的实时数据采集( 50 ms 采样，100 ms 滚动显示)")]),t._v(" "),r("li",[t._v("由消息( MAVLink 和 ULog) 和参数更改(仅 MAVLink) 注释的时间图")]),t._v(" "),r("li",[t._v("选定的关键指标的 XY 分析")]),t._v(" "),r("li",[t._v("3D 视图 (飞行器和观察者视角)")]),t._v(" "),r("li",[t._v("MAVLink inspector 面板(报告原始 MAVLink 消息)")]),t._v(" "),r("li",[t._v("离线模式：从 PX4Log/ULog 导入关键指标(通过 WiFi 从设备上获取文件或最后一次日志)")]),t._v(" "),r("li",[t._v("基于 Java 在 MacOS 和 Ubuntu 上运行。")]),t._v(" "),r("li",[t._v("更多……")])]),t._v(" "),r("p",[r("img",{attrs:{src:a(1150),alt:"MAVGCL"}})]),t._v(" "),r("h3",{attrs:{id:"plotjugler"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#plotjugler"}},[t._v("#")]),t._v(" PlotJugler")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/facontidavide/PlotJuggler",target:"_blank",rel:"noopener noreferrer"}},[t._v("PlotJugler"),r("OutboundLink")],1),t._v(" 是一个 Qt5 桌面应用程序 ，允许用户很容易地显示和分析以时间序列形式表示的数据。")]),t._v(" "),r("p",[t._v("它支持 2.1.4 版本以后的 "),r("strong",[t._v("Ulog 文件")]),t._v(" (.ulg)。")]),t._v(" "),r("p",[t._v("主要特性：")]),t._v(" "),r("ul",[r("li",[t._v("直观的拖放界面。")]),t._v(" "),r("li",[t._v("可以将数据安排在多个图表、选项卡或窗口中。")]),t._v(" "),r("li",[t._v("整理好数据后，将其保存到“布局”文件中，这样支持多次重新加载。")]),t._v(" "),r("li",[t._v("可以在 PlotJuggler 里处理你的数据，使用定制的“数据转换”。")])]),t._v(" "),r("p",[t._v("源代码和下载在 "),r("a",{attrs:{href:"https://github.com/facontidavide/PlotJuggler",target:"_blank",rel:"noopener noreferrer"}},[t._v("Github"),r("OutboundLink")],1),t._v("上。")]),t._v(" "),r("p",[r("img",{attrs:{src:a(1151),alt:"PlotJugler"}})]),t._v(" "),r("h3",{attrs:{id:"data-comets"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#data-comets"}},[t._v("#")]),t._v(" Data Comets")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/dsaffo/DataComets",target:"_blank",rel:"noopener noreferrer"}},[t._v("Data Comets"),r("OutboundLink")],1),t._v(" is a interactive PX4 flight log analysis tool that allows you to encode flight data onto the flight path, filter and brush the data by time - and much more!")]),t._v(" "),r("p",[t._v("You can use the online version of the tool for small log files (< 32Mb), or run it locally in order to analyze longer flights.")]),t._v(" "),r("p",[r("img",{attrs:{src:a(1152),alt:"Data Comets"}})])])}),[],!1,null,null,null);e.default=o.exports}}]);