ROS 2 Foxy Fitzroy:为生产和开发机器人设定新标准


作者:Matt Hansen,Aaron Blasdel和Camilo Buscaron (机器翻译)


备受期待的机器人操作系统2发行版Foxy Fitzroy(ROS 2 Foxy)已发布。ROS 2 Foxy是迄今为止用于生产机器人应用程序开发的最安全和最可靠的ROS发行版。在此博客中,重点介绍了此新版本中的关键功能和改进。

背景:ROS和ROS 2

机器人操作系统(ROS)是用于机器人开发的开源软件框架,包括中间件,驱动程序,库,工具以及机器人常用的算法。AWS RoboMaker和许多其他与Amazon机器人相关的小组将ROS用作其服务和产品的一部分。有关AWS参与全球ROS社区的更多背景信息,请参阅Matt Asay的博客,AWS如何帮助开源机器人的未来。

ROS最初是设计用于教育研究社区的,但是机器人公司将ROS用作机器人产品开发的框架。由于ROS并非在设计时就考虑了生产机器人系统,因此公司必须投入时间和精力来生产其内部各种ROS组件的分支。

ROS 2是从头开始重新设计的第二代ROS。ROS 2旨在解决先前的ROS缺点,从而降低了将基于ROS 2的原型转换为产品的复杂性。原动力之“ 为什么要使用ROS 2?” ROS 2设计文档网站上的文章,介绍了ROS 2重新设计决策的背景和原理。

ROS 2提供了ROS最初没有的新功能。从将ROS客户端层(ROS client layer,RCL)与ROS中间件层(ROS middleware layer ,RMW)分开的分层体系结构开始。RCL提供开发人员接口,而RMW层使与不同的可互换低级通信协议兼容。RMW建立在数据分发服务( Data Distribution Service ,DDS)之上,该数据分发服务是为安全关键型系统设计的可认证的实时发布/订阅协议。 DDS使ROS 2成为一个更强大且可互操作的框架。此体系结构将最低层协议(DDS)详细信息与应用程序开发人员层分开。分层抽象使开发人员可以专注于其独特的应用程序,算法或驱动程序,而不是基础细节。

ROS 2分层架构示意图

ROS 2还添加了新的高级功能,例如服务质量( Quality of Service,QoS)设置以调整流程之间的通信,以及生命周期节点以管理确定性系统的启动和关闭。此外,ROS2基于最新的C++ 14和Python 3语言标准和库

多年来,ROS 2已经发布了多个版本。最初的发行版是2017年12月的Ardent Apalone,随后是每6个月发行一次。最初的长期支持 ROS 2( long-term support ,LTS)版本是Dashing Diadamata五月2019发布。 Foxy Fitzroy (名为Foxy)是最新的LTS版本。

ROS 2 Foxy Fitzroy

在Dashing和Foxy发行之间的一年中,Open Robotics和ROS 2 技术指导委员会(Technical Steering Committee,TSC)进行了大量复杂艰辛的工作,以为ROS 2 Foxy Fitzroy添加新的关键功能,自动化和支持流程。这些新功能使ROS 2 Foxy可以包含在生产级机器人产品和系统中。在以下各节中,我们将详细介绍ROS 2 Foxy的新功能:

新的社区流程:质量级别,安全策略和滚动发布

首先,ROS 2社区已定义了评估软件包质量承诺的标准流程。这些采用五个不同的质量级别的形式,为开发人员提供了一种标准化的方法来传达维护者对软件稳定性的承诺。最高承诺级别为“ 质量级别1 ”,最低承诺为“ 质量级别5 ”。ROS核心中的所有软件包在ROS 2 Foxy发行时均达到“ 质量等级2 ”,不包括某些潜在的依赖关系。此外,AWS RoboMaker 将在2020年底之前继续努力将ROS核心和所有基础依赖项移至“ Quality Level 1 质量等级1 ” 。

其次,社区致力于通过ROS 2安全工作组来认证和监视ROS 2 Foxy的安全性。一个ROS 2威胁模型创建和安全漏洞披露政策采用了完整的安全港保护。

最终,使用Rolling release发行版,现在在ROS 2中发布软件包更加简单。滚动发行版将成为所有将来发行版的基础。这提供了一个选项,只需执行一次发布工具,即可将软件包发布到所有将来的ROS 2发行版中。

面向ROS 2作为生产机器人的安全框架

机器人或任何系统的安全性都不能被高估。安全工作组已经集成了Fast DDS,Cyclone DDS和RTI这三个主要受支持的DDS实现的DDS安全插件。使用插件,可以检查ROS 2应用程序中的基础DDS安全事件。

如上所述,在社区成员Kyle Fazzari 的ROS 2 DDS-Security Integration文档中,在ROS 2 Foxy中更容易进行安全修补。这在很大程度上归因于DDS-Security规范,该规范在DDS规范上进行了扩展 。通过定义服务插件接口(Service plugin Interface,SPI)体系结构来添加安全性增强功能。有一组SPI的内置实现,以及由SPI实施的安全模型。具体来说,定义了五个SPI:

  • 身份验证:验证给定域参与者的身份;
  • 访问控制:对可以由经过身份验证的域参与者执行的DDS相关操作施加限制;
  • 加密:处理所有必需的加密,签名和哈希操作;
  • 日志记录:提供审核与DDS-Security相关的事件的功能;
  • 数据标记:提供将标记添加到数据样本的功能。

