# 记录
系统记录仪 能够记录任何 ORB 主题,并包含所有字段。所有必要的信息都由 .msg
文件,因此只需指定主题名称。可选的时间间隔参数可指定某个主题的最大记录速率。主题的所有现有实例都会被记录。
输出日志格式为 ULog.
# 使用方法
默认情况下,日志记录在上膛时自动启动,在撤膛时自动停止。每次上膛都会在 SD 卡上创建一个新的日志文件。要显示当前状态,请使用 记录仪状态
在控制台上。如果要立即开始记录日志,请使用 记录仪开启
.这将覆盖上膛状态,如同系统已上膛。
记录仪关闭
可以撤销。
如果日志记录因写入错误或达到 最大文件大小此时,PX4 将自动重新启动新文件的记录。
有关所有支持的记录仪命令和参数的列表,请使用
记录仪帮助
# 配置
默认情况下,日志系统被配置为为以下目的收集合理的日志 飞行报告 与 飞行回顾 (打开新窗口).
还可以使用 标清记录 参数。您最有可能更改的参数如下。
参数 | 说明 |
---|---|
SDLOG_MODE | 记录模式。定义记录开始和停止的时间。 - -1 :禁用日志记录。- 0 :记录上膛直至撤膛(默认)。- 1 :记录从启动到解除的整个过程。- 2 :从启动到关闭的日志。- 3 :日志基于 AUX1 RC 通道.- 4 :从首次上膛到关闭的日志。 |
SDLOG_PROFILE | 记录配置文件。使用此配置可启用不常用的记录/分析(如 EKF2 重放、PID & 的高速率记录、滤波器调整参数、热温度校准)。 |
SDLOG_MISSION | 创建很小的附加 "任务日志"。 该日志可以 不 与 飞行回顾但是,当您需要少量日志来进行地理标记或符合法规要求时,它还是很有用的。 |
针对特定情况的有用设置:
- 用于比较的传感器原始数据: SDLOG_MODE=1 和 sdlog_profile=64.
- 完全禁用日志记录: SDLOG_MODE=
-1
# 记录仪模块
开发人员 可以通过 记录仪 模块。例如,这样就可以记录自己的 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 以全速记录
该文件中的主题将取代所有默认的日志主题。
例子 :
传感器_accel 0 0 传感器_accel 100 1 传感器_gyro 200 传感器_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 卡
以下是不同 SD 卡的性能结果。测试是在 Pixracer 上进行的,结果同样适用于 Pixhawk。
备注
NuttX 支持的 SD 卡最大容量为 32GB(SD 存储卡规格 2.0 版)。
SD 卡 | 平均顺序写入速度 [KB/s] | 最大写入时间/块(平均)[毫秒] |
---|---|---|
闪迪至尊 U3 32GB | 461 | 15 |
闪迪至尊高速 10 类 8GB | 348 | 40 |
闪迪 4 类 8GB | 212 | 60 |
闪迪 10 类 32 GB(高耐用视频监控卡) | 331 | 220 |
雷克沙 U1(10 级),16GB 高性能 | 209 | 150 |
闪迪至尊 PLUS Class 10 16GB | 196 | 500 |
闪迪 Pixtor Class 10 16GB | 334 | 250 |
闪迪至尊 PLUS Class 10 32GB | 332 | 150 |
比平均写入速度更重要的是每个数据块的最大写入时间(4 KB)。这定义了最小缓冲区大小:最大值越大,日志缓冲区就越大,以避免出现掉线现象。默认主题的日志带宽约为 50 KB/s,所有 SD 卡都能满足这一要求。
到目前为止,我们所知道的最好的卡是 闪迪至尊 U3 32GB.推荐使用这种卡,因为它不会出现写入时间峰值(因此几乎不会掉线)。不同尺寸的存储卡可能效果相同,但性能通常不同。
您可以使用 sd_bench -r 50
并将结果报告给 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:
- MAVGCL (打开新窗口)
# 诊断
如果日志流没有启动,请确保
记录仪
运行(见上文),并检查启动时的控制台输出。如果还是不行,请确保使用 MAVLink 2。通过设置
MAV_PROTO_VER
至 2.日志流最多使用所配置 MAVLink 速率的 70% (
-r
参数)。如果需要更多,则会删除信息。使用mavlink 状态
(本例中使用的是 1.8%):instance #0: GCS heartbeat: 160955 us ago mavlink chan:#0 type:GENERIC LINK OR RADIO flow control:OFF rates: tx: 95.781 kB/s txerr: 0.000 kB/s rx:0.021 kB/s rate mult: 1.000 ULog rate:1.8% of max 70.0% accepting commands:是 MAVLink 版本:2 传输协议:UDP (14556)
还要确保
txerr
如果上升,要么是 NuttX 发送缓冲区太小,要么是物理链路饱和,要么是硬件处理数据的速度太慢。