首页> 中国专利> 一种多机器人间实时消息传递方法

一种多机器人间实时消息传递方法

摘要

本发明公开了一种多机器人间实时消息传递方法,目的是基于ROS在机器人中间件层提供对网络消息实时传递的支持能力,使得多机器人之间的消息传递过程能够满足优先级、传输时延等时间约束。技术方案是在ROS中引入具备实时性保证能力的网络消息传递规范DDS,首先搭建多机器人计算结点环境,此环境中构建有操作系统Ubuntu、机器人中间件ROS、符合DDS规范的消息实时中间件和ROS/DDS协议插件,ROS/DDS协议插件支持ROS消息的实时属性设置,并实现ROS消息和DDS消息的相互转换,使用符合DDS规范的消息实时中间件发送和接收消息。采用本发明可以在现有多机器人分布式应用不修改直接使用ROS/DDS协议插件的条件下,在机器人中间件层实现多机器人之间消息传递的实时性。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-08-03

    授权

    授权

  • 2016-04-20

    实质审查的生效 IPC(主分类):H04L12/58 申请日:20151211

    实质审查的生效

  • 2016-03-23

    公开

    公开

说明书

技术领域

本发明涉及软件构造技术领域,具体涉及一种在多机器人分布式应用中,通过在软 件中间件层引入具备实时性保证能力的网络消息传递协议,实现多机器人之间的实时消 息传递的方法。

背景技术

多机器人分布式应用是指由多个机器人所组成的软件系统,在这一系统中多个机器 人互相协同,共同完成指定的任务。多机器人分布式应用的典型实例包括无人机群软件 系统、机器人足球队软件系统等。机器人中间件是支撑多机器人分布式应用的软件基础 设施,它封装了多机器人分布式应用共性问题(如数据通信、事务等)的解决方案,从 而可以大幅简化此类应用的开发过程。ROS(RobotOperatingSystem)是目前主流的、 成熟的机器人中间件,被工业界和学术界所广泛使用。它运行于Ubuntu等操作系统之上, 提供基于消息的多机器人交互能力。在ROS中,消息传递采用的是基于主题(Topic)的 发布/订阅机制,即消息按照主题进行分类,消息的发布者在某一主题上发布消息,所有 订阅了这个主题的消息订阅者将收到该消息。ROS消息发布者发布消息时先将消息放入 发送缓冲区,再由ROS的消息发送模块发送消息;接收消息时,先由ROS消息接收模 块接收消息,再将该消息放入消息接收缓冲区,消息订阅者从缓冲区中获取消息。

机器人直接感知和作用于物理世界,多机器人分布式应用通常也与物理世界紧密结 合。物理世界中的时间约束会直接映射到多机器人分布式应用中,使得此类应用中多个 机器人之间的消息传递必须满足一定的时间约束(例如优先级或者传递时延上限),也即 需要保证其实时性。例如,用于地面勘察的无人机系统通常由无人机、地面控制站和配 套网络通信设施组成,无人机需要向控制站传输飞行状态数据、实时图像信息等多种类 型数据,这些数据有不同的优先级和预期传输时延:飞行状态数据虽然数据量较少,但 必须高优先级、低延时传送,而高分辨率的地面图像信息需要占用很大的带宽,但可以 以低先级传递,必要时可以通过丢帧等方式来减少带宽占用。

在企业计算和互联网计算等领域,对网络消息实时传递的研究已经非常深入,其中 较为主流的研究成果是实时消息传输规范DDS(DataDistributedServiceforReal-time Systems)。DDS规范是OMG(ObjectManagementGroup)组织为了满足分布式实时系统 中数据的实时交换的需求而发布的实时消息传输协议规范。DDS规范定义了以数据为中 心的基于主题的发布/订阅机制,提供了强大的数据服务质量QoS(QualityofService) 控制策略,例如消息的传输优先级、消息自动夭折、传输延迟控制、基于时间过滤消息 等等。因而DDS规范能够很好的支持分布式实时系统中数据高效、实时、可靠的发送。 目前,DDS规范已在国防、电信、航空、分布控制、工业自动化等领域得到广泛的运用。

但是,在机器人中间件领域,目前尚无公开的技术资料涉及网络实时消息传递成果 或成熟技术方案。以ROS为例,其基于主题的消息发布/订阅机制只能提供普通的消息交 互能力,不能对消息提供时间约束方面的服务质量参数的设置。如何在机器人中间件层 面增加对网络消息实时性保证的支持,以此来实现机器人分布式应用网络消息传输的实 时性,是软件构造技术领域需要解决的技术问题。

