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
。
提示:在公众号“关于我”页面可加作者微信好友。
喜欢本文求点赞,有打赏我会更有动力。
请我喝杯咖啡如何?
微信 支付宝