掌桥专利:专业的专利平台
掌桥专利
首页

一种基于ROS计算图的机器人通信架构自动生成方法及装置

文献发布时间:2023-06-19 19:07:35


一种基于ROS计算图的机器人通信架构自动生成方法及装置

技术领域

本发明提供一种机器人通信架构自动生成方法,具体涉及基于ROS计算图的机器人通信架构自动生成方法。

背景技术

由于机器人的规格和应用场景十分宽泛且在不停变化,因而为机器人编写通用的软件并不容易。同时,不同的机器人会有完全不同的硬件,因此提高机器人软件的代码复用率也十分困难。除此之外,机器人软件必须包括从底层的驱动程序、逻辑抽象到具体应用的所有层次,这远超单一开发者的开发能力。

因此,机器人技术研究者设计了许多框架来管理机器人软件,因而诞生了许多机器人软件系统用于学术研究和产业界。机器人领域的问题非常宽泛,单一解决方案无法应对所有问题,每种框架都为达到某一特定目的而设计。

ROS(Robotic Operating System,下文简称“ROS”)也是这些框架其中之一。ROS最初是斯坦福人工智能实验室为了支持斯坦福智能机器人STAIR而建立的交换庭(switchyard)项目,设计来解决开发大规模服务机器人应用的问题。但最终的框架在其它机器人领域也有通用性。它提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。ROS遵循BSD开源许可协议。其开源许可证和活跃的社区使其在许多机器人领域得到了广泛采用。

近年来随着机器人应用的日益发展与普及,有越来越多的机器人应用开发者及技术研究者开始关注ROS,同时针对机器人开源代码库即ROS包信息获取方式方面存在的一些问题展开研究。

获得关于ROS包更多的信息,可以帮助机器人开源代码库提供更好的搜索与分类功能。一个ROS包的信息可以分为两个层级,文件系统级别和计算图级别。目前已有的机器人开源代码库只提供了对ROS包进行了静态分析后的信息,但是ROS灵活的框架导致ROS程序的计算图级别信息无法使用静态分析获取。

ROS的计算图级别信息相较于文件系统级别信息则不那么容易获取。这些信息通常是ROS程序根据运行时环境及参数动态生成。在不运行节点的情况下,要想获取它们的元信息,只能查阅文档或直接查看源代码。这些导致无法生成机器人的通信架构。

发明内容

本发明的目的是提供一种基于ROS计算图的机器人通信架构自动生成方法,用以自动生成机器人通信架构。

本发明所述的技术方案如下:

一种基于ROS计算图的机器人通信架构自动生成方法,包括以下步骤:

ROS应用程序由多个节点组成,包括至少一个主节点;所述节点以点对点方式与所述主节点通信,所述节点之间的通信形式包括服务和话题;

ROS配置文件解析器模块从ROS包的文件系统中获取roslaunch配置文件,并根据配置文件中的参数与结构信息运行ROS应用程序,生成ROS计算图,在运行ROS应用程序的同时将所述节点的配置信息传递给ROS通信架构生成器;

ROS通信架构生成器模块读取由ROS配置文件解析器生成的配置信息和ROS计算图,从而生成节点与话题、服务之间的联系,从而生成机器人通信架构。

所述roslaunch的配置文件使用XML格式,用于描述ROS应用程序的全部或部分内容。

所述所述roslaunch的配置文件包括必要的节点及其命名空间的层次结构、配置参数、启动参数及在主机上的分布。

所述ROS配置文件解析器模块从ROS包的文件系统中获取roslaunch配置文件,并根据配置文件中的参数与结构信息运行ROS应用程序,包括:

ROS配置文件解析器首先读取roslaunch配置文件,解析节点架构,如果ROS主节点尚未启动,那么将首先启动ROS主节点,再依次启动其它节点,从文件系统中找到节点对应的可执行文件,并根据roslaunch配置文件启动这些节点。

所述生成节点、服务与话题之间的联系,模拟机器人软件架构,包括:

