文章目录
- 1,ROS系统介绍
- 2,系统分层结构
1,ROS系统介绍
ros系统的设计目标是便于智能机器人研发过程中的代码复用,因此ros采用开源的方式来维护整个系统,即通过现有的ros系统来加快智能机器人系统的研发,并为这些研发工作提供完善且丰富的工具,从而使得开发人员可以有能力开发任何所需要的智能机器人。与此同时,又与开源社区保持紧密的互动可以为ROS提供丰富且可用的第三方功能包,从而进一步丰富智能机器人所需要的开发工具,实现系统闭环。
ROS采用了一种分布式的方式来组织各个功能包,每个功能包可以独立的设计和研发,然后以松散的进行集成,且保持即插即用的便携性。在ROS系统中,所有可执行的程序都被叫做节点(node),并且他的功能不受任何形式的限制,从简单的hello word程序,到各类传感器数据的采集程序,以及带识别功能的摄像头程序都可以是一个节点,各节点之间通过ROS提供的消息传递机制进行通信,这些通信包括点对点的数据通信,单点对多点的·数据通信,以及多点对单点的数据通信。总之,ros系统主要有三个方面的特点:
1,分布式的架构: ROS将每个工作进程都看做是一个独立的节点,并使用节点管理工具进行统一的管理,同事还为这些节点提供了一套完整且高效的消息传递机制。这种架构可以把复杂的机器人系统分散为一个个独立且精巧的程序,从而以即插即用的方式进行功能拼装,以适应不同类型的机器人的协同工作的挑战,此外,分布式架构的实现中大量采用得Socket进行通信,使得这些节点既可以运行在比如说stm32这类的单片机系统上,也可以运行在比如树莓派这类计算设备上面,同时还能运行在大型服务器系统上,甚至可以运行在安卓等系统上。
2,多语言的支持:由于采用分布式加购的特点,使得对于ROS节点来说,只要硬件平台支持Socket,那么就可以在该平台实现节点功能,也因为这个原因,节点程序可以使用任何的编程语言进行编写,因此ROS在许多功能上采用XML这类和编程语言无关的脚本实现。此外,ROS还支持多种现代编程语言,比如C++,python等。
3,良好的可伸缩性:在使用 ROS 进行智能机器人研发中,既可以简单地编写一两个节点单独运行,也可以直接使用社区贡献的功能节点,此外通过 rospack、 roslaunch 等指令将很多个节点组织成一个更为庞大的工程,并指定它们之间的依赖关系及运行时的组织形式,从而得到了功能复杂的智能机器人 。
2,系统分层结构
从软件工程的角度来看, ROS 系统主要分为三个层次,分别是 OS 层、中间层和应用层。
1、 OS 层:由于 ROS 系统并不是传统意义上的操作系统,而是一组智能机器人软件开发工具集,因此需要如 Linux 系统、 Windows 系统这样的操作系统做硬件抽象的支撑和资源的调度,如进程管理、内存管理等,因此正如第四章所说,目前 ROS1 支持的操作系统是 Linux,如Ubuntu、 Arch、 Debian 等,而 ROS2 则除了支持 Linux 系统外,还支持 Windows 和 MAC OS。
2、 中间层:由于操作系统的通用性,因此并不会为了机器人开发对应的中间件,因此 ROS 在通用操作系统上进行了大量的工作,其中最为重要的就是完成了基于 TCP 和 UDP 的机器人通信系统,在再此基础上完成 TCPROS 和 UDPROS,并实现如订阅-发布、客服端-服务器等通信模型。此外, ROS 还开发了大量与机器人相关的基础库,如数据类型库、机器人坐标转换库和运动控制库等,这些库的完成为不同机器人提供统一的接口,而不需要进行重复的开发。
3、 应用层:最后是应用层, ROS 完成了整个机器人系统的核心节点——Master,并且每个可运行的智能机器人系统只有一个 Master。该节点主要负责整个机器人系统中各个节点之间的数据通信和队列调度,同时提供了标准的输入输出接口,使得开发人员不需要关心每个节点具体的数据通信过程,而只需要关心节点功能的实现,提高了智能机器人开发的效率。
从系统实现的角度来看, ROS 系统也可以分为三个层次,分别是计算图、文件系统和开源社区,
1,计算图:所谓计算图,是以数学中的“图”概念进行命名,即每个功能节点(Node)是图中的一个节点,节点和节点之间可以是双向通信,也可以是单向通信。
Node与Node之间的数据采用消息(Message)的方式进行传递,并且Message中的数据以固定的结构进行组织,除了支持基本的数据类型,如整形等,还支持嵌套的数据类型,以及自定义的数据类型。而节点与节点之间有三种方式,第一种是订阅-发布,第二种是客户端-服务器,第三种是动作(action)。
2,文件系统:一个完整的智能机器人系统包含众多的功能节点,而每个节点又包含了许多的消息类型、服务类型、功能代码等,因此 ROS 系统必须制定出一套文件系统的规则来组织这些功能节点,以及功能节点中的功能文件。在 ROS 系统中,首先需要有个工作空间(Workspace),该空间中存放源代码(src)、编译的过程文件(devel),以及编译完成的目标文件(build),而在源代码文件夹中又存放了各个功能节点,这些功能节点以包(Package)的形式存在,随后
在每个功能包中又包含了消息类型(msg)、服务类型(srv)、功能代码(src)等。
3、 开源社区: ROS 的开源社区活跃,并且提供非常的丰富资源,包括众多可用的功能包,以及智能机器人的开发知识,其中软件包的获取通过几条简单的指令就可以集成和使用,而知识的获取则通过邮件列表、论坛、博客等形式获取,如图4-7所示。具体来说 ROS 社区主要有六方面功能,分别是定期的 ROS 新版发行、软件源的维护、 ROS Wiki、邮件列表、 ROSAnswer,以及博客。