ROS2学习——节点话题通信(2)

目录

一、ROS2节点

1.概念

2.实例

(1)ros2 run

(2)ros2 node list

(3)remapping重映射

(4)ros2 node info

二、话题

(1) ros2 topic list

(2) ros2 topic echo

 (3) ros2 topic info

(4)ros2 inerface show

 (5) ros2 topic pub

(6)ros2 topic hz

三、服务

(1) ros2 service list 

(2)ros2 services type

(3)ros2 service find

 (4)ros2 service call


一、ROS2节点

1.概念

        在ROS2中,每个节点都负责单一模块,不比如轮子的电机或者是传感器的数据等。每个节点都可以接受和发送信息,这些信息通过话题,服务,动作或者是参数服务器进行传递。

         所有的机器人系统都由许都节点组成。在ROS2中每个可执行文件(C++程序或者python文件)可以保护多个或者单个节点。

2.实例

(1)ros2 run

ros2 run <package_name> <executable_name>

比如我们打开小海龟的功能包:

ros2 run turtlesim turtlesim_node

 其中turtlesim为功能包名称,可执行程序的名称为turtlesim_node。

(2)ros2 node list

如果我需要查询目前运动的节点,可以直接使用该语句进行查找。

在终端中则会显示:

(3)remapping重映射

        节点重映射运行修改节点原始的属性(名字,话题名,服务属性等)

这里我们测试修改turtle_teleop_key 的属性。

ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

这里将节点名称修改为了:

/my_turtle

可以使用ros2 node list进行查看。

(4)ros2 node info

将刚刚重映射的话题,查看节点信息:

ros2 node info /my_turtle

有兴趣的读者可以查看一下原始节点的信息发现那里做出了更改。

二、话题

        ROS2将复杂的系统分解为多个模块的节点,话题则是充当节点之间信息交换的总线。

节点可以将数据发布到任意数量的话题,并同时订阅任意数量的话题。

使用rqt_graph我们可以清晰的看见节点和话题之间的关系。

打开小海龟和控制小海龟键盘的节点:

 /teleop_turtle节点发布数据给/turtle1/cmd_vel话题,这个话题将数据传递给/my_turtle节点。对于一个比较复杂的系统可以使用rqt很方便的看清楚程序内部话题节点信息接收关系。

(1) ros2 topic list

        该语句可现实当前的话题,如果在指令的后面带上-t选项则可以显示出话题的类型

(2) ros2 topic echo

如果已知话题的名字,可以使用该语句输出话题的信息在终端当中。

ros2 topic echo <topic_name>ros2 topic echo /turtle1/cmd_vel

如果此时你移动键盘方向键:

 (3) ros2 topic info

ros2 topic info /turtle1/cmd_vel

这个语句和node info类似,终端会输出话题的类型发送和接受者的相关信息。

(4)ros2 inerface show

如果我们需要查询一个话题使用的类型是有那些信息可以使用该语句,话题的类型可以通过

ros2 topic list -t
ros2 interface show geometry_msgs/msg/Twist

 (5) ros2 topic pub

同时我们也可以在终端中发布和修改话题,该语句的使用格式:

ros2 topic pub <topic_name> <msg_type> '<args>'

我们需呀知道话题的名称,话题发布信息的类型,args则是按照话题的类型输入的信息(ROS2中规定要以yaml的格式进行输入)。

比如我希望小海龟x轴移动2,z轴旋转1.8弧度。

ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

这里--once表示发布出这个信息后就退出。

可以看见小海龟转动了1/4圈,当然如果你希望它一直旋转则可以设置发布的频率:

ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

这里需要去除--once选项,并且加上--rate 1表示这个话题以1HZ的形式进行发布,这样我们可以看见小海龟一直在花圈运动。

当然最后你也可以去rqt_graph中查看话题和节点的变换。

(6)ros2 topic hz

 改语句在终端中输出需要查询话题的频率。

ros2 topic hz /turtle1/pose

三、服务

        服务通信是是ROS中的另一种通信方式。这种方式不同于发布于订阅的方式,服务通讯可以理解为呼叫和响应的模型。多个节点使用同一个服务通信,只能是一个进行。

(1) ros2 service list 

运行该语句会再终端中输出目前运行的服务通信:

可以看出一个节点中带有6个参数的名字,在ROS2中几乎大部分的服务都是这样的结构。

