基于开源操作系统ROS的机器人软件开发

2017-05-12 09:41
单片机与嵌入式系统应用 2017年5期
关键词:开源代码机器人

安 峰

(苏州工业园区服务外包职业学院 纳米科技学院, 苏州 215123)

基于开源操作系统ROS的机器人软件开发

安 峰

(苏州工业园区服务外包职业学院 纳米科技学院, 苏州 215123)

ROS(机器人操作系统)是一套机器人软件框架,基于这一框架,人们可以快速开发出控制机器人的一系列应用,是目前大多数机器人系统的首选软件平台。扫地机器人、四轴飞行器、机器小车等,虽然各自的配件、外形或功能等各不相同,但是它们有一个共同点就是均运行在ROS系统框架之上。ROS本身的优良设计使其兼具了精简与集成、多语言多平台支持、点对点设计以及开源免费等特点。目前,越来越多的机器人厂商将基于ROS平台进行软件设计研发,而更多厂商的使用反过来又成为ROS的进一步完善与普及的巨大推动力。

ROS;机器人;节点;操作系统;导航

引 言

机器人现在越来越多地出现在人们的视野当中,如扫地机器人、卡通机器人、足球机器人等。通常认为机器人(Robot)是自动执行工作的机器装置。它既可以接受人类指挥,又可以运行预先编排的程序,还可以根据以人工智能技术制定的原则纲领行动。它的任务是协助或取代人类的某些工作,例如生产业、建筑业或是危险的工作。它是高级整合控制论、机械电子、计算机、材料和仿生学的产物。在工业、医学、农业、建筑业甚至军事等领域中均有重要用途。

机器人可以大致上分为两大类:工业机器人和特种机器人。所谓工业机器人就是面向工业领域的多关节机械手或多自由度机器人;而特种机器人则是除工业机器人之外的、用于非制造业并服务于人类的各种先进机器人,包括:服务机器人、水下机器人、娱乐机器人、军用机器人、农业机器人、机器人化机器等。在特种机器人中,有些分支发展很快,有独立成体系的趋势,如服务机器人、水下机器人、军用机器人、微操作机器人等。

图1是已经面世的一些机器人类型。

图1 常见的一些机器人

不管外形如何千变万化、功能如何千差万别,从设计的角度来看,机器人通常是由硬件和软件来组成的。硬件部分包括计算控制核心、执行机构、驱动装置、检测装置、控制系统和复杂机械等;软件部分则包括传感器信息采集、控制算法、通信、计算控制算法等。

随着机器人领域的快速发展和复杂化,硬件设计已经不再是机器人设计上的最大困难,取而代之的是软件设计的复杂性、代码的复用性和模块化,如机器人导航、视觉判断、智能化等。人们迫切需要一款软件平台,基于这款平台,全世界的机器人生产厂商、开发人员可以使用前人已经设计好的算法,或者是很方便地导入自己的算法,而不用去关心因硬件平台(如是控制机械手还是螺旋桨)的不同而导致的问题。已有的开源机器人系统不能很好地适应这一需求,于是在2010年,Willow Garage公司发布了开源机器人操作系统ROS(Robot Operating System),很快在机器人研究领域展开了学习和使用ROS的热潮。

ROS系统起源于2007年斯坦福大学人工智能实验室的项目与机器人技术公司Willow Garage的个人机器人项目(Personal Robots Program)之间的合作,2008年之后就由Willow Garage来进行推动,随着PR2那些不可思议的表现,譬如叠衣服、插插座、做早饭,ROS也得到越来越多的关注。Willow Garage公司表示希望借助开源的力量使PR2变成“全能”机器人。

PR2价格高昂,2011年零售价高达40万美元。PR2现主要用于研究,它有两条手臂,每条手臂7个关节,手臂末端是一个可以张合的钳子,PR2依靠底部的4个轮子移动。在PR2的头部、胸部、肘部、钳子上安装有高分辨率摄像头、激光测距仪、惯性测量单元、触觉传感器等丰富的传感设备。在PR2的底部有两台8核的电脑作为机器人各硬件的控制和通信中枢。两台电脑安装有Ubuntu和ROS。

1 设计目标

ROS是开源的,是用于机器人的一种后操作系统,或者说次级操作系统。它提供类似操作系统所提供的功能,包含硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,它也提供一些工具程序和库用于获取、建立、编写和运行多机整合的程序。

ROS的首要设计目标是在机器人研发领域提高代码复用率,ROS是一种分布式处理框架(又名Nodes),这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到数据包(Packages)和堆栈(Stacks)中,以便于共享和分发。ROS还支持代码库的联合系统,使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地决定发展和实施工作成为可能,上述所有功能都能由ROS的基础工具实现。

2 主要特点

ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通信,包括基于服务的同步RPC(远程过程调用)通信、基于Topic的异步数据流通信,还有参数服务器上的数据存储,但是ROS本身并没有实时性。

ROS的主要特点可以归纳为以下几条:

(1) 点对点设计

一个使用ROS的系统包括一系列进程,这些进程存在于多个不同的主机,并且在运行过程中通过端对端的拓扑结构进行联系。虽然基于中心服务器的那些软件框架也可以实现多进程和多主机的优势,但是在这些框架中,当各电脑通过不同的网络进行连接时,中心数据服务器就会发生问题。ROS的点对点设计以及服务和节点管理器等机制可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。点对点设计如图2所示。

图2 节点设计

(2) 多语言支持

在写代码的时候,许多编程者会比较偏向某一些编程语言。这些偏好是个人在每种语言的编程时间、调试效果、语法、执行效率以及各种技术和文化的原因导致的结果。为了解决这些问题,我们将ROS设计成了语言中立性的框架结构。ROS现在支持许多种不同的语言,例如C++、Python、Octave和LISP,也包含其他语言的多种接口实现。

