一种基于IROS的服务类工具和使用方法技术

技术编号:35943249 阅读:53 留言:0更新日期:2022-12-14 10:32
本发明专利技术提供了一种基于IROS的服务类工具和使用方法,基于IROS的服务类工具IROSService,是以IROS的服务基类为基础,利用rospack加载具体的服务子类动态库,最终通过基类指针调用虚函数接口的方式,实现对IROS服务的动态序列化和反序列化,实现IROS服务的请求、类型查询、名称查询、请求类型查询等实用性功能。本申请可以通过该工具方便的进行指定服务类型的服务请求、服务查询等,无需手动编写测试代码,将有效降低IROS开发和测试人员的时间成本。间成本。间成本。

【技术实现步骤摘要】
一种基于IROS的服务类工具和使用方法


[0001]本专利技术涉及一种基于IROS的服务类工具和使用方法,属于IROS服务


技术介绍

[0002]在IROS中,用户所自定义的服务数据类型是定义在一个后缀为srv文本文件中,其中包含了服务名称、请求和响应的类型以及备注信息等。对于C++用户来讲,需要将该数据文件转化为能够被直接使用的数据结构,如类、结构体等。IROS中提供了一个服务转化类工具srv_generate,可以方便的生成C++类型的头文件。
[0003]然而,用户如果想利用这类头文件进行服务的请求及查询时,需要手动编写相关代码,包含相关类的头文件,相对来说比较费时,另外对于不同的服务需要编写不同程序,这都不同程度地增加了IROS开发及测试人员的工作量。

技术实现思路

