You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rosbag play、rqt_bag与rosbag.Bag.read_messages()获取的时间戳存在差异

问题根因

  • 你混淆了rosbag的两类时间戳:
    1. 前两组测试用rostopic echo打印的是sensor_msgs/Image消息本身内置的header.stamp,这个时间戳一般是图像驱动采集到图像时写入的业务时间。
    2. 第三组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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:57:03