目录
1.想法
本节介绍如何提取record包里的msg到本地日志。
按照惯例,先谈大致步骤,再看细节。
首先我们通过cyber moniter是可以实时显示各模块交互信息的,cyber RT通过topic订阅和发布msg,所有msg定义都在proto文件中,通过搜索可以找到具体定义。那么我们若想记录详细信息到本地,肯定是可行的,问题是通过什么手段来达到目标更加方便快捷。
这里我最开始想到的是debug或者info直接记录,事实上这种手段也确实可以,比如实测一个sim过程的时候可以这样记录。但是这里存在一个问题,对于我们已经录制好的record包,该如何提取MSG到本地呢,并且已经完工的代码,再进行修改会比较麻烦,很可能忘记改回到之前的版本,导致到处都有不必要的MSG输出到日志,实际上Apollo运行过程中的log信息已经够大了。个人认为这不太好。
转变下思路,既然交互信息在都是通过cyber RT实现的,那么必然有其对应API接口,可以将信息提取出来,顺着这个思路,很容易在cyber文件夹下就找到了线索。
整个过程大概要经过以下几个步骤:
(1) record文件msg过滤;非必须操作。
(2)基于proto文件定义,对照record包里的channel msg信息,研究转换提取机制
(3)log 文件记录到本地。
本文档介绍了如何利用cyber RT的API接口,从record文件中过滤并提取特定模块的msg到本地日志。首先,通过cyber monitor观察交互信息,然后研究record包的channel msg,编写解析代码,利用proto文件定义转换提取机制。主要操作包括:record文件过滤、cyber recorder测试、解析代码编写并编译运行。最后,讨论了通过C++直接在源码中实现msg记录的局限性。
订阅专栏 解锁全文
1250

被折叠的 条评论
为什么被折叠?



