【ROS2指南-3】理解ROS2节点

目标:了解 ROS 2 中节点的功能,以及与它们交互的工具。

教程级别:初学者

时间: 10分钟

内容

  • 背景

    • 1 ROS 2 图

    • ROS 2 中的 2 个节点

  • 先决条件

  • 任务

    • 1 ros2 运行

    • 2 ros2节点列表

    • 3 ros2节点信息

  • 概括

  • 下一步

  • 相关内容

背景

1 ROS 2 图

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

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

ROS 2 中的 2 个节点

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

【ROS2指南-3】理解ROS2节点_第1张图片

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

先决条件

前面的教程向您展示了如何安装turtlesim此处使用的包。

任务

1 ros2 运行

该命令从包中启动可执行文件:ros2 run

ros2 run  

要运行 turtlesim,请打开一个新终端,然后输入以下命令:

ros2 run turtlesim turtlesim_node

turtlesim 窗口将打开,如您在上一教程中看到的那样。

在这里,包名称是turtlesim,可执行文件名称是turtlesim_node

但是,我们仍然不知道节点名称。您可以使用以下方法查找节点名称ros2 node list

2 ros2节点列表

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 重映射

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

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

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

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

/turtlesim
/teleop_turtle
/my_turtle

3 ros2节点信息

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

ros2 node info 

要检查您的最新节点,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
  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.

您将在接下来的教程中了解有关 ROS 图形连接概念的更多信息。

概括

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

在本教程中,您turtlesim通过运行可执行文件turtlesim_nodeturtle_teleop_key.

您学习了如何使用来发现活动节点名称并在单个节点上进行内省。这些工具对于理解复杂的真实机器人系统中的数据流至关重要。

ros2 node list

ros2 node info

下一步

现在您已了解 ROS 2 中的节点,您可以继续学习主题教程。主题是连接节点的通信类型之一。

你可能感兴趣的:(ROS2,机器人)