将两个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

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

被折叠的 条评论
为什么被折叠?



