ROS1与ROS2的bag包互换(包含自定义消息)_ros2的rosbag可以用ros1播放么-程序员宅基地

技术标签: 自动驾驶  机器学习  ROS  深度学习  ros2  ros bag  

0. 前言

目前是ROS1到ROS2的过度阶段,由于ROS2内部的机制大幅变动,导致我们ROS1录制的bag包和ROS2的bag包并不能通用。网上基本上均是如何将ros2录制的bag包转换为ros1格式的bag包的方案,这里做出归纳,并给出全套的解决方案。
测试环境:
ubuntu 20.04
ROS 1 noetic
ROS 2 foxy
两个版本的ROS 均需要按照官网教程进行安装,这里可以参照作者之前写的文章来安装。

1.ROS2和ROS1录制的文件格式

ros2录制的bag包文件,录制完后会生成一个目录,在目录下会生成多个文件,如下:
在这里插入图片描述
ros1 录制的bag文件,只有一个文件:例如 2021-05-19-19-10-18.bag

2. ROS2转ROS1的bag包

为了将录制的ROS2的bag包转换ROS1格式的bag包,大致流程需要以下步骤:

1.播放ros2的包
2.ros1监听到ros2播放的topic,然后再录制topic即可

  1. 当不需要使用自定义消息类型进行两个ROS 通信的时候,没有必要通过源码编译安装ros1_bridge

  2. 我们可以直接安装ros-eloquent-ros1-bridge,这个库包主要是用于ros2和ros1之间的通信

    sudo apt update
    sudo apt install ros-foxy-ros1-bridge
    
  3. 启动 一个新的终端

    source /opt/ros/noetic/setup.bash
    roscore
    
  4. 再启动一个新的终端

    source /opt/ros/noetic/setup.bash
    source /opt/ros/foxy/setup.bash
    ros2 run ros1_bridge dynamic_bridge  // --bridge-all-topics
    
  5. 再启动一个新的终端

    source /opt/ros/foxy/setup.bash
    ros2 bag play rosbag2_2021_05_19-11_28_34/
    
  6. 再启动一个新的终端

    source /opt/ros/noetic/setup.bash
    rosbag record /image /scan
    
  7. 等待录制完成即可尝试播放

     rosbag play rosbag2_2021_05_19-11_28_34.bag
    

3. ROS1转ROS2的bag包

这里一定要注意顺序。因为我们原有的rosbag是ros1格式,用的是ros2里面的bag工具,所以要先source ROS1,再source ROS2,否则可能出现问题。

source /opt/ros/noetic/setup.bash
source /opt/ros/foxy/setup.bash
ros2 bag play -s rosbag_v2 src/localization/localization/bag/data_example.bag

在这里插入图片描述

4. 自定义类型msg的bag包转换

这里与上述的区别就在于自定义的类型ROS1_bridge必须用源代码重新编译。

  1. 创建ros1_bridge工作区。我们在一个单独的工作区中构建ROS1_bridge,因为它需要在其环境中同时使用ROS1和ROS2包。

    mkdir -p ~/ros1_bridge_ws/src
    cd ~/ros1_bridge_ws/src
    
  2. 从github上拉下代码

    git clone -b dashing https://github.com/ros2/ros1_bridge.git
    
  3. 编译过程会find_ros1_packagefind_ros1_interface_packages。例如ros1的代码路径在~/catkin_ws/src/custommsg 里面使用自定义的msg。这里可以参考链接来完成自定义msg的编译.这里就不详细说来.ROS2这里需要建立另一哥单独一个文件夹定义~/colcon_ws/src/custommsg来保存ROS2内部的转换后的msg信息**(ROS1资料很多了,这里只写出ROS2中关键点)**

    cmake_minimum_required(VERSION 3.5)
    project(customsrv)
    
    # Default to C++14
    if(NOT CMAKE_CXX_STANDARD)
      set(CMAKE_CXX_STANDARD 14)
    endif()
    
    if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
      add_compile_options(-Wall -Wextra -Wpedantic)
    endif()
    
    find_package(ament_cmake REQUIRED)
    find_package(builtin_interfaces REQUIRED)
    find_package(rosidl_default_generators REQUIRED)
    
    rosidl_generate_interfaces(custommsg
      "msg/SetString.msg"
      DEPENDENCIES builtin_interfaces
    )
    install(
      FILES my_mapping_rules.yaml
      DESTINATION share/${PROJECT_NAME})
    
    ament_package()
    

    注意的地方是 my_mapping_rules.yaml

      ros1_package_name: 'custommsg'
      ros1_service_name: 'SetString'
      ros2_package_name: 'custommsg'
      ros2_service_name: 'SetString'
    

    package.xml

    <?xml version="1.0"?>
    <?xml-model href="http://download.ros.org/schema/package_format2.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
    <package format="3">
      <name>custommsg</name>
      <version>0.0.0</version>
      <description>TODO: Package description</description>
      <license>TODO: License declaration</license>
    
      <buildtool_depend>ament_cmake</buildtool_depend>
      <buildtool_depend>rosidl_default_generators</buildtool_depend>
      <member_of_group>rosidl_interface_packages</member_of_group>'
      <test_depend>ament_lint_auto</test_depend>
      <test_depend>ament_lint_common</test_depend>
      <export>
        <build_type>ament_cmake</build_type>
        <ros1_bridge mapping_rules="my_mapping_rules.yaml"/>
      </export>
    </package>
    

    需要注意的是 <ros1_bridge mapping_rules=“my_mapping_rules.yaml”/>

    msg文件夹是SetString.msg

    bool b
    string message
    

…详情请参照古月居

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lovely_yoshino/article/details/120646909