同样的如果在最后加上-t 则可以显示出服务的类型

(2)ros2 services type

该语句的作用是查看服务的类型。服务的类型类似于话题。服务有两个部分组成:

信息的请求+响应

ros2 service type <service_name>
ros2 service type /clear

 Empty类型表示的是这个服务没有发送任何请求和响应。

 

(3)ros2 service find

如果你知道服务使用的类型,想找到服务的名字则可以使用:

ros2 service find std_srvs/srv/Empty

 (4)ros2 service call

如果你知道服务的名字和类型,则可以调用这个服务:

#ros2 service call <service_name> <service_type> <arguments>
ros2 service call /clear std_srvs/srv/Empty

 如果你打开了小海龟的节点,并且使用键盘控制运行了一段轨迹。启动这个服务会发现小海龟走的路径都被清除了。

同时我们可以再对/spawn进行操作

ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"

 我们再次调用/spawn这个服务,并且在小海龟串口中再生成一只,同时指定了小海龟的位姿。

服务的小总结:

对比话题:话题可以一对多,一个发布者多个订阅者。服务式一种请求/响应模式,客户端提出请求,服务段生成响应。是只能单独进行的。


未完待更新...

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

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

相关文章

头歌openGauss-存储过程第1关:创建存储过程

编程要求 1、创建第1个存储过程&#xff0c;并调用&#xff1b; 1&#xff09;创建存储过程&#xff0c;查询emp表数据&#xff1b; 2&#xff09;调用存储过程&#xff1b; --创建存储过程&#xff0c;获得计算机&#xff08;cs&#xff09;系学生选课情况并将结果写入临时表t…

人脸识别:基于卷积神经网络(CNN)分类思想的人脸识别系统

本文来自公众号 “AI大道理” —————— 项目配套视频课程&#xff1a; 平台&#xff1a;荔枝微课 链接&#xff1a;十方教育 项目地址&#xff1a;https://github.com/AIBigTruth/CNN_faces_recognition 之前很多人来询问这个项目怎么做&#xff0c;代码跑不起来&#…

USB数据恢复软件:轻松找回U盘重要数据!

USB数据丢失的原因 USB数据丢失有一些常见原因&#xff0c;了解这些原因有利于恢复数据。 文件意外删除病毒攻击软件错误未安全弹出USB设备格式化USB设备 顺便一提&#xff0c;如果你通过快捷键“Ctrl D”删除了数据&#xff0c;那你可以从回收站中还原它们。如果你永久删除…

Isaac Sim仿真平台学习(1)认识Isaac Sim

0.前言 上一个教程中我们下载好了Isaac Sim&#xff0c;这一章我们将来简单了解一下Isaac Sim平台。 isaac Sim仿真平台安装-CSDN博客 1.Isaac Sim是啥&#xff1f; What Is Isaac Sim? — Omniverse IsaacSim latest documentation Isaac Sim是NVDIA Omniverse平台的机器…

【编译原理复习笔记】属性文法

属性文法 也称为属性翻译文法&#xff0c;由 Knuth 提出&#xff0c;以上下文无关文法为基础 &#xff08;1&#xff09;为每个文法符号&#xff08;终结符与非终结符&#xff09;配备相关的属性&#xff0c;代表与该文法符号相关的信息 &#xff08;2&#xff09;属性文法对于…

数据链路层协议——以太网协议

1. 数据链路层 网络层用于将数据从一台主机发送到另一台主机。传输层用于将数据可靠的从一台主机发送到另一台主机。&#xff08;网络层没有保证可靠性的策略&#xff0c;传输过程中可能会出现各种意外&#xff0c;例如&#xff1a;丢包&#xff0c;网络拥塞等。通过传输层可以…

跨域问题的4种解决方案

文章导读 前言 跨域问题指的是在Web开发中&#xff0c;由于浏览器的同源策略限制&#xff0c;当一个网页尝试访问与它不同源&#xff08;协议、域名或端口不同&#xff09;的资源时&#xff0c;可能会遇到安全限制导致无法正常访问的问题。这种策略旨在防止恶意网站读取或修改其…

订餐系统总结、

应用层&#xff1a; SpringBoot:快速构建Spring项目&#xff0c;采用“约定大于配置”的思想&#xff0c;简化Spring项目的配置开发。 SpringMvc&#xff1a;Spring框架的一个模块&#xff0c;springmvc和spring无需通过中间整合层进行整合&#xff0c;可以无缝集成。 Sprin…

