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可以获得节点信息,这些信息对于理解一个复杂的、真实的机器人系统中的数据流至关重要。

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

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

未经允许,禁止转载。

ROS2学习之旅(4)——理解ROS2 Graph中的节点的更多相关文章

  1. ROS2学习之旅(1)——初识ROS2

    本系列用来记录ROS2的学习过程,有错误或者不合理的地方请大家指正.由于博主具有ROS1的学习经历,会添加一些与ROS1的一些对比,当然这对于ROS2本身的学习内容没有丝毫影响,欢迎大家积极与我在评论 ...

  2. ROS2学习之旅(14)——编写简单的发布者和订阅者(C++)

    节点是通过ROS Graph进行通信的可执行进程.在本文中,节点将通过话题以字符串消息的形式相互传递信息.这里使用的例子是一个简单的"talker"和"listener& ...

  3. ROS2学习之旅(13)——创建ROS2 功能包

    一个功能包可以被认为是ROS2代码的容器.如果希望能够管理代码或与他人共享代码,那么需要将其组织在一个包中.通过包,可以发布ROS2工作,并允许其他人轻松地构建和使用它. 在ROS2中,创建功能包使用 ...

  4. ROS2学习之旅(2)——配置ROS2环境

    目录 1.source一下setup文件 2.自动source 3.自动进入工作区(不常用) 4.检查环境变量是否设置成功 5.总结 ROS2依赖于使用shell(终端)环境组合工作空间的概念.工作空 ...

  5. ROS2学习之旅(12)——创建工作空间

    workspace(工作空间)是包含ROS2 packages(包)的文件夹.在使用ROS 2之前,有必要在终端中source一下ROS 2的安装工作区,这样就可以在该终端中使用ROS 2的软件包. ...

  6. ROS2学习之旅(15)——编写简单的服务和客户节点(C++)

    当节点使用服务进行通信时,发送数据请求的节点称为客户节点,响应请求的节点称为服务节点.请求和响应的结构由.srv文件决定. 本文的例子是一个简单的整数加法系统:一个节点请求两个整数的和,另一个节点响应 ...

  7. ROS2学习之旅(21)——创建一个动作服务和客户节点(C++)

    动作是ROS中的一种异步通信形式,动作客户端向动作服务器发送目标请求,目标服务器向操作客户端发送目标反馈和结果.本文基于前一篇自定义动作博文. 1.创建一个action_turtorials_cpp包 ...

  8. ROS2学习之旅(20)——创建一个动作消息

    本文用来自定义一个动作消息类型. 以下命令用来创建一个工作空间并建立一个功能包: mkdir -p action_ws/src cd action_ws/src ros2 pkg create act ...

  9. 滴滴Booster移动APP质量优化框架 学习之旅

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 一.Booster简介 Booster是滴滴最近开源一个的移动应 ...

随机推荐

  1. python 中 list 的append与extend区别

    append 添加的是一个对象 extend 添加的是序列与原序列合并

  2. System Verilog MCDF(二)

    整形器的接口时序: reg,grant是维持了两个clk的. chid ,length在发送数据期间不可以变化. 第一个data数据必须在start上升沿的同一个clk发送. reg,grant两者之 ...

  3. Log4j实战,依赖分析

    背景 在项目中经常被log4j的各种依赖冲突搞的焦头烂额,久病成良医啊,在这里记录一下我对log4j的理解与分析 log4j 与 log4j2 log4j2是log4j的升级版,二者互不兼容,据说lo ...

  4. (最全)No dashboards are active for the current data set. 解决tensorboard无法启动和显示问题

    按照网上的教程,我无法正常启动tensorboard,全过程没有报错,但是打开tensorboard显示No dashboards are active for the current data se ...

  5. 3D点云深度学*

    3D点云深度学* 在自动驾驶中关于三维点云的深度学*方法应用.三维场景语义理解的方法以及对应的关键技术介绍. 1. 数据 但是对于3D点云,数据正在迅速增长.大有从2D向3D发展的趋势,比如在open ...

  6. Seata分布式事务框架Sample

    前言 阿里官方给出了seata-sample地址,官方自己也对Sample提供了很多类型,可以查看学习. 我这里选择演示SpringBoot+MyBatis. 该聚合工程共包括5个module: sb ...

  7. kali2020.4安装openvas(gvm)

    记录一下,方便复习 1.更换kali源,默认源注释掉. sudo vim /etc/apt/sources.list 中科大 deb http://mirrors.ustc.edu.cn/kali k ...

  8. Linux学习笔记:Linux命令之文件处理命令

    文件处理命令 touch 命令名称:touch 执行权限:所有用户 功能描述:创建空文件 语法:touch [文件名] touch创建文件的时候命名不推荐存在空格,如下面的情况 1touch prog ...

  9. 密码学系列之:feistel cipher

    密码学系列之:feistel cipher 简介 feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构.它是由德籍密码学家Horst Feistel在I ...

  10. 【VBA】判断文件是否存在

    效果: 源码: Sub 判断文件是否存在() Dim strcfg As String strcfg = "D:\a.cfg" If Dir(strcfg, vbDirectory ...