踩坑rosbag --clock(上、下集)

上集

将rosbag的数据feed给lego-loam,输出地图。另外写了一个滤波节点,订阅地图,进行滤波操做,再发布出来。缓存

因为输入给lego-loam的数据来自于rosbag,因此须要rosbag提供时间信息。函数

rosbag play --clock recorded1.bag

因为rosbag的数据发布频率比较快,致使了一个结果。rosbag播放完毕,时钟中止,滤波节点中缓存了几个数据尚未处理完毕。失去了时钟信息,滤波节点中止运行,可是没有输出报错信息!!!spa

 

我的心得:滤波节点有两个独立的线程,一个是callback函数线程,一个是main函数线程,进而致使print出来的信息排布混乱。没有花时间整理print出来的信息,也就没能及时发现main函数线程由于缺失了时间信息而中止运行。所以,但凡遇到莫名其妙的bug,即便没有报错信息,首要任务是结合print出来的信息整理代码的逻辑,快速缩小范围再逐步排查缘由。线程

 

解决方案code

1. 最佳blog

-k, --keep-aliveclass

rosbag play -k  --clock recorded1.bag

bag文件中的数据播放完毕之后,继续提供时间信息。bug

 

2. 次佳地图

-r FACTOR--rate=FACTORcall

rosbag play -r 0.1 --clock recorded1.bag

将发布频率下降为原来的10%,留给滤波节点足够的时间进行处理。

 

下集

首先启动 roscore ,这一步会启动ros的时钟,提供时钟信息。

接着启动lego-loam。

播放lego-loam的数据集, rosbag play --clock recorded1.bag 。这时候,启动了另外一个时钟,致使roscore启动的时钟中止。因此,当rosbag播放完毕后,ros的时钟彻底中止。这时候运行ros会报各类莫名其妙的错误

 

解决方案

从新运行 roscore !

相关文章
相关标签/搜索