0、学习来源

《ROS机器人高效编程》第2章
中科院软件所-机器人操作系统入门(ROS入门教程)(MOOC链接B站链接

1、ROS架构

ros架构被划分为三个部分,分别为:

  • 文件系统级(Filesystem level)
  • 计算图级(Computation Graph level)
  • 社区级(Community level)

2、文件系统级

文件系统级架构

  • 功能包(Package):是ROS中的原子级,是创建ROS程序的最小结构,是catkin编译的基本单元。包含ROS运行的进程(节点)、配置文件等。
  • 功能包清单(Package Manifest):包含功能包、许可证、依赖关系、编译标志等信息。由package.xml文件管理。
  • 元功能包(Metapackage):将几个功能包组织在一起,就是元功能包。在ROS Fuerte中,称为功能包集(Stack)。
  • 元功能包清单(Metapackage manifest):类似普通功能包,但有一个XML格式的到处标记(package.xml)。在结构上有一定限制。
  • 消息类型(Message(msg) type):消息是一个进程发送到其他进程的信息。它的说明存储在.msg文件中。
  • 服务类型(Service(srv) type):为ROS中由每个进程提供的服务定义请求和响应数据结构,它的说明存储在.srv文件中。
  • 动作类型:类似Service,带有状态反馈的通讯方式,它的说明存储在.action文件中。1

下面为一个完整的包结构:

#包结构
package
├── CMakeLists.txt
├── package.xml
├── include(头文件目录)
│   └── *.h
├── src(代码目录)
│   ├── *.cpp
│   └── *.py
├── scripts(脚本文件目录)
│   ├── *.py
│   └── *.sh
├── msg(自定义消息目录)
│   └── *.msg
├── srv(自定义服务目录)
│   └── *.srv
├── action(自定义动作目录)
│   └── *.action
├── launch(launch文件目录,多个可执行文件组织,一次性运行多个可执行文件)
│   └── *.launch
└── yaml(param/config 配置文件目录)
    └── *.yaml

2.1 工作空间

工作空间(如下catkin_ws)是一个包含编译空间(build)、开发空间(devel)、源文件空间(src)的文件夹。

  • 源文件空间(Source space):src文件夹中放置了功能包、项目等。空间中最重要的一个文件是CMakeLists.txt。
  • 编译空间(build space):在build文件夹里,保存有功能包和项目的缓存信息、配置和其他中间文件。
  • 开发空间(Development pace):devel文件夹用来保存编译后的程序,是无须安装就能用来测试的程序。

下图所示的是一个典型的工作空间:

catkin_ws
├── build
│   ├── catkin
│   ├── catkin_generated
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── Makefile
│   └── ...
├── devel
│   ├── env.sh
│   ├── include
│   ├── lib
│   ├── setup.bash
│   ├── setup.sh
│   ├── setup.zsh
│   └── ...
└── src
    ├── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
    └── ...

3、计算图级

ROS会创建一个连接到所有进程的网络。在系统中的任何节点都可以访问此网络,并通过该网络与其他节点交互,获取其他节点发送的信息,并将自身数据发布到这个网络上。

在这一层级中最基本的概念包括节点、节点管理器、参数服务器、消息、服务、主题和消息记录包,这些概念都以不同的方式向计算图级提供数据。2
在计算图级

  • 节点(node):节点是主要的计算执行进程。通过创建并将节点链接到ROS网络,可以让它与其他节点进程进行交互。
  • 节点管理器(master):节点管理器用于节点的名称注册和查找等。它也设置节点间的通信。如果在整个ROS中没有节点管理器,就无法与节点、服务、消息等通信。由于ROS本身就是一个分布式网络系统,所以可以在某一台计算机上运行节点管理器,在该管理器或其他计算机上运行节点。
  • 参数服务器(Parameter Server):参数服务器能够使数据通过密钥存储在一个系统的核心位置。通过参数,就能够在运行时配置节点或改变节点的工作任务。
  • 消息(message):节点通过消息完成彼此的沟通。消息包含一个节点发送到其他节点的信息数据。
  • 主题(topic):每个消息都必须有一个名称以便被ROS网络分发。当一个节点发送数据时,我们就说该节点正在向主题发布消息。节点可以通过订阅某个主题,接收来自其他节点的消息。主题的名称必须是唯一的,否则在同名主题之间的消息路由就会发生错误。
  • 服务(service):在发布主题时,正在发送的数据能够以多对多的方式交互。但当你需要从某个节点获得一个请求或应答时,就不能通过主题来实现了。在这种情况下,服务能够允许我们直接与某个节点进行交互。此外,服务必须有唯一的名称。
  • 消息记录包(bag):消息记录包是一种用于保存和回放ROS消息数据的文件格式。

我认为主题和服务最大的区别是:

  • 主题(topic):发布者持续发送数据,不管接收者。接受者持续接收数据,只要有数据能接收就接收,接收不到就等着。
  • 服务(service):服务请求者向服务提供者要求获取数据,那么服务提供者就进行一次相应,返回一次数据;请求者不请求获取数据,服务提供者就不发布数据。双方不进行多余的数据发布、接收操作。

4、ROS开源社区级

ROS开源社区级的概念主要是ROS资源,其能够通过独立的网络社区分享软件和知识。
这些资源包括以下几个。

4.1 发行版(Distribution)

  • ROS发行版是可以独立安装、带有版本号的一系列元功能包。ROS发行版像Linux发行版一样发挥类似的作用。这使得ROS软件安装更加容易,而且能够通过一个软件集合维持一致的版本。

4.2 软件库(Repository)

  • ROS依赖于代码存储库的联网,在这里不同的机构能够发布和分享各自的机器人软件组件。

4.3 ROS维基(ROS Wiki)

  • ROS Wiki是用于记录有关ROS信息的主要论坛。任何人都可以注册账户、贡献自己的文件、提供更正或更新、编写教程以及做其他事情。

4.4 Bug提交系统(Bug Ticket System)

  • 如果你发现问题或者想提出一个新功能,ROS提供这个资源去做这些。

4.5 邮件列表(Mailing list)

  • ROS用户邮件列表是关于ROS的主要交流渠道,能够像论坛一样交流从ROS软件更新到ROS软件使用中的各种疑问或信息。

4.6 ROS问答(ROS Answer)

  • 用户可以使用这个资源去提问题。

4.7 博客(Blog)


  1. 书里没有,根据 “中科院软件所-机器人操作系统入门(ROS入门教程)” 中提到的内容进行了补充(但是不确定Action是否可以补充在这里)。 ↩︎

  2. 我总觉得这部分内容里(包括文字和那张图),少了动作(Action),但是书却里没有(《ROS机器人高效编程》,图也是书里面的),不知道是不是我理解错了。 ↩︎

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