发明内容

本发明要解决的技术问题是基于ROS在机器人中间件层提供对网络消息实时传递的 支持能力,使得多机器人之间的消息传递过程能够满足优先级、传输时延等时间约束。

本发明的技术方案是在ROS中引入具备实时性保证能力的网络消息传递规范DDS。 本发明首先搭建多机器人计算结点环境,此环境中构建有操作系统Ubuntu、机器人中间 件ROS、符合DDS规范的消息实时中间件和ROS/DDS协议插件,ROS/DDS协议插件 支持ROS消息的实时属性设置,并实现ROS消息和DDS消息的相互转换,最后使用符 合DDS规范的消息实时中间件传递消息,以此实现ROS消息传递地实时性。

本发明包括以下步骤:

第一步,搭建多机器人计算结点环境,它由m个机器人计算结点构成(m≥1,m是 整数)。机器人计算结点是可以运行软件程序的机器人硬件设备(如无人机、无人车、人 形机器人等),机器人计算结点通过网络设备互连。

每个机器人计算结点上除了装有操作系统Ubuntu(例如14.04版本)、机器人中间件 ROS(例如Indigo版本,由ROS消息发布者、ROS消息发送模块、ROS消息发送缓冲 区、ROS消息订阅者、ROS消息接收模块、ROS消息接收缓冲区以及ROS原有通信协 议组成)、符合DDS规范的消息实时中间件(例如DDS规范的开源实现OpenSpliceDDS, 简称DDS中间件)外,还有ROS/DDS协议插件。机器人中间件ROS提供基于发布/订 阅消息的多机器人交互能力,DDS中间件提供实时消息传输能力,ROS和DDS中间件 均运行于Ubuntu操作系统之上。ROS/DDS协议插件负责ROS消息和DDS消息的相互 转换,并使用DDS中间件进行实时消息发送和接收。

ROS/DDS协议插件由实时性调用模块、消息转换模块、主题映射模块、出错处理模 块、消息发送代理模块、消息接收代理模块六个部分组成。

ROS消息发布者通过使用实时性调用模块设置ROS某个主题需要满足的实时属性。 ROS消息发布者将ROS主题名和实时属性发送给实时性调用模块。

由于实时属性只能在创建新ROS主题时设置,实时性调用模块从ROS消息发布者 获得ROS主题名和实时属性后,先检查该ROS主题名是否已经设置实时属性,然后再 将ROS主题名和实时属性发送给消息发送代理模块。

ROS主题名唯一标识了一类消息。ROS消息发布者基于某一主题发布消息,所有订 阅了这个主题的ROS消息订阅者将收到该消息。

实时属性描述了发布的消息需要满足的实时约束。实时属性包括消息优先级、预期 传输延迟、自动夭折时限、时间过滤周期。实时属性可以设置一个或多个,如果实时属 性为空,意味着与该ROS主题相关的消息不需要满足实时要求,普通发送即可。

消息优先级属性(transport_priority)用来设置在主题上发布的消息的优先级,主要 分为ExtremelyLow、VeryLow、Low、Normal、High、VeryHigh、ExtremelyHigh7个等级, 这7个等级由低到高,ExtremelyLow表示消息发送的优先级极低、VeryLow表示消息发 送的优先级很低、Low表示消息发送的优先级低、Normal表示消息发送的优先级正常、 High表示消息发送的优先级高、VeryHigh表示消息发送的优先级很高、ExtremelyHigh 表示消息发送的优先级极高。优先级高的消息优先发送。

预期传输延迟属性(latency_budget)用来设置发布的消息从消息发布者到达消息订 阅者的预期时间。例如预期时间5ms的消息比预期时间10ms的消息优先发送。

自动夭折时限属性(time_filter_duration)用来设置发布消息的生命周期,如果消息 在其生命周期内没有送达到消息订阅者,ROS/DDS协议插件将丢弃该消息。例如发布消 息的生命周期是10ms,如果在10ms内,消息没有送达到消息订阅者,ROS/DDS协议插 件将丢弃该消息。