如果读取了多个roslaunch配置文件,那么ROS配置文件解析器将依次解析,合并相同的命名空间,忽略重复的节点,之后再依次启动节点;在启动完所有节点后,ROS配置文件解析器会将解析过后的配置文件传递给ROS通信架构生成器模块。

所述ROS通信架构生成器模块读取由ROS配置文件解析器生成的配置信息和ROS计算图,从而生成节点与话题、服务之间的联系,从而生成机器人通信架构,包括:ROS通信架构生成器模块读取由ROS配置文件解析器生成的配置信息,从配置信息中获取所有节点的完整名称;

之后与ROS主节点通信,通过配置信息中获取的节点名称遍历所有节点及其在ROS主节点注册的对应话题与服务,从而生成节点与话题、服务之间的联系。

上述步骤还包括:生成节点的特征,所述节点特征包括三项:节点发布的话题类型,节点订阅的话题类型,节点提供的服务类型。

本发明还提供一种基于ROS计算图的机器人通信架构自动生成方法装置,包括:

ROS配置文件解析器模块,用于从ROS包的文件系统中获取roslaunch配置文件,并根据配置文件中的参数与结构信息运行ROS应用程序,生成ROS计算图,在运行ROS应用程序的同时将所述节点的配置信息传递给ROS通信架构生成器;

ROS通信架构生成器模块,用于读取由ROS配置文件解析器生成的配置信息和ROS计算图,从而生成节点与话题、服务之间的联系,从而生成机器人通信架构。

本发明的有益效果:本发明提出的机器人通信架构自动生成方法,将通过动态分析运行时ROS计算图,从而提取缺少的主题和服务信息,可以最大程度模拟运行环境,生成节点与话题、服务之间的联系,从而生成机器人通信架构。

附图说明

图1是本发明机器人通信架构自动生成方法的模块架构。

具体实施方式

ROS应用程序由多个节点组成,这些节点以点对点方式与充当名称服务器和参数数据库的ROS主节点通信。该网络设计称为ROS计算图,可以在运行时重新配置。节点可以在任意时间启动并加入或离开网络,而不会中断或影响整个网络的功能。在正在运行的应用程序上启用此类高度动态的修改机制可大大加快开发速度并提高系统的容错能力。但同时,ROS节点通过话题或服务隐式连接,这导致动态生成的话题和服务难以通过静态分析获取。

另一方面,一个完整的ROS程序通常包含多个节点。为了便于一次启动和配置多个节点,ROS附带了工具roslaunch。roslaunch的配置文件使用XML格式,用于描述ROS应用程序的全部或部分内容。此配置主要包括必需的节点及其命名空间(namespace)层次结构,配置,启动参数以及可用主机上的分布。执行时,roslaunch根据配置启动各个节点,没有特定的顺序。这种配置格式可以看作是ROS应用程序的基本架构描述语言,因为它模拟了应用程序中组件的组成和配置,以及命名空间和主机等结构元素。然而,这个配置文件是不完整的:它没有明确地为通信渠道建模。服务和话题这两种ROS中的主要通信形式,没有用声明的方式描述,而是由节点在运行时动态地创建。

本发明提出的机器人通信架构自动生成方法,将通过动态分析运行时ROS计算图,从而提取缺少的主题和服务信息。实践表明,当节点的生命周期遵循通用结构和且话题和服务不依赖于运行环境或传感器数据时,可以取得较好结果。当不满足以上条件时,通过执行roslaunch,以最大程度模拟运行环境,也可以取得令人满意的效果。

机器人通信架构自动生成工具分为两个模块,“ROS配置文件解析器”和“ROS通信架构生成器”。

ROS配置文件解析器模块基于roslaunch开发,从ROS包的文件系统中获取roslaunch配置文件,并根据配置文件中的参数与结构信息运行ROS应用程序,生成ROS计算图。同时将关于节点的配置信息传递给ROS通信架构生成器。

ROS通信架构生成器模块读取由ROS配置文件解析器生成的配置信息和ROS计算图,从而生成节点与话题、服务之间的联系,从而生成机器人通信架构。

如图1所示,本发明的具体实施方式如下:

1.ROS配置文件解析器模块

