ardupilot 日志文件解析

短文不烧脑了解 ardupilot 日志文件

Posted by Sugar on July 26, 2019

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

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

喜欢本文求点赞,有打赏我会更有动力。

请我喝杯咖啡如何?

微信 weixinfukuan 支付宝 zhifubaofukuan