智能推荐

windows启动tomcat闪退_tomcat windows闪退-程序员宅基地

文章浏览阅读1.2w次。现象:windows下双击tomcat\bin\startup.bat时闪退原因:缺少环境变量导致解决方法:打开编辑tomcat\bin\startup.bat,头部加入以下代码,一个是JAVA目录,一个是Tomcat目录SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_39SET TOMCAT_HOME=D:\hunk\work\apache-tomcat_tomcat windows闪退

数组内存存储_64位平台数组内存-程序员宅基地

文章浏览阅读201次。数组内存存储1. 基本类型数组的初始化2. 引用类型数组的初始化1. 基本类型数组的初始化 int[] array; array = new int[5]; for (int i = 0 ; i<array.length;i++){ array[i] = i + 1 ; } System.out.println(Arrays.toString(array));内存分析:2. 引用类型数组的初始化//定义Person类class Person{ private S_64位平台数组内存

Vue 食用指南-程序员宅基地

文章浏览阅读738次,点赞13次,收藏16次。本文记录了 Yukiii 学习 Vue 期间的心得和相关功能的具体实现及 Vue 的基本使用方法,方便后续开发时的查阅~

【Android】高版本访问网络失败问题,解决方法整合_android eperm (operation not permitted)-程序员宅基地

文章浏览阅读6.4k次,点赞3次,收藏25次。报错各种问题,真的很烦java.net.SocketException: socket failed: EPERM (Operation not permitted)java.net.SocketException:socket failed:EACCES (Permission denied)java.io.IOException: Cleartext HTTP traffic to 10.0.2.2 not permittedD/Netw at java.net.Socket.creat_android eperm (operation not permitted)

p88 SRC挖掘-拿下CNVD证书开源&闭源&售卖系统_ihsdus.cn-程序员宅基地

文章浏览阅读826次,点赞2次,收藏9次。SRC挖掘-拿下CNVD证书开源&闭源&售卖系统_ihsdus.cn

文章详情页面评论功能添加及实现原理_在页面中输入你的评论,单击“评论”按钮,如果留言区没有评论,则直接添加评论,如果-程序员宅基地

文章浏览阅读9.9k次,点赞4次,收藏44次。1.评论框及评论内容展示模板如下: div id="comment"> h3>strong>发表评论:strong>h3> p>span>标题:span> input type="text" name="" id="comm_title" class="text">p> p>span>内容:span>textarea rows="10"_在页面中输入你的评论,单击“评论”按钮,如果留言区没有评论,则直接添加评论,如果

随便推点

软件测试全网最全复习总结-别杠,杠就是你对_软件规范化和标准化的原因不包括-程序员宅基地

文章浏览阅读1.1w次,点赞104次,收藏452次。今天仍然拼命看书,因为明天就要考了。学期的成绩就全仗这两天挣,现在更感到考试无用与无聊。——季羡林文章目录概述软件测试分类及流程黑盒测试等价类划分边界值分析法决策表法正交测试法极差法方差法白盒测试单元测试集成测试国际化和本地化测试可靠性测试测试与质量分析报告_软件规范化和标准化的原因不包括

iOS —— use_frameworks! 作用-程序员宅基地

文章浏览阅读1.3k次。通过cocoapods管理应用程序时,在Podfile文件中,**use_frameworks!*cocoapods会生成对应的 frameworks 文件 在Link Binary With Libraries:会生成Pods_工程名.framework,包含了其它用cocoapods导入的第三方框架的.framework文件1、纯OC项目中,通过cocoapods导入OC库时,一般都不使用use_frameworks!2、纯swift项目中,通过cocoapods导入swift库时,必须使用u..._use_frameworks!

Python菜鸟晋级04----raw_input() 与 input()的区别_pycharm没有raw input-程序员宅基地

文章浏览阅读2.5k次。raw_input() 与 input()均是python 的内建函数,通过读取控制台的输入与用户实现交互。但他们的功能不尽相同。举两个小例子>>> raw_input_A = raw_input("raw_input: ")raw_input: abc >>> input_A = input("Input: ")Input: abcTraceback (most recent ca_pycharm没有raw input

高通AR增强现实多卡识别和扩展跟踪Unity_imagetarget扩展追踪-程序员宅基地

文章浏览阅读1k次。只需修改ARcamera上的Max Simutaneous Tracked Images 的值就好了。初始是1,默认只能识别一张图。 扩展跟踪是一个更简单的事情,高通把这个功能封装成了ImageTarget的一个属性 Extended Tracking,只要将其勾上就可以了._imagetarget扩展追踪

对于三星手机的手工root方法-程序员宅基地

文章浏览阅读172次。现在很多一键化的root工具,但是仍然有不少的三星手机是无法用全自动方式进行root的,这时候,我们可以选择使用手工的方式进行root,本文章对手工root的一些方法进行一些介绍。   常规方法:..._三星手机用面具root

2021年佛山高考成绩查询,2021年高三佛山一模,看佛山高中排名-程序员宅基地

文章浏览阅读1.7k次。原标题:2021年高三佛山一模,看佛山高中排名2021年1月11日佛山进行了新高考改革后第一次佛山一模考试,作为高考风向标,各高中的成绩具有很大参考意义。结合2018年中考录取分数、2021年佛山一模、2020年佛山一模对佛山56所高中进行简要分析,从而展望2021年高考。 1-10名石门中学稳居第一,佛山一中重夺第二,南海中学增长强劲,顺德一中略显颓势,李兆基中学增长强劲,郑裕彤中学加工能..._佛山国华纪念中学2021年高考成绩

推荐文章

热门文章

相关标签