ROS配置文件解析器将首先读取roslaunch配置文件,解析节点架构,从文件系统中找到节点对应的可执行文件,并根据roslaunch配置文件启动这些节点。在这过程中,如果ROS主节点尚未启动,那么将首先启动ROS主节点,再依次启动其它节点。

如果读取了多个roslaunch配置文件,那么ROS配置文件解析器将依次解析,合并相同的命名空间,忽略重复的节点,之后再依次启动节点。在启动完所有节点后,ROS配置文件解析器会将解析过后的配置文件传递给ROS通信架构生成器模块。

2.ROS通信架构生成器模块

ROS通信架构生成器模块读取由ROS配置文件解析器生成的配置信息,从配置信息中获取所有节点的完整名称。之后与ROS主节点通信,通过配置信息中获取的节点名称遍历所有节点及其在ROS主节点注册的对应话题与服务,从而生成节点与话题、服务之间的联系,并生成节点的特征。

节点特征包括三项:节点发布的话题类型,节点订阅的话题类型,节点提供的服务类型。这里选取的都是类型,也就是相同类型的话题将只保留一个。这样做的目的是简化模型。

使用Python编写动态分析工具,并添加包清单文件,从而符合ROS包规范,以便在ROS社区分发。该工具目前用于辅助机器人开源代码库的计算图级信息提取,同时也可独立运行用于分析ROS代码。

程序需要导入四个ROS相关模块:roslaunch、rospy、rosgraph、rosservice。

roslaunch模块用于解析roslaunch配置文件并根据配置文件启动节点;

rospy用于在记录运行状态并输出信息到日志文件;

rosgraph封装了用于和ROS主节点通信的方法,从而获取节点和话题信息;

rosservice用于获取服务信息。

另外还需要从xmlrpc.client模块中导入ServerProxy类,用于获取节点所在进程相关信息。ROS主节点只记录了ROS计算图有关的内容,但没有记录进程相关信息,如Pid等。这里使用ServerProxy类,获取进程信息。这些信息并不直接用于动态分析,而是用于调试。

程序逻辑根据设计,核心功能分为三个函数:

roslaunch_resolver(launchfile)

analyze_graph(launch)

gen_features(nodes,topics,services)

roslaunch_resolver(launchfile)接受roslaunch配置文件作为参数,中间调用analyze_graph(launch),最终返回nodes,topics,services,返回结果分别是节点、话题、服务的完整名称索引。

analyze_graph(launch)接受launch作为参数,包含解析后的roslaunch配置文件信息。之后调用rosgraph.Master(),生成ROS主节点代理,从而通信获取节点、话题、服务信息,最终返回nodes,topics,services,返回结果分别是节点、话题、服务的实例列表。

gen_features(nodes,topics,services)接受ROS配置文件解析器返回结果,对每个节点,删去重复的话题类型和服务类型,返回feature_dict,包含节点-节点特征键值对。

下面通过实例对本发明做进一步说明。

实施例1:根据ROS机器人示例程序自动生成机器人通信架构

这里以ROS官方提供的教程包rospy_tutorials中的talker_listener.launch为例,展示生成结果。

talker_listener.launch的计算图中只包含两个节点,talker.py和listener.py。talker.py每秒向话题chatter发布信息,listener.py订阅话题chatter,并向屏幕打印收到的消息。

1.ROS配置文件解析器将首先读取roslaunch配置文件talker_listener.launch,解析节点架构;

2.启动ROS主节点;

3.从文件系统中找到节点对应的可执行文件,并根据talker_listener.launch配置文件中的参数依次启动这些节点;

4.ROS通信架构生成器模块读取由ROS配置文件解析器生成的配置信息,从配置信息中获取所有节点的完整名称;

5.与ROS主节点通信,通过配置信息中获取的节点名称遍历所有节点及其在ROS主节点注册的对应话题与服务;

6.生成节点与话题、服务之间的联系,从而生成机器人通信架构。

相关技术
  • 一种基于ROS计算图的机器人应用数据动态提取方法
  • 一种基于ROS计算图的机器人应用数据动态提取方法
技术分类

06120115802284