ROS 2 Foxy中的安全功能使用这些SPI中的前三个。身份验证和访问控制内置插件使用公共密钥基础结构(public key infrastructure,PKI)。插件需要每个域参与者的公共密钥和私有密钥。此外,还将X.509证书绑定到参与者的公共密钥到特定名称。每个X.509证书必须由插件配置为信任的特定证书颁发机构(certificate authority,CA)签名(或具有签名链)。加密插件提供加密,解密,签名,哈希等。身份验证和访问控制插件都使用加密插件的功能来验证签名等。这也是加密DDS主题通信的功能所在。

ROS客户端库(ROS Client Library,RCL)是ROS 2的核心组件,它包含面向用户的运行时对安全ROS 2应用程序的支持。RCL负责为支持它的每个DDS实现协调DDS-Security的启用。它支持三个主要功能:

  • 每个域参与者的安全文件;
  • 允许和严格的执行选项;
  • 用于所有安全功能的主开关。

核心库和通讯改进

ROS 2 Foxy 主题现在可以自动发布性能指标和统计信息,以帮助用户调整和审核其应用程序的性能。这些指标很容易在操作过程中记录下来,例如包括ROS主题周期的平均值,最小值,最大值和标准偏差。统计数据可用于数据分析,诊断系统不正常行为以及作为已知问题警报和通知系统的输入。此外,来自这些收集的统计信息的洞察力可以为设计改进提供信息,例如在处于降级状态时为特定的行为模式添加触发器。

在ROS 2 Foxy中,由于QoS不兼容而导致的订阅失败会自动报告为错误。QoS不兼容的一个示例是,某个主题发布为“ 尽力而为 ”,定义为“尝试传递消息,但是如果网络不健全,则可能会丢失它们”,但是订阅者节点要求“ 可靠”。“发布者”定义为“如果可能,则传递消息,如果网络不健全,则可以多次重试。” 在此示例中,由于无法传递所请求的服务质量,因此订阅者将无法连接到发布者,因此,将生成错误并且未接收到消息。此新行为可防止开发人员错误地订阅不兼容的主题,而是确保他们立即解决问题。在设计实施过程中显示问题可以通过最大程度地减少装运的缺陷以及由此带来的缺陷负担,为公司节省宝贵的时间。

使用ROS 2 Foxy,现在有多个Tier 1 ROS中间件(RMW)层选项。最新的第1层完全支持RMW实施,Cyclone DDS进行了许多改进。此外,默认的DDS FastDDS合并了许多新功能,例如DDS安全性,DDS动态类型,实时兼容性(静态内存分配,对新QoS策略的支持 (可跟踪节点的运行状况)),改进的内部-通过Wi-Fi进行过程通信并提高性能。当默认的RMW与他们的产品需求不匹配时,这些添加的选项使开发人员可以选择。

更有效,更方便的工具

Rosbags是ROS中众所周知的有用的日志记录,调试和测试工具。现在,在ROS 2 Foxy中,rosbag可以使用任何QoS设置记录和重放数据。在ROS 2 Foxy之前,不会记录所有QoS设置与默认设置不兼容的主题。自适应QoS配置文件检测允许记录Best Effort Reliability主题,例如SensorData消息预设配置文件,以及在记录开始时间之前发布的闩锁消息主题,例如导航图。这些新的改进表明,现在可以将rosbags包含在任何使用QoS的基于ROS的日志记录系统中。

ROS 2 Foxy的另一个新的有用的rosbag功能是在记录和播放数据时压缩和解压缩包文件的功能。这样可以节省磁盘空间和带宽,而两者在机器人系统上都是有限的。

同样,“ ros2 node –verbose”和“ ros2 topic –verbose” 命令行工具(command line tools)现在报告所检查主题的QoS信息。这个新添加的自省元素有助于确定在跟踪问题时是否以及在何处发生不匹配。

如果您的公司在ARM嵌入式板上执行工作,则可以使用新的交叉编译工具 简化和简化针对X86-64以外的体系结构(例如,ARMHF/ARMv8)的ROS 2工作区的编译。

导航框架的稳定性,功能和文档

机器人技术的一项基本功能是将机器人从A点移动到B点。在ROS中,提供此功能的软件包称为“导航”。在ROS 2中,“Navigation2 ”软件堆栈是框架的最新版本。Navigation2基于原始的ROS 导航堆栈,但具有一些改进,例如通过行为树(BT)的可扩展性以及使用生命周期节点的启动流控制。Navigation2最初是针对ROS 2 Crystal Clemmys发布的,此后一直在不断改进。该框架的稳定性已通过在大学校园内运行24小时稳定性测试通过Marathon2进行了证明。

