如何从rosbag包中提取指定topic的消息发布频率(单位Hz)?
查询rosbag中特定topic消息频率的方法
有多种方法可以实现查询,根据你的需求选择即可:
1. 直接通过rosbag info结果估算平均频率
这是最快速的方法,不需要额外运行其他命令:
你给出的rosbag info输出中已经包含两个核心参数:
- bag总时长:你示例中的bag总时长为
60.0s - 对应topic的总消息数:比如
/mymessage2/input对应总消息数为6000条
平均频率计算公式:平均频率 = 对应topic总消息数 / bag总时长
以你示例中的几个topic为例: /mycamera/image:1187 / 60 ≈ 19.8 Hz/mymessage1:29944 / 60 ≈ 499 Hz/mymessage2/input:6000 / 60 = 100 Hz
注意:该方法得到的是整个录制周期内的平均频率,无法体现频率波动、跳变等情况
你提供的rosbag info输出示例参考:
path: the.bag version: 2.0 duration: 60.0s start: Jul 01 2021 16:58:10.27 (1625158690.27) end: Jul 01 2021 16:59:10.27 (1625158750.27) size: 6.1 GB messages: 37131 compression: none [1188/1188 chunks] types: sensing_msgs/type1 [621fdfebbc8899ba27ee5fed4fcccaee] sensing_msgs/type2 [cf69c51b4a51518b0ef7e36af744fc70] sensor_msgs/Image [060021388200f6f0f447d0fcd9c64743] topics: /mycamera/image 1187 msgs : sensor_msgs/Image /mymessage1 29944 msgs : sensing_msgs/type1 /mymessage2/input 6000 msgs : sensing_msgs/type2
2. 用rostopic hz配合rosbag播放查询精准频率
如果需要获取频率波动、最大/最小/平均频率、标准差等详细参数,可以用这个方法:
- 先启动roscore:
roscore
- 新终端中高速播放bag,使用bag自带时间戳:
rosbag play -r 100 your_bag_name.bag --clock
参数说明:-r 100表示用100倍速播放,加快统计速度,建议倍率不要超过200避免消息拥堵
3. 再开一个终端,运行频率统计命令,替换为你要查的topic名:
rostopic hz /target_topic_name
运行后会自动统计输出该topic的频率相关详细数据。
3. 用rosbag hz命令直接解析bag统计
如果不想播放bag,可以直接用rosbag自带的hz工具解析,命令如下:
rosbag hz your_bag_name.bag --topic /target_topic_name
运行后会直接输出该topic的平均频率、消息间隔分布、最大最小频率等参数,无需启动roscore也无需播放bag,效率最高。
说明:上述方法得到的频率为bag录制到的消息频率,只要录制时没有出现带宽不足丢包的情况,该频率和原始发布频率完全一致
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

