ros是什么?
什么是ROS?¶
ROS(Robot Operating System)机器人操作系统,由斯坦福大学人工智能实验室开发的一套提供类似操作系统服务的机器人专用开源系统。ROS包括一个类似于硬件系统的硬件抽象,但它不是一个传统的操作系统,它具有可用于异构硬件的特性。
ROS是开源的,是用于机器人的一种后操作系统,或者说次级操作系统。它提供类似操作系统所提供的功能,包含硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,它也提供一些工具程序和库用于获取、建立、编写和运行多机整合的程序。
ROS的首要设计目标是在机器人研发领域提高代码复用率。ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到数据包(Packages)和堆栈(Stacks)中,以便于共享和分发。ROS还支持代码库的联合系统。使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地决定发展和实施工作成为可能。上述所有功能都能由ROS的基础工具实现。
为什么使用ROS?¶
ROS作为一个灵活的操作系统,其上的节点具有很大的随意性,它们可以位于不同的计算机上,甚至可以位于不同的网络上。举例来说,我们可以使用一个Arduino作为一个节点发布信息,使用一台笔记本电脑作为一个节点订阅上述信息以及使用一台手机作为一个节点驱动电机等。上述灵活性使得ROS可以适应很多不同场合的应用,另外,ROS还是一个开源的系统,由专门的社区维护。
ROS的主要特点¶
ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括基于服务的同步RPC(远程过程调用)通讯、基于Topic的异步数据流通讯,还有参数服务器上的数据存储。但是ROS本身并没有实时性。
ROS的主要特点可以归纳为以下几条:
(1)点对点设计¶
一个使用ROS的系统包括一系列进程,这些进程存在于多个不同的主机并且在运行过程中通过端对端的拓扑结构进行联系。虽然基于中心服务器的那些软件框架也可以实现多进程和多主机的优势,但是在这些框架中,当各电脑通过不同的网络进行连接时,中心数据服务器就会发生问题。 ROS的点对点设计以及服务和节点管理器等机制可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。
(2)多语言支持¶
在写代码的时候,许多编程者会比较偏向某一些编程语言。这些偏好是个人在每种语言的编程时间、调试效果、语法、执行效率以及各种技术和文化的原因导致的结果。为了解决这些问题,我们将ROS设计成了语言中立性的框架结构。ROS现在支持许多种不同的语言,例如C++、Python、Octave和LISP,也包含其他语言的多种接口实现。
ROS的特殊性主要体现在消息通讯层,而不是更深的层次。端对端的连接和配置利用XML-RPC机制进行实现,XML-RPC也包含了大多数主要语言的合理实现描述。我们希望ROS能够利用各种语言实现的更加自然,更符合各种语言的语法约定,而不是基于C语言给各种其他语言提供实现接口。然而,在某些情况下利用已经存在的库封装后支持更多新的语言是很方便的,比如Octave的客户端就是通过C++的封装库进行实现的。
(3)精简与集成¶
大多数已经存在的机器人软件工程都包含了可以在工程外重复使用的驱动和算法,不幸的是,由于多方面的原因,大部分代码的中间层都过于混乱,以至于很困难提取出它的功能,也很难把它们从原型中提取出来应用到其他方面。 为了应对这种趋势,我们鼓励将所有的驱动和算法逐渐发展成为和ROS没有依赖性单独的库。ROS建立的系统具有模块化的特点,各模块中的代码可以单独编译,而且编译使用的CMake工具使它很容易的就实现精简的理念。ROS基本将复杂的代码封装在库里,只是创建了一些小的应用程序为ROS显示库的功能,就允许了对简单的代码超越原型进行移植和重新使用。作为一种新加入的有优势,单元测试当代码在库中分散后也变得非常的容易,一个单独的测试程序可以测试库中很多的特点。 ROS利用了很多现在已经存在的开源项目的代码,比如说从Player项目中借鉴了驱动、运动控制和仿真方面的代码,从OpenCV中借鉴了视觉算法方面的代码,从OpenRAVE借鉴了规划算法的内容,还有很多其他的项目。在每一个实例中,ROS都用来显示多种多样的配置选项以及和各软件之间进行数据通信,也同时对它们进行微小的包装和改动。ROS可以不断的从社区维护中进行升级,包括从其他的软件库、应用补丁中升级ROS的源代码。
(4)工具包丰富¶
为了管理复杂的ROS软件框架,我们利用了大量的小工具去编译和运行多种多样的ROS组建,从而设计成了内核,而不是构建一个庞大的开发和运行环境。
这些工具担任了各种各样的任务,例如,组织源代码的结构,获取和设置配置参数,形象化端对端的拓扑连接,测量频带使用宽度,生动的描绘信息数据,自动生成文档等等。尽管我们已经测试通过像全局时钟和控制器模块的记录器的核心服务,但是我们还是希望能把所有的代码模块化。我们相信在效率上的损失远远是稳定性和管理的复杂性上无法弥补的。
(5)免费并且开源¶
ROS所有的源代码都是公开发布的。我们相信这将必定促进ROS软件各层次的调试,不断的改正错误。虽然像Microsoft Robotics Studio和Webots这样的非开源软件也有很多值得赞美的属性,但是我们认为一个开源的平台也是无可为替代的。当硬件和各层次的软件同时设计和调试的时候这一点是尤其真实的。
ROS以分布式的关系遵循这BSD许可,也就是说允许各种商业和非商业的工程进行开发。ROS通过内部处理的通讯系统进行数据的传递,不要求各模块在同样的可执行功能上连接在一起。如此,利用ROS构建的系统可以很好的使用他们丰富的组件:个别的模块可以包含被各种协议保护的软件,这些协议从GPL到BSD,但是许可的一些“污染物”将在模块的分解上就完全消灭掉。
ros发展历史¶
斯坦福(2007)¶
Eric Berger和Keenan Wyrobek是在斯坦福大学Kenneth Sailsbury机器人实验室工作的博士生,他们领导的是个人机器人计划。在研究机器人在人类环境中进行操作任务的同时,两位学生注意到他们的许多同事都受到机器人技术多样性的阻碍:优秀的软件开发人员可能没有所需的硬件知识,有人开发最先进的路径规划可能不知道如何进行所需的计算机视觉。为了弥补这种情况,两名学生着手建立一个系统,为学术界的其他人提供一个起点。
两人将PR1构建为硬件原型,并开始使用其中的软件,借用其他早期开源机器人软件框架的最佳实践。在寻求进一步开发资金的同时,Eric Berger和Keenan Wyrobek会见了Willow Garage的创始人Scott Hassan,这是一家技术孵化器,致力于自主SUV和太阳能自动驾驶船。 Hassan分享了Berger和Wyrobek关于“机器人Linux”的愿景,并邀请他们来Willow Garage工作。 Willow Garage于2007年1月启动,并于2007年11月7日向SourceForge提交了第一份ROS代码。
Willow Garage (2007-2013)¶
Willow Garage开始开发PR2机器人作为PR1的后续,而ROS作为运行它的软件。来自二十多家机构的团体为ROS做出了贡献,包括核心软件和越来越多的软件包,这些软件包与ROS一起构成了一个更大的软件生态系统。事实上,Willow以外的人们为ROS做出了贡献(特别是来自斯坦福大学的STAIR项目),这意味着ROS从一开始就是一个多机器人平台。虽然Willow Garage最初还有其他项目正在进行中,但他们被取消了个人机器人计划:专注于生产PR2作为学术界和ROS的研究平台,作为开源机器人堆栈,它将成为学术研究和科技创业公司的基础就像基于网络的初创公司的LAMP堆栈一样。
2008年12月,Willow Garage迎来了他们三个内部里程碑中的第一个:PR2在两天内连续导航,距离为pi公里。不久之后,早期版本的ROS(0.4芒果探戈)被发布,随后是第一篇RVIZ文献和第一篇关于ROS的论文。在初夏,第二个内部里程碑:PR2导航办公室,打开门,并进入。随后在8月份,ROS.org网站启动了。关于ROS的早期教程于12月发布,准备在2010年1月发布ROS 1.0 。这是里程碑3:为Willow Garage的工程师在过去3年中开发的巨大功能提供了大量的文档和教程。
在此之后,Willow Garage实现了其最长的目标之一:向有价值的学术机构赠送10台PR2机器人。这一直是创始人的目标,因为他们认为PR2可以启动世界各地的机器人研究。他们最终向不同的机构颁发了11个PR2,包括弗莱堡大学(德国),博世,佐治亚理工学院,KU Leuven(比利时),麻省理工学院,斯坦福大学,慕尼黑大学(德国),加州大学伯克利分校,U Penn,南加州大学和大学。东京(日本)。这与Willow Garage非常成功的实习计划(由Melonee Wise于2008-2010运行)相结合,有助于在机器人世界中传播关于ROS的信息。第一个正式的ROS发布版本:ROS Box Turtle,于2010年3月2日发布,标志着ROS首次正式发布,带有一套公版使用的版本包。这些发展导致第一架无人机运行ROS ,第一辆运行ROS的自动驾驶汽车,以及ROS对Lego Mindstorms的改编。随着PR2 Beta计划的顺利进行,PR2机器人于2010年9月9日正式发布商业采购。
OSRF and Open Robotics (2013-present)¶
自OSRF接管ROS的初级开发以来,每年都会发布一个新版本,同时对ROS的兴趣不断增长。 ROSCons自2012年以来每年都会发生,与ICRA或IROS共同举办两场旗舰机器人会议。已经在各个国家组织了ROS开发者的聚会,已经出版了许多ROS书籍,并启动了许多教育计划。 2014年9月1日,NASA宣布第一个在太空中运行ROS的机器人:Robotnaut 2,位于国际空间站。 2017年,OSRF更名为Open Robotics。技术巨头亚马逊和微软在此期间开始对ROS感兴趣,微软在2018年9月将核心ROS移植到Windows ,随后亚马逊网络服务公司在11月发布了RoboMaker 。
也许迄今为止OSRF /开放机器人技术最重要的发展(不打算开始支持ROS的机器人平台的爆炸或每个ROS版本的巨大改进)是ROS2的提议,ROS是一个重要的API改变ROS,旨在支持实时编程,更广泛的计算环境,并利用更现代的技术。 ROS2在ROSCon 2014 上宣布,第一次提交到ros2存储库是在2015年2月,随后是2015年8月发布的alpha版本。 ROS2的第一个发行版本Ardent Apalone于2017年12月8日发布,开创了下一代ROS开发的新纪元。
产品布局¶
Plumbing¶¶
探测发现机制。
- 实现了进程管理。
- 实现了进程间通讯。
- 实现了设备驱动。
Tools¶¶
提供了开发调试的工具。提升开发效率。
- 模拟器
- 实现了可视化
- 调试工具包
- 日志管理工具包
Capabilites¶¶
提供了大量的开源库供调用。
- 控制
- 规划
- 感知
- 地图
- 导航
Ecosystem¶¶
为开发人员提供学习资料和交流平台。
- wiki
- 社区