如何在不生成新文件前提下合并两个rosbag

文章讲述了如何使用ROS的bagmode::BagMode::Append模式来实现对同一个ROSbag文件的读写操作,特别是在合并两个bag文件或将处理结果写回原bag时的处理方法。通过分析rosbag的C++源码,发现openReadWrite()函数以r+b模式打开文件,允许读写操作。

将两个rosbag文件合并到一个新的robag文件里是很容易的,open两个源文件时指定bagmode::BagMode::Read(或BagMode::Read),然后read,open保存合并结果的新文件时指定bagmode::BagMode::Write(BagMode::Write),不用多说,如果将两个bag合并将结果保存在其中一个bag里,或者读取一个bag中的数据输入模型进行推理,然后把识别结果写回到此bag中,这些操作处理的本质涉及到对同一bag文件的同时读写处理,该怎么做呢?

查了一下网上资料,都是说怎么单独读和写bag文件的没有用,查看ros.org上文档也没有用的信息,只好去翻看rosbag的源码(C++源码需要到https://github.com/ros/ros_comm这里下载,ros安装时安装的都是C++代码编译成出来的so库以及对应的python代码,所以ros安装目录下只能看python版的代码),发现还有个BagMode就是BagMode::Append,看了一下相关代码,用Append这种模式就能解决同时读写同一个bag文件的问题:

void Bag::open(string const& filename, uint32_t mode) {
    mode_ = (BagMode) mode;

    if (mode_ & bagmode::Appen
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arnold-FY-Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值