问题叙述
目前是ROS1到ROS2的过度阶段,由于ROS2内部的机制大幅变动,导致我们ROS1录制的bag包和ROS2的bag包并不能通用。如何在ROS2中回放ROS1格式的bag包?
解决方案
通过使用安装rosbag_v2插件来解决。(注:本方法仅支持标准消息类型的rosbag转换,如果带有自定义msg的rosbag则不适用)
rosbag2_bag_v2 是一个ROS2的插件,用于读取ROS1的bag文件。在安装和使用这个插件之前需要保证以下几点:
1.需要安装好ROS 2和ROS 1。本文以ubuntu 20.04 ROS2 foxy和ROS1 noetic的环境为例。(ROS2 foxy安装教程 ,ROS1 noetic安装教程 )
2.需要安装好ros1_bridge包(通过命令sudo apt install ros-foxy-ros1-bridge
安装,foxy
根据具体ROS2版本更改,或参见官方页面和安装教程 )。
3.需要安装rosbag2包(一般ROS2安装过程中会默认安装,如果没有安装的话参见官方页面.)
满足以上几点后,开始安装和使用rosbag_v2插件:
安装rosbag_v2相关依赖和插件:
sudo apt install ros-foxy-rosbag2-bag-v2-plugins ros-foxy-ros1-bridge ros-foxy-ros1-rosbag-storage-vendor ros-foxy-rosbag2*
(注:这里的foxy需要根据环境的ROS2版本更改)
设置环境变量:
source /opt/ros/noetic/setup.bash
source /opt/ros/foxy/setup.bash
或将上面两行添加到.bashrc 文件末尾后打开一个新终端。(注:这里的两个路径根据环境的ROS1、ROS2安装位置更改)
测试:
ros2 bag info -s rosbag_v2 your_bag_file.bag
查看.bag信息,如下图,包含topic等信息。
ros2 bag play -s rosbag_v2 your_bag_file.bag
回放.bag,正常的效果如下图。
如果.bag中带有自定义msg,则会出现以下报错。
与此同时,可以通过以下命令监听.bag中的数据或记录为rosbag2形式的可供ROS2直接使用的数据包。
参考资料
ROS2 foxy安装教程
ROS1 noetic安装教程
ROS2入门教程-源码安装ros1_bridge
ros1_bridge主页
rosbag_v2插件官方主页:
ros1 bag to ros2 bag play
ros2入门教程-rosbag和ros2 bag 转换
ROS2 回放 ros1.bag 文件?血泪总结