时间过滤周期属性(message_valid_period)用来设置过滤消息的时间段,即在一段 时间内只送达一个消息,其他消息将被ROS/DDS协议插件丢弃。例如对于机器人每隔 20ms发送一条自身状态消息,过滤消息的时间段是1s,ROS/DDS协议插件在1s的间隔 内只送达一条机器人自身状态消息。

消息转换模块实现ROS与DDS消息格式之间的相互转换。DDS消息由消息头、实 时属性域和消息体组成,实时属性域指明了该DDS消息所要满足的实时约束。ROS消息 到DDS消息的转换方式是将ROS消息直接填充到DDS消息体,并使用从实时性调用模 块接收的实时属性填充DDS消息实时属性域。DDS消息到ROS消息的转换方式是直接 从DDS消息体提取ROS消息。

主题映射模块实现ROS主题名与DDS主题名的相互转换,并生成“ROS与DDS主 题名映射”表。ROS主题名由字母、数字和“/”符号组成,并以字母开头。DDS主题名 由字母和数字组成,并以字母开头。ROS主题名到DDS主题名的转换规则是如果主题中 含“/”,将其替换为“A9E0”,其它的字母和数字不变。DDS主题名到ROS主题名的 转换规则是如果主题中含“A9E0”,将其替换为“/”,其它的字母和数字不变。“A9E0” 是一个特殊的标识位,用来标识字符“/”。“ROS与DDS主题名映射”表是一个二维表, 该二维表有k行,每行包含两个域,一个域是ROS中的主题名,另一个域是DDS中的 主题名,k为ROS中的主题数,k≥0,k是整数。

出错处理模块实现DDS异常到ROS异常的转换。出错处理模块根据预定义映射规 则,实现DDS错误到ROS错误的映射。例如DDS网络中断异常 DDS::NetworkDisconnection映射为ROS网络中断异常ROS::NetworkDisconnection。

消息发送代理模块从实时性调用模块接收ROS主题名和实时属性,将ROS主题名 和实时属性保存在“ROS主题与实时属性”表中。“ROS主题与实时属性”表是一个二 维表,该二维表有k行,每行包含两个域,一个域是ROS消息的主题名,另一个域是 ROS消息的主题需要满足的实时属性,k为ROS中的主题数,k≥0,k是整数。

消息发送代理模块从ROS消息发送模块接收ROS消息,获得ROS消息的主题名, 并根据ROS主题名查询“ROS主题与实时属性”表获得ROS消息的实时属性;消息发 送代理模块将ROS主题名发送给主题映射模块,并从主题映射模块接收DDS主题名; 消息发送代理模块使用DDS主题名查询“数据发射器池”表获得数据发射器;消息发送 代理模块将ROS消息和实时属性发送给消息转换模块,并从消息转换模块接收DDS消 息;最后消息发送代理模块使用数据发射器发送DDS消息。数据发射器是一个对象,它 使用DDS中间件完成DDS消息发送,每个DDS主题对应一个数据发射器。消息发送代 理模块将DDS主题名和数据发射器保存在“数据发射器池”表中。“数据发射器池”表 是一个二维表,该二维表有j行,每行包含两个域,一个域是DDS主题名,另一个域是 与DDS主题名对应的数据发射器,j为DDS中的主题数,j≥0,j是整数。

消息发送代理模块使用数据发射器发送DDS消息时,可能会遇到异常,例如网络中 断异常。数据发射器会俘获DDS异常,将DDS异常发送给出错处理模块,并从出错处 理模块接收ROS异常,数据发射器将该ROS异常返回给ROS消息发布者。

消息接收代理模块从ROS消息订阅者接收ROS主题名,并将ROS主题名发送给主 题映射模块,并从主题映射模块接收DDS主题名。消息接收代理模块使用DDS主题名 查询“数据接收器池”表,获取数据接收器。数据接收器是一个对象,它使用DDS中间 件完成DDS消息接收,每个DDS主题对应一个数据接收器。消息接收代理模块将DDS 主题名和数据接收器保存在“数据接收器池”表中。“数据接收器池”表是一个二维表, 该二维表共有j行,每行包含两个域,一个域是DDS主题名,另一个域是与DDS主题 名对应的数据接收器,j为DDS中的主题数,j≥0,j是整数。

