购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 ROS概述

ROS是一个开源的、灵活的机器人软件框架,用于机器人应用程序编写。ROS提供了一个硬件抽象层,开发者可以在其中构建机器人应用程序,而不必担心底层硬件。ROS还提供不同的软件工具来可视化和调试机器人数据。ROS框架的一个核心是消息传递中间件,在这个中间件中,进程可以相互通信和交换数据,即使它们运行在不同的机器上。ROS消息传递可以是同步的,也可以是异步的。

ROS中的软件以功能包的形式组织,具有良好的模块性和可重用性。使用ROS消息传递中间件和硬件抽象层,开发人员可以创建大量的机器人功能,例如,地图构建和导航(在移动机器人中)。ROS中的几乎所有功能对机器人而言都是“不可知”的(即基于标准接口封装起来的),因此所有类型的机器人都可以使用它。新的机器人可以直接使用那些功能包,而无须修改功能包中的任何代码。

ROS在大学里有着广泛的合作关系,许多开发人员对ROS的发展做出了贡献。可以说ROS是一个由全世界开发者支持的社区驱动项目。这个活跃的开发者生态系统将ROS与其他机器人框架区分开来。

简而言之,ROS是 管道 (或通信,即通信机制)、(开发) 工具 、(应用) 功能 生态系统 的组合,这些功能如图1.1所示。

ROS项目于2007年在斯坦福大学以Switchyard为名启动,随后在2008年由一家名为Willow Garage的机器人研究初创公司进行开发。ROS的主要开发工作由Willow Garage完成。2013年,Willow Garage的研究人员成立了 开源机器人基金会 (Open Source Robotics Foundation,OSRF)。ROS现在由OSRF积极维护。下面,让我们介绍几个ROS发行版。

