ROS2 回放 ros1.bag 文件?血泪总结

前前言(2022/11/16更新)

自定义数据格式是无法通过ros2bag play 获取的,因此强烈建议用ROS1打开bag文件!!不要再尝试用ROS2了!!!(2023/4/6 保留意见,故字体改为白色)

前言

本文适用于:大部分操作都在ros2上运行的情形(因为后续安装ros1之后涉及到环境配置)。

解决2个关键报错(参考https://github.com/ros2/rosbag2/issues/94):

同时安装ros2和ros1之后:1. 命令行输入“ros2 bag **” 后报错:Failed to load entry point 'play':
/opt/ros/galactic/lib/librosbag2_storage.so: undefined symbol: _ZNK12class_loader11ClassLoader15isLibraryLoadedEv

 2. 命令行输入“ros2 bag **” 后报错:Failed to load library /opt/ros/galactic/lib/librosbag2_bag_v2_plugins.so.... Error string: Could not load library dlopen error: libroscpp_serialization.so: cannot open shared object file: No such file or directory

操作步骤:

  1. 在已安装ros2的环境中安装ros1
  2. 安装rosbag_v2相关依赖和插件
  3. 环境配置(关键)
  4. 验证
  5. ros2 bag 命令用法

一、 在已安装ros2的环境中安装ros1

 可参考该文“1. ROS1安装”部分(我安装的是ros1-noetic版本) →  Ubuntu20.04 ROS1和ROS2同时安装及使用 - 古月居 (guyuehome.com) 

二、 安装rosbag_v2相关依赖和插件

# 安装catkin_tools(https://catkin-tools.readthedocs.io/en/latest/installing.html)
$ sudo sh \
    -c 'echo "deb http://packages.ros.org/ros/ubuntu `lsb_release -sc` main" \
    > /etc/apt/sources.list.d/ros-latest.list'
$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install python3-catkin-tools


# 安装依赖与插件(https://www.ncnynl.com/archives/202209/5469.html)
$ sudo apt update
$ sudo apt install -y libroscpp-serialization0d \
    ros-galactic-nmea-msgs \
    ros-noetic-nmea-msgs
$ sudo apt install -y ros-galactic-rosbag2-bag-v2-plugins \
    ros-galactic-rosbag2-storage \
    ros-galactic-rosbag2-storage-default-plugins \
    ros-galactic-ros2bag ros-galactic-rosbag2-transport 

三、环境配置(关键)

        在 .bashrc 文件末尾添加如下两行(将galactic换为你的ros2版本名)

source /opt/ros/galactic/setup.bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/ros/noetic/lib

四、验证

打开.bag文件方法:

# 查看.bag信息,如上图,包含topic等信息
$ ros2 bag info -s rosbag_v2 your_bag_file.bag
# 回放.bag
$ ros2 bag play -s rosbag_v2 your_bag_file.bag

相关其他信息/资料可参考:ROS1与ROS2的bag包互换(包含自定义消息) - 古月居 (guyuehome.com)

<think>嗯,用户现在想将ROS 1中的rosbag命令转换成ROS 2的等效命令,特别是如何用ros2 bag play来播放lesson1.bag文件。首先,我需要回忆一下ROS 1ROS 2rosbag处理上的不同之处。记得ROS 2中的命令行工具有所变化,比如原来的rosbagROS 2中变成了ros2 bag,而且一些子命令可能也有调整。 首先,用户提到的ROS 1命令可能是类似于“rosbag play --clock lesson1.bag”。在ROS 2中,对应的应该是使用ros2 bag play命令。但需要注意参数的变化,比如--clock在ROS 2中可能需要不同的处理,或者是否默认启用。另外,用户可能需要设置use_sim_time参数,这在ROS 2中也是必要的,但设置方式可能不同,比如通过节点参数或者命令行参数。 然后,考虑到ROS 2bag文件格式可能不同,用户需要确认他们的bag文件是否已经是ROS 2格式的。如果原本是在ROS 1中录制的,可能需要转换。这里可能需要用到rosbags包中的rosbags-convert工具,或者通过迁移工具将ROS 1bag转换为ROS 2支持的格式。不过用户的问题主要是在播放,所以假设他们已经有ROS 2格式的bag文件,或者需要知道如何转换。 接下来,具体的步骤应该是:首先在终端中启动ROS 2环境,设置use_sim_time参数为true,这可以通过在每个节点的启动命令中添加--ros-args -p use_sim_time:=true,或者在launch文件中设置。然后使用ros2 bag play命令来播放bag文件,可能需要指定--clock参数,不过需要确认ROS 2中是否支持这个参数,或者是否默认启用。 另外,用户之前的问题中提到了在ROS 1中使用rosbag play --clock,并且引用了相关代码,比如在launch文件中使用args="--clock $(arg bag_name)"。在ROS 2的launch文件中,可能需要调整参数传递的方式,比如使用arguments: ['--clock', bag_name]。同时,可能需要使用新的launch文件语法,因为ROS 2的launch系统与ROS 1不同,基于Python而不是XML。 此外,用户可能需要了解如何在ROS 2中录制和播放bag文件,比如ros2 bag record和ros2 bag play的基本用法。例如,播放时可能需要指定存储目录,或者是否循环播放。需要指出的是ROS 2bag存储结构不同,默认情况下是存放在一个目录中,而不是单个文件。 最后,用户可能遇到的问题包括时间同步问题,比如播放时是否需要启用模拟时间,以及节点是否正确订阅了相关话题。需要提醒用户在播放前确保所有节点都正确配置了use_sim_time参数,并且话题名称匹配。可能还需要检查ROS 2中的话题列表是否与ROS 1中的一致,特别是在命名空间或话题名称上有无变化。 总结步骤应该是:1. 转换ROS 1bagROS 2格式(如果需要);2. 设置use_sim_time参数;3. 使用ros2 bag play命令播放,并处理可能的参数差异;4. 在launch文件中调整节点参数以适应ROS 2的语法。</think>### ROS 2rosbag命令转换说明 在ROS 2中,`rosbag`工具已升级为`ros2 bag`模块,其语法和功能有以下关键差异: 1. **基本播放命令** ```bash ros2 bag play lesson1.bag ``` 需注意: - ROS 2默认启用`/clock`话题的模拟时间发布[^1] - 若需强制使用系统时间,需添加`--use-sim-time=false`参数 2. **时间同步设置** ROS 2播放时自动激活模拟时间,但所有节点需显式配置: ```bash ros2 param set /your_node use_sim_time true ``` 3. **launch文件集成** ROS 2的launch文件需使用Python格式: ```python from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='rosbag2', executable='play', output='screen', arguments=['--clock', 'lesson1.bag'] ) ]) ``` 4. **格式转换注意** ROS 1的`.bag`文件需转换为ROS 2的存储格式: ```bash rosbags-convert lesson1.bag --dst lesson1_ros2.bag ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值