了解节点
目标: 了解 ROS 2 中节点的功能以及与它们交互的工具。
教程级别: 初学者
时间: 10 分钟
背景
1 The ROS 2 graph
在接下来的几个教程中,您将了解一系列核心 ROS 2 概念,这些概念构成了所谓的“ROS (2) 图”。
ROS 图是 ROS 2 元素组成的网络,它们同时处理数据。 如果您将它们全部映射出来并进行可视化,它将包含所有可执行文件及其之间的连接。
2 Nodes in ROS 2
ROS 中的每个节点都应负责单一、模块化的用途,例如控制车轮马达或发布来自激光测距仪的传感器数据。 每个节点都可以通过主题、服务、操作或参数向其他节点发送和接收数据。
完整的机器人系统由许多协同工作的节点组成。 在 ROS 2 中,单个可执行文件(C++ 程序、Python 程序等)可以包含一个或多个节点。
先决条件
The previous tutorial 向您展示如何安装此处使用的 turtlesim
包。
与往常一样,不要忘记在 every new terminal you open.
任务
1 ros2 run
命令“ros2 run”从包中启动可执行文件。
ros2 run <package_name> <executable_name>
要运行 turtlesim,请打开一个新终端,然后输入以下命令:
ros2 run turtlesim turtlesim_node
turtlesim 窗口将会打开,就像您在 上一个教程 中看到的那样。
此处,包名称为 turtlesim
,可执行文件名称为 turtlesim_node
。
但是,我们仍然不知道节点名称。
您可以使用 ros2 node list
查找节点名称
2 ros2节点列表
“ros2 节点列表”将显示所有正在运行的节点的名称。 当您想要与节点交互时,或者当您的系统运行许多节点并需要跟踪它们时,这尤其有用。
当 turtlesim 仍在另一个终端中运行时,打开一个新终端,然后输入以下命令:
ros2 node list
终端将返回节点名称:
/turtlesim
打开另一个新终端并使用以下命令启动 teleop 节点:
ros2 run turtlesim turtle_teleop_key
这里我们再次引用“turtlesim”包,但这次我们的目标是名为“turtle_teleop_key”的可执行文件。
返回到运行“ros2 node list”的终端并再次运行它。 现在您将看到两个活动节点的名称:
/turtlesim
/teleop_turtle
2.1 重新映射
重新映射 允许您将默认节点属性(如节点名称、主题名称、服务名称等)重新分配给自定义值。
在上一个教程中,您使用 turtle_teleop_key
上的重新映射来更改 cmd_vel 主题和目标 turtle2。
现在,让我们重新分配我们的 /turtlesim
节点的名称。
在新终端中,运行以下命令:
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
由于您再次在 turtlesim 上调用“ros2 run”,因此将打开另一个 turtlesim 窗口。 但是,现在如果您返回到运行“ros2 node list”的终端并再次运行它,您将看到三个节点名称:
/my_turtle
/turtlesim
/teleop_turtle
3 ros2 节点信息
现在您知道了节点的名称,您可以使用以下命令访问有关它们的更多信息:
ros2 node info <node_name>
要检查最新节点“my_turtle”,请运行以下命令:
ros2 node info /my_turtle
“ros2 node info” 返回订阅者、发布者、服务和操作的列表。即与该节点交互的 ROS 图形连接。 输出应如下所示:
/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”有何不同。
您将在接下来的教程中了解有关 ROS 图形连接概念(包括消息类型)的更多信息。
摘要
节点是 ROS 2 的基本元素,在机器人系统中起到单一、模块化的作用。
在本教程中,您通过运行可执行文件“turtlesim_node”和“turtle_teleop_key”来利用“turtlesim”包中创建的节点。
您学习了如何使用“ros2 节点列表”来发现活动节点名称和“ros2 节点信息”来自检单个节点。
这些工具对于理解复杂的现实世界机器人系统中的数据流至关重要。
下一步
现在您已经了解了 ROS 2 中的节点,您可以继续阅读 topics tutorial。 主题是连接节点的通信类型之一。
相关内容
:doc:../../../Concepts 页面为节点的概念添加了更多细节。