购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 ROS基础

了解ROS的基本工作流程及其术语,可以帮助读者理解已有的ROS应用程序,并在此基础上构建自己的应用程序。这一节将向读者介绍重要的概念,这些概念在接下来的章节中将会使用到。如果读者发现本章中缺少某个主题,请放心,稍后将在相应的章节中进行介绍。

ROS有三个不同层级的概念,分别是文件系统层级、计算图层级和ROS社区层级。

1.3.1 文件系统层级

文件系统层级解释了ROS文件在硬盘上的组织方式,如图1.5所示。

图1.5 ROS文件系统层级

从图1.5中可以看到,ROS中的文件系统主要可以分类为元包、功能包、功能包清单、消息、服务、代码和其他文件。以下是对每个组件的简单描述:

· 元包: 元包将特定应用程序的包列表分组。例如,在ROS中,有一个名为navigation(导航)的元包,用于移动机器人导航。它可以保存相关功能包的信息,并在自己的安装过程中帮助安装这些相关功能包。

· 功能包: ROS中的软件主要被组织为ROS功能包。可以说ROS功能包是ROS的原子构建单元。功能包可以由ROS节点/进程、数据集和配置文件组成,所有这些内容都被组织在一个模块中。

· 功能包清单: 每个功能包中都有一个名为package.xml的清单文件。此文件包含功能包的名称、版本、作者、许可证和依赖项等信息。元包的package.xml文件由相关功能包的名称组成。

· 消息: ROS通过发送ROS消息进行通信。消息数据的类型可以在扩展名为.msg的文件中定义。这些文件称为消息文件。在这里,我们将遵循一个约定,即将消息文件放在our_package/msg/message_files.msg下。

· 服务: 计算图层级概念之一是服务。与ROS消息类似,我们约定将服务定义放在our_package/srv/service_files.srv下。

1.3.2 计算图层级

ROS计算图是一个基于点对点的网络,它将所有信息一起处理。ROS图的概念包括节点、话题、消息、节点管理器、参数服务器、服务和数据包,具体如图1.6所示。

图1.6 ROS计算图层级

图1.6展示了ROS计算图中的各种概念。以下是对每个概念的简单描述:

· 节点: ROS节点是使用ROS API相互通信的处理过程(即功能模块)。机器人可能有许多节点来执行计算。例如,自主移动机器人可以具有用于硬件接口、读取激光扫描以及定位和地图构建的节点。我们可以使用roscpp和rospy等ROS客户端库创建ROS节点,我们将在1.4节中讨论这些。

· 节点管理器: ROS节点管理器(后简称master)作为中间节点工作,帮助在不同的ROS节点之间建立连接。master拥有在ROS环境中运行的所有节点的所有细节。它可以在节点之间交换各类信息,以便在节点之间建立连接。交换相应信息后,两个ROS节点之间即可开始通信。

· 参数服务器: 参数服务器在ROS中具有重要作用。节点可以在参数服务器中存储变量并设置其隐私权限。如果参数具有全局作用域,则其他所有节点都可以访问它。ROS参数服务器与master一起运行。

· 消息: ROS节点可以通过多种方式相互通信。在各种通信方式中,节点均以ROS消息的形式发送和接收数据。ROS消息是ROS节点用来交换数据的数据结构。

· 话题: 在两个ROS节点之间通信和交换ROS消息的方法之一称为ROS话题。话题是使用ROS消息交换数据的命名总线。每个话题都有一个特定的名称,一个节点将数据发布到一个话题,另一个节点可以通过订阅该话题来读取数据。

· 服务: 服务是另一种通信方法,其功能类似于话题。话题使用发布或订阅交互,而服务使用请求或回复方法。一个节点将充当服务提供者,在其中运行服务例程,而客户端节点从服务器请求服务。服务器将执行服务例程并将结果发送给客户端。客户端节点将会等待服务器响应并提供结果。

· 数据包: 数据包是ROS提供的一个有效工具,用于记录和回放ROS话题。当开展机器人相关研究时,可能有些情况下我们需要在没有实际硬件的情况下工作。使用rosbag,我们可以记录传感器数据,并将数据包文件复制到其他计算机上,通过回放来检查数据以及应用程序的执行结果。

1.3.3 ROS社区层级

自诞生至今,ROS社区正以更为迅猛的速度发展。读者可以找到2000多个由社区积极支持、修改和使用的功能包。社区层级包括用于共享软件和知识的ROS资源,如图1.7所示。

以下是图1.7的每个部分的简要说明:

图1.7 ROS社区层级

· 发行版: ROS发行版是ROS功能包的版本化集合,类似于Linux发行版。

· 资源仓库: 与ROS相关的功能包和文件依赖于 版本控制系统 (Version Control System,VCS),如Git、SVN和Mercurial,世界各地的开发人员可以通过这个系统为功能包做出贡献。

· ROS Wiki: ROS社区Wiki是ROS的知识中心,任何人都可以在其中创建其功能包的文档。读者可以在ROS Wiki上找到关于ROS的标准文档和教程。

· 邮件列表: 订阅ROS邮件列表可以让用户获得关于ROS功能包的最新更新,同时用户还可以通过邮件列表询问关于ROS的问题,网址为 http://wiki.ros.org/Mailing%20Lists?action=show

· ROS Answers: ROS Answers网站是ROS的stack overflow。用户可以询问有关ROS和相关领域的问题,网址为 http://answers.ros.org/questions/

· 博客: ROS博客定期更新ROS社区相关活动的照片和视频,网址为 http://www.ros.org/news

下一节将介绍如何在ROS中进行通信。

1.3.4 ROS中的通信

下面介绍ROS中两个节点如何使用ROS话题相互通信。图1.8展示了节点间通过话题进行通信的过程。

如图1.8所示,有两个节点分别名为talker和listener。talker节点将名为Hello World的字符串消息发布到名为/talker的话题中,而listener节点订阅此话题。整个过程包含了三个阶段,在图中分别标记为(1)、(2)和(3),让我们看看每个阶段发生了什么:

(1):在运行ROS中的任何节点之前,我们首先启动master。启动后,它将等待其他节点。当talker节点(发布者)开始运行时,它将连接到master,并与master交换其所要发布话题的详细信息,包括话题名称、消息类型和发布节点URI。master的URI是一个全局值,所有节点都可以连接到它。master通过列表维护与其连接的发布者。每当发布者的详细信息发生更改时,列表将自动更新。

(2):当我们启动listener节点(订阅者)时,它将连接到master并交换节点的详细信息,例如要订阅的话题、其消息类型和节点URI。与发布者类似,master也维护一个订阅者列表。

图1.8 ROS节点通过话题进行通信的过程

(3):每当出现针对同一话题的订阅者和发布者时,master将进行订阅者和发布者URI的交换,帮助两个节点建立连接和交换数据。订阅者和发布者建立连接后,就不需要master的角色了。数据并不流经master,而是直接在相互连接的节点间交换消息。

有关节点、名称空间和用法的更多信息,请访问 http://wiki.ros.org/Nodes

现在我们已经了解了ROS通信的基本原理,接下来介绍几个ROS客户端库。 i19iY8iRp/7TdW1v0hxYYzj2JlsuYbrVthxXRJOaTCUeUmG2hGiYYFq0/wzxABW7

点击中间区域
呼出菜单
上一章
目录
下一章
×