消息接收代理模块使用数据接收器从DDS中间件接收DDS消息,获得DDS主题名, 将DDS主题名发送给主题映射模块,并从主题映射模块接收ROS主题名;然后消息接 收代理模块将DDS消息发送给消息转换模块,并从消息转换模块接收ROS消息;最后 数据接收器再将此ROS消息发送给ROS消息接收模块。ROS消息接收模块将ROS消息 按照ROS主题写入ROS的消息接收缓冲区后,ROS消息订阅者从ROS的消息接收缓冲 区获得ROS消息。

消息接收代理模块使用数据接收器接收DDS消息时,可能会遇到异常,例如网络中 断异常。数据接收器会俘获DDS异常,将DDS异常发送给出错处理模块,并从出错处 理模块接收ROS异常后,数据接收器将该ROS异常返回给ROS消息订阅者。

第二步,机器人计算结点A的ROS消息发布者向ROS消息发送缓冲区发送消息, 且机器人计算结点A的消息发送代理模块从ROS消息发送缓冲区中取出消息,将ROS 消息转换成DDS消息之后使用DDS中间件发送DDS消息;同时机器人计算结点B的消 息接收代理模块从DDS中间件接收DDS消息,经过消息格式转化之后将ROS消息按 ROS主题写入ROS消息接收缓冲区,且机器人计算结点B的ROS消息订阅者接收来自 ROS消息接收缓冲区的ROS消息。具体步骤如下:

2.1机器人计算结点A的ROS消息发布者使用实时性调用模块设置ROS主题的实时 属性,并发送ROS消息,具体步骤如下:

2.1.1计算节点A上的机器人应用使用一个ROS主题名创建ROS消息发布者,ROS 消息发布者将该ROS主题名和实时属性传递给实时性调用模块;

2.1.2计算节点A的实时调用模块接收到该ROS主题名和实时属性后,将ROS主题 名和实时属性发送给消息发送代理模块;

2.1.3计算节点A的消息发送代理模块收到ROS主题名和实时属性后,在“ROS主 题与实时属性”表中查找该ROS主题名,如果该ROS主题名已经存在,消息发送代理 模块报“ROS主题名已存在异常”,并将错误返回ROS消息发布者,转第三步;否则将 ROS主题名和实时属性作为新的一行保存在“ROS主题与实时属性”表中;

2.1.4ROS消息发布者将ROS消息发送给ROS消息发送模块,ROS消息发送模块接 收到ROS消息之后,将其写入ROS消息发送缓冲区;

2.2消息发送代理模块从ROS消息发送缓冲区中取出消息,将ROS消息转换成DDS 消息之后使用DDS中间件发送DDS消息,具体步骤如下:

2.2.1消息发送代理模块等待,直到ROS消息发送缓冲区中写入消息,转到步骤2.2.2;

2.2.2消息发送代理模块按照顺序从ROS消息发送缓冲区取出一个ROS消息,消息 发送代理模块从接收到的ROS消息中获取其主题名,将ROS主题名发送给主题映射模 块,并从主题映射模块接收DDS主题名。具体步骤如下:

2.2.2.1消息发送代理模块从接收到的ROS消息中获取其主题名,将ROS主题名发 送给主题映射模块;

2.2.2.2主题映射模块接收到ROS主题名后,在“ROS与DDS主题名映射”表中查 找该ROS主题名。

2.2.2.3若“ROS与DDS主题名映射”表中ROS主题名已经存在,则直接向消息发 送代理模块返回对应的DDS主题名,转步骤2.2.3;

2.2.2.4若“ROS与DDS主题名映射”表中不存在ROS主题名,读取ROS主题名, 如果主题中含“/”,将其替换为“A9E0”,转步骤2.2.2.5;否则不改变字母或数字,直接 转步骤2.2.2.5;

2.2.2.5将ROS主题名和DDS主题名作为新的一行保存在“ROS与DDS主题名映射” 表中,并向消息发送代理模块返回DDS主题名,转步骤2.2.3。

2.2.3消息发送代理模块使用ROS主题名在“ROS主题与实时属性”表中查找该主 题名需要满足的实时属性;若“ROS主题与实时属性”表中ROS主题名已经存在,则消 息发送代理模块直接获得与主题名对应的实时属性,转步骤2.2.4;否则该主题名需要满 足的实时属性设置为空,转步骤2.2.4;

2.2.4消息发送代理模块使用DDS主题名查询“数据发射器池”表,获取数据发射器。 具体步骤如下:

2.2.4.1如果在“数据发射器池”表中有与DDS主题名对应的数据发射器,消息发送 代理模块直接获得对应的数据发射器,转步骤2.2.5;

2.2.4.2如果没有对应的数据发射器,消息发送代理模块根据DDS主题名创建数据发 射器,并将DDS主题名和数据发射器作为新的一行保存在“数据发射器池”表中,转步 骤2.2.5;

2.2.5消息发送代理模块使用数据发射器发送DDS消息。

2.2.5.1消息发送代理模块将待发送的ROS消息和该消息主题名对应的实时属性发 送给消息转换模块,并从消息转换模块接收DDS消息。具体步骤如下:

2.2.5.1.1消息发送代理模块将待发送的ROS消息和该消息主题名对应的实时属性发 送给消息转换模块;

2.2.5.1.2消息转换模块接收到ROS消息和实时属性后,将ROS消息直接填充到DDS 消息体,并使用实时属性填充DDS消息实时属性域;

2.2.5.1.3消息转换模块返回DDS消息。

2.2.5.2消息发送代理模块使用数据发射器将DDS消息发送给DDS中间件,由DDS 中间件再进行发送;

2.2.5.3DDS中间件在发送消息时,如果遇到异常(例如网络中断异常),数据发射器 俘获DDS异常,调用出错处理模块将DDS异常转换成ROS异常,并将该ROS异常返 回给ROS消息发布者。具体步骤如下:

2.2.5.3.1数据发射器俘获DDS异常,将DDS异常发送给出错处理模块;

2.2.5.3.2出错处理模块接收到DDS异常,根据预定义映射规则,将DDS异常错误映 射到ROS异常错误;

2.2.5.3.3出错处理模块返回ROS异常到数据发射器;

2.2.5.3.4数据发射器将ROS异常返回给ROS消息发布者。

2.2.6消息发送代理模块判断ROS消息发送缓冲区中是否还有ROS消息,若还有ROS 消息,转步骤2.2.2;否则转步骤2.2.1。

2.3在机器人计算结点A的ROS消息发布者向ROS消息发送缓冲区发送消息的同时, 机器人计算结点B的消息接收代理模块从DDS中间件接收DDS消息,经过消息格式转 化之后将ROS消息按ROS主题将ROS消息写入ROS消息接收缓冲区。具体步骤如下:

2.3.1计算节点B上的机器人应用使用一个ROS主题名创建ROS消息订阅者,并且 ROS消息订阅者将该ROS主题名发送给消息接收代理模块;

2.3.2消息接收代理模块接收到ROS主题名,将ROS主题名发送给主题映射模块, 主题映射模块将ROS主题名转换为DDS主题名,并将DDS主题名返回给消息接收代理 模块;

2.3.3消息接收代理模块使用DDS主题名查询“数据接收器池”表,获取数据接收器。 具体步骤如下:

2.3.3.1如果在“数据接收器池”表中有与DDS主题名对应的数据接收器,消息接收 代理模块直接获得对应的数据接收器,转步骤2.3.4;

2.3.3.2如果没有对应的数据接收器,消息接收代理模块根据DDS主题名创建数据接 收器,将DDS主题名和数据接收器作为新的一行保存在“数据接收器池”表中,转步骤 2.3.4;

2.3.4消息接收代理模块使用数据接收器接收DDS消息,将DDS消息转换成ROS 消息,并将ROS消息写入ROS消息接收缓冲区。具体步骤如下:

2.3.4.1消息接收代理模块等待,直到接收到DDS消息,转到步骤2.3.4.2;

2.3.4.2消息接收代理模块使用数据接收器接收来自DDS中间件的一个DDS消息; 如果遇到异常(例如网络中断异常),数据接收器俘获异常,将DDS异常发送给出错处 理模块,出错处理模块将DDS异常转换成ROS异常并将ROS异常返回给数据接收器, 数据接收器将该ROS异常返回给ROS消息订阅者,转步骤2.5;否则转步骤2.3.4.3。

2.3.4.3消息接收代理模块从数据接收器中获取DDS主题名,将DDS主题名发送给 主题映射模块,主题映射模块将DDS主题名转换为ROS主题名,并将ROS主题名返回 给消息接收代理模块;

2.3.4.4消息接收代理模块将接收到的DDS消息发送给消息转换模块,并从消息转换 模块接收ROS消息。具体步骤如下:

2.3.4.4.1消息接收代理模块将接收到的DDS消息发送给消息转换模块;

2.3.4.4.2消息转换模块接收到DDS消息,从DDS消息体中提取ROS消息,并将ROS 消息返回给消息接收代理模块;

2.3.4.5消息接收代理模块接收到ROS消息后,按照ROS主题名将ROS消息写入相 应的ROS消息接收缓冲区。

2.4机器人计算结点B上的ROS消息接收模块从ROS消息接收缓冲区取出ROS消 息,并将其发送给ROS消息订阅者。

2.5消息接收代理模块判断是否还有来自DDS中间件的DDS消息,若有,转步骤 2.3.4.2;否则转步骤2.3.4.1。

第三步,结束。

采用本发明可以达到如下的有益效果:

(1)在机器人中间件层实现多机器人之间消息传递的实时性。通过引入ROS/DDS 协议插件,机器人中间件ROS使用消息实时中间件DDS保证消息传输优先级、消息自 动夭折、传输延迟控制、基于时间过滤消息能力。

(2)现有的多机器人分布式应用可以不需要进行修改就可以直接使用ROS/DDS协 议插件。由于本发明仅涉及机器人中间件,机器人中间件的对外接口并未发生变化,因 此现有的多机器人分布式应用可以不需要进行修改。

附图说明

图1是本发明第一步构建多机器人计算节点环境物理结构图。

图2是本发明机器人计算结点上的软件部署图。

图3是本发明整体流程图。

图4是本发明第二步的ROS消息发送流程图。

图5是本发明第二步的ROS消息接收流程图。

具体实施方式

图1是本发明第一步构建的多机器人计算节点环境,它由m个机器人计算结点构成。 机器人计算结点是可以运行软件程序的机器人硬件设备(如无人机、无人车、人形机器 人等),机器人计算结点通过网络设备互连。

图2是本发明机器人计算结点上的软件部署图。每个机器人计算结点上都装有操作 系统Ubuntu、机器人中间件ROS、符合DDS规范的消息实时中间件和ROS/DDS协议插 件。

以下以无人机与地面控制站的消息交互为例说明本发明的具体实施方式。该实例由 一个无人机和一个地面控制站组成。无人机上运行消息发布程序,基于某个主题发布带 有实时属性的消息(例如不同传输优先级)。地面控制站上运行消息订阅程序,订阅该主 题的消息。由于ROS本身不支持消息优先级的设置,因此需要通过ROS/DDS协议插件 和DDS中间件来实现消息的发送与接收。

采用本发明的具体实施方式如下:

第一步,构建一个简单的无人机系统,它由2个计算结点构成,一架无人机和一个 地面控制站,两者通过网络设备互连。(结合图1)无人机装有操作系统Ubuntu、机器人 中间件ROS、符合DDS规范的消息实时中间件、ROS/DDS协议插件和消息发布程序。 地面控制站装有操作系统Ubuntu、机器人中间件ROS、符合DDS规范的消息实时中间 件、ROS/DDS协议插件和消息订阅程序。

第二步,无人机上的消息发布程序发送无人机收集到的飞行状态数据和图像信息, 同时地面控制站的消息订阅程序接收无人机发送地飞行状态数据和图像信息信息。

2.1.1消息发布程序使用ROS主题名FlightCondition创建飞行状态数据ROS消息发 布者。飞行状态数据ROS消息发布者将ROS主题名FlightCondition和消息传输优先级 transport_priority=high传递给实时性调用模块。消息发布程序使用ROS主题名 GraphicInformation创建图像信息ROS消息发布者,图像信息ROS消息发布者将ROS主 题名GraphicInformation和消息传输优先级transport_priority=normal传递给实时性调用模 块。

2.1.2实时调用模块将主题名和实时属性发送给消息发送代理;

2.1.3消息发送代理模块收到ROS主题名和实时属性后,在“ROS主题与实时属性” 表中查找ROS主题名,ROS主题名不存在,将{FlightCondition,transport_priority=high} 和{GraphicInformation,transport_priority=low}作为新的一行保存在“ROS主题与实时属 性”表中;

2.1.4消息发布者将无人机收集到的飞行状态数据和图像信息消息发送给ROS消息 发送代理模块,ROS消息发送代理模块收到ROS后,将其写入ROS消息发送缓冲区;

