跳至内容

记录

系统记录仪 能够记录任何 ORB 主题,并包含所有字段。所有必要的信息都由 .msg 文件,因此只需指定主题名称。可选的时间间隔参数可指定某个主题的最大记录速率。主题的所有现有实例都会被记录。

输出日志格式为 ULog.

使用方法

默认情况下,日志记录在上膛时自动启动,在撤膛时自动停止。每次上膛都会在 SD 卡上创建一个新的日志文件。要显示当前状态,请使用 记录仪状态 在控制台上。如果要立即开始记录日志,请使用 记录仪开启.这将覆盖上膛状态,如同系统已上膛。 记录仪关闭 可以撤销。

如果日志记录因写入错误或达到 最大文件大小此时,PX4 将自动重新启动新文件的记录。

有关所有支持的记录仪命令和参数的列表,请使用

记录仪帮助

配置

默认情况下,日志系统被配置为为以下目的收集合理的日志 飞行报告飞行回顾.

还可以使用 标清记录 参数。您最有可能更改的参数如下。

参数说明
SDLOG_MODE记录模式。定义记录开始和停止的时间。
- -1:禁用日志记录。
- 0:记录上膛直至撤膛(默认)。
- 1:记录从启动到解除的整个过程。
- 2:从启动到关闭的日志。
- 3:日志基于 AUX1 RC 通道.
- 4:从首次上膛到关闭的日志。
SDLOG_PROFILE记录配置文件。使用此配置可启用不常用的记录/分析(如 EKF2 重放、PID & 的高速率记录、滤波器调整参数、热温度校准)。
SDLOG_MISSION创建很小的附加 "任务日志"。
该日志可以 飞行回顾但是,当您需要少量日志来进行地理标记或符合法规要求时,它还是很有用的。

针对特定情况的有用设置:

记录仪模块

开发人员 可以通过 记录仪 模块。例如,这样就可以记录自己的 uORB 主题。

SD 卡配置

另外,还可以通过 SD 卡上的文件自定义已记录主题列表。创建文件 etc/logging/logger_topics.txt 卡上的主题列表(对于 SITL,它是 build/px4_sitl_default/rootfs/fs/microsd/etc/logging/logger_topics.txt):

平实
<topic_name> <interval> <instance>;

间隔>; 是可选项,如果指定,则定义此主题两条记录信息之间的最小间隔(毫秒)。如果未指定,则以全速记录主题。

实例>; 是可选项,如果指定,则定义要记录的实例。如果未指定,则会记录主题的所有实例。要指定 实例>;, 间隔>; 必须指定。可以设置为 0 以全速记录

该文件中的主题将取代所有默认的日志主题。

例子 :

平实
传感器加速 0 0
传感器_accel 100 1
传感器_gyro 200
sensor_mag 200 1

此配置将以全速记录 sensor_accel 0,以 10Hz 记录 sensor_accel 1,以 5Hz 记录所有 sensor_gyro 实例,以 5Hz 记录 sensor_mag 1。

脚本

有几个脚本可以分析和转换日志文件,在 pyulog 存放处。

文件大小限制

最大文件大小取决于文件系统和操作系统。目前,NuttX 的文件大小限制在 2GB 左右。

辍学

记录中断是不可取的,有几个因素会影响中断的数量:

  • 我们测试的大多数 SD 卡每分钟都会出现多次暂停。这表现为在写入命令过程中出现几百毫秒的延迟。如果写入缓冲区在此期间填满,就会导致掉线。这种影响取决于 SD 卡(见下文)。
  • 格式化 SD 卡有助于防止掉线。
  • 增加日志缓冲区会有帮助。
  • 降低选定主题的记录率,或删除不需要记录的主题 (info.py <文件>; 在这方面很有用)。

SD 卡

NuttX 支持的 SD 卡最大容量为 32GB(SD 存储卡规格 2.0 版)。卡 闪迪至尊 U3 32GB三星 EVO Plus 32 是众所周知的可靠卡(不会出现写入时间峰值,因此几乎不会掉线)。