[0004]本专利技术目的是提供了一种基于IROS的服务类工具和使用方法,不仅结构牢固不易分离,而且施工方便。
[0005]本专利技术为实现上述目的,通过以下技术方案实现:一种基于IROS的服务类工具,其特征在于,所述IROS的服务类工具在IROS中通过srv_generate产生的用户自定义服务类,其基于服务基类IROSSrvBaseClass,根据自身数据结构实现了请求和服务的序列化接口、反序列化及类型查询接口,srv_generate同时还生成包含该自定义服务类的动态库,使IROSService能够将具体的服务对象加载入内存,IROSService根据用户指定的服务名称通过rospack查询到相应的动态库,通过IROSSrvBaseClass指针指向具体服务对象,利用C++的多态性,通过基类指针调用虚函数接口,实现具体服务类的功能;优选的,所述IROSSrvBaseClass包含请求序列化、请求反序列化、响应序列化、响应反序列化、类型查询接口。
[0006]优选的,IROS的服务处理工具srv_generate根据用户自定义的服务文件生成可供IROS的调用同的C++头文件,该头文件包含了以该服务文件名为类名的类实现,且继承于IROSSrvBaseClass,并根据自身结构实现了各个接口;同时,srv_generate还会生成包含具体服务对象的动态库,以供IROSService进行动态加载。
[0007]优选的,所述IROSService提供IROS服务查询,包括所有服务列表查询、按照服务名称查询服务类型及按照服务类型反查服务名,并能够直接通过向指定服务发起指定参数的请求的功能;该工具通过服务名利用rospack工具找寻指定的动态库并加载至内存,并用IROSSrvBaseClass指针指向具体的服务类对象,实现请求及响应的序列化、反序列化,最终实现服务的请求和查询等功能。
[0008]一种基于IROS的服务类工具使用方法,包括以下步骤:步骤1;IROSService首先会检查输入参数是否符合规范,如果不符合输入规范,会
向用户输出使用说明并直接退出指定消息名称后;步骤2:如果符合规范IROSService利用rospack查找所有包下的服务文件,并检查是否有对应的动态库,如果查找不到对应的动态库直接给出提示信息返回;如果查找到对应动态库则继续加载动态库;步骤3:在正确加载动态库后,IROSService会从动态库中加载具体的服务对象实体到内存,并创建接口类指针IROSSrvBaseClass*指向该对象,完成用户自定义服务对象的加载;步骤4:调用相应接口实现其功能,具体的,当调用list功能,IROSService直接通过rospack查询当前的有效消息类型;当调用type功能,IROSService在加载服务对象之后,调用servicetype接口,显示服务类型;当调用call功能,IROSService创建一个指定服务的客户端对象,将传入的request data部分进行序列化,并去请求相应服务;当调用info功能,IROSService根据指定的服务名称服务的类型以及服务发布者的地址。
[0009]本专利技术的优点在于:本申请可以通过该工具方便的进行指定服务类型的服务请求、服务查询等,无需手动编写测试代码,将有效降低IROS开发和测试人员的时间成本。
附图说明
[0010]附图用来提供对本专利技术的进一步理解,并且构成说明书的一部分,与本专利技术的实施例一起用于解释本专利技术,并不构成对本专利技术的限制。
[0011]图1为本专利技术流程结构示意图。
[0012]图2为本专利技术接口类IROSSrvBaseClass结构示意图。
[0013]图3为本专利技术SetBool.srv服务定义示意图。
[0014]图4为本专利技术SetBool类结构示意图。
具体实施方式
[0015]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0016]为达到上述目的,首先定义了服务接口类IROSSrvBaseClass,其类图以及其包含的虚函数接口如下图所示:接口类IROSSrvBaseClass提供了五个虚函数接口,包括请求序列化(reqserialize)、请求反序列化(reqdeserialize),响应序列化(resserialize)、响应反序列化(resdeserialize)和类型查询(servicetype)。
[0017]以自定义的SetBool.srv服务为例,其具体的定义如图3所示:通过srv_generate产生的示例服务类SetBool实现了这三个接口,其中,请求序列化接口将请求部分的数据data以字符串的形式序列化到char*类型的指针message中,并指定了序列化后的长度messagelen;请求反序列化接口将message反序列化到SetBool的data数据中去;响应的序列化和反序列化接口类似,完成SetBool的success和message这两个成员变量的序列化和反序列化操作;类型查询接口以字符串的形式返回服务的类型。另外
srv_generate还会生成包含SetBool对象的动态库,IROSService加载该动态库后可将该对象载入内存。
[0018]IROSService提供以下列四项功能,每个功能所需的参数类型不同,如表1所示:表1:IROSService支持功能及参数列表功能类型参数list无type[servicename]call[servicename][requestdata]info[servicename]指定消息名称后,IROSService会利用rospack去查找所有包下的服务文件,并检查是否有对应的动态库,如果查找不到直接给出提示信息返回;在正确加载动态库后,IROSService会从动态库中加载具体的服务对象实体到内存,并创建接口类指针IROSSrvBaseClass*指向本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于IROS的服务类工具,其特征在于,所述IROS的服务类工具在IROS中通过srv_generate产生的用户自定义服务类,其基于服务基类IROSSrvBaseClass,根据自身数据结构实现了请求和服务的序列化接口、反序列化及类型查询接口,srv_generate同时还生成包含该自定义服务类的动态库,使IROSService能够将具体的服务对象加载入内存,IROSService根据用户指定的服务名称通过rospack查询到相应的动态库,通过IROSSrvBaseClass指针指向具体服务对象,利用C++的多态性,通过基类指针调用虚函数接口,实现具体服务类的功能。2.根据权利要求1所述的基于IROS的服务类工具,其特征在于,所述IROSSrvBaseClass包含请求序列化、请求反序列化、响应序列化、响应反序列化、类型查询接口。3.根据权利要求1所述的基于IROS的服务类工具,其特征在于,IROS的服务处理工具srv_generate根据用户自定义的服务文件生成可供IROS的调用同的C++头文件,该头文件包含了以该服务文件名为类名的类实现,且继承于IROSSrvBaseClass,并根据自身结构实现了各个接口;同时,srv_generate还会生成包含具体服务对象的动态库,以供IROSService进行动态加载。4.根据权利要求1所述的基于IROS的服务类工具,其特征在于,所述IROSService提供IROS服务查询,包括所有服务列表查询、按照服务名称查询服务类型及按照服务类型反查服务名,并能够直接通过向...

【专利技术属性】
技术研发人员:王召东李朝铭
申请(专利权)人:山东新一代信息产业技术研究院有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1