ROS — 话题通讯机制

  • Post author:
  • Post category:其他




节点与节点管理器

机器人开发中,我们经常将机器人的整个系统划分为不同的模块,每个模块中也可能包含不同的处理单元。在ROS系统中,也采用了相似的任务处理方式,这就引入了ROS中比较重要的一个概念:

节点(Node)

,通俗的来说,一个节点即为一个可执行文件,就是一个任务执行单元;此外,ROS中还有一个

节点管理器

(Master) 作为控制中心,来管理节点之间的通讯。



节点(Node)

  • 执行具体任务的进程、独立运行的

    可执行文件

  • 不同节点

    可以使用不同的编程语言

    ,可以分布式地运行在不同的主机;
  • 节点在系统中的名称必须是唯一的。



节点管理器(Master)

  • 为节点提供

    命名和注册服务

  • 跟踪和记录话题/服务

    通信

    ,辅助节点之间相互查找、建立连接;
  • 提供

    参数服务器

    ,节点使用此服务器存储和检索运行时的参数。

在这里插入图片描述

像上图所示,Camera Node、Image Processing Node 以及 Image Display Node 在建立时,首先都要向 ROS Master 提出注册,Master 才能为各个节点提供通讯和其他服务。



rosnode 命令

rosnode命令会显示当前运行的节点信息,这是它的一些功能(测试其功能之前,先用 roscore 打开 ROS ):


1

.

$ rosnode list % 列出目前的活跃节点


这时候会返回结果

/rosout

,这表示现在只有一个节点正在运行:rosout。这个节点用于收集和记录节点调试输出信息,所以只要打开 ROS 它就会运行。


2

.

$ rosnode info [节点名] %返回特定节点的相关信息


它会返回该节点的发布、订阅和服务信息。



话题通讯

ROS 为节点之间的通讯提供了两种通讯方式,

话题(Topic)



服务(Service)

,这里首先介绍话题通讯机制。



话题和消息


  • 话题(Topic)

    — 异步通信机制

    1. 节点之间传输数据的重要总线;

    2. 使用

    发布/订阅

    模型,数据由发布者传输到订阅者,

    同一个话题的订阅者和发布者都可能不唯一


  • 消息(Message)

    — 话题传输的数据

    1. 具有一定的

    类型

    和数据结构,包括 ROS提供的

    标准类型

    和用户

    自定义类型



    2. 使用编程语言无关的

    .msg 文件

    定义,编译过程中生成对应的代码文件。

    话题模型(订阅 / 发布)

    在这里插入图片描述

    ROS中有一些对话题和消息的命令,我们以 ROS 中自带的“

    海龟”(Turtle)

    功能包示例:



rqt_graph

rqt_graph 能够创建一个显示当前系统运行情况的动态图形。

在一个新终端运行:

$ rosrun rqt_graph rqt_graph


则会看到下图窗口,可见,/teleop_turtle 节点作为话题的发布者,发送了名为 /turtle1/cmd_vel 的消息,然后 /turtlesim 作为话题的订阅者,获取来自键盘的信息:

在这里插入图片描述



rostopic

rostopic 命令工具帮助获取有关 ROS 话题相关的信息,首先使用帮助选项查看 rostopic 下的子命令。

在这里插入图片描述

下面一次介绍常用的几个命令:



1. rostopic echo :

用来打印话题内容信息,用法:

rostopic echo [topic]

。这时候我们将这个命令作用到消息 /turtle1/cmd_vel ,然后用键盘控制海龟移动,那么就会在终端看到持续刷新的速度信息。.

在这里插入图片描述

这时候再通过rqt_graph 来查看节点信息,会发现有新的节点订阅了 /turtle1/cmd_vel,这就是rostopic echo 所订阅的。

在这里插入图片描述



2. rostopic list :

rostopic list 能够列出所有当前订阅和发布的话题。通过帮助选项,可以发现所能 list 出的选项,我们通过

-v (–verbose)

选项来列出所有信息。

在这里插入图片描述



3. rostopic pub :

rostopic pub可以把数据发布到当前某个正在广播的话题上,用法:

rostopic pub [topic] [msg_type] [args]



在这里插入图片描述

但是,海龟只能走一段,要想让海龟持续转圈,应以一定的频率持续发布命令,可以使用

rostopic pub -r [hz]

来发布一个稳定的命令流,这时候海龟做的是持续运动。

在这里插入图片描述

这时,打开 rqt_graph,会发现对于 /turtle1/cmd_vel这个话题多了一个发布者,这就是我们刚刚的 rostopic 发布器节点。

在这里插入图片描述



4. rostopic hz :

rostopic hz命令可以用来查看数据发布的频率,用法:

rostopic hz [topic]

。我们看一下turtlesim_node发布/turtle/pose时有多快:

在这里插入图片描述

现在我们知道了,turtlesim正以大约60Hz的频率发布数据给turtle。



引用

本文参考了ROS Wiki和古月居 ROS 21讲的教程。



版权声明:本文为weixin_42891086原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。