ROS2学习之旅(4)——理解ROS2 Graph中的节点

2021年7月14日 1点热度 0条评论 来源: Love&Robot

ROS(2)图(ROS(2) graph)是一个同时处理数据的基于ROS2元素的网络,它包含了所有的可执行文件以及它们之间的连接。图中的基本元素包括:节点(nodes)、话题(topics)、服务(services)、参数(parameters)以及动作(actions)。下面对ROS2中的节点进行介绍。ROS中的每个节点应具有一个单独的模块化用途(例如,一个节点用于控制电机,一个节点用于控制激光雷达等)。每个节点都可以通过话题、服务、动作或参数向其他节点发送和接收数据。

一个完整的机器人系统应该由许多协同工作的节点组成。在ROS2中,单个可执行文件(c++程序、Python程序等)可以包含一个或多个节点,这一点与ROS1不同,在ROS1中,单个可执行文件只能包含一个节点。

在开始接下来的操作之前,确保已经完成turtlesim的安装以及配置好ROS2的环境,可以参考我之前写的ROS2学习之旅系列的文章。

1. ros2 run

ROS2中的ros2 run命令与ROS1中的rosrun命令功能相同,即运行功能包中的可执行程序:

ros2 run <package_name> <executable_name>

接下来运行turtlesim,在终端中运行:

ros2 run turtlesim turtlesim_node

在这里,包名称为turtlesim,可执行程序的名称为turtlesim_node

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_turtle

2.1重映射

重映射可以将默认节点属性(如节点名称、话题名称、服务名称等)重新分配给自定义值。在上一篇博文中,在turtle_teleop_key上使用了重映射来更改默认被控制的海龟。

接下来,对节点/turtlesim进行重映射,在终端中运行:

ros2 run turtlesim_node --ros-args --remap __node:=my_turtle

此时,将会打开另一个turtlesim窗口。再次运行ros2 ndoe list将会得到:

/turtlesim
/teleop_turtle
/my_turtle

3.ros2 node info

在知道节点名称的前提下,可以通过info获得有关节点的更多信息:

ros2 node info <node_name>

例如,想要知道节点my_turtle的更多信息,可以在终端运行:

ros2 node info /my_turtle

ros2 node info会返回与该节点交互的订阅者,发布者,服务以及动作的列表,此时终端输出:

/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:

4.总结

节点是ROS2的基本元素,在ROS中具有单一的模块化功能。通过ros2 node list/info可以获得节点信息,这些信息对于理解一个复杂的、真实的机器人系统中的数据流至关重要。

如果给您带来帮助,希望能给点个关注,以后还会陆续更新有关机器人的内容,点个关注不迷路~欢迎大家一起交流学习。

都看到这了,点个推荐再走吧~

未经允许,禁止转载。

    原文作者:Love&Robot
    原文地址: https://www.cnblogs.com/love-robot/p/15008528.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。