当前位置: 首页 > news >正文

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这个服务,并且在小海龟串口中再生成一只,同时指定了小海龟的位姿。

服务的小总结:

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


未完待更新...

相关文章:

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

目录 一、ROS2节点 1.概念 2.实例 &#xff08;1&#xff09;ros2 run &#xff08;2&#xff09;ros2 node list &#xff08;3&#xff09;remapping重映射 &#xff08;4&#xff09;ros2 node info 二、话题 &#xff08;1&#xff09; ros2 topic list &#xf…...

【Spring Boot】深度复盘在开发搜索引擎项目中重难点的整理,以及遇到的困难和总结

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Spring Boot】深度复盘在开发搜索引擎项目中重难点的整理&#xff0c;以及遇到的困难和总结 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 什么是搜索引…...

配置docker阿里云镜像地址

一、安装docker的步骤&#xff1a; 1.yum install -y yum-utils 2.yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo --配置阿里云仓库3.yum makecache fast4.yum install docker-ce -y5.docker version …...

ICML 2024 Mamba 论文总结

2024ICML&#xff08;International Conference on Machine Learning&#xff0c;国际机器学习会议&#xff09;在2024年7月21日-27日在奥地利维也纳举行 &#x1f31f;【紧跟前沿】“时空探索之旅”与你一起探索时空奥秘&#xff01;&#x1f680; 欢迎大家关注时空探索之旅 …...

Sass详解

Sass简介 Sass&#xff08;Syntactically Awesome Stylesheets&#xff09;是一种CSS预处理器&#xff0c;它在CSS的语法基础上添加了一些功能和语法糖&#xff0c;提供了更强大和灵活的样式表语言。 Sass可以通过定义变量、嵌套规则、混合、继承等功能&#xff0c;帮助开发者…...

如何实现一个高效的排序算法?

要实现一个高效的排序算法&#xff0c;可以考虑以下几个方面&#xff1a; 1.选择合适的排序算法&#xff1a;根据数据规模和特点选择合适的排序算法。例如&#xff0c;对于小规模的数据可以选择插入排序或选择排序&#xff0c;而对于大规模数据可以选择归并排序或快速排序。 …...

Linux--10---安装JDK、MySQL

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 安装JDK[Linux命令--03----JDK .Nginx. 数据库](https://blog.csdn.net/weixin_48052161/article/details/108997148) 第一步 查询系统中自带的JDK第二步 卸载系统中…...

【大数据】MapReduce JAVA API编程实践及适用场景介绍

目录 1.前言 2.mapreduce编程示例 3.MapReduce适用场景 1.前言 本文是作者大数据系列专栏的其中一篇&#xff0c;前文我们依次聊了大数据的概论、分布式文件系统、分布式数据库、以及计算引擎mapreduce核心概念以及工作原理。 书接上文&#xff0c;本文将会继续聊一下mapr…...

图像分类和文本分类(传统机器学习和深度学习)

1. 传统机器学习—决策树 1.1 图像分类代码 from sklearn import tree from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split# 加载数据集 iris load_iris() X, y iris.data, iris.target# 划分数据集 X_train, X_test, y_train,…...

基于SpringBoot和Hutool工具包实现的验证码案例

目录 验证码案例 1. 需求 2. 准备工作 3. 约定前后端交互接口 需求分析 接口定义 4. Hutool 工具介绍 5. 实现验证码 后端代码 前端代码 6. 运行测试 验证码案例 随着安全性的要求越来越高&#xff0c;目前项目中很多都会使用验证码&#xff0c;只要涉及到登录&…...

python-找出四位数中的玫瑰花数

【问题描述】玫瑰花数指一个n位数&#xff08;n>4),其每位上的数字的n次幂之和等于本身。 请求出所有四位数中的玫瑰花数 【输入形式】 【输出形式】 【样例输入】 【样例输出】1634 8208 9474 【样例说明】 【评分标准】 完整代码如下&#xff1a; for n in ra…...

Linux-命令上

at是一次性的任务&#xff0c;crond是循环的定时任务 如果 cron.allow 文件存在&#xff0c;只有在文件中出现其登录名称的用户可以使用 crontab 命令。root 用户的登录名必须出现在 cron.allow 文件中&#xff0c;如果这个文件存在的话。系统管理员可以明确的停止一个用户&am…...

青鸟云报修系统:实现高效、便捷的维修申请处理

在日常生活和工作中&#xff0c;故障报修难免会遇到&#xff0c;售后报修服务则成为了解决问题的关键。纸质化售后报修维修申请单&#xff0c;作为报修流程中的重要一环&#xff0c;在一定程度上能够记录和追踪售后报修维修流程&#xff0c;但在实际操作过程中却存在着诸多弊端…...

Python解析网页

目录 1、Beautiful Soup 2、解析数据 3、遍历文档树 4、搜索文档树 一、Beautiful Soup 1、什么是Beautiful Soup 定义&#xff1a;Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库. 功能&#xff1a;它能够通过你喜欢的转换器实现惯用的文档导航,查找,修…...

IDEA连接MySQL后如何管理数据库

上一节讲解了IDEA如何连接MySQL数据库管理系统&#xff0c;接下来我们就可以在IDEA里使用MySQL来管理数据库了。那么如果我们现在还没有创建需要的数据库怎么办&#xff1f;本节就来教大家如何在IDEA连接MySQL后管理数据库(创建/修改/删除数据库、创建/修改/删除表、插入/更新/…...

linux新机快速配置ssh

配置SSH以实现证书登录 要配置新的Linux机器以实现证书登录&#xff0c;您需要执行以下步骤&#xff1a; 安装SSH服务器&#xff1a; sudo apt-get install openssh-server修改SSH端口&#xff08;可选&#xff09;&#xff1a; SSH配置文件&#xff08;通常位于/etc/ssh/sshd…...

使用elementUI的form表单校验时,错误提示位置异常解决方法

问题 最近在做项目时遇到一个问题&#xff0c;使用elementUI的Descriptions 描述列表与form表单校验时&#xff0c;遇到校验信息显示的位置不对&#xff0c;效果如图&#xff1a; 期望显示在表格中。 效果 代码 html <el-form :model"form":rules"rules…...

Android面试题之Kotlin常见集合操作技巧

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 list 创建和修改 不可变list,listOf var list listOf("a","d","f") println(list.getOrElse(3){"Unkn…...

网络拓扑—DNS服务搭建

文章目录 DNS服务搭建网络拓扑配置网络DNSPC 安装DNS服务配置DNS服务创建正向查找区域创建反向查找区域创建子域名 PC机DNS域名解析 DNS服务搭建 网络拓扑 为了节省我的U盘空间&#xff0c;没有用路由器&#xff0c;所以搭建的环境只要在同网段即可。 //交换机不用考虑 DNS&a…...

Mybatis-Plus笔记

1.MP基础 1.1 MP常见注解 TableName(“指定表明”) TableName("tb_user") // 指定表名 Data NoArgsConstructor AllArgsConstructor Builder public class User {private Long id;private String userName;private String password;private String name;private I…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...