ROS 2 节点简介

背景

ROS 2 graph

在接下来的几篇教程中,您将学习构成 ROS 2 graph 的一系列核心 ROS 2 概念。

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

ROS 2 中的节点

ROS 中的每个节点都应负责单一的,模块化的目的(例如,一个节点用于控制轮式电机,一个节点用于控制激光测距仪等)。每个节点都可以通过 topic,service,action 或 parameter 向其它节点发送和接收数据。完整的机器人系统由许多协同工作的节点组成。在 ROS 2 中,单个可执行文件(C++程序,Python程序等)可以包含一个或多个节点。

前提条件

在以前的教程中向您介绍了如何安装在此使用的 turtlesim 包。

与往常一样,不要忘记在每一个新打开的终端中 source ROS 2 的配置文件 。

任务

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 node list

ros2 node list 将显示所有正在运行的节点的名称。当您想要与节点进行交互时,或者当您的系统运行着许多节点并需要对其进行跟踪时,这特别有用。

当 turtlesim 仍在另一个终端中运行时,打开一个新终端,然后输入以下命令:

ros2 node list

终端将返回节点名称:

/turtlesim

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

ros2 run turtlesim turtle_teleop_key

在这里,我们将再次搜索 turtlesim 软件包,这一次是名为turtle_teleop_key的可执行文件。

返回到您运行 ros2 node list 的终端,然后再次运行它。现在,您将看到两个活动节点的名称:

/turtlesim
/teleop_turtle

2.1 重映射

通过重映射,您可以自定义默认的节点属性,例如节点名称,topic 名称,service 名称等。在上一个教程中,您通过重映射 turtle_teleop_key 来更改要控制的默认乌龟。

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

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

由于您在 turtlesim 上再次调用 ros2 run,因此将打开另一个 turtlesim 窗口。如果您返回到运行ros2 node list的终端,然后再次运行它,您将看到三个节点名称:

/turtlesim
/teleop_turtle
/my_turtle

3 ros2 node info

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

ros2 node info <node_name>

要检查最新的节点 my_turtle ,请运行以下命令:

ros2 node info /my_turtle

ros2 node info 返回与该节点交互的订阅者,发布者,service 和 action 的列表(ROS graph 的连接)。具体输出应如下所示:

/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 graph 连接概念的更多信息。

总结

节点是一个基本的 ROS 2 元素,在机器人系统中用于单一的,模块化的目的。

在本教程中,您通过运行可执行文件 turtlesim_nodeturtle_teleop_key,以利用来自 turtlesim 软件包创建的节点。

您学习了如何使用 ros2 node list 发现活动的节点名称以及使用 ros2 node info 查看单个节点信息。这些工具对于了解复杂的真实机器人系统中的数据流至关重要。

猜你喜欢

转载自www.cnblogs.com/xGonZh10n/p/12956769.html