理解节点 [4164]

目标: 了解ROS 2中节点的功能以及与之交互的工具。 [4165]

教程级别: 初学者 [3951]

时间: 10分钟 [16421]

背景 [16410]

1 ROS 2图 [4166]

在接下来的几个教程中,您将了解一系列组成所谓“ROS (2)图”的核心ROS 2概念。 [4167]

ROS图是一个由ROS 2元素组成的网络,这些元素同时处理数据。如果您将它们全部映射并可视化,它将包含所有可执行文件和它们之间的连接。 [4168]

ROS 2中的两个节点 [4169]

ROS中的每个节点应该负责一个单一的模块化功能,例如控制轮子马达或发布来自激光测距仪的传感器数据。每个节点可以通过主题(topics)、服务(services)、动作(actions)或参数(parameters)与其他节点进行数据的发送和接收。 [4170]

../../../_images/Nodes-TopicandService.gif

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

先决条件 [16411]

上一篇教程 中,你可以了解如何安装这里使用的 turtlesim 包。 [4172]

像往常一样,在 每个新开的终端中 都不要忘记加载 ROS 2 。 [4070]

任务 [16427]

1 ros2 run [4173]

命令``ros2 run``会从一个软件包中启动一个可执行文件。 [4174]

ros2 run <package_name> <executable_name>

要运行turtlesim,请打开一个新的终端,并输入以下命令: [4175]

ros2 run turtlesim turtlesim_node

turtlesim窗口将会打开,就像你在:doc:上一个教程<../Introducing-Turtlesim/Introducing-Turtlesim>`中看到的那样。 `[4176]

这里,包名是 使用 turtlesim 、 ros2 和 rqt [3981],可执行文件名是 turtlesim_node[4177]

然而,我们还不知道节点名称。您可以使用 ros2 node list 命令查找节点名称。 [4178]

2 ros2 node list [4179]

ros2 node list 命令将显示所有正在运行的节点的名称。当您想与节点进行交互或者系统运行多个节点时需要跟踪它们时,这特别有用。 [4180]

在另一个终端中打开新的终端,同时 turtlesim 仍在运行,请输入以下命令: [4181]

ros2 node list

终端将返回节点名称: [4182]

/turtlesim

再打开一个新的终端,并使用以下命令启动 teleop 节点: [4183]

ros2 run turtlesim turtle_teleop_key

在这里,我们再次引用了“turtlesim”软件包,但这次我们的目标是名为“turtle_teleop_key”的可执行文件。 [4184]

返回到之前运行``ros2 node list``的终端,再次运行该命令。你将会看到两个活动节点的名称: [4185]

/turtlesim
/teleop_turtle

2.1 重映射 [4186]

重映射 允许你重新分配默认节点属性,如节点名称、话题名称、服务名称等,以自定义的值。在上一个教程中,你在``turtle_teleop_key``上使用了重映射来改变``cmd_vel``话题和目标节点为**turtle2**。 [4187]

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

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

由于您再次调用``ros2 run``启动了turtlesim,将会打开另一个turtlesim窗口。但是,现在如果您返回到之前运行``ros2 node list``的终端,并再次运行该命令,您将看到三个节点名称: [4189]

/my_turtle
/turtlesim
/teleop_turtle

3. ros2节点信息 [4131]

既然您知道了节点的名称,您可以使用以下命令访问有关它们的更多信息: [4190]

ros2 node info <node_name>

要查看您最新的节点``my_turtle``,请运行以下命令: [4191]

ros2 node info /my_turtle

``ros2 node info``返回订阅者、发布者、服务和动作的列表,即与该节点进行交互的ROS图连接。输出应该如下所示: [4192]

/my_turtle
  Subscribers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /turtle1/cmd_vel: geometry_msgs/msg/Twist
  Publishers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
    /turtle1/color_sensor: turtlesim/msg/Color
    /turtle1/pose: turtlesim/msg/Pose
  Service 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/TeleportRelative
  Service Clients:

  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:

现在尝试在``/teleop_turtle``节点上运行相同的命令,观察它的连接与``my_turtle``有何不同。 [4193]

在即将进行的教程中,您将更多地了解ROS图连接概念,包括消息类型。 [4194]

总结 [16454]

节点是ROS 2中的基本元素,在机器人系统中具有单一的模块化功能。 [4195]

在本教程中,您利用了``turtlesim``包中创建的节点,通过运行``turtlesim_node``和``turtle_teleop_key``可执行文件。 [4196]

你学会了如何使用 ros2 node list 命令来发现活动节点的名称,以及使用 ros2 node info 命令来内省单个节点。这些工具对于理解复杂的实际机器人系统中的数据流非常重要。 [4197]

下一步 [16493]

现在你已经了解了ROS 2中的节点,可以继续阅读 topics tutorial。主题是连接节点的通信类型之一。 [4198]