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

2.2 ROS-2概述

ROS-2设计目标明确,旨在改进可用于实时系统和产品阶段解决方案的通信网络框架。ROS-2的目标是:

·为不同组件提供安全可靠的通信。

·实时通信能力。

·易于建立多机器人通信连接。

·提高不考虑通信媒介情况下的通信质量。

·直接在硬件层面(如传感器和嵌入式板)上提供ROS层。

·使用最新的软件版本(主要是指客户端库)。

读者是否还记得第1章中的“ROS等式”?ROS-2同样有一条“ROS-2等式”,但与前者略有不同,如图2.1所示。

ROS-2遵循行业标准,通过一个称为DDS实现的概念来实现实时通信。DDS(Data Distributed Service, 数据分布式服务 )是 对象管理组织 (Object Management Group,OMG)公认的行业标准,它有许多供应商实现的不同版本,如RTI的Connext( https://www.rti.com/products/ )、ADLink的OpenSplice RTPS( https://github.com/ADLINk-IST/opensplice )以及eProsima的快速RTPS( http://www.eprosima.com/index.php/products-all/eprosima-fast-rtps )。

图2.1 集成DDS实现的ROS等式(图片来源:ros.org。基于知识共享授权协议CC-BY-3.0: https://creativecommons.org/licenses/by/3.0/us/legalcode

这些标准被用于航空系统、医院、金融服务和空间探索系统等对实时性要求极高的应用之中。此实现旨在简化管道策略(发布–订阅基础结构),并使其在不同的硬件和软件组件之间更加可靠,以此确保用户可以更专注于功能和生态系统(而无须过多担心通信问题带来的不确定性)。

2.2.1 ROS-2发行版

经过几年的alpha和beta版本的发布,ROS-2的第一个官方稳定版本于2017年12月推出。该发行版名为Ardent Apalone,这是一种典型的按字母顺序命名的方式,OSRF通常遵循这种命名方式来命名其ROS发行版。第二次发布是在2018年6月,发行版名为Bouncy Bolson。这个版本增加了新的功能,修复了之前版本的错误,并支持Ubuntu 18.04和Windows 10(开发环境为Visual Studio 2017)。第三个版本名为Crystal Clemmys,于2018年12月发布。所有的ROS发行版都以代号形式命名。例如,当前版本代号为crystal,而前两个版本代号分别为bouncy和ardent。

截至本书撰写期间,最新的版本是Dashing Diademata,于2019年5月31日发布,代号为dashing。

ardent和bouncy已经达到了EOL(End Of License,许可证终止)的最后期限,因此不再受到支持。第三个稳定版本crystal的许可证终止日期为2019年12月,仅余的唯一一个长期稳定版本是dashing,许可证终止日期为2021年5月。

2.2.2 支持的操作系统

ROS-2支持Linux、Windows、macOS和 实时操作系统 (RTOS)OS层,ROS-1只支持Linux和macOS层。虽然ROS社区有对Windows的支持版,但OSRF并没有正式推出支持Windows的ROS-1。表2.1给出了ROS-2发行版及支持的操作系统。

表2.1 ROS-2版本及对应的操作系统

本书中讨论的ROS-2版本为Dashing Diademata,即第四个发行版。

2.2.3 支持的机器人及传感器

ROS-2正在得到研究机构和工业界,特别是机器人制造业的广泛应用和支持。以下是ROS-2支持的机器人和传感器的链接:

·TurtleBot 2: https://github.com/ros2/turtlebot2_demo

·TurtleBot 3: https://github.com/ROBOTIS-GIT/turtlebot3/tree/ros2

·Mara robot arm: https://github.com/AcutronicRobotics/MARA

·Dr.Robot的Jaguar 4x4: https://github.com/TRI-jaguar4x4/jaguar4x4

·Intel Realsense camera: https://github.com/intel/ros2_intel_realsense

·Ydlidar: https://github.com/Adlink-ROS/ydlidar_ros2

目前,ROS-2页面尚未给出支持的机器人和传感器。上述机器人和传感器包是研究人员根据使用ROS-2及其硬件的经验提供给社区的。

2.2.4 为什么选择ROS-2

考虑到机器人社区的需求,ROS-2的工作原理与ROS-1类似。ROS-2是独立的发行版,不是ROS-1的一部分。但是,它又可以嵌入ROS-1软件包中并与之协同工作。目前正在开发中的ROS-2,主要借助现代依赖库和工具克服ROS-1存在的不足。ROS-1的特征栈是用C++编写的,客户端库是用C++和Python编写的(其中Python编写的客户端库是用一种基于底层的方法构建的,该方法基于C++库编写),而ROS-2中的组件是用C语言编写的。ROS-2中有一个用C语言编写的独立层,用来连接到ROS-2客户端库,客户端库主要包括rclcpp、rclpy和rcljava等。

ROS-2对各种网络配置有了更好的支持,并能够提供可靠的通信。ROS-2还消除了nodelet http://wiki.ros.org/nodelet )的概念,支持多节点初始化。与ROS-1不同,ROS-2中有两个非常有趣的特性:一是通过状态机周期检测节点的心跳;二是在添加或删除节点和话题时发出通知。这些设计可以帮助提供系统的容错性。此外,ROS-2很快将支持不同的平台和架构。

至此我们已经了解了ROS-2与ROS-1的主要区别,下面让我们相对详细地介绍ROS-2的基本原理。 I5BSg7rH64EgeZxHNthCs2ghedlbaUKYZ3q+mWcAyHa3y/9q9xjOpeAbehWpvN2q

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