裸历 发表于 2025-6-1 00:09:39

机器人操作系统ROS2之理解节点:节点的功能以及与它们交互的工具

背景

1、ROS2图

ROS图是由同时处理数据的ROS2各个元素组成的网络。如果你把ROS图映射出来,并做可视化的话,可以看到其所有的可执行文件以及它们之间的连接。

2、ROS2中的节点

ROS中的每个节点应该专注于单一模块化功能,例如控制轮毂电机或发布激光测距仪的传感器数据。节点之间可通过话题(topics)、服务(services)、动作(actions)或参数(parameters)向其他节点发送和接收数据。
一个完整的机器人系统通常由许多协同工作的节点组成。在ROS2中,单个可执行文件(c++程序、Python程序等)可以包含一个或多个节点。
准备

如果您看过之前的教程,应该还记得安装ROS2完成后需要配置环境变量。
这一节中,同样不要忘记在使用ROS2前需要先设置环境:
# Replace ".bash" with your shell if you're not using bash
# Possible values are: setup.bash, setup.sh, setup.zsh
source /opt/ros/jazzy/setup.bash任务

1、ros2 run

ros2 run命令用于起动一个ROS2包中的可执行程序
ros2 run <package_name> <executable_name>比如运行turtlesim,您需要首先打开一个新的终端,然后输入以下命令:
ros2 run turtlesim turtlesim_node一个模拟窗口会出现,窗口中间会有一个随机海龟:

在这里, 包名是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_turtle2.1、重映射

重映射功能允许您将节点的默认属性(如节点名称、话题名称、服务名称等)重新分配为自定义值。
现在,让我们重新分配/turtlesim节点的名称。在一个新的终端中,运行如下命令:
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle由于您再次调用ros2 run运行一个新的turtlesim包里的turtlesim_node,这将打开另一个turtlesim窗口。现在如果您返回到运行ros2 node list的终端,并再次运行它,您将看到三个节点名称,其中有一个是您刚刚重新分配的节点,名字是my_turtle:
/my_turtle/turtlesim
/teleop_turtle3、ros2 node info

现在您已经知道了节点的名称,您可以使用以下命令访问节点的更多信息:
ros2 node info <node_name>比如,检查您最后一个节点my_turtle,运行以下命令:
ros2 node info <node_name>/my_turtleros2 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
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有什么不同。
总结

节点是ROS2的一个基本元素,在机器人系统中服务于单一的、模块化的目的。
您通过运行可执行文件turtlesim_node和turtle_teleop_key,使用了turtlesim功能包中的节点。
您学会了如何使用ros2 node list查看运行中的节点名称,以及通过ros2 node info来查看单个节点的详细信息。这些工具对于理解复杂真实机器人系统中的数据流至关重要。
关注【智践行】公众号,发送 【机器人】 获得机器人经典学习资料

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 机器人操作系统ROS2之理解节点:节点的功能以及与它们交互的工具