找回密码
 立即注册
首页 业界区 安全 机器人操作系统ROS2之理解节点:节点的功能以及与它们交 ...

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

裸历 2025-6-1 00:09:39
背景

1、ROS2图

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

2、ROS2中的节点

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

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

1、ros2 run

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

在这里, 包名是turtlesim,可执行程序是turtlesim_node。但是我们仍然还不知道节点名称。您可以通过命令“ros2 node list”找到节点名。
2、ros2 node list

ros2 node list会显示所有正在运行的节点名。当您想要与某个节点进行交互时,或者当您的系统运行了许多节点,并想要跟踪它们时,这将非常有用。
保持上一个终端中turtlesim运行,然后打开一个新的终端,输入以下命令:
  1. ros2 node list
复制代码
新的终端会返回当前正在运行的节点名:
  1. /turtlesim
复制代码
接着,再打开另一个新的终端,打开接受键盘输入的teleop节点:
  1. ros2 run turtlesim turtle_teleop_key
复制代码
在这里,我们又一次用到了turtlesim包,但是这次我们的执行的程序是turtle_teleop_key。
返回到您运行ros2 node list终端,并重新运行一次,您将会看到两个正在运行的节点:
  1. /turtlesim
  2. /teleop_turtle
复制代码
2.1、重映射

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

现在您已经知道了节点的名称,您可以使用以下命令访问节点的更多信息:
  1. ros2 node info <node_name>
复制代码
比如,检查您最后一个节点my_turtle,运行以下命令:
  1. ros2 node info <node_name>/my_turtle
复制代码
ros2 node info会返回一个列表,其中包含了定阅者、服务、动作等等。也就是说与该节点交互的ROS图连接。输出应该是这样的:
  1. /my_turtle
  2.   Subscribers:
  3.     /parameter_events: rcl_interfaces/msg/ParameterEvent
  4.     /turtle1/cmd_vel: geometry_msgs/msg/Twist
  5.   Publishers:
  6.     /parameter_events: rcl_interfaces/msg/ParameterEvent
  7.     /rosout: rcl_interfaces/msg/Log
  8.     /turtle1/color_sensor: turtlesim/msg/Color
  9.     /turtle1/pose: turtlesim/msg/Pose
  10.   Service Servers:
  11.     /clear: std_srvs/srv/Empty
  12.     /kill: turtlesim/srv/Kill
  13.     /my_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
  14.     /my_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
  15.     /my_turtle/get_parameters: rcl_interfaces/srv/GetParameters
  16.     /my_turtle/list_parameters: rcl_interfaces/srv/ListParameters
  17.     /my_turtle/set_parameters: rcl_interfaces/srv/SetParameters
  18.     /my_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
  19.     /reset: std_srvs/srv/Empty
  20.     /spawn: turtlesim/srv/Spawn
  21.     /turtle1/set_pen: turtlesim/srv/SetPen
  22.     /turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
  23.     /turtle1/teleport_relative: turtlesim/srv/TeleportRelative
  24.   Service Clients:
  25.   Action Servers:
  26.     /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  27.   Action Clients:
复制代码
现在尝试在/teleop_turtle节点上运行相同的命令,看看它的连接与my_turtle有什么不同。
总结

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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册