一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于IROS的消息类工具、系统、方法、装置及介质与流程

2022-06-02 10:14:17 来源:中国专利 TAG:

基于iros的消息类工具、系统、方法、装置及介质
技术领域
1.本发明涉及消息管理技术领域,具体地说是基于iros的消息类工具、系统、方法、装置及介质。


背景技术:

2.在iros中,用户所自定义的数据类型是定义在一个后缀为msg文本文件中,其中包含了数据的类型、名称以及备注信息等。对于c 用户来讲,需要将该数据文件转化为能够被直接使用的数据结构,如类、结构体等。iros中提供了一个消息转化类工具msg_generate,可以方便的生成c 类型的头文件。
3.然而,用户如果想利用这类头文件进行消息的发布、订阅以及实时查询时,需要手动编写相关代码,包含相关类的头文件,相对来说比较费时,另外对于不同的消息需要编写不同程序,这都不同程度地增加了iros开发及测试人员的工作量。
4.如何在无需编译修改irosmsg代码的情况下,方便的进行指定消息类型的传输、监听等,是需要解决的技术问题。


技术实现要素:

5.本发明的技术任务是针对以上不足,提供基于iros的消息类工具、系统、方法、装置及介质,来解决如何在无需编译修改irosmsg代码的情况下,方便的进行指定消息类型的传输、监听的技术问题。
6.第一方面,本发明的基于iros的消息类工具,为irosmsg,所述 irosmsg中定义有三个irosmsgbaseclass的虚函数接口,并加载有包含用户消息类的动态库,所述三个虚函数接口封装于所述动态库,所述三个虚函数为:
7.序列化接口,所述序列化接口用于将自身成员age和name数据以字符串的形式序列化到char*类型的指针message_c中,并指定了序列化后的长度messagelen;
8.反序列化接口,所述反序列化接口用于将message_c反序列化到idcard 中,即填充age和name数据;
9.类型查询接口,所述类型查询接口用于以字符串的形式返回idcard的数据结构;
10.基于所述三个虚函数接口,所述irosmsg用于提供四种功能,分别为 list、show、echo以及pub,所述irosmsg执行时需要指定功能类型、功能参数以及消息类型,所述消息类型为用户自定义的消息名称。
11.作为优选,所述三个虚函数接口为通过iros中消息转化类工具 msg_generate生成及实现的,所述动态库包含idcard对象,为通过iros中消息转化类工具msg_generate生成的,用于供irosmsg进行动态加载。
12.作为优选,所述irosmsg用于实现消息发布、订阅和查询,包括:
13.基于指定的消息名称,irosmsg用于通过rospack查找iros所有包下的消息文件,并检查是否有与所述指定的消息名称对应的动态库,如果查找不到,返回提示信息,如果查
找到对应动态库,加载所述动态库;
14.加载动态库后,irosmsg用于从动态库中加载具体的消息实体至内存,并创建接口类指针irosmsgbaseclass*指向该对象,以实现用户自定义消息对象的加载;
15.对于list功能,所述irosmsg用于通过rospack查询当前的有效消息类型;
16.对于show功能,所述irosmsg在加载消息对象之后,调用messagetype 接口,显示消息类型;
17.对于echo功能,所述irosmsg用于创建一个指定话题的订阅者对象,订阅到对应话题后,通过调用反序列化接口将数据反序列化到对象中,最后向终端打印输出;
18.对于pub功能,所述irosmsg用于创建一个指定话题的发布者,将用户输入的data数据赋值到消息对象之后,调用序列化接口serialize,最终将数据通过话题发布者发布出去。
19.作为优选,所述irosmsg用于对输入的用户消息进行规范化检查,检查用户消息对应的输入参数是否符合规范,所述输入参数包括功能类型、功能参数以及消息类型;
20.如果输入的用户消息符合规范,所述irosmsg用于基于用户消息获取消息名称,并通过rospack查询所述消息类型对应的动态库;
21.如果输入的用户信息不符合规范,返回提示信息。
22.第二方面,本发明的消息传输系统,包括:
23.irosmsg,所述irosmsg为如第一方面任一项所述的消息类工具;
24.msg_generate,所述msg_generate为iros中消息转化类工具,用于根据用户自定义的消息文件生成可供iros的调用同的c 头文件,所述头文件包含了以该消息文件名为类名的类实现,且继承于irosmsgbaseclass,并用于生成三个irosmsgbaseclass的虚函数接口,用于生成动态库以供所述irosmsg调用,所述三个虚函数接口封装于所述动态库;
25.rospack,所述rospack为iros的包工具,供irosmsg调用,用于查询到iros的各个包的绝对路径。
26.第三方面,本发明的消息传输方法,通过如第二方面所述的消息传输系统进行消息传输,包括:
27.根据用户指定的消息名称,irosmsg调用rospack查询到相应的动态库,并加载所述动态库;
28.通过irosmsgbaseclass指针指向具体消息对象,并利用c 的多态性,通过基类指针调用虚函数接口;
29.通过调用虚函数接口,实现消息的类型查询、指定话题下消息订阅以及发布。
30.作为优选,通过调用虚函数接口,实现消息的类型查询、指定话题下消息订阅以及发布,包括:
31.基于list功能,通过rospack查询当前的有效消息类型;
32.基于show功能,通过irosmsg在加载消息对象之后,调用messagetype 接口,显示消息类型;
33.基于echo功能,通过irosmsg创建一个指定话题的订阅者对象,订阅到对应话题后,通过调用反序列化接口将数据反序列化到对象中,最后向终端打印输出;
34.基于pub功能,通过irosmsg创建一个指定话题的发布者,将用户输入的data数据
赋值到消息对象之后,调用序列化接口serialize,最终将数据通过话题发布者发布出去。
35.更优的,还包括:
36.通过irosmsg对输入的用户消息进行规范化检查,检查用户消息对应的输入参数是否符合规范,所述输入参数包括功能类型、功能参数以及消息类型;
37.如果输入的用户消息符合规范,基于用户消息、通过irosmsg获取消息名称,并通过rospack查询所述消息类型对应的动态库;
38.如果输入的用户信息不符合规范,返回提示信息。
39.第四方面,本发明的装置,包括:至少一个存储器和至少一个处理器;
40.所述至少一个存储器,用于存储机器可读程序;
41.所述至少一个处理器,用于调用所述机器可读程序,执行第三方面任一所述的方法。
42.第四方面,本发明的介质,为计算机可读介质,其特征在于,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行第三方面任一所述的方法。
43.本发明的基于iros的消息类工具、系统、方法、装置及介质具有以下优点:该irosmsg工具通过三个虚拟函数接口,可以实现用户自定义消息类型下的话题发布、订阅以及消息实时监测,无需额外编译,有效的提高了iros开发和测试人员的工作效率。
附图说明
44.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
45.下面结合附图对本发明进一步说明。
46.图1为实施例1基于iros的消息类工具接口类irosmsgbaseclass的工作原理框图;
47.图2为实施例1基于iros的消息类工具的工作流程框图。
具体实施方式
48.下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
49.本发明实施例提供基于iros的消息类工具、系统、方法、装置及介质,用于解决如何在无需编译修改irosmsg代码的情况下,方便的进行指定消息类型的传输、监听等的技术问题。
50.实施例1:
51.本发明基于iros的消息类工具,为irosmsg,该irosmsg中定义有三个irosmsgbaseclass的虚函数接口,并加载有包含用户消息类的动态库,三个虚函数接口封装于动态库,三个虚函数为序列化接口、反序列化接口、类型查询接口。
52.本实施例中定义了消息接口类irosmsgbaseclass,其类图以及示例消息类idcard
如图1所示,接口类irosmsgbaseclass提供了序列化(serialize)、反序列化(deserialize)和类型查询(messagetype)三个虚函数接口,iros 所有的消息类均需要继承于它,并实现上述的接口函数。
53.iros的消息处理工具msg_generate能够根据用户自定义的消息文件生成可供iros的调用同的c 头文件,该头文件包含了以该消息文件名为类名的类实现,且继承于irosmsgbaseclass,并根据自身结构实现了各个接口;同时,msg_generate还会生成包含具体消息对象的动态库,以供irosmsg 进行动态加载。本实施例中,通过msg_generate产生的示例消息类idcard 实现了这三个接口,其中序列化接口将自身成员age和name数据以字符串的形式序列化到char*类型的指针message_c中,并指定了序列化后的长度 messagelen;反序列化接口将message_c反序列化到idcard中,即填充age 和name数据;类型查询则以字符串的形式返回idcard的数据结构。另外 msg_generate还会生成包含idcard对象的动态库,irosmsg加载该动态库后可将该对象载入内存。
54.该irosmsg基于上述三个虚函数接口,提供四种功能,分别为list、show、 echo以及pub,irosmsg执行时需要指定功能类型、功能参数以及消息类型,每个功能类型对应的功能参数的类型不同,如表1所示。消息类型为用户自定义的消息名称。
55.表1irosmsg支持功能及参数列表:
56.功能类型参数list无show[message name]echo[topic name][message name]pub[topic name][message name][data]
[0057]
irosmsg的基础是消息基类irosmsgbaseclass,在iros中通过 msg_generate产生的用户消息类均继承于它,并根据自身数据结构实现了序列化、反序列化及类型查询等接口,msg_generate还产生了包含该用户消息类的动态库,保证irosmsg能够将具体的消息对象加载入内存。irosmsg会根据用户指定的消息名称通过rospack查询到相应的动态库,通过 irosmsgbaseclass指针指向具体消息对象,然后利用c 的多态性,通过基类指针调用虚函数接口,实现具体消息类的各个功能,最终实现消息的类型查询、指定话题下的消息订阅、发布等功能。
[0058]
本实施例irosmsg能够执行如下操作:
[0059]
操作一、指定消息名称后,irosmsg会利用rospack去查找所有包下的消息文件,并检查是否有对应的动态库,如果查找不到直接给出提示信息返回;
[0060]
操作二、在正确加载动态库后,irosmsg会从动态库中加载具体的消息类实体到内存,并创建接口类指针irosmsgbaseclass*指向该对象,至此,完成了用户自定义消息对象的加载;
[0061]
操作三,对于irosmsg的list功能,irosmsg直接通过rospack查询当前的有效消息类型即可;对于show功能,irosmsg在加载消息对象之后,调用 messagetype接口,显示消息类型;对于echo功能,irosmsg会创建一个指定话题的订阅者对象,订阅到对应话题后通过调用反序列化接口deserialize,将数据反序列化到对象中,最后向终端打印输出;对于pub功能,irosmsg会创建一个指定话题的发布者,将用户输入的data数据赋值到消息对象之
后,调用序列化接口serialize,最终将数据通过话题发布者发布出去。
[0062]
基于上述操作,irosmsg工具可实现用户自定义消息的发布、订阅等,具体流程为:
[0063]
在进行消息传输时,irosmsg首先会检查输入参数是否符合规范,具体的功能如表1所示,如果不符合输入规范,会向用户输出使用说明并直接退出;
[0064]
在指令符合规范的基础上,根据用户的功能输入进入具体的功能代码,list 功能因为不涉及数据传输,irosmsg会通过rospack查询所有包下的消息文件,输出消息名和具体的消息路径;show功能下,irosmsg会通过rospack找寻到具体的消息文件并加载相应动态库,然后将消息类加载入内存,通过 irosmsgbaseclass指针调用类型函数接口,输出类型信息;同样,echo功能也会加载指定消息的动态库,并创建话题订阅者,当订阅到话题时,通过调用反序列化接口将数据反序列化到具体的消息对象中,并输出给用户;与echo功能类似,pub功能则会创建一个话题发布者,将用户输入的数据通过序列化接口序列化成字符串,然后通过发布者发布于指定的话题上。
[0065]
实施例2:
[0066]
本发明消息传输系统,包括irosmsg、msg_generate以及rospack,irosmsg 为实施例1公开的消息类工具,msg_generate为iros中消息转化类工具,用于根据用户自定义的消息文件生成可供iros的调用同的c 头文件,头文件包含了以该消息文件名为类名的类实现,且继承于irosmsgbaseclass,并用于生成三个irosmsgbaseclass的虚函数接口,用于生成动态库以供irosmsg调用,三个虚函数接口封装于所述动态库;rospack为iros的包工具,供irosmsg 调用,用于查询到iros的各个包的绝对路径。
[0067]
实施例3:
[0068]
本发明消息传输方法,通过实施例2公开的消息传输系统进行消息传输,包括:
[0069]
s100、根据用户指定的消息名称,irosmsg调用rospack查询到相应的动态库,并加载所述动态库;
[0070]
s200、通过irosmsgbaseclass指针指向具体消息对象,并利用c 的多态性,通过基类指针调用虚函数接口;
[0071]
s300、通过调用虚函数接口,实现消息的类型查询、指定话题下消息订阅以及发布。
[0072]
其中,通过调用虚函数接口,实现消息的类型查询、指定话题下消息订阅以及发布,包括:
[0073]
基于list功能,通过rospack查询当前的有效消息类型;
[0074]
基于show功能,通过irosmsg在加载消息对象之后,调用messagetype 接口,显示消息类型;
[0075]
基于echo功能,通过irosmsg创建一个指定话题的订阅者对象,订阅到对应话题后,通过调用反序列化接口将数据反序列化到对象中,最后向终端打印输出;
[0076]
基于pub功能,通过irosmsg创建一个指定话题的发布者,将用户输入的 data数据赋值到消息对象之后,调用序列化接口serialize,最终将数据通过话题发布者发布出去。
[0077]
作为改进,鉴于irosmsg执行时,需要指定功能类型、功能参数以及消息名称,功能类型和功能参数的要求不同,需要通过irosmsg对输入的用户消息进行规范化检查,检查用户消息对应的输入参数是否符合规范,输入参数包括功能类型、功能参数以及消息类型;如
果输入的用户消息符合规范,基于用户消息、通过irosmsg获取消息名称,并通过rospack查询所述消息类型对应的动态库;如果输入的用户信息不符合规范,返回提示信息。
[0078]
在具体应用时,该方法的流程为:
[0079]
在进行消息传输时,irosmsg首先会检查输入参数是否符合规范,具体的功能如表1所示,如果不符合输入规范,会向用户输出使用说明并直接退出;
[0080]
在指令符合规范的基础上,根据用户的功能输入进入具体的功能代码, list功能因为不涉及数据传输,irosmsg会通过rospack查询所有包下的消息文件,输出消息名和具体的消息路径;show功能下,irosmsg会通过 rospack找寻到具体的消息文件并加载相应动态库,然后将消息类加载入内存,通过irosmsgbaseclass指针调用类型函数接口,输出类型信息;同样, echo功能也会加载指定消息的动态库,并创建话题订阅者,当订阅到话题时,通过调用反序列化接口将数据反序列化到具体的消息对象中,并输出给用户;与echo功能类似,pub功能则会创建一个话题发布者,将用户输入的数据通过序列化接口序列化成字符串,然后通过发布者发布于指定的话题上。
[0081]
实施例4:
[0082]
本发明的装置,包括:至少一个存储器和至少一个处理器;至少一个存储器,用于存储机器可读程序;所述至少一个处理器,用于调用所述机器可读程序,执行实施例3公开的方法。、
[0083]
实施例5:
[0084]
本发明的介质,为一种计算机可读介质,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行实施例 3公开的方法。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或cpu或mpu)读出并执行存储在存储介质中的程序代码。
[0085]
在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
[0086]
用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如 cd-rom、cd-r、cd-rw、dvd-rom、dvd-ram、dvd-rw、dvd rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上下载程序代码。
[0087]
此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
[0088]
此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的cpu等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。
[0089]
上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献