环境:ubuntu20.04 、ros-noetic、python

前言:这是分享一个自己写的rosbag管理工具,个人感觉实用性很强。

import rosbag

def merge():
    bag1 = rosbag.Bag('/home/ylh/dataset/1.bag','r') #包源1
    bag2 = rosbag.Bag('/home/ylh/dataset/2.bag','r') #包源2
    # bagn = rosbag.Bag('xxx/n.bag','r') #可推广到包源包n
    bag_merge = rosbag.Bag('/home/ylh/dataset/merge.bag','w')  #新包merge.bag

    #给定时间段,根据自己需要更改就行
    t1 = 1638932875       #开始时间,单位秒
    t2 = 1638932875 + 50  #结束时间,单位秒

    #包源1 操作: 时间戳+话题过滤
    for topic, msg, t in bag1:      # 注意topic、msg、t顺序,从包中解析依次是话题、该话题消息内容、该话题的时间戳,推荐使用所示顺序
        tmp = t
        tmp = float(str(tmp)) / 1e+9
        if float(t1) <= tmp <= float(t2):
            if topic == '/topic_1':
                bag_merge.write(topic, msg, t)
            #如果有其他话题需求,依次叠加,如
            if topic == '/topic_2':
                bag_merge.write(topic, msg, t)

    #包源2: 操作:时间戳过滤
    for topic, msg, t in bag2:
        tmp = t
        tmp = float(str(tmp)) / 1e+9
        if float(t1) <= tmp <= float(t2):
            bag_merge.write(topic, msg, t)
    
    #包源n: 时间戳  /  时间戳+话题,基本操作样式如上。当然也是可以添加话题类型过滤等等,根据实际需求进行调整即可
    #....

    bag1.close()
    bag2.close()
    # bagn.close()
    bag_merge.close()   #注意,所有打开过的包,都得关闭,否则下次访问可能会失败

if __name__== "__main__":
    merge()

如果觉得该工具帮到你的话,记得点赞收藏
#####################

不积硅步,无以至千里
好记性不如烂笔头