图1.1 ROS“公式”(图片来源:ros.org。基于知识共享授权协议CC-BY-3.0: https://creativecommons.org/licenses/by/3.0/us/legalcode

下面是两个组织的网址。Willow Garage: http://www.willowgarage.com/ 。OSRF: http://www.osrfoundation.org/

1.2.1 ROS发行版

ROS发行版与Linux发行版非常相似,即由ROS功能包构建成的版本集。每个发行版都维护一组稳定的核心功能包,直到发行版的 生命周期结束 (End Of Life,EOL)。

ROS发行版与Ubuntu完全兼容,大多数ROS发行版都是根据各自的Ubuntu版本进行规划的。

图1.2展示了ROS网站上推荐使用的一些最新的ROS发行版(截至本书英文版撰写时)。

图1.2 最新ROS发行版(图片来源:ros.org。基于知识共享授权协议CC-BY-3.0: https://creativecommons.org/licenses/by/3.0/us/legalcode

最新的ROS发行版是Melodic Morenia,对此版本的支持时间将延续到2023年5月。这个最新的ROS发行版的一个问题是,目前大多数功能包都不可用,这是因为把功能包从以前的发行版迁移到该版本需要时间。如果读者正在寻找一个稳定的发行版,那么可以选择ROS Kinetic Kame,该版本发行于2016年,大部分功能包都可以正常使用。不建议读者选择ROS Lunar Loggerhead,因为该发行版的支持时间仅延续至2019年5月。

1.2.2 支持的操作系统

ROS的主要目标操作系统是Ubuntu。ROS发行版是根据Ubuntu的发布版进行规划的。目前,除了Ubuntu以外,Ubuntu ARM、Debian、Gentoo、macOS、Arch Linux、Android、Windows和OpenEmbedded也提供了对ROS不完全支持(部分功能不可用)。

表1.1展示了新的ROS发行版和支持的特定操作系统版本。

表1.1 ROS发行版及支持的操作系统版本

ROS Melodic和Kinetic均为长期支持版(Long-Term Support,LTS),支持时间与Ubuntu的长期支持版的支持时间一致。使用LTS发行版的优点是可以获得最长的支持寿命。

在下一节中,我们将介绍ROS支持的机器人和传感器。

1.2.3 支持的机器人及传感器

ROS框架是最成功的机器人技术框架之一,世界各地的大学都对其做出了贡献。由于其活跃的生态系统和开源性质,ROS广泛应用于大多数机器人,并且兼容主要的机器人硬件和软件。图1.3展示了一些完全在ROS上运行的著名机器人。

图1.3 ROS支持的主流机器人型号(图片来源:ros.org。基于知识共享授权协议CC-BY-3.0: https://creativecommons.org/licenses/by/3.0/us/legalcode

ROS支持的机器人型号详见 http://wiki.ros.org/Robots

读者可以从以下链接获取相应机器人的ROS功能包:

·Pepper: http://wiki.ros.org/Robots/Pepper

·REEM-C: http://wiki.ros.org/Robots/REEM-C

·TurtleBot 2: http://wiki.ros.org/Robots/TurtleBot

·Robonaut: http://wiki.ros.org/Robots/Robonaut2

·Universal机械臂: http://wiki.ros.org/universal_robot

图1.4展示了ROS支持的一些主流传感器。

图1.4 ROS支持的主流传感器(图片来源:ros.org。基于知识共享授权协议CC-BY-3.0: https://creativecommons.org/licenses/by/3.0/us/legalcode

ROS支持的传感器类型与型号详见 http://wiki.ros.org/Sensors

以下是相应传感器的ROS wiki主页:

·Velodyne: http://wiki.ros.org/velodyne

·ZED Camera: http://wiki.ros.org/zed-ros-wrapper

·Teraranger: http://wiki.ros.org/teraranger

·Xsens: http://wiki.ros.org/xsens_driver

·Hokuyo激光测距仪: http://wiki.ros.org/hokuyo_node

·Intel RealSense: http://wiki.ros.org/realsense_camera

下面,我们介绍ROS有哪些优势和特点。

1.2.4 为什么选择ROS

构建ROS框架的主要目的是打造机器人的通用软件框架。尽管在ROS之前就有了许多机器人学的相关研究,但大多数软件都是各自的机器人独有的。这些独有的软件可能是开源的,但很难重用。

与现有的其他机器人框架相比,ROS在以下方面表现出色:

· 协作开发: 正如我们讨论过的,ROS是开源的,可以免费用于工业界和学术界。开发人员可以通过添加功能包的方式扩展ROS的功能。几乎所有的ROS功能包都在一个硬件抽象层上工作,因此它可以很容易地被其他机器人应用程序重用。所以,如果一所大学擅长移动导航,另一所大学擅长机器人操控,则可以把相应的功能包贡献给ROS社区,这样其他开发人员就可以重用这些功能包并构建新的应用程序。

· 多语言支持: ROS通信框架可以使用多种现代编程语言轻松实现。它支持的流行语言包括C++、Python和Lisp,此外它还有Java和Lua的实验库。

· 库集成: ROS具有与许多第三方机器人库的接口,如 开源计算机视觉 (OpenCV)、 点云库 (PCL)、OpenNI、OpenRAVE和Orocos。开发人员可以轻松地使用这些库进行应用程序开发。

· 模拟器集成: ROS还与开源模拟器(如Gazebo)联系紧密、相互融合,并与专有模拟器(如Webots和V-REP)有良好的接口。

· 代码测试: ROS提供了一个名为rostest的内置测试框架来检查代码质量和错误。

· 可伸缩性: ROS框架设计考虑了可伸缩性。可以使用ROS与机器人一起执行繁重的计算任务,其中ROS可以放在云上,也可以放在异构集群上。

· 可定制性: 正如我们讨论过的,ROS是完全开源和免费的,因此可以根据机器人的实际需求定制这个框架。如果我们只想使用ROS消息平台,那么可以删除所有其他组件并仅使用它。我们甚至可以为特定的机器人定制ROS以获得更好的性能。

· 社区: ROS是一个社区驱动的项目,主要由OSRF领导。大型社区支持是ROS的一大优势,这意味着我们可以轻松地开始机器人应用程序开发。

以下是可与ROS集成的库和模拟器的URL:

·OpenCV: http://wiki.ros.org/vision_opencv

·PCL: http://wiki.ros.org/pcl_ros

·OpenNI: http://wiki.ros.org/openni_launch

·OpenRAVE: http://openrave.org/

·Orocos: http://www.orocos.org/

·V-REP: http://www.coppeliarobotics.com/

下面让我们了解ROS的一些基本概念,这些概念是ROS项目的基础。 Z/jXUVXaDoTIIroLrIO5fMIDl0LdQfMXYSyqTKFnI4tP9uxnYWIKl7l1PIaPPbTb

点击中间区域
呼出菜单
上一章
目录
下一章
×