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

如何实现两个rosbag文件的播放节奏同步?

双rosbag同步播放实现方案

前置准备(生成结果rosbag时的要求)

这是保证后续同步播放的基础:

  • 从原rosbag提取消息处理生成新bag时,必须保留原消息的header.stamp时间戳,不要替换为处理时的系统时间,确保两个bag的时间轴完全对齐
  • 结果rosbag的时间跨度尽量和原rosbag保持一致,不要额外添加超出原bag时间范围的消息

同步播放实现方法

方案1:内置参数直接播放(最常用)

直接用rosbag play自带的同步参数即可,单条命令就能实现:

rosbag play --clock --sync --wait-for-subscribers original.bag result.bag

各参数作用说明:

  • --clock:rosbag会统一发布/clock话题作为全局仿真时间基准,两个bag的播放节奏都基于该时间,不受系统时间波动影响
  • --sync:开启多bag同步模式,自动对齐所有输入bag的起始时间,保证相同时间戳的消息同时输出
  • --wait-for-subscribers:等待所有话题的订阅者连接完成后再开始播放,避免开头部分的消息丢失或不同步
    如果需要调整播放速率,可追加-r 速率值参数,比如-r 0.5就是以0.5倍速同步播放两个bag。

方案2:锁步播放(适合高精度同步场景)

如果需要逐帧对齐、精准控制播放进度,比如做算法结果和真值的对比测试,可使用锁步模式:

  1. 先启动roscore
  2. 第一个终端启动带锁步模式的rosbag播放命令:
    rosbag play --clock --pause --lockstep original.bag result.bag
  3. 启动完成后可通过空格键控制播放/暂停,或调用/play_next服务实现逐帧播放,全程两个bag的消息输出完全对齐。

常见问题排查

  • 播放前可先执行rosbag info 包名分别查看两个bag的起止时间,确认时间范围重合,重合范围外的内容会单独播放,无法同步
  • 播放时避免同时运行高负载进程,防止CPU资源不足导致消息发布延迟出现偏差
  • 如果结果rosbag的消息时间戳已被修改,需要先做时间偏移校准,将所有消息的时间戳调整到和原bag一致的时间区间后再播放。

内容的提问来源于stack exchange,提问作者KansaiRobot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:24:02