了解ROS 2节点

Goal目标: Learn了解ROS 2中节点的功能以及与它们交互的工具。 [待校准@9174]

教程级别: 初学者 [Alyssa@7088]

时间: 10分钟 [Alyssa@7452]

背景

1 ROS 2图 [待校准@9175]

在接下来的几个教程中,您将学习一系列核心ROS 2概念,这些概念构成了所谓的 “ROS (2) 图”。 [待校准@9176]

ROS图是ROS 2元素同时处理数据的网络。它包含所有可执行文件以及它们之间的连接 (如果要将它们全部映射并可视化)。 [待校准@9177]

ROS 2中的2个节点 [待校准@9178]

ROS中的每个节点应负责单个模块目的 (例如,一个用于控制车轮电机的节点,一个用于控制激光测距仪的节点等)。每个节点可以通过话题、服务、动作或参数向其他节点发送和接收数据。 [待校准@9179]

../_images/Nodes-TopicandService.gif

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

先决条件

[需手动修复的语法] previous tutorial 向您展示了如何安装此处使用的 turtlesim 包装。 [待校准@9181]

和往常一样,不要忘记在 every new terminal you open 中源文件ROS 2。 [待校准@9131]

任务

1 ros2运行 [待校准@9182]

命令 ros2 run launch是包中的可执行文件。 [待校准@9183]

ros2 run <package_name> <executable_name>

要运行turtlesim,请打开一个新终端,然后输入以下命令: [待校准@9184]

ros2 run turtlesim turtlesim_node

就像你在 previous tutorial 上看到的那样,斑驳窗将会打开。 [待校准@9185]

这里,包名是 turtlesim ,可执行名称是 turtlesim_node[待校准@9186]

然而,我们仍然不知道节点名称。您可以使用 ros2 node list 找到节点名称 [待校准@9187]

2 ros2节点列表 [待校准@9188]

[需手动修复的语法]``ros2 node list`` will显示所有正在运行的节点的名称。当您想要与一个节点交互时,或者当您有一个系统运行许多节点并需要跟踪它们时,这尤其有用。 [待校准@9189]

当turtlesim仍在另一个终端中运行时,打开一个新终端,然后输入以下命令: [待校准@9190]

ros2 node list

终端将返回节点名称: [待校准@9191]

/turtlesim

打开另一个新终端,并使用以下命令启动teleop节点: [待校准@9192]

ros2 run turtlesim turtle_teleop_key

在这里,我们再次搜索 turtlesim 包,这次是为可执行文件命名为 turtle_teleop_key[待校准@9193]

回到你运行 ros2 node list 的终端,然后再次运行它。现在,您将看到两个活动节点的名称: [待校准@9194]

/turtlesim
/teleop_turtle

2.1重新映射 [待校准@9195]

[需手动修复的语法] Remapping 允许您将默认节点属性 (如节点名称、话题名称、服务名称等) 重新分配给自定义值。在上一个教程中,您使用 turtle_teleop_key 上的重新映射来更改被控制的默认海龟。 [待校准@9196]

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

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

由于您再次在turtlesim上调用 ros2 run ,另一个turtlesim窗口将打开。但是,现在如果您返回到运行 ros2 node list 的终端,并再次运行它,您将看到三个节点名称: [待校准@9198]

/turtlesim
/teleop_turtle
/my_turtle

3 ros2节点信息 [待校准@9142]

现在您已经知道了节点的名称,可以通过以下方式访问有关它们的更多信息: [待校准@9199]

ros2 node info <node_name>

要检查您的最新节点 my_turtle ,请运行以下命令: [待校准@9200]

ros2 node info /my_turtle

[需手动修复的语法]``ros2 node info`` returns与该节点交互的订阅者、发布者、服务和动作 (ROS图连接) 的列表。输出应如下所示: [待校准@9201]

/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
  Services:
    /clear: std_srvs/srv/Empty
    /kill: turtlesim/srv/Kill
    /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
    /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
  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:

现在尝试在 /teleop_turtle 节点上运行相同的命令,看看它的连接与 my_turtle 有什么不同。 [待校准@9202]

您将在即将到来的教程中了解更多关于ROS图连接概念的信息,包括消息类型。 [待校准@9203]

总结

节点基金amental ROS 2起单一模块化目的机器人系统。 [待校准@9204]

在本教程中,您通过运行可执行文件 turtlesim_nodeturtle_teleop_key ,利用了从 turtlesim 包创建的节点。 [待校准@9205]

您学习了如何使用 ros2 node list 发现活动节点名称,并使用 ros2 node info 在单个节点上进行反思。这些工具对于理解复杂的、真实世界的机器人系统中的数据流至关重要。 [待校准@9206]

下一步

既然您了解了ROS 2中的节点,您就可以继续研究 topics tutorial 了。话题是连接节点的通讯类型之一。 [待校准@9207]