2.2.1下面以飞行状态数据消息为例,说明消息发送代理模块发送ROS消息的过程。 消息发送代理模块等待,直到ROS消息发送缓冲区中写入消息,转到步骤2.2.2;

2.2.2ROS消息发送缓冲区中已经写入消息,消息发送代理模块从ROS消息发送缓 冲区取出一个飞行状态数据ROS消息后,消息发送代理模块从接收到的ROS消息中获 取其主题名FlightCondition,将ROS消息的主题名发送给主题映射模块,主题映射模块 将其转换为DDS主题名FlightCondition。

2.2.3消息发送代理模块使用ROS消息的主题名在“ROS主题与实时属性”表中查 找该主题名需要满足实时属性;查出ROS主题名FlightCondition的实时属性是 transport_priority=high。

2.2.4消息发送代理模块使用DDS主题名FlightCondition查询“数据发射器池”表, 没有查找到与DDS主题名FlightCondition对应的数据发射器,消息发送代理模块根据 FlightCondition创建数据发射器,并将{FlightCondition,FCDataSender}作为新的一行保 存在“数据发射器池”表中。

2.2.5消息发送代理模块将待发送的飞行状态数据ROS消息和对应的实时属性 transport_priority=high发送给消息转换模块,并从消息转换模块接收DDS消息;消息发 送代理模块使用数据发射器将DDS消息发送给DDS中间件,由DDS中间件按照相应的 传输优先级进行发送;

2.2.6消息发送代理模块判断ROS消息发送缓冲区中是否还有飞行状态数据ROS消 息,若还有ROS消息,转步骤2.2.2;否则转步骤2.2.1。

2.3在无人机上的消息发布程序发送无人机收集到的飞行状态数据和图像信息的同 时,机器人计算结点B的消息接收代理模块从DDS中间件接收DDS消息,经过消息格 式转化之后将ROS消息按ROS主题将ROS消息写入ROS消息接收缓冲区,且机器人 计算结点B的ROS消息订阅者接收来自ROS消息接收缓冲区的ROS消息,方法是:

2.3.1地面控制站的消息订阅程序使用ROS主题名FlightCondition创建飞行状态数据 ROS消息订阅者,并将ROS主题名FlightCondition发送给消息接收代理模块;消息订阅 程序使用主题名GraphicInformation创建图像信息ROS消息订阅者,并将ROS主题名 GraphicInformation发送给消息接收代理模块;

2.3.2下面以飞行状态数据消息为例,说明消息接收代理模块接收飞行状态数据消息 的过程。消息接收代理模块将ROS主题名FlightCondition发送主题映射模块,主题映射 模块将其转换为DDS主题名FlightCondition后返回;

2.3.3消息接收代理模块使用DDS主题名FlightCondition查询“数据接收器池”表, 没有查找到与DDS主题名FlightCondition对应的数据接收器,消息接收代理模块根据 DDS主题名创建飞行状态数据接收器,将{FlightCondition,FCDataReciever}作为新的一 行保存在“数据接收器池”表中。

2.3.4消息接收代理模块使用飞行状态数据接收器接收飞行状态数据DDS消息,将 DDS消息转换成ROS消息,并将ROS消息写入ROS消息接收缓冲区,具体步骤如下:

2.3.4.1消息接收代理模块等待,直到接收到DDS消息,转到步骤2.3.4.2;

2.3.4.2消息接收代理模块使用飞行状态数据接收器接收一个飞行状态数据DDS消息;

2.3.4.3消息接收代理模块从数据接收器中获取DDS主题名FlightCondition,将DDS 主题名发送给主题映射模块,主题映射模块将DDS主题名转换为ROS主题名 FlightCondition,并将ROS主题名返回给消息接收代理模块;

2.3.4.4消息接收代理模块将接收到的DDS消息发送给消息转换模块,并从消息转换 模块接收ROS消息;

2.3.4.5消息接收代理模块接收到ROS消息后,按照ROS主题名FlightCondition将 ROS消息写入相应的ROS消息接收缓冲区。

2.4ROS消息接收模块从ROS消息接收缓冲区取出飞行状态数据ROS消息,并将其 发送给ROS消息订阅者,由订阅者对ROS消息做进一步处理。

2.5消息接收代理模块判断是否还有来自DDS中间件的DDS消息,若有,转步骤 2.3.4.2;否则转步骤2.3.4.1。

第三步,结束。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号