完整的数据可视化方法集

在当前的大数据时代&#xff0c;了解如何可视化数据是UI/UX设计师技能的重要组成部分。如今&#xff0c;几乎所有的公司都需要良好的数据可视化作为确定业务方向和决策的参考。数据的可视化结果越好&#xff0c;用户的决策就越科学。 1、什么是数据可视化 数据可视化是将信息…

张量 t-product 积(matlab代码)

参考文献&#xff1a;Tensor Robust Principal Component Analysis with a New Tensor Nuclear Norm 首先是文章2.3节中 t-product 的定义&#xff1a; 块循环矩阵&#xff1a; 参考知乎博主的例子及代码&#xff1a;&#xff08;t-product与t-QR分解&#xff0c;另一篇傅里叶对…

vue通过for循环生成input框后双向绑定失效问题

有些时候页面上有太多的表单元素&#xff0c;一个个的写太过繁琐&#xff0c;拿 input 框举例&#xff0c;众多的 input 框&#xff0c;无非就是输入框前的说明和 input 框的 name 属性不一样 <el-form :inline"true" :model"formInline" size"mi…

01-05.Vue自定义过滤器

目录 前言过滤器的概念过滤器的基本使用给过滤器添加多个参数 前言 我们接着上一篇文章01-04.Vue的使用示例&#xff1a;列表功能 来讲。 下一篇文章 02-Vue实例的生命周期函数 过滤器的概念 概念&#xff1a;Vue.js 允许我们自定义过滤器&#xff0c;可被用作一些常见的文本…

[协议]stm32读取AHT20程序示例

AHT20温度传感器使用程序&#xff1a; 使用i2c读取温度传感器数据很简单&#xff0c;但市面上有至少两个手册&#xff0c;我这个对应的手册贴出来&#xff1a; main: #include "stm32f10x.h" // Device header #include <stdint.h> #includ…

数智赋能内涝治理,四信城市排水防涝解决方案保障城市安全运行

由强降雨、台风造成城市低洼处出现大量积水、内涝的情况时有发生&#xff0c;给人们出行带来了极大不便和安全隐患&#xff0c;甚至危及群众生命财产安全。 为降低内涝造成的损失&#xff0c;一方面我们要大力加强城市排水基础设施的建设&#xff1b;另一方面要全面掌握城市内涝…

U-Boot menu菜单分析

文章目录 前言目标环境背景U-Boot如何自动调起菜单U-Boot添加自定义命令实践 前言 在某个厂家的开发板中&#xff0c;在进入它的U-Boot后&#xff0c;会自动弹出一个菜单页面&#xff0c;输入对应的选项就会执行对应的功能。如SD卡镜像更新、显示设置等&#xff1a; 目标 本…

Unity射击游戏开发教程:(20)增加护盾强度

在本文中,我们将增强护盾,使其在受到超过 1 次攻击后才会被禁用。 Player 脚本具有 Shield PowerUp 方法,我们需要调整盾牌在被摧毁之前可以承受的数量,因此我们将声明一个 int 变量来设置盾牌可以承受的击中数量。

微信小程序画布显示图片绘制矩形选区

wxml <view class"page-body"><!-- 画布 --><view class"page-body-wrapper"><canvas canvas-id"myCanvas" type"2d" id"myCanvas" classmyCanvas bindtouchstart"touchStart" bindtouchmo…

OpenFeign快速入门 替代RestTemplate

1.引入依赖 <!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--负载均衡器--><dependency><groupId>org.spr…

【全网最全】2024电工杯数学建模B题问题一14页论文+19建模过程代码+py代码+2种保奖思路+数据等(后续会更新成品论文等)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片链接&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024电工杯数学建模B题问一论文19建模过程代码py代码2种保奖思路数据等&#xff08;后续会更新成品论文等&#xff09;「首先来看看目前已…

C++中的四种类型转换运算符

隐式类型转换是安全的&#xff0c;显式类型转换是有风险的&#xff0c;C语言之所以增加强制类型转换的语法&#xff0c;就是为了强调风险&#xff0c;让程序员意识到自己在做什么。但是&#xff0c;这种强调风险的方式还是比较粗放&#xff0c;粒度比较大&#xff0c;它并没有表…