大家好,我是虎哥,从今天开始,我将花一段时间,开始将自己从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