ROS的特殊性主要体现在消息通信层,而不是更深的层次。端对端的连接和配置利用XML-RPC机制进行实现,XML-RPC也包含了大多数主要语言的合理实现描述。我们希望ROS能够利用各种语言实现得更加自然,更符合各种语言的语法约定,而不是基于C语言给各种其他语言提供实现接口。然而,在某些情况下利用已经存在的库封装后支持更多新的语言是很方便的,比如Octave的客户端就是通过C++的封装库进行实现的。

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

每种语言的代码产生器会产生类似本种语言目标文件,在消息传递和接收的过程中通过ROS自动连续并行的实现。这就节省了重要的编程时间,也避免了错误:之前3行的接口定义文件自动扩展成137行的C++代码、96行的Python代码、81行的Lisp代码和99行的Octave代码。因为消息是从各种简单的文本文件中自动生成的,所以很容易列举出新的消息类型。在编写的时候,已知的基于ROS的代码库包含超过400种消息类型,这些消息从传感器传送数据,使得物体检测到了周围的环境。最后的结果就是一种语言无关的消息处理,让多种语言可以自由的混合和匹配使用。

(3) 精简与集成

大多数已经存在的机器人软件工程都包含了可以在工程外重复使用的驱动和算法,不幸的是,由于多方面的原因,大部分代码的中间层都过于混乱,以至于很困难提取出它的功能,也很难把它们从原型中提取出来应用到其他方面。

为了应对这种趋势,ROS建立的系统具有模块化的特点,各模块中的代码可以单独编译,而且编译使用的CMake工具使它很容易地就实现精简的理念。ROS基本将复杂的代码封装在库里,只是创建了一些小的应用程序为ROS显示库的功能,允许了对简单的代码超越原型进行移植和重新使用。作为一种新加入的优势,单元测试当代码在库中分散后也变得非常容易,一个单独的测试程序可以测试库中很多的特点。

ROS利用了很多现在已经存在的开源项目的代码,比如说从Player项目中借鉴了驱动、运动控制和仿真方面的代码,从OpenCV中借鉴了视觉算法方面的代码,从OpenRAVE借鉴了规划算法的内容,还有很多其他的项目。在每一个实例中,ROS都用来显示多种多样的配置选项,以及和各软件之间进行数据通信,同时对它们进行微小的包装和改动。ROS可以不断地从社区维护中进行升级,包括从其他的软件库、应用补丁中升级ROS的源代码。

(4) 工具包丰富

为了管理复杂的ROS软件框架,利用了大量的小工具去编译和运行多种多样的ROS组建,从而设计成了内核,而不是构建一个庞大的开发和运行环境。这些工具担任了各种各样的任务,例如组织源代码的结构、获取和设置配置参数、形象化端对端的拓扑连接、测量频带使用宽度、生动地描绘信息数据、自动生成文档等等。尽管已经测试通过像全局时钟和控制器模块的记录器的核心服务,但是还是希望能把所有的代码模块化,毕竟效率上的损失远远是稳定性和管理的复杂性上无法弥补的。ROS已有的工具包、应用如图3所示。

图3 ROS已有的工具包、应用

(5) 免费并且开源

ROS所有的源代码都是公开发布的,这必定将促进ROS软件各层次的调试,不断地改正错误。虽然像Microsoft Robotics Studio和Webots这样的非开源软件也有很多值得赞美的属性,但是我们认为一个开源的平台也是无可为替代的。当硬件和各层次的软件同时设计和调试的时候这一点是尤其真实的。

ROS以分布式的关系遵循这BSD许可,也就是说允许各种商业和非商业的工程进行开发。ROS通过内部处理的通信系统进行数据的传递,不要求各模块在同样的可执行功能上连接在一起。如此,利用ROS构建的系统可以很好的使用他们丰富的组件:个别的模块可以包含被各种协议保护的软件,这些协议从GPL到BSD,但是许可的一些“污染物”将在模块的分解上就完全被消灭掉。

结 语

[1] ROS官网. http://wiki.ros.org/.

[2] willowgarage公司网站.http://www.willowgarage.com/.

[3] 张建伟,张立伟,胡颖,等.开源机器人操作系统——ROS[M].北京: 科学出版社,2012.

[4] Jason M. O'Kane. A Gentle Introduction to ROS[M]. Charleston :CreateSpace Independent Publishing Platform,2013.

[5] 恩里克·费尔南德斯. ROS机器人程序设计[M].北京:机械工业出版社,2016.

[6] 戈贝尔. ROS入门实例[M].罗哈斯,刘柯山,彭也益,等译.广州:中山大学出版社,2016.

安峰(讲师/系统架构师),主要研究领域为机器人定位与导航。

Robot Software Development Based on Open-source Operating System ROS

An Feng

(Suzhou Industrial Park Institute of Services Outsourcing,NTO,Suzhou 215123,China)

The Robot Operating System(ROS) is a software framework.The engineer can quickly develop a robot application based on this framework.At present,many robots such as thesweeping robot and the four-axis aircraft,they all run on the ROS system framework although they have the respective parts,appearance or function and so on.The ROS has the characteristics such as simplification and integration,multi language and multi platform supporting,point to point design and open-source free.More and more robot manufacturers will develop based on ROS platform.The use of more manufacturers in turn to further improve and popularize ROS.

ROS;robot;node;operating system;navigation

TP273

A

迪娜

2016-12-22)

猜你喜欢
开源代码机器人
五毛钱能买多少头牛
创世代码
创世代码
创世代码
创世代码
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
开源计算机辅助翻译工具研究
机器人来帮你
认识机器人