【地面站社区首发】ardupilot 日志文件解析

2019年04月05日,我开源了自己写的 ArduPilotLog

ardupilot 日志系统非常好用,所以我打算将之移植出来

在移植之前,先来解析一下 ardupilot 日志文件,为后面移植代码打个基础。

日志文件的新生命

ArduPilotLog的重大作用之一,就是:将日志转为 sqlite 数据库文件。这个功能为日志文件赋予了新的生命。

这个功能是“站在巨人的肩膀上”产生的,因为 ardupilot 原有日志里具有建立数据库所需的全部内容,只是没有以数据库文件的形式存在而已。

  • ardupilot 日志文件的生命力所在

    1、24.9 MB 的 .bin 日志文件,生成的 sqlit 数据库文件有 48.2MB。说明 .bin 文件数据更紧凑、体积更小

    2、*.bin 文件本身包含数据库“表头”和“表体”的全部信息,非常方便转换。

    3、想在单片机上跑个 sqlite 不是很容易,但在单片机上记录 *.bin 日志文件十分容易。并且对单片机要求比较低,低到只要能跑 FatFS 文件系统就行

ardupilot 日志文件分析

要点提示:

1、日志文件同一内存分布下的两种内容

2、日志文件与数据库文件的关系。

3、日志文件的内存分布。

  • 日志文件的两种内容

    1、日志解码格式

    2、日志数据

  • 内存分布

读日志文件时怎样区分两种信息

结合 ArduPilotLog 关键代码说明。

通过上文可以知道:两种信息的内存分布是相同的,唯一的联系(也是用以区分的标记)就是 msgid

因此,ArduPilotLog 读到 msgid 为 0x80 的数据时将之视为“解码格式”信息。

ardupilot 里写入“解码信息”的关键函数

个函数是移植 ardupilot 日志系统所需的函数之一。

移植思路

1、将“解码格式”写入日志文件首部(因为读文件解码时要先获知各个msgid的日志数据按什么格式来解码)。
2、按日志的内存分布封装日志函数,用于记录日志数据。

移植 ardupilot 日志系统其实非常简单。了解日志文件构成之后,按 ardupilot 架构往外搬就行了。

如果对软件架构没有认识,可以看下我的《软件架构训练计划》,在 github 上有开源训练内容。

无私奉献

有关 ardupilot 日志的更详细的文档,可以在我的公众号内回复 apm 获得。

内容包括:

1、我录制的 ardupilot 入门视频教程。

2、我常用的 ardupilot 开发环境虚拟机。

3、我做过的 ardupilot 相关文档。

关注作者

欢迎扫码关注我的公众号MultiMCU EDU

提示:在公众号“关于我”页面可加作者微信好友。