下表显示了 平均连续写入速度[KB/秒] / 每个数据块的最长写入时间(平均)[毫秒] 适用于 F4- (Pixracer)、F7- 和 H7 飞行控制器。

SD 卡F4F7H7
闪迪至尊 U3 32GB1500 / 151800/102900/8
三星 EVO Plus 32GB1700/10-601800/10-601900/9-60
闪迪至尊高速 10 类 8GB348 / 40?/??/?
闪迪 4 类 8GB212 / 60?/??/?
闪迪 10 类 32 GB(高耐用视频监控卡)331 / 220?/??/?
雷克沙 U1(10 级),16GB 高性能209 / 150?/??/?
闪迪至尊 PLUS Class 10 16GB196 /500?/??/?
闪迪 Pixtor Class 10 16GB334 / 250?/??/?
闪迪至尊 PLUS Class 10 32GB332 / 150?/??/?

默认主题的记录带宽约为 50 KB/s,几乎所有 SD 卡的平均连续写入速度都能满足这一要求。

比平均写入速度更重要的是每个数据块(4 KB)或每个数据块的最大写入时间的峰值(或一般较高的值 fsync 时间,因为较长的写入时间意味着需要较大的日志缓冲区来避免掉线。

PX4 在 F7/H7 上使用了更大的缓冲区和读取缓存,足以弥补许多性能较差显卡的峰值。不过,如果您的显卡有 fsync 或写入持续时间长达数百毫秒时,就不宜与 PX4 一起使用。您可以通过运行 sd_bench 应进行更多的迭代(约 100 次即可)。

sd_bench -r 100

这定义了最小缓冲区大小:该最大值越大,日志缓冲区就越大,以避免掉线。PX4 在 F7/H7 上使用更大的缓冲区和读取缓存来弥补其中的一些问题。

信息

如果您对某张卡有疑虑,可以运行上述测试,并将结果报告给 https://github.com/PX4/PX4-Autopilot/issues/4634.

日志流

传统的日志记录方式是在 FMU 上使用 SD 卡,这种方式目前仍完全支持。不过,还有一种替代方法,即日志流,可通过 MAVLink 发送相同的日志数据。例如,在 FMU 没有 SD 卡插槽的情况下(如 Intel® Aero Ready to Fly Drone),或者只是为了避免使用 SD 卡,就可以使用这种方法。两种方法可同时独立使用。

要求链接至少提供 ~50KB/s 的速度,例如 WiFi 链接。而且同一时间只能有一个客户端请求日志流。连接不需要很可靠,该协议可以处理掉线问题。

有不同的客户端支持 ulog 流媒体:

  • mavlink_ulog_streaming.py PX4-Autopilot/Tools 中的脚本。
  • QGroundControl: QGC 日志流
  • MAVGCL

诊断

  • 如果日志流没有启动,请确保 记录仪 运行(见上文),并检查启动时的控制台输出。

  • 如果还是不行,请确保使用 MAVLink 2。通过设置 MAV_PROTO_VER 至 2.

  • 日志流最多使用所配置 MAVLink 速率的 70% (-r 参数)。如果需要更多,则会删除信息。使用 mavlink 状态 (本例中使用的是 1.8%):

    实例 #0:
            GCS 心跳:  160955 我们
            多点连接 chan: #0
            类型:           通用 链接 广播
            流动 控制:   关闭
            费率
            tx: 95.781 千字节/秒
            txerr: 0.000 千字节/秒
            rx: 0.021 千字节/秒
            费率 多: 1.000
            ULog 率: 1.8% 最大 70.0%
            旷达 命令:
            MAVLink 版本: 2
            运输 协议: UDP (14556)

    还要确保 txerr 如果上升,要么是 NuttX 发送缓冲区太小,要么是物理链路饱和,要么是硬件处理数据的速度太慢。