[ros2实操]2-ros2的消息和ros1的消息转换

news2024/11/24 9:38:03

记录一下ros2和ros1消息互传的操作

!!!需要注意的是,只有ros1订阅了相关ros2的消息时,ros1_bridge节点才会转发相关消息.

参考链接

1,docker镜像链接:待定
2,github教程:Bridge communication between ROS 1 and ROS 2

一.准备步骤

为在自己原来的系统ubuntu1804上同时安装了ros1和ros2,但是不知道为什么ros2不能正常使用,所以我就用docker创建了一个ubuntu1804的容器,接下来的操作都是在容器里面做的.在容器里面安装ros1和ros2.

操作具体见:[ros2实操]1-ros2的安装(ubuntu1804)与运行

二.ros2与ros1消息互转实例

这里就用一个例子说明,整个过程需要开启四个终端.并且,ros1运行在我的主机里面,ros2运行在docker容器里面.采用主从通信的方式.

第一个终端:roscore

在主机开一个终端,设置ROS环境变量,然后运行roscore.
docker_host和master_host和对应的ip我们已经提前写到/etc/hosts里面了.

export ROS_HOSTNAME=master_host
export ROS_MASTER_URI=http://master_host:11311
source /opt/ros/melodic/setup.bash
roscore

在这里插入图片描述

第二个终端:ros1_bridge

我们在ros2的容器环境中启动ros1_bridge.
(容器中ros的host和ip我们也已经在/etc/hosts中配置好了.)
此时需要同时source ros1和ros2的环境

export ROS_HOSTNAME=docker_host
export ROS_MASTER_URI=http://master_host:11311
source /opt/ros/melodic/setup.bash
source /opt/ros/eloquent/setup.bash
ros2 run ros1_bridge dynamic_bridge

在这里插入图片描述

第三个终端: talker

在ros2容器环境下运行talker节点

export ROS_HOSTNAME=docker_host
export ROS_MASTER_URI=http://master_host:11311
source /opt/ros/eloquent/setup.bash
ros2 run demo_nodes_py talker

运行后会不断发布helloworld的消息
在这里插入图片描述

第四个终端:listener

在主机ros1环境下,运行listener节点.

export ROS_HOSTNAME=master_host
export ROS_MASTER_URI=http://master_host:11311
source /opt/ros/melodic/setup.bash
rosrun roscpp_tutorials listener

可以看到已经成功接受到来自ros2转换后消息
在这里插入图片描述
为了每次不用反复的输入环境变量,我们在主机端~/.bashrc目录下加入:

export ROS_HOSTNAME=master_host
export ROS_MASTER_URI=http://master_host:11311

在容器端~/.bashrc目录下加入:

export ROS_HOSTNAME=docker_host
export ROS_MASTER_URI=http://master_host:11311

这样每次启动终端就自动设置ROS的环境变量了.

三.其他例子

我们再搞一个小乌龟的例子.

  • 第一个终端:roscore
    ros1环境下启动roscore
source /opt/ros/melodic/setup.bash
roscore

在这里插入图片描述

  • 第2个终端:ros1_bridge
    ros2环境下启动ros1_bridge
source /opt/ros/melodic/setup.bash
source /opt/ros/eloquent/setup.bash
ros2 run ros1_bridge dynamic_bridge

在这里插入图片描述

  • 第3个终端:ros2 turtlesim_node
    ros2环境下启动乌龟仿真器
source /opt/ros/eloquent/setup.bash
ros2 run turtlesim turtlesim_node

在这里插入图片描述
第四个终端:ros2 turtle_teleop_key

source /opt/ros/eloquent/setup.bash
ros2 run turtlesim turtle_teleop_key

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]SSM计算机毕业设计基于ssm的电子网上商城JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

通过五个维度比较分析关键容灾技术

【摘要】每一种容灾技术方案,可以从实现的技术复杂度、需要投入的成本、需要承担的风险、技术的先进性、技术的成熟度等几个方面来综合评估,寻求适合企业的最佳技术组合方案。本文对几类关键容灾技术进行了比较分析。(文中涉及相关技术产品最新参数请以官网最新发布为准) …

【SpringBoot】SpringBoot开启MyBatis缓存+ehcache(一二级缓存和myBatis的差不多,第三方缓存是jar包的不一样)

文章目录第三方缓存1、导jar包2、配置文件ehcache.xml3、EnableCaching开启缓存4、application.yml读取配置文件5、使用缓存(注解Cacheable)Cacheable的三个属性:value、key和condition▶测试:root对象可以用来生成keyCachePutCac…

LeetCode HOT 100 —— 4.寻找两个正序数组的中位数

