ROS 2 节点简介
Posted xgonzh10n
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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_node
和 turtle_teleop_key
,以利用来自 turtlesim
软件包创建的节点。
您学习了如何使用 ros2 node list
发现活动的节点名称以及使用 ros2 node info
查看单个节点信息。这些工具对于了解复杂的真实机器人系统中的数据流至关重要。
以上是关于ROS 2 节点简介的主要内容,如果未能解决你的问题,请参考以下文章
百度 Apollo Cyber RT简介基本概念以及与 ROS 对照