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;代码跑不起来&#…

数据库读写分离

实现 MySQL 的读写分离主要可以通过以下几种方式&#xff1a; 一主多从架构&#xff1a; 设置一个主数据库&#xff08;Master&#xff09;来处理写操作&#xff08;如 INSERT、UPDATE、DELETE&#xff09;。 设置多个从数据库&#xff08;Slave&#xff09;来处理读操作&…

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;属性文法对于…

【LSTM】基于Matlab的LSTM模型建模(代码)

训练目标&#xff1a;用LSTM训练数据 数据&#xff1a;随时间递增&#xff0c;患者患病的概率&#xff08;横坐标1个单位代表1个时间单位&#xff09; 以下代码可直接运行 clc clear close all warning off % 关闭报警信息 %% 1.数据操作 % 1.1.导入数据&#x…

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

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

跨域问题的4种解决方案

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

yarn的基本命令和用法

Yarn通过并行安装、离线模式、确定性安装以及更好的依赖解析算法&#xff0c;为开发者提供了更快、更稳定、更安全的包管理体验。它保留了npm的大部分功能&#xff0c;并在此基础上做了大量优化&#xff0c;下面我们就来详述Yarn的核心命令和实用技巧。&#x1f4da; 安装Yarn…

【MySQL精通之路】InnoDB(7)-锁和事务模型(2)-事务模型

主博客&#xff1a; 【MySQL精通之路】InnoDB(7)-锁和事务模型-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】InnoDB(7)-锁和事务模型(1)-锁-CSDN博客 下一篇&#xff1a; 目录 1.事务隔离级别 2.1 可重复读 2.2 读已提交 2.3 读取未提交 2.4 序列化读 2.自动提交、…

订餐系统总结、

应用层&#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;另一篇傅里叶对…

HTML5 设备访问及输入输出设备交互

目录 设备访问输入设备交互输出设备交互设备访问 设备信息访问 navigator.userAgent:获取浏览器的用户代理字符串,从中可以解析出设备类型、操作系统、浏览器版本等信息。 const userAgent = navigator.userAgent; console.log(userAgent); // 输出类似 "Mozilla/5.0…

算法(Algorithm)

算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令&#xff0c;代表着用系统的方法描述解决问题的策略机制。也就是说&#xff0c;算法能够对一定规范的输入&#xff0c;在有限时间内获得所要求的输出。算法应该具有…

【python004】miniforge可行替代方案实战总结(最近更新中)

1.熟悉、梳理、总结项目研发实战中的miniforge日常使用中的问题。随着版本更新&#xff0c;做了一些变动&#xff0c;如商业化限制&#xff0c;取消一些语法等。 2.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01;

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;可被用作一些常见的文本…

软件模块的耦合

软件模块的耦合 耦合是指软件模块之间的依赖程度&#xff0c;耦合越低&#xff0c;模块之间的独立性越高&#xff0c;软件的可维护性、可重用性也越高。下面是几种常见的耦合类型的概念&#xff1a; 数据耦合&#xff08;Data Coupling&#xff09;&#xff1a; 当一个模块通…