根据Navigation2的维护者Steve Macenski的说法,Foxy版本包括:

  • 全面的Windows支持;以前仅支持Linux。
  • 用于距离和速度控制器的新BT节点插件,检查距离和速度条件,检查“是否收到新目标?”,检查“变换(TF)是否有效?”
  • 导航现在可以抢占计划程序和恢复等长期运行的流程,这对于取消导航目标和发送新目标非常有用。
  • 新的文档网站:ros.org,其中包括针对路径规划器和代价地图教程。
  • 测试覆盖率的改善。
  • 现在,动作服务器具有有关异步动作过程状态的动作反馈。
  • 网络稳定性的改进–所有服务调用和转换都安装了超时功能,并已验证其以预期的速率运行。

驱动程序和“开箱即用”的集成

传统上,开发人员和公司都能够利用ROS生态系统中支持的大量硬件和组件驱动程序。使用ROS 2,没有什么不同。已经有许多传感器和机器人驱动程序已受支持,并且更积极地添加到每个发行版中。例如,AWS客户Box Robotics 能够利用现有的Ouster OS1-16激光雷达驱动器,并为社区做出了许多改进和性能改进。Box Robotics还通过将Ouster Tooling开源采购到ROS社区,以及广泛的性能分析,为Ouster Tooling做出了贡献。。Ouster Tooling建立在Ouster ROS 2驱动程序的基础上,这对ROS开发人员和用户很有价值,因为它节省了他们的时间和精力。Box的工作是参与ROS 2社区的典范,因为他们在基于现有开源软件包的基础上向社区提供了修复程序。

Box Robotics正在通过具有类似于人类的空间感知能力来重建AGV感知堆栈,以提高行驶速度,提高安全性并实现终身自治。通过在开源ROS软件包之上构建其产品,Box能够在创纪录的时间内推向市场。他们的软件 Warehouse HD将3D LiDAR,HD地图和深度学习的最新进展整合到针对高吞吐量仓库操作进行了优化的ROS 2应用程序框架中。在动画中,Box Robotics的Warehouse HD在线3D SLAM模块实时构建了生产设施。生成的地图构成了HD Map的几何基础,可用于定位,规划和对象检测,以提高性能,使其超出运行时硬件传感器所能达到的水平。

AGV利用Box Robotics Warehouse HD技术实现了工厂实时三维地图

现在,使用MoveIt2完全支持操作

ROS 2 Foxy附带的另一个令人兴奋的软件包是MoveIt2。MoveIt是用于机器人技术的基于ROS的首要运动计划框架和操纵软件,用于需要复杂无碰撞机器人运动才能完成操纵任务的应用中。MoveIt在ROS社区中已得到广泛使用和良好支持。由于与PickNik Robotics和Intel的合作 ,MoveIt 2现在已完全移植到ROS 2。

在这个ROS-Industrial博客文章中,Jorge Nicho引导读者通过在工业开源应用程序上使用MoveIt2。用Python组装ROS 2启动文件的功能派上了用场;它允许Jorge从YAML文件实例化Python字典,并将其元素作为参数传递给他的ROS 2应用程序。在下面,您可以看到Jorge使用MoveIt2进行应用程序规划的简短动画,其中模拟的UR10机械臂必须将相机移动到三个扫描位置,同时使用MoveIt2将无碰撞运动计划到这些位置。

将MoveIt2运动与ROS 2中的西南研究所(SwRI)协作机器人打磨应用程序集成在一起

可以通过访问https://moveit.ros.org/找到入门指南以及有关带有ROS 2的MoveIt的更多信息。

结论

ROS 2 Foxy是全球开源机器人技术社区的一个重要里程碑版本。它包括新的社区流程,功能,性能增强,工具和质量改进。尽管一篇博客文章无法涵盖所有??内容,但希望本概述可以向您介绍这些要点,并鼓励您深入了解并开始在ROS 2之上开发应用程序。现在是时候安装ROS 2 Foxy和自己尝试一下。有关对ROS 2做出贡献的更多信息,请访问开发人员指南。


马特·汉森 Matt Hansen

Matt Hansen是Amazon Web Services(AWS)机器人领域的首席解决方案架构师。在加入AWS之前,Matt在英特尔的开源机器人团队中与ROS和ROS 2一起工作了5年,在那里他领导了ROS 2 Navigation2项目,并且是ROS 2技术指导委员会的原始成员。他是俄勒冈州人,拥有波特兰州立大学电气工程硕士学位。

亚伦·布拉德尔 Aaron Blasdel

Aaron Blasdel是Amazon Web Services(AWS)开源机器人技术负责人,自2012年以来一直在使用ROS设计和发布机器人产品。在加入AWS之前,Aaron为各种机器人创业公司工作,包括但不限于Willow Garage,丰田合作伙伴机器人事业部,Fetch机器人学和Bossa Nova机器人学。他最初来自圣何塞地区,并拥有东京大学的机器人学硕士学位。

卡米洛·布斯卡隆 Camilo Buscaron

Cam是开源机器人技术人员和策略师。主要对云机器人技术,人工智能以及汽车技术和业务感兴趣。