ROS(机器人操作系统,Robot Operating System),是专为机器人软体开发所设计出来的一套电脑作业系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。
在某些方面ROS相当于一种“机器人框架(robot frameworks)”类似的“机器人框架”有:Player,YARP,Orocos,CARMEN,Orca,MOOS和 Microsoft Robotics Studio。
ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括:
ROS并不是一个实时的框架,但ROS可以嵌入实时程序。Willow Garage的PR2机器人使用了一种叫做pr2_etherCAT的系统来实时发送或接收ROS消息。ROS也可以与Orocos实时工具包无缝集成。
ROS目前只能在基于Unix的平台上运行。ROS的软件主要在Ubuntu和Mac OS X 系统上测试,同时ROS社区仍持续支持Fedora,Gentoo,Arch Linux和其它Linux平台。
与此同时,Microsoft Windows端口的ROS已经实现,但并未完全开发完成。
很多人都在问“ROS与其它机器人软件平台有什么不同?”这是一个很难解答的问题。因为ROS不是一个集成了大多数功能或特征的框架。事实上,ROS 的主要目标是为机器人研究和开发提供代码复用的支持。ROS是一个分布式的进程(也就是节点)框架,这些进程被封装在易于被分享和发布的程序包和功能包集中。ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现从文件系统到用户接口完全独立决策(不受ROS限制)。同时,所有的工程都可以被ROS的基础工具整合在一起。
为了支持分享和协作的主要目的,ROS框架也有其它几个目标:
小型化:ROS尽可能设计的很小 – 我们不封装您的 main() 函数 – 所以为ROS编写的代码可以轻松的在其它机器人软件平台上使用。 您不必替换主框架与系统,因为ROS编写的代码可以用于其他机器人软件框架中。由此得出的必然结论是ROS可以轻松集成在其它机器人软件平台:ROS已经可以与OpenRAVE,Orocos和Player集成。
ROS不敏感库:ROS的首选开发模型都是用不依赖ROS的干净的库函数编写而成。
语言独立:ROS框架可以简单地使用任何的现代编程语言实现。我们已经实现了Python版本C++版本和 Lisp版本。同时,我们也拥有Java和 Lua版本的实验库。
方便测试:ROS内建一个了叫做rostest的单元/集成测试框架,可以轻松安装或卸载测试模块。
可扩展:ROS可以适用于大型运行时系统和大型开发进程。
ROS-agnostic库:【agnostic:不可知论】建议的开发模型是使用clear的函数接口书写ROS-agnostic库。
所以,“ROS与其它机器人软件平台有什么不同?”很难得到一个适用于所有情况的答案,但是,如果你选择使用其它机器人软件平台,我们希望你仍然可以使用到很多基于ROS发布的库函数。至于更多细节,这封Brian Gerkey(同时涉猎 Player 和 ROS)向ROS用户所写的关于ROS和Player区别的电子邮件(包括OpenCV 的集成)可以为我们提供一些比较:
这个问题的答案,和许多问题一样,视情况而定。特别是取悦于你想要干什么。Player非常适合简洁的非铰接的移动平台。它的设计为那些激光雷达的先锋提供了简单的传感器和电机操作方法。
然而,ROS是围绕着基于驱动传感器(倾斜式激光,盘式/斜试头部传感器,机械臂传感器)的复杂移动处理平台设计的。与Player相比,ROS可以更方便的借助分布式计算设备,而且我可以肯定,越高级的应用越适用于ROS而不是Player。换句话说,Player提供了更多的硬件驱动,而ROS提供了更多算法。
我认为,说ROS比Player更加灵活强大是公平的。但是,现实情况是,更加灵活强大意味着更加复杂。尽管我们很努力的使ROS更加简单易用,ROS仍然需要一个很长的学习过程。当然,熟悉Player会对学习ROS有很大帮助,因为它们很多基本的方面都是相似的。
关于你们针对OpenCV集成提出的问题,我想你们会发现ROS集成OpenCV的代码要比Player多一点。未来,当ROS和OpenCV团队明显重叠时,你们会发现这种差异将变得更大。
我发现ROS利用了大量的来自于Player工程的代码。ROS节点的代码重用了许多Player的驱动,而且Stage和Gazebo可在ROS社区中得到广泛的支持和良好的应用。
本世纪开始,关于人工智能的研究进入了大发展阶段,包括全方位的具体的AI,例如斯坦福大学人工智能实验室STAIR(Stanford Artificial Intelligence Robot)项目,该项目组创建了灵活的、动态的软件系统的原型,用于机器人技术。在2007年,机器人公司Willow Garage和该项目组合作,他们十分具有前瞻性的,提供了大量资源进一步扩展了这些概念,经过具体的研究测试实现之后,无数的研究人员将他们的专业性研究贡献到ROS核心概念和其基础软件包,这期间积累了众多的科学研究成果。ROS软件的开发自始至终采用开放的BSD协议,在机器人技术研究领域逐渐成为一个被广泛使用的平台。
Willow Garage公司和斯坦福大学人工智能实验室合作以后,在2009年初推出了ROS0.4,这是一个测试版的ROS,现在所用的系统框架在这个版本中已经具有了初步的雏形。之后的版本才正式开启了ROS的发展成熟之路。
曾经,机器人创新的门槛非常高。如果你想在任何应用领域开发出有分量的产品,你需要建立一整套能够实现你想法的系统:包括硬件设备,当然还有控制系统,界面接口,以及让机器人运行并作为测试平台的检测工具。“没有什么是现成的设备,除了一些很差,闭源的东西外。”
随着机器人领域的快速发展和复杂化,代码复用和模块化的需求日益强烈,已有的开源系统已不能很好地适应需求,2010年Willow Garage公司发布了开源机器人操作系统ROS。
机器人是一个系统工程,它涉及机械、电子、控制、通信、软件等诸多学科。以前,开发一个机器人需要花很大的功夫,你需要设计机械、画电路板、写驱动程序、设计通信架构、组装集成、调试、以及编写各种感知决策和控制算法,每一个任务都需要花费大量的时间。
随着技术进步,机器人产业分工开始走向细致化、多层次化,如今的电机、底盘、激光雷达、摄像头、机械臂等等元器件都有不同厂家专门生产。社会分工加速了机器人行业的发展。而各个部件的集成就需要一个统一的软件平台,在机器人领域,这个平台就是机器人操作系统ROS。
ROS是一个适用于机器人编程的框架,这个框架把原本松散的零部件耦合在了一起,为他们提供了通信架构。ROS虽然叫做操作系统,但并非Windows、Mac那样通常意义的操作系统,它只是连接了操作系统和你开发的ROS应用程序,所以它也算是一个中间件,基于ROS的应用程序之间建立起了沟通的桥梁,所以也是运行在Linux上的运行时环境,在这个环境上,机器人的感知、决策、控制算法可以更好的组织和运行。
ROS的发展逐渐的趋于成熟,近年来也逐步是面对着Ubuntu的更新而更新,这说明ROS已经初步进入一种稳定的发展状态,每年进行一次更新的频率同时还保留着长期支持的版本,这使得ROS在稳步的前进发展同时,也有着开拓创新的方向。目前越来越多的机器人、无人机甚至无人车都开始采用ROS作为开发平台,尽管ROS在实用方面目前还存在一些限制,但前途非常光明。
2018年ROS2 1.0版将发布,未来ROS2将如何影响机器人领域,我们拭目以待。相信在人工智能的大发展、人机交互越来越密切、互联网+的大时代,ROS会发挥出越来越重要的作用。
总体来说,ROS更适合科研和开源用户使用,如果在工业场景应用(例如无人驾驶)还需要做优化和定制。 为了解决实际应用的问题,ROS2.0做了很大的改进,目前正在开发之中,未来表现如何值得期待。
参考资料:
机器人作业系统-WIKI
ros-百度百科
ROS/Introduction
ROS官方网站-开源社区
中国大学MOOC-ROS