联合ROS:一个面向容错和协同移动机器人的ROS软件框架*外文翻译资料

 2022-02-10 22:17:10

英语原文共 9 页,剩余内容已隐藏,支付完成后下载完整资料


联合ROS:一个面向容错和协同移动机器人的ROS软件框架*

郭忠远、杨文静、李明龙、易晓东、蔡忠轩、王燕珍

(国防科技大学计算机学院高性能计算国家重点实验室,

中国长沙410073

摘要-移动机器人程序控制系统从机器人行为协调、分布式多机器人协作和机器人软件可重用性三个方面进行研究,是一个复杂而耗时的系统。包容模型是一种适用于移动机器人的鲁棒控制结构。联盟模型将其扩展到多机器人系统,这是一个完全分布式的容错模型。机器人操作系统(ROS)提供了大量可重用的机器人模块。结合以上三个方面,提出了一种基于联盟ROS的软件框架,用于开发具有丰富软件资源的容错协同多机器人系统。我们封装了ROS设施来构建框架原型。我们还使用一些基于插件的高性能机制来优化框架的底部。我们可以使用框架提供的API方便地构建具有所有可用ROS资源的单机器人和多机器人应用程序。本文以自主漫游机器人、安全巡逻机器人和多个巡逻机器人为例进行了说明。它们是在模拟环境和真实环境中构建和测试的。实验结果验证了Alliance-ROS的可用性和可用性。

关键词:软件框架、移动机器人、合作机器人、容错、联盟ROS。

一、引言

机器人作为一个多学科交叉领域,近年来发展迅速。机器人在工厂、深海、外层空间等领域逐渐扮演着人类的角色,多机器人系统由于具有自主传感网络、建筑监控、大型物体运输、空气和水下污染监测、森林等潜在应用,正成为机器人研究的重要领域之一。火灾探测、运输系统或大规模灾难后的搜救[1]。建立机器人控制系统,特别是多机器人系统,是一项复杂而耗时的工作。

本文旨在解决单移动机器人和多移动机器人系统开发软件框架的设计与实现问题。该框架应该为机器人开发者提供易于使用的模板和API,以方便他们构建自己的mobilerobot应用程序。这个问题可以分为以下三个方面。

首先,该框架应支持机器人软件的模块化和可重用性。orocos[2]、mrds[3]、opros[4]和opertm aist[5]是近年来开发的机器人软件体系结构。然而,他们缺乏一个提供可重用软件模块的活跃社区。机器人操作系统(ROS)[6]是一个灵活的机器人软件编写框架。它是工具、库和约定的集合,旨在简化在各种机器人平台上创建复杂而健壮的机器人行为的任务。它是从一开始就建立起来的,以鼓励协作机器人软件开发。事实上,ROS提供了大量的软件资源,是最受欢迎的机器人平台。

2016年12月2日收到的手稿;2017年7月7日接受。本课题得到国家自然科学基金(9168204、61303185、61532007)和高性能计算国家重点实验室(201502-01)的支持。2018中国电子学会。内政部:10.1049/cje.2018.03.001

其次,该框架应提供单个移动机器人的行为协调模板。多路复用器[7]根据输入的优先级选择输出。在基于电机模式的控制系统[8]中,每一个行为都通过加权和方法对整体行为作出贡献。有限状态机(fsm)[9]也可以模拟移动机器人的行为协调。Smach[10]是一种任务级的FSM,用于快速创建复杂的机器人行为。命令融合[11]通过仲裁适当地融合行为命令,这样机器人控制系统就可以对其环境做出响应,而不会受到传感器融合固有问题的影响。在多智能体理论中,可以将各种松散耦合的智能体组织在一起,构成一个智能系统。假设模型[12]是布鲁克斯提出的最典型的反应式结构。该模型基于分层控制理论,实现了机器人的复杂智能化。基于假设模型的应用程序具有鲁棒性和可扩展性。该模型可用于单个机器人的行为协调。

第三,框架应封装多机器人的协作机制。Jensen[13]提出了一种方法,开发人员可以将整个机器人团队视为具有不同“自由度”的单个机器人系统,并使用一个中心节点来协调所有机器人。然而,该体系结构缺乏鲁棒性,一个中心节点的故障可能导致整个系统的故障。Noreils[14]设计了一种合作和自主移动机器人的体系结构,由功能、控制和规划三个层次组成。他还实现了两个机器人协作推动箱子的应用,以验证该体系结构。Caloud[15]扩展了Noreils的工作。他将控制过程分为四个层次,包括任务规划、任务分配、运动规划和执行。他使用Petri网来组织任务。Cohen[16]为多机器人合作引入了一个名为FireBoss的控制架构。该体系结构由仿真环境和实时规划师两部分组成。本地规划师向机器人发送运动命令。每个机器人接受命令,并由本地规划师进行移动。然而,它们的工作一直处于理论层面,难以应用于实际的机器人。COROS[17]是一个启发性的项目,它为合作的多机器人系统提供了一个基于ROS的高级概念框架。然而,COROS并没有为开发容错合作多机器人系统提供模型。也有其他研究人员参与了多机器人合作应用[18-20]。联盟模型[21]将包容模型扩展到基于经典多代理理论的多协作机器人。它是一个完全分布式的、基于行为的体系结构,它结合了在每个机器人中使用数学建模的动机来实现容错自适应动作选择。该模型可应用于多机器人协作系统。

在本文中,我们开发了一个容错和协作机器人的软件框架,名为Allianceros。联盟ROS将ROS、包容模型和联盟模型结合在一起。它封装了机器人行为协调和多机器人协作机制,提供了大量基于ROS的资源。我们使用python构建allianceros原型。考虑到联盟基于ROS的应用程序和其他熟悉CPP的程序员的性能缺陷,还开发了另一套基于CPP的API。底部通信接口与ROS兼容。

通过使用Alliance-ROS,开发人员可以从以下几个方面受益。

bull;复杂的行为协调和多机器人协作机制是透明的。

bull;ROS提供的丰富软件包可以重用。

bull;熟悉python或cpp的程序员的学习成本最小化。

最后,利用Alliance-ROS构建了三个机器人应用,包括自主漫游机器人、安全巡逻机器人和多个巡逻机器人。我们使用两个Alliance-ROS版本(python和cpp)来实现应用程序,观察机器人的行为并分析其性能。机器人系统在模拟和真实环境下都能很好地工作。

本文的组织结构如下。第二节详细介绍了Alliance-ROS的体系结构,并总结了开发指南。第三节使用一些应用案例来验证Alliance-ROS的可用性。第四节给出了实验装置和结果。第五部分对本文的工作进行了总结,并提出了今后的研究方向。

二。联盟ROS的软件架构

alliance-ros框架提供了对应于subsumption模型和alliance模型元素(如图1所示)的API,包括抽象类、可继承类和模板类。这个框架尽可能多地集成代码。因此,建立基于包容的单机器人和基于联盟的多机器人应用是非常简单和简单的。

图1。Alliance-ROS原型架构概述

1。联盟ROS架构概述

图2。联盟ROS架构的UML类图

如图1所示,在底层,我们将ROS通信和Python多进程库封装到ROS节点中。通过继承ROS节点,可以实现功能单元并连接它们(即在它们之间建立消息传递通道),从而非常方便地构建行为层。要做到这一点,一个人只能专注于应用程序逻辑,而所有其他人都交给了框架。此外,包括抑制剂、抑制器和转发器(即图1中的“i”、“s”和“f”圈)在内的几个联盟元素都可用,可以直接放置在行为层之间以构建行为集。开发人员也可以使用激励行为模板。

再一次,人们只能关注激励行为的参数,其他的包括以下几个方面的参数已经由框架处理。

bull;基于包容的分层控制理论的单个移动机器人行为协调机制。

bull;容错自适应多任务选择算法,结合了数学模型动机的使用。

bull;使用ROS广播机制,团队机器人中所有激励行为之间的互联通信。

最后,行为层和行为集可以聚合机器人。

综上所述,在Alliance-ROS中,功能单元、行为层、行为集和机器人构成了应用逻辑。抑制剂、抑制剂、转发器和动机行为被封装为API。ROS通信和Python多进程机制为分布式环境提供了支持。

2。联盟ROS实施细则

图2给出了Allianceros的UML类图。底部的“ROS节点”层封装了python多进程和ROS消息传递机制。联盟模型的功能单元、抑制剂、抑制器和转发器基本上都是ROS节点。通过使用python的“multiprocessing.process”类并重写run()方法,可以为构建ROS节点创建新的进程。“rospy.publisher”和“rospy.subscriber”类提供异步消息传递机制。“publisher”类中的publish()方法可用于向其他ROS节点发送消息。“回调”接口负责处理传入的消息。

图3。优化联盟ROS的底层实现与通信支持

此外,“抽象节点”层将上述所有内容封装为“activenode”,这是所有联盟元素的基础。为此,首先构造了几个类,即“进程”、“发送”和“接收”。在“activenode”类中,in it node()方法负责节点初始化,应向其中传递“nodename”参数。createReceive()方法创建一个监听器,用于监视传入消息,监听器中有一个名为onReceived()的接口。程序员应该重写onReceived()方法来处理传入的消息。如有必要,调用create send()方法将处理的结果发送到其他单元。spin()方法使进程一直运行,直到该节点停止。

通过继承“activenode”类,可以创建联盟模型的不同控制元素和功能单元。对联盟元素的消息控制和多任务协调算法进行了封装,可以作为联盟的ROS API。

“激励行为”是联盟ROS的核心类,它封装了自适应多任务选择算法。并为其创建一个名为“heartbeat”的ROS消息类型,指示机器人ID、行为集ID以及某些行为集是否处于活动状态。通过每一个激励行为的广播和接收,建立了机器人团队中所有激励行为之间的相互联系。此外,通过使用ROS“发布/订阅”机制将与附加转发器的连接封装在其中。

通过对控制单元类和功能单元类的继承和聚合,可以构造独立的行为来实现下一层,也可以构造协同任务来分别实现联盟模型的上一层行为集。

最后,将独立的行为类和协作的任务类聚合在一起,实现多机器人应用。这个层包含不同的“robot”类,每个类都有一个start()方法负责启动robot。

不同的抽象层被描述并解释为逻辑容器。在文件系统级别,我们使用python包来组织它们,这些包由单独的文件夹表示。在物理上,类嵌入在不同文件夹中各自的Python模块中。

三。提高性能的架构优化

在上图中,我们设计并实现了基于ROS的python联盟ROS原型。开发人员可以使用Allianceros提供的API来构建他们的单机器人或多机器人应用程序。由于python的快速原型能力,alliance-ros具有很高的开发效率。但是,它的底层实现和通信效率相对较低,因此我们使用cpp编程语言实现了另一个基于nodelet机制、pluginlib机制和dds中间件的Alliance-ROS版本。

如图3所示,首先,DDS中间件支持不同机器人之间的通信。通过使用DDS接口增强扩展性,实现了不同机器人激励行为之间的互联。这样可以省去中心节点即ROS主节点,使联盟机器人的多机器人通信机制分散。因为我们使用多播机制而不是单播,这可以减少消息连接的数量,提高消息吞吐量。其次,通过使用ros nodelet机制和pluginlib库,allianceros中的每个基本模块都是一个管理器的插件,即动态可加载类。当系统运行时,单个机器人中的所有模块都活在一个进程中。第三,利用Boost库的智能指针在单个机器人的消息之间传递消息。将要传递的消息放在共享内存中。实际上,消息传递是指针传递,数据复制时间为零,ROS序列化和反序列化过程都被消除。最后,模块的回调放在线程池中,由回调队列管理器调用。所以整个系统只能运行几个线程。

Alliance-ROS的基本控制元素被封装并模板化为易于使用的API,包括抑制剂、抑制器、转发器和激励行为。联盟基于ROS的应用程序的功能和控制单元由规范化的XML文件(ROS提供的启动文件)组织和启动。由于Alliance-ROS的通信接口与ROS兼容,开发人员也可以重用ROS提供的包。

4。使用Alliance-ROS开发新应用程序的指南

在设计阶段,可以按照以下开发指南使用Alliance-ROS。

a)描述单机器人的应用场景

或多机器人系统。

b)在不需要多机器人通信的情况下,确定每个机器人的行为层,如避开障碍物、自我保护等。

c)如有必要,确定

机器人队伍,如多机器人巡逻等。

d)确定需要配置哪些功能单元-

构建独立的行为和合作的任务。

e)确定联盟控制元素(抑制剂、抑制器、转发器和激励行为)的正确位置。

f)绘制单机器人或多机器人应用的包容模型图或联盟模型图。

在实施阶段,以下制定指南可以利用联盟ROS。它适用于Alliance-ROS的python版本和cpp版本。如果开发人员需要快速原型验证,请选择Python版本。如果需要应用程序的实时性、可扩展性和高通信效率,请选择CPP版本。

a)创建功能单元需要的消息文件,并使用ROS提供的编译系统重新编译文件系统。

b)创建行为所需的功能单元,更好地重用ROS包,必要时手动编写。<!--

全文共11525字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[453816],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。