上海硅步ROS连载系列50期——ROSLink ——ROS与物联网之间的桥梁(1)
转载 2018-07-27 17:09 上海硅步 来源:上海硅步ROSLink是由沙特苏丹王子大学教授,同时也是硅步机器人研发总监的Anis Koubaa博士首先提出来的。为了使大家了解ROSLink,从本期开始,我们将分三期对ROSLink进行介绍。
本期为第一期,主要介绍ROSLink的基本概念及ROSLink提出的背景和要解决的问题。
作为物联网(IoT)的一种新形式,机器人与互联网的融合现在正成为一种新兴趋势。这种结合对于推动通过互联网虚拟化、控制和监控的新型云机器人应用至关重要。ROSLink是一种将应用机器人操作系统(ROS)的机器人与物联网相结合的新协议。提出ROSLink背后的动机正是由于通过互联网监控和控制机器人的ROS功能的欠缺。尽管ROS允许使用相同ROS主控器从工作站控制机器人,但这种解决方案不具有可扩展性,且仅仅局限于局域网。近期工作中提出的解决方案依赖于集中式ROS主控器或机器人端Web服务器,同样具有类似的限制性。受到MAVLink协议的启发,本文提出的ROSLink协议通过云定义了机器人和终端用户之间的轻量级异步通信协议。ROSLink利用代理云服务器将使用了ROS的机器人与用户相连接,并允许他们之间的互连。ROSLink性能已在云上进行测试,显示较为高效可靠。
1.简介
云机器人是机器人领域的一个新兴趋势,旨在通过物联网(IoT)和云计算技术来从两个角度推广机器人的应用:(i)虚拟化:通过Web和Web服务技术提供对机器人的无缝链接,(ii)远程大脑:将密集型计算从机器人卸载到云资源,以克服机器人的计算、存储及能量限制。
如今,机器人操作系统(ROS)代表了开发机器人应用的一个事实上的标准。ROS作为中间件,除了重复使用开源项目库之外,还为硬件和机器人资源(如传感器和执行器)提供了几个级别的软件抽象。它的设计目的是降低开发大型服务机器人的难度,降低机器人软件构建的复杂性。尽管ROS广泛使用于开发服务机器人应用程序,但它缺乏通过互联网对机器人进行控制和监视的原生支持。在同一局域网(LAN)上的远程工作站中编写ROS节点(即程序)是可行的,机器人机器和工作站都使用ROS主站统一资源标识符(URI),但是控制来自远程位置的ROS节点具有挑战性。为解决这个局限性,已经有许多研究工作提出了对基于客户端-服务器架构的关注。
解决该问题的一项里程碑式的工作是ROSBridge协议。它基于安装在机器人端的Websockets服务器,该服务器允许根据ROS主题和服务发送机器人的内部状态,并接收命令到Websockets客户端来进行处理。这种方法实现了ROS与互联网的有效结合; 然而,事实上Websockets服务器在机器人机器上的运行要求机器人拥有一个公共IP地址以供Websockets客户端访问,并不对所有机器人可行,或者在同一局域网上。当机器人位于网络地址转换(NAT)域后面时,也可以使用NAT,但这种选择在实际部署中可能会很麻烦。在文献中作者提出了一种Web服务ROS,它可以在机器人中定义一个Web服务服务器,可通过网络进行访问。但是这个方法具有与ROSBridge一样的局限性,即服务器位于机器人端。
本文填补了这一空白,并提出了一种通信协议ROSLink,该协议克服了上述的限制,(i)实现了机器人端客户端的规范,(ii)用了一个云服务器,即位于公共IP服务器机器上的代理服务器。这个想法受到MAVLink协议的启发,机器人通过网络客户端将其数据以序列化的消息发送到作为服务器的地面站,地面站接收这些消息、对其进行处理并将控制命令发送给机器人。这样,机器人就不再需要一个公共的IP地址,仍然可以在代理服务器后访问。
本文主要完成了两项工作。首先,我们提出ROSLink这种新的通信协议,它定义了一种三层架构。ROSLink Bridge客户端在机器人端运行;ROSLink Proxy作为地面站的服务器,以及通过ROSLink协议与机器人进行交互的用户端的客户端应用程序。其次,通过对地面Turtlebot机器人和AR.Parrot无人机进行实验研究,验证了我们提出的ROSLink协议。我们展示了ROSLink的有效性和可行性。
2 背景和目标
2.1 背景
本文研究的动机是为了将ROS与物联网进行整合。ROS本身不支持通过互联网监控和控制机器人。事实上,如图1(a)所示,ROS允许使用相同的ROS主控器从工作站控制机器人,但该解决方案不具有可扩展性,而局限于在局域网使用。典型的情况是每个机器人启动自己的ROS主控节点,如果用户将自己的ROS网络设置配置为使用机器人正在运行的同一ROS主控,则用户可以从他们的工作站控制机器人。这种标准方法本身不允许通过互联网控制机器人,因为机器人通常没有公共IP地址。在某些情况下可以考虑在NAT后面使用端口转发,但在其他情况下可能无法实现,例如通过3G / 4G进行连接。
一种可能的解决方案如图1(b)所示,是对所有机器人使用一个ROS主节点,主节点在具有互联网公共IP地址的中央服务器上运行。所有用户都将连接到相同的ROS 主控器,并通过发布和订阅它们的主题和服务来访问任何一台机器人。然而这个解决方法也有几项局限。第一,一些ROS主题、服务和节点可能因具有相同名称而互相冲突。这就需要我们在设计ROS节点、服务和主题的命名空间(namespace)时小心谨慎,避免冲突。机器人数量较多时,这个方法会变得很复杂。第二个问题是缺乏可扩展性,当给定时间绑定了多个机器人时,ROS主控器可能会过载。除了考虑到一些ROS主题太占带宽这个已知的网络问题外,还没有一个可行的解决方案能将个人用户映射到他们的机器人,因为所有主题对所有用户都是可见的。
我们的方法是设计ROSLink,一种轻量级通信协议,灵感来自MAVLink ,允许ROS机器人与其用户进行基于云的交互,如图1(c)所示。我们的想法是在ROS顶部为每一个机器人添加一个ROSLink Bridge(桥),这样该桥可以使用JSON序列化消息发送机器人的所有状态。ROSLink Bridge是一个ROS节点,用于访问ROS中所有感兴趣的主题和服务,并将选定的信息发送到使用JSON格式序列化的ROSLink消息中。这些消息被发送到ROSLink云代理服务器,该服务器处理消息并将消息转发给机器人的单个用户和/或多个用户。另外,用户通过使用ROSLink JSON消息的ROSLink云代理向机器人发送命令,命令由ROSLink Bridge进行处理,从而执行相应的ROS操作。基于云的ROSLink方法具有三个主要优点:(1)独立于机器人的ROS主控器节点,(2)确保用户和机器人之间通过云无缝通信,(3)提供对机器人、用户和底层服务的有效管理。
(a) 标准方法:ROS机器人和ROS用户之间的典型连接。
用户连接到机器人的ROS主控器,控制和监视其状态,通常在一个局域网内。
(b) 中心方法:所有的机器人和用户都连接到了一个中心ROS主控器。
此方法不具有可扩展性,无法对机器人和用户提供有效管理。
(c) ROSLink方法:基于云的解决方法,ROS机器人和用户通过云进行交互。
ROSLink云给用户和机器人提供管理、面向服务的接口和实时数据流服务。
图1:ROS操作方法
2.2 综述
ROSLink的主要目标是通过互联网控制和监控使用ROS的机器人。 在文献中,大多数相关工作集中在使用双层客户端/服务器方法上,服务器在机器人中实现,客户端在用户应用程序中实现。事实上,这些研究大多是基于ROSBridge和ROSJS框架的实例来构建遥控机器人。ROSBridge代表了ROS系统远程控制机器人可以远程控制的里程碑。然而,这种方法的缺点是:(1)以机器人为中心的方法,由于服务器集中在机器人本身,所以限制了系统的可扩展性;(2)在互联网上部署非常困难,因为当机器人位于局域网内时,需要拥有公共IP地址或通过NAT转发端口访问。
为了克服这些局限性,我们提出采用三层客户机/服务器模型的ROSLink,其中客户端在机器人和用户中实现,而服务器位于公共领域并充当代理将机器人与其用户相连。 ROSLink克服了上述的两个问题。首先,机器人内部不再设服务器,因此不再采用以机器人为中心的方法。相比之下,机器人通过ROSLink Bridge组件实现客户端,ROSLink Bridge组件是一个ROS节点,一方面与ROS进行交互,另一方面通过网络接口(UDP,TCP, 或Websockets)向外部发送ROS数据。此外,该模型的ROSLink服务器端在一个名为ROSLink 代理的公共服务器中实现,该服务器充当机器人和用户之间的中介。机器人和用户向代理服务器发送消息,代理服务器相应地将其发送给另一端。
ROSLink通过定义通信协议(受MAVLink协议启发)定义ROS的完整抽象,该协议通过ROS主题/服务提供有关机器人的所有信息,而不会将ROS生态系统暴露给用户。用户不需要熟悉ROS就能够使用ROSLink为机器人发送命令。 ROSLink为用户与机器人进行交互定义了一组界面,以及一组用在它们之间进行交换的消息。
ROSLink消息是基于ROS主题/服务参数构建的,用以获取或提交数据来执行操作。消息用JSON字符串表示。JSON格式可选用于数据交换,因为它是与平台及语言无关的数据表示格式。此外,与XML相比,它是一个更轻量级的解决方案,更适合于资源受限和带宽受限的平台。这将允许客户端应用程序开发人员选择任何编程语言(C ++、Java、JavaScript、Python等)来开发与ROSLink交互的客户端应用程序,来命令和监视使用ROS的机器人。
总之,ROSLink不同于以前的工作,特别是与ROSBridge在以下这些方面的区别:
-ROSLink在机器人和用户应用程序中实现客户端,并在中间代理中实现服务器,而ROSBridge在机器人中实现Websocket服务器,在用户应用程序中实现Websocket客户端。
-ROSBridge基于Websocket协议,而ROSLink可以使用任何传输层协议(TCP,UDP和Websockets)来实现。在本文中,我们使用UDP和Websockets接口来实现ROSLink。
-ROSLink不像以前的研究那样依赖于ROSBridge,而是在ROS和非ROS用户之间定义自己的通信协议。