ROS 架构

ROS 的架构


软件层次架构

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

在这里插入图片描述

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

系统层次架构

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

在这里插入图片描述


计算图


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

在这里插入图片描述

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

消息(Message)

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


话题(Topic)

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

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

在这里插入图片描述


服务(Service)

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

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

Master(节点管理器)

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

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

文件系统

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

在这里插入图片描述

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

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

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

在这里插入图片描述

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

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

在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值