需求
最近从甲方拿到的数据是ros2 bag包,含自定义的消息类型,在安装了ros2之后并编译消息文件之后,查询到有一个rosbags库可以直接序列化数据,也就可以把数据以明码文件的形式(如txt)保存到电脑上了。
方法
rosbags库
这里没有使用ros2 bag play XXXX的方式进行数据读取。
因为,一方面播放bag的方式速度慢;
另一方面,ros话题订阅中的callback函数是创建新线程运行的,也就是可能同时运行,如果要保存的数据有先后之分,比如从0到1000为保存的图像命名,则需要使用index_img++;多线程之间会发生冲突、顺序颠倒的情况,导致部分图像命名一致,新保存的图像覆盖旧图像。当然这也可以使用加线程锁的的方法解决。
rosbags具有如下特点
- 可以无缝实现bag和db3的互相转换
- 提供了db3文件的读写接口,非常方便。
- 转换速度很快,因为不需要按照bag播放速度读取。
- 不用依赖ros2、ros1
关键是这个包还不用依赖ros2和ros1,在python3下可以直接使用
废话不多说,
其文档在https://ternaris.gitlab.io/rosbags/index.html
代码托管在gitlab上,https://gitlab.com/ternaris/rosbags
安装
pip install rosbags
参考:https://heroacool.blog.youkuaiyun.com/article/details/128834476

文章介绍了如何使用rosbags库从ROS2bag文件中读取自定义消息类型的数据,并将其以明文格式(如txt)保存。由于ros2bagplay方法速度慢且可能引发多线程问题,作者选择了rosbags库,该库提供db3文件的读写接口,且不依赖ROS环境。在Python3下,通过示例代码展示了如何读取和转换ROS2自带及自定义消息格式的数据,包括图像数据的处理和保存。
最低0.47元/天 解锁文章
586

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



