sdlog2


官网英文原文地址:https://pixhawk.org//firmware//apps//sdlog2

sdlog2 这个应用程序是用来将FMU的飞行数据记录到SD卡中作为日志文件。该日志文件的格式与APM的二进制日志格式兼容,但是’’sdlog2’’ 使用强制消息’’TIME’’ 来写时间戳。

使用

每当 sdlog2 开始记录时, 会在 SD卡的 log 文件夹中创建一个新的目录。 如果设置了选项-t 同时有一个GPS的时间戳可用的话,文件夹的命名是基于当前的日期的(例如, log/2014-01-19)。否则,文件夹就会被命名为 ‘’sessXXX’’,这里XXX代表一个序列号。如果可能并且可以使用t选项的话,文件名的创建与使用当前时间命名的方式相似(例如,log/2014-01-19/19_37_52.bin) 否则这个文件就命名为 log.XXX.bin ,再次使用序列号。

根据给定的选项开始记录日志,要么当 sdlog2 应用程序启动,要么当系统解锁,或者通过mavlink命令。

  1. usage: sdlog2 {start|stop|status} [-r <log rate>] [-b <buffer size>] -e -a
  2. -r Log rate in Hz, 0 means unlimited rate
  3. -b Log buffer size in KBytes, default is 8
  4. -e Enable logging on app start (if not, can be started by command)
  5. -a Log only when armed (can be still overriden by command)
  6. -t Use GPS timestamps to create folder and file names

该日志记录的性能取决于所使用的microSD卡。建议使用高质量的SD卡以避免遗漏数据。 虽说不会对飞行性能产生负面的影响,但是全速运行”sdlog2”应用程序(即不加-l选项)可能会引起巨大的CPU负载。然而,所需的全速可能无法得到满足,日志记录也将会跳过一些消息。

开始记录日志

在一般情况下,飞行器解锁之后就会开始记录日志,因为只有激活了的飞行才值得分析。如果要手动启动日志记录,可以在console控制台输入以下指令:

  1. sdlog2 stop
  2. sdlog2 start -t -r 200 -e -b 16

要停止记录则输入:

  1. sdlog2 stop

分析日志文件

FlightPlot

要查看以及分析日志,可以使用GUI工具 FlightPlot 。它可以无需转换地读取 sdlog2生成的日志文件.。

你也可以使用包含在 PyMAVLink 中的mavgraph工具来生成绘图。

CSV / Matlab: Converting Logs to CSV

要读取二进制文件并将其转换为CSV,可以使用Python工具sdlog2_dump.py。同样的目录中包含着运行转换器和绘制大量核心信息的MATLAB脚本。

例如:要读取TIMEIMU的消息,SENS消息中的BaroAltBaroTemp数据,请使用下面的指令:

  1. python sdlog2_dump.py log001.px4log -t TIME -m TIME -m IMU -m SENS.BaroAlt,BaroTemp

要创建CSV直接重定向输出到文件:

  1. python sdlog2_dump.py log001.px4log -t TIME -m TIME -m IMU -m SENS.BaroAlt,BaroTemp > log.csv

CSV文件中的列将与参数具有相同的顺序。选项t显著的减少了输出的重复数据,应该始终被sdlog2生成的日志记录文件使用。但是不要用在原来的APM日志文件中。

消息类型举例

  • TIME - 时间戳
  • ATT - 飞行器的姿态
  • ATSP - 飞行器的姿态设定值
  • IMU - IMU传感器
  • SENS - 其他传感器
  • LPOS - 本地位置估计
  • LPSP - 本地位置设定值
  • GPS - GPS位置
  • ATTC - 姿态控制 (actuator_0 output)
  • STAT - 飞行器的状态
  • RC - 遥控输入通道
  • OUT0 - Actuator_0 output
  • AIRS - 空速
  • ARSP - 角速度设定值
  • FLOW - 光流
  • GPOS - 全球位置估计
  • GPSP - 全球位置设定值
  • ESC - 电调状态
  • GVSP - 全球速度设定值

消息类型有时是可以改变的。为了找出包含在日志文件中的实际消息列表,可以使用以下的指令:

  1. python sdlog2_dump.py log001.bin -v

或者使用FlightPlot来查看。

发现并修理故障

为了防止在飞行过程中有大量的IO操作时关键的应用程序终止, sdlog2在接收消息和将日志写到SD卡之间设置了一个缓冲区 。如果缓冲器在一些点溢出了,一些日志消息将被被跳过。跳过的消息数可以通过在控制台中使用sdlog2 status指令进行检查。以及关闭日志文件时打印的统计数字,即,在解锁时使用的-a选项。如果跳过的消息数不是0,就可以通过在-b选项中增加缓冲器大小进行修复。以下指令将设置日志缓冲区的大小为16KiB,而不是默认的8KiB:

  1. sdlog2 start -t -r 100 -e -b 16

负载测试

为了测试microSD的带宽,以200Hz的频率32KB的缓冲区开启该应用程序,键入-e标志立刻开始记录日志。

  1. #首先停止正在运行的实例
  2. sdlog2 stop
  3. sdlog2 start -t -r 200 -e -b 32
  4. # 运行perf命令以查看sdlog2产生的负载
  5. # (注意:性能计数器仅在日志记录期间存在)
  6. perf
  7. # 或者直接运行top(在Ubuntu用用来查看当前系统资源)
  8. top
  9. # 停止应用程序以清理文件描述符和文件系统
  10. sdlog2 stop

日志文件样本