了解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]
一个完整的机器人系统由许多协同工作的节点组成。在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_node
和 turtle_teleop_key
,利用了从 turtlesim
包创建的节点。 [待校准@9205]
您学习了如何使用 ros2 node list
发现活动节点名称,并使用 ros2 node info
在单个节点上进行反思。这些工具对于理解复杂的、真实世界的机器人系统中的数据流至关重要。 [待校准@9206]
下一步
既然您了解了ROS 2中的节点,您就可以继续研究 topics tutorial 了。话题是连接节点的通讯类型之一。 [待校准@9207]