rosbag play、rqt_bag与rosbag.Bag.read_messages()获取的时间戳存在差异
问题根因
- 你混淆了rosbag的两类时间戳:
- 前两组测试用
rostopic echo打印的是sensor_msgs/Image消息本身内置的header.stamp,这个时间戳一般是图像驱动采集到图像时写入的业务时间。 - 第三组Python脚本里你取的
read_messages()返回的第三个参数t,是rosbag录制时,节点接收到该消息、将其写入bag文件的系统时间,和消息内部的header.stamp本来就不是同一个值,因此输出结果完全不同。
- 前两组测试用
- 此外你提供的脚本存在语法问题:变量
image_idx没有定义初始化逻辑,直接运行会抛出未定义变量的报错。
修正方案
把脚本中读取时间戳的逻辑改为读取消息内部的header.stamp,同时补全序号计数逻辑即可对齐前两组的输出结果,修正后的示例代码如下:
import rosbag timestamps = [] image_idx = 0 # 补全序号初始化 with rosbag.Bag("the_bag.bag", "r") as bag: # 直接指定读取目标话题减少遍历开销 for topic, msg, t in bag.read_messages(topics=['/the_image']): timestamps.append((image_idx, msg.header.stamp)) image_idx += 1 with open("timestamps.txt",'w') as f: for idx, stamp in timestamps: f.write('{0},{1},{2}\n'.format(str(idx).zfill(8), stamp.secs, stamp.nsecs))
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

