【ROS2入门】理解 ROS 2 节点

news/2025/2/12 23:28:19/

        大家好,我是虎哥,从今天开始,我将花一段时间,开始将自己从ROS1切换到ROS2,在上一篇中,我们依托Turtlesim演示节点来逐步展开,介绍了rqt工具,这一章,我们将围绕ROS2中主要的概念“节点”展开,了解ROS 2中节点的功能以及与之交互的工具 。

目录

The ROS 2 graph

一、ROS2中节点(Nodes in ROS 2)

先决条件

1、ROS2 RUN

2、ros2 node list

3、Remapping

4、 ros2 node info

5、总结:


The ROS 2 graph

  • 在接下来的几个教程中,您将了解一系列核心ROS2概念,这些概念构成了所谓的“ROS(2)图”。

  • ROS图是ROS 2元素同时处理数据的网络。它包含所有可执行文件以及它们之间的连接,如果您要将它们全部映射并可视化的话。

一、ROS2中节点(Nodes in ROS 2)

ROS中的每个节点应负责单个模块用途(例如,一个节点用于控制车轮电机,一个用于控制激光测距仪等)。每个节点都可以通过主题、服务、操作或参数向其他节点发送和接收数据。

        一个完整的机器人系统由许多协同工作的节点组成。在ROS 2中,单个可执行文件(C++程序、Python程序等)可以包含一个或多个节点。

先决条件

上一个教程向您展示了如何安装此处使用的turtlesim包。一如既往,不要忘记在您打开的每一个新终端中提供ROS 2。

1、ROS2 RUN

从包中启动可执行文件

ros2 run <package_name> <executable_name>

例如,我们之前启动turtlesim

ros2 run turtlesim turtlesim_node

如您在上一教程中所见,将打开 turtlesim。这里,包名为turtlesim,可执行文件名为turtle sim_node。

然而,我们仍然不知道节点名称。可以使用ros2 node list查找节点名称.

2、ros2 node list

ros2 node list将显示所有正在运行的节点的名称。当您想要与一个节点交互时,或者当您的系统运行多个节点并且需要跟踪它们时,这尤其有用。打开一个新终端,同时在另一个终端上运行turtlesim,然后输入以下命令:

ros2 node list

打开另一个新终端并使用以下命令启动遥操作节点:

ros2 run turtlesim turtle_teleop_key

继续使用ros2 node list 查看节点列表:

3、Remapping

重新映射允许您将默认节点属性(如节点名称、主题名称、服务名称等)重新分配给自定义值。在上一个教程中,您使用了对turtle_teleop_key的重新映射来更改要控制的默认海龟。

现在,让我们重新分配/turtlesim节点的名称。在新终端中,运行以下命令:

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

由于您再次调用 ros2 run在turtlesim,另一个turtlesim将打开。然而,现在,如果您返回到运行ros2节点列表的终端,并再次运行它,您将看到三个节点名称:

4、 ros2 node info

现在你知道了节点的名称,可以通过以下方式访问有关它们的更多信息:

ros2 node info <node_name>

用你最后的命令为例子,my_turtle 执行如下命令:

ros2 node info /my_turtle

会得到如下回复:

nvidia@ubuntu:~$ ros2 node info /my_turtle
/my_turtleSubscribers:/parameter_events: rcl_interfaces/msg/ParameterEvent/turtle1/cmd_vel: geometry_msgs/msg/TwistPublishers:/parameter_events: rcl_interfaces/msg/ParameterEvent/rosout: rcl_interfaces/msg/Log/turtle1/color_sensor: turtlesim/msg/Color/turtle1/pose: turtlesim/msg/PoseService Servers:/clear: std_srvs/srv/Empty/kill: turtlesim/srv/Kill/my_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters/my_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes/my_turtle/get_parameters: rcl_interfaces/srv/GetParameters/my_turtle/list_parameters: rcl_interfaces/srv/ListParameters/my_turtle/set_parameters: rcl_interfaces/srv/SetParameters/my_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically/reset: std_srvs/srv/Empty/spawn: turtlesim/srv/Spawn/turtle1/set_pen: turtlesim/srv/SetPen/turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute/turtle1/teleport_relative: turtlesim/srv/TeleportRelativeService Clients:
​Action Servers:/turtle1/rotate_absolute: turtlesim/action/RotateAbsoluteAction Clients:

现在,尝试查看节点 teolep_turtle ,运行相同的命令,看看它的连接与my_turtle有何不同。

5、总结:

        节点是一个基本的ROS 2元素,在机器人系统中用于单一的模块化目的。在本教程中,通过运行可执行文件turtlesim_node和turtle_teleop_key,您利用了从turtlesim包创建的节点。您学习了如何使用ros2 node list 来发现活动节点名称和ros2 node info。这些工具对于理解复杂的真实世界机器人系统中的数据流至关重要。

以上就是我今天要分享的内容。纠错,疑问,交流: 911946883@qq.com


http://www.ppmy.cn/news/12103.html

相关文章

JavaEE进阶第二课:Spring创建与使用

上一篇我们介绍了Spring的概念&#xff0c;知道了Spring是众多工具方法的IoC容器。 但是纸上谈兵终觉浅&#xff0c;这一篇文章就来介绍Spring创建与使用&#xff0c; 注之后我们对对象的称呼就叫Bean 1.1Spring项目的创建与配置 1.创建maven项目&#xff0c;语言选java&…

Linux-剪切重命名命令

对于将文件移动&#xff08;复制后剪切&#xff09;到目标文件夹中&#xff0c;命令如下&#xff1a; ①命令&#xff1a;mv 要移除的文件名称.txt 目标文件夹/ 对于给文件进行重命名可以采用GUI的方式&#xff0c;也可以操作终端命令行&#xff0c;即将该文件移动到其同…

【数据结构与算法-Python】变位词判断的不同方法比较

【数据结构与算法-Python】变位词判断的不同方法比较一、问题描述二、解题思路2.1 逐个检查2.1.1 算法实现2.1.2 算法分析2.2 排序比较2.2.1 算法实现2.2.2 算法分析2.3 暴力法2.3.1 算法实现2.3.2 算法分析2.4 计数比较2.4.1 算法实现2.4.2 算法分析一、问题描述 所谓 “变位…

基于matlab的汽车牌照识别程序详细教程

设计一个基于matlab的汽车牌照识别程序&#xff0c;能够实现车牌图像预处理&#xff0c;车牌定位&#xff0c;字符分割&#xff0c;然后通过神经网络对车牌进行字符识别&#xff0c;最终从一幅图像中提取车牌中的字母和数字&#xff0c;给出文本形式的车牌号码。关键词&#xf…

【数据结构】链表

1.链表的概念及结构概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。2. 链表的分类实际中链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结构&#xff1a;1. 单向或者双向2.…

第十三届蓝桥杯C++B组省赛 J 题——砍竹子(AC)

1.砍竹子 1.题目描述 这天&#xff0c;小明在砍竹子&#xff0c;他面前有 nnn 棵竹子排成一排&#xff0c;一开始第 iii棵竹子的高度为 hihihi。 他觉得一棵一棵砍太慢了&#xff0c;决定使用魔法来砍竹子。 魔法可以对连续的一段相同高度的竹子使用&#xff0c;假设这一段…

nginx中ngx_cycle_s的conf_ctx初始化

ngx_cycle_t是结构体ngx_cycle_s的别名typedef struct ngx_cycle_s ngx_cycle_t;结构体ngx_cycle_s的定义 struct ngx_cycle_s {void ****conf_ctx;ngx_pool_t *pool;ngx_log_t *log;ngx_log_t new_l…

Metasploit渗透框架介绍及永恒之蓝复现

Metasploit渗透框架介绍及永恒之蓝复现一、Metasploit渗透框架介绍1.1 名词解释1.2 MSF简介1.3 MSF框架结构1.4 MSF命令汇总1.4.1 常用命令1.4.2 基本命令1.4.3 Exploits模块1.4.4 漏洞名称规则1.5 MSF模块介绍1.5.1 auxiliary(辅助模块)1.5.2 exploits(漏洞利用模块)1.5.3 pay…