nanshi00 发表于 2022-12-4 19:58:02

ardupilot 日志文件解析


2019年04月05日,我开源了自己写的 ArduPilotLog。
ardupilot 日志系统非常好用,所以我打算将之移植出来。
在移植之前,先来解析一下 ardupilot 日志文件,为后面移植代码打个基础。

公众号回复 ardupilotlog 得到 github 开源地址。
日志文件的新生命


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。

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

喜欢本文求点赞,有打赏我会更有动力。
页: [1]
查看完整版本: ardupilot 日志文件解析