欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ROS 架构

程序员文章站 2022-03-29 19:59:59
...

ROS 的架构


软件层次架构

从软件实现的角度,ROS 的架构可以分为三个层次:OS层中间层应用层

ROS 架构

  • OS 层:OS 层建立在 Linux 操作系统之上;主要提供了硬件抽象、底层驱动等;
  • 中间层:ROS 的中间层进一步封装 OS 层提供的接口,为应用层提供格式统一,模块化的接口。其主要工作为:
    1. 把 TCP/UDP 通信封装为 TCPROS/UDPROS,并提供主题通信、服务通信、参数共享等三种通信方式;
    2. 额外提供进行间通信方式–Nodelet,适用于实时性较高的应用;
    3. 在通信的基础之上提供大量机器人开发的库,如数据类型定义,坐标变换,运动控制等
  • 应用层主要调用中间层的接口实现各种应用功能。在应用层,我们需要注意的有:
    1. 应用层有一个管理者 Master,负责管理整个系统的运行;
    2. ROS 社区共享了大量机器人应用功能包,功能包内的模块都是以节点为单位运行,以 ROS 标准的输入输出作为接口。我们在使用的时候,不需要关注模块内部实现细节,只用明白接口规则即可复用。

系统层次架构

从系统实现的角度,ROS 可以划分为:计算图、文件系统、开源社区三个视角;如下图所示:

ROS 架构


计算图


从计算图的结构来看,ROS 系统软件的功能模块是以节点(节点即为进程)为单位独立运行的,节点以拓扑的方式互联,构成了一个系统网络,即为系统的计算图。如下图所示:

ROS 架构

端点表示各个节点,端点之间的边表示节点之间的通信方式。
在计算图中,有几个重要的概念要着重说明:消息话题服务节点管理器

消息(Message)

消息,又称之为 话题消息,它是话题通信发送的信息。每一种消息都是一种严格的数据结构。消息类型支持标准的数据类型(整型,浮点型,布尔型等),也支持嵌套结构和数组,还可以进行自定义;


话题(Topic)

话题 是 ROS 系统中最核心的通信方式,它基于发布/订阅(Publish/Subsribe)的方式传递。一个节点可以针对一个话题(Topic)发布消息(这个节点的角色为发布者/Talker),一个节点可以订阅这个消息(这个节点称为订阅者/Listener);话题(Topic)通信具有如下特点:

  • 发布者和订阅者并不知道彼此的存在;
  • 一个话题(Topic)可以有多个发布者,也可以有多个订阅者;
  • 发布者向话题(Topic)发布消息,订阅者从话题(Topic)接收消息,消息的流向是单方向的;

ROS 架构


服务(Service)

服务(Service)是ROS中另外一个重要的通信方式,它基于 C/S 模型实现。一个节点成为服务端(Server),一个节点成为客户端(Client);客户端发送请求,服务端回应请求;这种通信方式具有以下特点:

  • 服务端和客户端必须知道彼此的存在;
  • 客户端发送请求,服务端回应请求,信息流向是双向的;
  • 数据类型包含两部分:请求数据类型、应答数据类型;

Master(节点管理器)

ROS Master,ROS系统的管理者,也称为节点管理器(因为ROS的应用程序可以认为由节点的拓扑结构组成),其主要作用是管理整个ROS系统的正常运行;具体主要表现在:

  1. 登记和管理节点信息、话题信息,帮助节点之间相互查找和建立连接;
  2. 管理全局共享参数,为共享参数通信提供帮助;

文件系统

按照工程文件的组织结构,ROS 功能包的文件系统组织结构如下:

ROS 架构

首先来说明功能包中各个部分的内容:

功能包(Package):功能包是ROS软件中的基本单元,包含ROS节点、库、配置文件等;

  • 功能包清单(Package Manifest):每一个功能包都包含一个名为 package.xml 的功能包清单,用于记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等;如下图所示:

ROS 架构

  • CMakeList.txt:编译器编译功能包的规则;
  • 消息类型(msg):存放自定义的消息类型文件,文件名以 .msg 结尾;
  • 服务类型(srv):存放自定义服务类型文件,文件名以 .srv 结尾;
  • 源码(src):用来存放功能包源代码的文件;
  • 其他的文件夹含义:
    • config:放置功能包中的配置文件,由用户创建、文件名可以不同;
    • inlude:放置功能包中需要用到的头文件;
    • scripts:放置可以直接运行的 Python 脚本;
    • launch:放置功能包中的所有启动文件;
    • action:放置功能包自定义的动作指令;

元功能包

元功能包是一种特殊的功能包,只包含一个 package.xml 元功能包清单文件。它的主要作用就是将多个功能包整合成一个逻辑上独立的功能包,类似于功能包集合的概念;
元功能包清单 package.xml 文件与功能包清单 package.xml 文件类型,但是需要包含一个引用标签如下:

<export>
    <metapackage/>
</export>

元功能包清单也不需要 <buildtool_depend> 标签声明编译过程依赖的其他功能包,只需要使用 <run_depend> 标签声明功能包运行时依赖的其他功能包。

导航功能包的元功能包清单如下:

$ roscd navigation
$ gedit package.xml

ROS 架构


开源社区


ROS 开源社区中资料非常丰富,主要有以下几种:

  • 提供ROS的发行版(Distrubutiom)
  • 提供软件源(Repository):不同的组织机构可以开发或者共享自己的机器人软件;
  • ROS Wiki:记录 ROS 信息文档的主要论坛,所有人都可以注册、登陆,并上传自己开发的文档;
  • 邮件列表(Mailing List):交流 ROS 更新的主要渠道;
  • ROS Answers:咨询ROS相关问题的主要网站;
  • 博客:发布ROS 社区中新闻、图片,视频(http://www.ros.org/news)

功能包、元功能包、软件仓库、ROS 社区的主要关系

ROS 架构

相关标签: 架构