前言

机器人是一种高度复杂的系统性实现,机器人设计包含了机械加工、机械结构设计、硬件设计、嵌入式软件设计、上层软件设计....是各种硬件与软件集成,甚至可以说机器人系统是当今工业体系的集大成者。

为提高机器人的研发效率,开发者们基于"复用"的分工协作,遵循了不重复发明轮子的原则。在这种前提下,柳树车库(Willow Garage)机器人公司发布了 ROS (机器人操作系统),ROS 是一套机器人通用软件框架,可以提升功能模块的复用性,并且随着该系统的不断迭代与完善,如今 ROS 已经成为机器人领域的事实标准。


ROS基础理念

  • ROS全称Robot Operating System(机器人操作系统)
  • ROS是适用于机器人的开源元操作系统
  • ROS集成了大量的工具,库,协议,提供类似OS所提供的功能,简化对机器人的控制
  • 还提供了用于在多台计算机上获取,构建,编写和运行代码的工具和库,ROS在某些方面类似于“机器人框架”
  • ROS设计者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem”,即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体

下面是对 ROS中通讯机制、工具软件包、机器人高层技能、生态系统的详细说明:

  • 通讯机制(Plumbing):ROS的核心是一个消息传递系统,通常称为“中间件”或“管道”。 通信是实施新机器人时首先出现的需求之一应用程序,或者实际上任何将与硬件交互的软件系统。ROS 内置且经过良好测试的消息传递系统通过管理分布式节点之间通过匿名通信的详细信息发布/订阅模式。此方法鼓励软件中的良好实践开发,包括故障隔离、关注点分离和清除接口。使用ROS可以使系统更易于维护,有助于重用。
  • 工具(Tools):构建机器人应用具有挑战性。 您拥有任何软件开发工作的所有困难,再加上 需要通过传感器与物理世界进行异步交互和执行。 要高效地构建应用程序,需要良好的开发人员工具。ROS工具包括:启动,自省,调试,可视化, 打印、记录和播放。这些工具可以加快开发团队的进度,它们包含在ROS产品中。
  • 能力(Capability):ROS生态系统是机器人软件的聚宝盆。 是否需要 GPS 设备驱动程序、步行和平衡控制器对于您的四足动物或移动机器人的地图系统,ROS 都有。 从驱动程序到算法,再到用户界面,ROS提供了构建允许专注于应用程序的块。ROS项目的目标是不断提高所取内容的标准,从而降低建筑机器人的门槛应用。 任何对机器人有创意的人都能够使这个想法成为现实,而不必了解有关底层硬件和软件。
  • 社区(Community):ROS 社区是庞大、多样化和全球性的。 从学生和业余爱好者到跨国公司和政府各行各业的机构、人员和组织都有 ROS 项目正在进行中。

ROS设计目标

机器人开发的分工思想,实现了不同研发团队间的共享和协作,提升了机器人的研发效率,为了服务“ 分工”,ROS主要设计了如下目标:

  1. 代码复用:ROS的目标不是成为具有最多功能的框架,ROS的主要目标是支持机器人技术研发中的代码重用
  2. 分布式:ROS是进程(也称为Nodes)的分布式框架,ROS中的进程可分布于不同主机,不同主机协同工作,从而分散计算压力
  3. 松耦合:ROS中功能模块封装于独立的功能包或元功能包,便于分享,功能包内的模块以节点为单位运行,以ROS标准的IO作为接口,开发者不需要关注模块内部实现,只要了解接口规则就能实现复用,实现了模块间点对点的松耦合连接
  4. 精简:ROS被设计为尽可能精简,以便为ROS编写的代码可以与其他机器人软件框架一起使用。ROS易于与其他机器人软件框架集成:ROS已与OpenRAVE,Orocos和Player集成
  5. 语言独立性:包括Java,C++,Python等。为了支持更多应用开发和移植,ROS设计为一种语言弱相关的框架结构,使用简洁,中立的定义语言描述模块间的消息接口,在编译中再产生所使用语言的目标文件,为消息交互提供支持,同时允许消息接口的嵌套使用
  6. 易于测试:ROS具有称为rostest的内置单元/集成测试框架,可轻松安装和拆卸测试工具。
  7. 大型应用:ROS适用于大型运行时系统和大型开发流程
  8. 丰富的组件化工具包:ROS可采用组件化方式集成一些工具和软件到系统中并作为一个组件直接使用,如RVIZ(3D可视化工具),开发者根据ROS定义的接口在其中显示机器人模型等,组件还包括仿真环境和消息查看工具等
  9. 免费且开源:开发者众多,功能包多

ROS发展历程

ROS是一个由来已久、贡献者众多的大型软件项目。在ROS诞生之前,很多学者认为,机器人研究需要一个开放式的协作框架,并且已经有不少类似的项目致力于实现这样的框架。在这些工作中,斯坦福大学在2000年年中开展了一系列相关研究项目,如斯坦福人工智能机器人(STandford AI Robot, STAIR)项目、个人机器人(Personal Robots, PR)项目等,在上述项目中,在研究具有代表性、集成式人工智能系统的过程中,创立了用于室内场景的高灵活性、动态软件系统,其可以用于机器人学研究。

  • 2007年,柳树车库(Willow Garage)提供了大量资源,用于将斯坦福大学机器人项目中的软件系统进行扩展与完善,同时,在无数研究人员的共同努力下,ROS的核心思想和基本软件包逐渐得到完善。
  • ROS的发行版本(ROS distribution)指ROS软件包的版本,其与Linux的发行版本(如Ubuntu)的概念类似。推出ROS发行版本的目的在于使开发人员可以使用相对稳定的代码库,直到其准备好将所有内容进行版本升级为止。因此,每个发行版本推出后,ROS开发者通常仅对这一版本的bug进行修复,同时提供少量针对核心软件包的改进。
  • 版本特点: 按照英文字母顺序命名,ROS 目前已经发布了ROS1 的终极版本: noetic,并建议后期过渡至 ROS2 版本。noetic 版本之前默认使用的是 Python2,noetic 支持 Python3。
  • 建议大家使用noetic或melodic或kinetic版本。(注意选择Ubuntu版本对应的ROS版本)


总结

本文主要讲解了ROS的一些基础理论:ROS的基础理念(通讯机制、工具、能力、社区),设计目标(代码复用、分布式、松耦合、组件化工具包、免费开源)以及发展历程,对于入门ROS的小白来说建议使用Ubuntu18.04 版本对应的 Melodic ,或者 Ubuntu20.04 版本对应的 Noetic 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