题目 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 思路 正序数组,立即推—>二分查找 如果本题不要求时间复杂度O(log…

光点数据可视化解决方案,助力新型智慧城市打造_光点科技

随着城市化进程的快速发展,智慧城市逐渐从理论理念演变为实践。智慧城市作为一个极其复杂的城市数字化建设和运营系统,涵盖了大量的智能交通、智能物流、智能公园等子系统。对于智慧城市解决方案提供商和集成商来说,其数据可视化产品的统一监…

View的绘制流程

view的绘制流程主要为measure,layout,draw三个阶段 View与window的逻辑结构如图所示: ViewRootImpl(替代ViewRoot)类,是连接WindowMannager和DecorView的纽带,View的三大流程均是通过ViewRoot完…

godoc安装与go文档查询

前言 最近在用go语言做项目,语法还是很简单的,但是API不熟悉,😅,另外也没有类似Java的Spring这样的独秀的IOC和AOP框架,灵活度很大,经常需要查询文档,但是godoc从go1.14.2开始就从内…

【CNN】MobileNet——卷积神经网络中轻量级的经典

前言 MobileNet 系列 是 Andrew G. Howard(Google Inc.) 等人于 2017 年(其实是 2016 年先于 Xception 已经提出,但是直到 2017 年才挂到 arXiv 上)在 MobileNets: Efficient Convolutional Neural Networks for Mobi…

干货 | 如何在子查询和联接之间选择

在 联接与子查询:哪个更快?文章我们了解到连接往往比子查询执行得更快。话虽如此,这并不是一条通用准则,因此你可能不希望自动假设联接更可取。正如那篇文章中提到的,如果你需要在查询添加许多联接,数据库服…

分治算法Divide and Conquer

评价 它可以减少运行的时间,很多问题如果暴力求解需要O(n^2)的复杂度,而通过分治可以减少到O(nlogn) 当与随机化技术相结合时,分治的功能很强大 分治算法的步骤 1.先将大的问题分解为一个个小的子问题 2.对每一个子…

swift内存绑定

swift提供了3种不同的API来绑定/重新绑定指针 assumingMemoryBound(to:)bindMemory(to: capacity:)withMemoryRebound(to: capacity: body:) 绕过编译器检查 - assumingMemoryBound 就是假定内存绑定 func testPointer(_ p: UnsafePointer<Int>) {print(p) } let tup…

Tomcat运行流程、Servlet运行原理以及常用API

文章目录Servlet原理Tomcat 的定位Tomcat 的伪代码Tomcat 初始化流程Tomcat处理请求总结Servlet的核心APIHttpServletHttpServletRequestHttpServletResponseCookie 和 SessionServlet原理 Servlet终究是属于应用层&#xff0c;它是在应用层进行的一系列操作&#xff0c;它的底…

Prometheus Operator 实战 监控 etcd 集群

上节课和大家讲解了 Prometheus Operator 的安装和基本使用方法&#xff0c;这节课给大家介绍如何在 Prometheus Operator 中添加一个自定义的监控项。 除了 Kubernetes 集群中的一些资源对象、节点以及组件需要监控&#xff0c;有的时候我们可能还需要根据实际的业务需求去添…

Java 后端 本地调试-获取微信公众号 openId

Java 后端 本地调试-获取微信公众号 openId申请测试微信公众号内网穿透工具配置公众号获取用户 openId申请测试微信公众号 微信测试公众号 内网穿透工具 netapp 配置公众号 搜索网页账号选项 点击修改&#xff0c;填写内网穿透的域名 获取用户 openId 1 第一步&#xff…

国家高新技术企业的好处

国家高新技术企业的好处&#xff1a;享受税收减免优惠政策&#xff1b;国家科研经费支持和财政拨款&#xff1b;国家级的资质认证硬招牌&#xff1b;提升企业品牌形象&#xff1b;促进企业科技转型&#xff1b;提高企业市场价值&#xff1b;提高企业资本价值&#xff1b;吸引市…

【电脑讲解】电脑如何实现双系统

核心提示&#xff1a;电脑双系统&#xff0c;大家应该不会太陌生&#xff0c;有的网吧就装的是双系统&#xff0c;双系统可以满足不同人群的需要&#xff0c;可以这样说&#xff0c;一个系统可以专门工作使用&#xff0c;另一个可以供玩游戏使用&#xff0c;&#xff08;电脑硬…

[Linux打怪升级之路]-环境变量

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、认识环…

一文详解JVM的内存结构

目录 前言 内存结构 程序计数器 虚拟机栈 本地方法栈 堆内存 方法区 内部组成 前言 Java的JVM解决的问题是跨操作系统问题。程序员只需要专注于代码的编写&#xff0c;这些代码能够在不同的操作系统Mac&#xff0c;Linux和Windows运行的前提是JVM。JVM还提供了垃圾回收机制…

Linux终端操作-Xshell和Xftp(家庭版)

目录一&#xff0c;终端操作二&#xff0c;软件安装1&#xff0c;Xshell, Xftp下载2&#xff0c;Xshell安装3&#xff0c;Xftp安装三&#xff0c;使用1&#xff0c;Xshell建立连接2&#xff0c;Xftp上传文件一&#xff0c;终端操作 上一篇博客记录了如何本地安装虚拟机并实现本…

SpringSecurity(十五)---OAuth2的运行机制(上)-OAuth2概念和授权码模式讲解

一、前言 鸽了很久&#xff0c;其实也因为自己确实比较忙&#xff0c;加之自己在造demo的时候也遇到了很多问题&#xff0c;并且网上这方面的解答非常之少&#xff0c;不过也正是因为少&#xff0c;才更加让我想写这样的知识分享&#xff0c;最终&#xff0c;在一篇博客的解答…