踩坑rosbag --clock

本文转载自: 踩坑rosbag --clock http://www.manongjc.com/article/94122.html

本文章向大家介绍踩坑rosbag --clock,主要包括踩坑rosbag --clock使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

遇到的问题及现象

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

由于输入给lego-loam的数据来自于rosbag,所以需要rosbag提供时间信息。

rosbag play --clock recorded1.bag

由于rosbag的数据发布频率比较快,导致了一个结果。rosbag播放完毕,时钟停止,滤波节点中缓存了几个数据还没有处理完毕。失去了时钟信息,滤波节点停止运行,但是没有输出报错信息!!!

个人心得

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

解决方案:

1.最佳
-k, --keep-alive

rosbag play -k  --clock recorded1.bag

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

2.次佳

-r FACTOR, --rate=FACTOR

rosbag play -r 0.1 --clock recorded1.bag

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

原文地址:http://www.manongjc.com/article/94122.html

你可能感兴趣的:(ROS学习之路)