随着人工智能的发展,机器人也迎来了全新的发展机遇。机器人与人工智能大潮的喷发,必将像互联网一般,再次为人们的现代生活带来一次全新的革命。

1. 历史起源

硬件技术的飞速发展,在促进机器人领域快速发展和复杂化的同时,也对机器人系统的软件开发提出了巨大挑战。机器人平台与硬件设备越来越丰富,致使软件代码的复用性和模块化需求越加强烈,而已有的机器人系统又不能很好地适应需求。

为迎接机器人软件开发面临的巨大挑战,产生了多种优秀的机器人软件框架,为软件开发工作提供了极大的便利,其中最为优秀的软件框架之一就是机器人操作系统ROS(Robot Operating System)。

ROS是一个用于编写机器人软件的灵活框架,它集成了大量的工具、库、协议,提供类似操作系统所提供的功能,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,可以极大简化繁杂多样的机器人平台下的复杂任务创建与稳定行为控制。

ROS最初应用于斯坦福大学人工智能实验室与机器人技术公司Willow Garage合作的个人机器人项目(Personal Robots Program),2008年Willow Garage接手维护,2013年后由开源机器人基金会(OSRF)管理。

该项目研发的机器人——PR2,在ROS框架的基础上,可以完成插插座、叠衣服、做早饭等不可思议的功能。2010年Willow Garage正式以开放源码的形式发布了ROS框架,并很快在机器人研究领域掀起了ROS开发与应用的热潮。

在短短的几年时间里,ROS得到了广泛应用,各大机器人平台几乎都支持ROS框架,例如Pioneer、Nao、TurtleBot、Lego NXT等,开源社区内的ROS功能包也呈指数级增长,涉及的应用领域包括轮式机器人、人形机器人、工业机器人、农业机器人等。

ROS在机器人领域的浪潮也涌入国内,近年来国内机器人开发者也普遍采用ROS开发自己的机器人系统,不少科研院校和高新企业已经在ROS的集成方面取得了显著成果,并且不断反哺ROS社区,促进了开源社区的繁荣发展。

ROS的迅猛发展,已经促使它成为机器人领域的事实标准

2. 设计目标

ROS的设计目标是提高机器人研发中的软件复用率,所以它被设计成一种分布式的结构,使得框架中的每个功能模块都可以被单独设计、编译,并且在运行时以松散耦合的方式结合在一起。

ROS主要为机器人开发提供硬件抽象、底层驱动、消息传递、程序管理、应用原型等功能和机制,同时整合了许多第三方工具和库文件,帮助用户快速完成机器人应用的建立、编写和多机整合。

ROS中的功能模块都封装于独立的功能包(Package)或元功能包(Meta Package)中,便于在社区中共享和分发。

那些人类微不足道的行为,常常基于复杂的任务需求和环境影响,对于这些问题的处理,具有极大的复杂度,单一的开发者或者研究机构都无法独立完成。ROS的出现,就是为了鼓励更多的开发者、实验室或者研究机构共同协作来开发机器人软件。

例如一个拥有室内地图建模领域专家的实验室,可能会开发并发布一个先进的地图建模系统;一个拥有导航方面专家的组织,可以使用建模完成的地图进行机器人导航;另一个专注于机器人视觉的组织,可能开发出了一个物体识别的有效方法。ROS为这些组织机构提供了一种相互合作的高效方式,可以在已有成果的基础上继续自己工作的构建。

3. 主要特点

ROS的核心——点对点的分布式网络,使用了基于TCP/IP的通信方式,实现模块间点对点的松耦合连接,可以执行若干种类型的通信,包括基于话题(Topic)的异步数据流通信,基于服务(Service)的同步远程过程调用(Remote Procedure Call Protocol,RPC)通信,还有参数服务器上的数据存储等。

总体来讲,ROS的特点主要有以下几点:

(1)点对点的设计

在ROS中,每一个进程都是以一个节点的形式运行,可以分布于多个不同的主机。节点间的通信消息通过一个带有发布和订阅功能的RPC传输系统,从发布节点传送到接收节点。这种点对点的设计,可以分散定位、导航等功能带来的实时计算压力,适应多机器人协同工作遇到的挑战。

(2) 多语言支持

为支持更多应用的移植和开发,ROS被设计成一种语言弱相关的框架结构。ROS使用简洁、中立的定义语言描述模块之间的消息接口,在编译的过程中再产生所使用语言的目标文件,为消息交互提供支持,同时也允许消息接口的嵌套使用。目前已经支持Python、C++、Java、Octave和LISP等多种不同的语言,也可以同时使用这些语言完成不同模块的编程。

为了支持交叉语言,ROS利用了简单的、语言无关的接口定义语言去描述模块之间的消息传送。接口定义语言使用了简短的文本去描述每条消息的结构,也允许消息的合成,例如上图就是利用接口定义语言描述的图像消息。

(3)架构精简、集成度高

在已有繁杂的机器人应用中,软件的复用性是一个巨大的问题。很多驱动程序、应用算法、功能模块在设计时过于混乱,导致其很难在其他机器人或应用中进行移植和二次开发。而ROS框架具有的模块化特点,使得每个功能节点可以进行单独编译,并且使用统一的消息接口让模块的移植、复用更加便捷。

同时,ROS开源社区中移植、集成了大量已有开源项目中的代码,例如Open Source Computer Vision Library(OpenCV库)、Point Cloud Library(PCL库)等,开发者可以使用丰富的资源实现机器人应用的快速开发。

(4)组件化工具包丰富

移动机器人的开发,往往需要一些友好的可视化工具和仿真软件,ROS采用组件化的方法将这些工具和软件集成到系统当中,可以作为一个组件直接使用。例如3D可视化工具rviz(Robot Visualizer)可以帮助开发者显示机器人3D模型、环境地图、导航路线等信息。此外,ROS中还有消息查看、物理仿真等组件,提高了机器人开发的效率。

(5)免费并且开源

ROS遵照的BSD许可给使用者较大的自由,允许其修改和重新发布其中的应用代码,甚至可以进行商业化的开发与销售。ROS开源社区中的应用代码以维护者来分,主要包含由Willow Garage公司和一些开发者设计、维护的核心库部分,以及由不同国家的ROS社区组织开发和维护的全球范围的开源代码。

在短短的几年里,ROS软件包的数量呈指数级增加,开发者可以在社区中下载、复用琳琅满目的机器人功能模块,大大加速了机器人的应用开发。

4. ROS是什么

总结而言,ROS是什么?

1. ROS的核心是一个分布式、低耦合的通讯机制;
2. ROS提供多种机器人开发工具,可以快速实现数据可视化、机器人仿真等功能;
3. ROS开源社区中包含大量机器人应用功能,可以帮助我们快速开发功能原型;
4. ROS已经成为一个庞大的生态系统,包含机器人领域的方方面面,同时也得到了越来越多第三方工具的支持,为机器人开发提供了系统化的解决方案。

ROS发展迅猛,短短10年时间就已经成为机器人领域的事实标准,基于ROS开发的百度Apollo无人车更是在春晚舞台上得到了广泛赞誉。

但是ROS也并不是完美的,随着ROS2的发布和完善,ROS必将成为机器人开发不可或缺的一环,实现"Powering the world's robots!"的目标,而智能时代的机器人,也许将"Powering the world!"。

愿ROS伴你度过一段美好的机器人开发之旅!

 

PS.附上一张ROS简史: