如何在不多次调用rosbag过滤器的情况下将rosbag拆分成多个文件?

时间:2018-01-31 15:09:24

标签: ros

我想将一个100 GB的rosbag拆分成100个1 GB的包。我尝试使用rosbag过滤器但是需要很长时间,因为我必须手动运行每个过滤器,每次都会扫描整个袋子。有没有更好的方法来执行此拆分(通过命令行或Python脚本)?

1 个答案:

答案 0 :(得分:0)

您可以简单地使用如下函数将您的bag文件拆分为多个块:

import rosbag

def extract_chunks(file_in, chunks):
    bagfile = rosbag.Bag(file_in)
    messages = bagfile.get_message_count()
    m_per_chunk = int(round(float(messages) / float(chunks)))
    chunk = 0
    m = 0
    outbag = rosbag.Bag("chunk_%04d.bag" % chunk, 'w')
    for topic, msg, t in bagfile.read_messages():
        m += 1
        if m % m_per_chunk == 0:
            outbag.close()
            chunk += 1
            outbag = rosbag.Bag("chunk_%04d.bag" % chunk, 'w')
        outbag.write(topic, msg, t)
    outbag.close()

请注意,此方法使用消息的数量来执行拆分,因此生成的大块包文件不一定具有相同的大小。