大家好,我是虎哥,从今天开始,我将花一段时间,开始将自己从ROS1切换到ROS2,在上一篇中,我们依托Turtlesim演示节点来逐步展开,介绍了rqt工具,这一章,我们将围绕ROS2中主要的概念“节点”展开,了解ROS 2中节点的功能以及与之交互的工具 。
目录
The ROS 2 graph
一、ROS2中节点(Nodes in ROS 2)
先决条件
1、ROS2 RUN
2、ros2 node list
3、Remapping
4、 ros2 node info
5、总结:
The ROS 2 graph
-
在接下来的几个教程中,您将了解一系列核心ROS2概念,这些概念构成了所谓的“ROS(2)图”。
-
ROS图是ROS 2元素同时处理数据的网络。它包含所有可执行文件以及它们之间的连接,如果您要将它们全部映射并可视化的话。
一、ROS2中节点(Nodes in ROS 2)
ROS中的每个节点应负责单个模块用途(例如,一个节点用于控制车轮电机,一个用于控制激光测距仪等)。每个节点都可以通过主题、服务、操作或参数向其他节点发送和接收数据。
一个完整的机器人系统由许多协同工作的节点组成。在ROS 2中,单个可执行文件(C++程序、Python程序等)可以包含一个或多个节点。
先决条件
上一个教程向您展示了如何安装此处使用的turtlesim包。一如既往,不要忘记在您打开的每一个新终端中提供ROS 2。
1、ROS2 RUN
从包中启动可执行文件
ros2 run <package_name> <executable_name>
例如,我们之前启动turtlesim
ros2 run turtlesim turtlesim_node
如您在上一教程中所见,将打开 turtlesim。这里,包名为turtlesim,可执行文件名为turtle sim_node。
然而,我们仍然不知道节点名称。可以使用ros2 node list查找节点名称.
2、ros2 node list
ros2 node list将显示所有正在运行的节点的名称。当您想要与一个节点交互时,或者当您的系统运行多个节点并且需要跟踪它们时,这尤其有用。打开一个新终端,同时在另一个终端上运行turtlesim,然后输入以下命令:
ros2 node list
打开另一个新终端并使用以下命令启动遥操作节点:
ros2 run turtlesim turtle_teleop_key
继续使用ros2 node list 查看节点列表:
3、Remapping
重新映射允许您将默认节点属性(如节点名称、主题名称、服务名称等)重新分配给自定义值。在上一个教程中,您使用了对turtle_teleop_key的重新映射来更改要控制的默认海龟。
现在,让我们重新分配/turtlesim节点的名称。在新终端中,运行以下命令:
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
由于您再次调用 ros2 run在turtlesim,另一个turtlesim将打开。然而,现在,如果您返回到运行ros2节点列表的终端,并再次运行它,您将看到三个节点名称:
4、 ros2 node info
现在你知道了节点的名称,可以通过以下方式访问有关它们的更多信息:
ros2 node info <node_name>
用你最后的命令为例子,my_turtle
执行如下命令:
ros2 node info /my_turtle
会得到如下回复:
nvidia@ubuntu:~$ ros2 node info /my_turtle
/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:
现在,尝试查看节点 teolep_turtle ,运行相同的命令,看看它的连接与my_turtle有何不同。
5、总结:
节点是一个基本的ROS 2元素,在机器人系统中用于单一的模块化目的。在本教程中,通过运行可执行文件turtlesim_node和turtle_teleop_key,您利用了从turtlesim包创建的节点。您学习了如何使用ros2 node list 来发现活动节点名称和ros2 node info。这些工具对于理解复杂的真实世界机器人系统中的数据流至关重要。
以上就是我今天要分享的内容。纠错,疑问,交流: 911946883@qq.com