一种基于插件框架调用IROS服务的方法与流程

文档序号:32817798发布日期:2023-01-04 04:06阅读:69来源:国知局
一种基于插件框架调用IROS服务的方法与流程
一种基于插件框架调用iros服务的方法
技术领域
1.本发明涉及智能机器人开发技术领域,具体涉及一种基于插件框架调用iros服务的方法。


背景技术:

2.iros(intelligent robot operating system,简称“iros”),具备ros类似的功能,替代了开源ros的内核,提供了兼容ros的接口,解决了ros可靠性、性能、安全等相关的问题,并增加了新的功能,支持云化机器人开发、支持云边端通信、支持多机器人协作等。
3.服务通信也是ros中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。在服务通信中,数据分成两部分,请求与响应,在 srv 文件中请求和响应使用
‑‑‑
分割。在开发调试阶段,节点服务的调用者往往不知道具体需要传入哪些参数,以及参数的类型,尤其是当参数发生了变化,或者其他程序提供了相同的服务,造成节点的调用程序有时正确有时错误,亦或者异常退出。此外,多人团队协作开发,程序服务的提供者与调用者开发进度不一致,这也就是无法进行联调。


技术实现要素:

4.本发明为了克服以上技术的不足,提供了一种使得开发过程更加高效,便捷的基于插件框架调用iros服务的方法。
5.本发明克服其技术问题所采用的技术方案是:一种基于插件框架调用iros服务的方法,包括如下步骤:a)定义插件的接口信息;b)定义插件接口类;c)定义插件管理框架;d)获取默认参数;e)计算md5值;f)生成初始化接口函数,默认为空;g)生成发送消息接口函数;h)生成插件请求处理函数,请求处理函数校验参数类型及名称是否匹配及是否缺少参数,如果参数名或类型错误则抛出异常,终止程序运行,如果缺少参数,则使用默认值处理;i)生成接收消息接口函数,解析并返回结果;j)生成插件响应处理函数,将返回结果打印出来。
6.步骤a)中定义的插件的接口信息为:a-1)初始化接口;a-2)插件的注册接口;a-3)插件的卸载接口;
a-4)获取默认参数接口;a-5)获取插件的md5值;a-6)定义插件间的消息发送接口;a-7)定义插件间的消息接收接口;a-8)定义插件功能执行接口。
7.步骤b)中插件的接口类为定义了步骤a)中接口全部为纯虚函数,有子类继承并实现。
8.步骤c)包括如下步骤:c-1)解析参数,获取服务使用的srv文件;c-2)判断该srv文件的插件是否已注册,如果已注册则执行步骤c-6),如有没有注册,则获取srv文件所在的包的位置,找到对应的srv文件和库;c-3)使用dlopen()函数加载srv文件所对应的库;c-4)使用dlsym()函数解析库的接口,并创建srv文件对应的插件类;c-5)使用插件类注册服务;c-6)获取插件类的默认参数,进行参数比较;c-7)如果参数比较后不兼容,则抛出异常,关闭所有打开的动态库,如果参数比较后兼容,则缺少的参数使用默认值补全;c-8)获取服务提供者使用的srv文件的md5码;c-9)比对md5码是否相同,如果不相同,则提示错误并退出执行,如果相同,则执行步骤c-10);c-10)调用插件的服务接口,将请求参数发送给服务的提供者;c-11)等待服务的返回结果,解析并打印结果。
9.步骤d)包括如下步骤:d-1)读取srv文件内容;d-2)创建一个json对象root;d-3)判断srv文件是否已经读完,如果是,则执行步骤d-15),如果否则执行步骤d-4);d-4)获取一行数据;d-5)判断获取的数据是否为注释,如果是则返回执行步骤d-4),如果否则执行步骤d-6);d-6)获取参数名和类型名;d-7)判断类型名是否为基本类型,如果是则执行步骤d-8),如果否则执行步骤d-9);d-8)将参数名和基本类型插入到json对象中后返回执行步骤d-4);d-9)判断类型名是否为msg类型,如果是,则执行步骤d-10),如果否则退出;d-10)获取msg文件所在的路径并打开,打开后执行步骤d-11);d-11)创建一个json对象msg;d-12)判断msg文件是否已读完,如果是则执行步骤d-13),如果否则返回执行步骤d-4);
d-13)将参数名和json对象msg插入到json对象中,返回执行步骤d-4);d-14)根据json对象value的类型设置默认值;d-15)将默认值写入到获取默认值接口中。
10.步骤e)包括如下步骤:e-1)根据json对象的key的参数名进行排序;e-2)将json对象序列化为字符串;e-3)使用md5解密算法对序列化的字符串进行加密;e-4)将srv文件参数对应的md5写入到接口函数中。
11.本发明的有益效果是:以iros的服务功能和机器人开发组件为基础,可以自动的补全参数,方便开发人员查看服务参数的类型,名称以及返回值,方便开发人员撰写响应的接口,提升智能机器人的协作开发效率;同时本方案还可以用来作为服务的测试工具,测试服务的功能是否正常,节约开发时间,提升开发效率。此外,本框架还提出了一种将srv文件的参数和类型进行md5加密,作为调用服务的依据,增强了调用服务的鲁棒性。
附图说明
12.图1为本发明的获取默认参数的方法流程图。
具体实施方式
13.下面对本发明做进一步说明。
14.本发明的方法为:首先通过解析srv文件,按照规约生成对应的请求参数类和响应参数类;其次,递归的获取srv参数的名称和类型,然后使用md5加密算法加密。第三,通过调用系统接口获取服务的类型,然后通过包管理工具查找srv文件的路径,进而确定so的位置,第四,通过dlopen加载服务对应的so文件,使用dlsym获取动态库的接口等信息,并创建出请求参数对象和响应参数对象;第五,通过bash补全功能获取请求参数默认参数列表,并打印出来;第六:通过系统接口调用服务,指定参数,等待响应。最后,将相应结果打印出来。
15.具体的在本发明的一个实施例中,具体方法为:a)定义插件的接口信息。
16.b)定义插件接口类(虚基类)。
17.c)定义插件管理框架。
18.d)获取默认参数。
19.e)计算md5值。
20.f)生成初始化接口函数,默认为空,由库的提供者自己定义使用库是需要做哪些初始化。
21.g)生成发送消息接口函数,默认的消息发送函数是调用iros的相关接口,将程序的参数传递进去。(当然,使用者可以修改)。
22.h)生成插件请求处理函数,请求处理函数校验参数类型及名称是否匹配及是否缺少参数,如果参数名或类型错误则抛出异常,终止程序运行,如果缺少参数,则使用默认值处理。
23.i)生成接收消息接口函数,解析并返回结果。
24.j)生成插件响应处理函数,将返回结果打印出来。
25.以iros的服务功能和机器人开发组件为基础,可以自动的补全参数,方便开发人员查看服务参数的类型,名称以及返回值,方便开发人员撰写响应的接口,提升智能机器人的协作开发效率;同时本方案还可以用来作为服务的测试工具,测试服务的功能是否正常,节约开发时间,提升开发效率。此外,本框架还提出了一种将srv文件的参数和类型进行md5加密,作为调用服务的依据,增强了调用服务的鲁棒性。
26.实施例1:步骤a)中定义的插件的接口信息为:a-1)初始化接口。
27.a-2)插件的注册接口。
28.a-3)插件的卸载接口。
29.a-4)获取默认参数接口。
30.a-5)获取插件的md5值。
31.a-6)定义插件间的消息发送接口。
32.a-7)定义插件间的消息接收接口。
33.a-8)定义插件功能执行接口。
34.实施例2:步骤b)中插件的接口类为定义了步骤a)中接口全部为纯虚函数,有子类继承(即插件类继承)并实现。
35.实施例3:步骤c)包括如下步骤:c-1)解析参数,获取服务使用的srv文件。
36.c-2)判断该srv文件的插件是否已注册,如果已注册则执行步骤c-6),如有没有注册,则获取srv文件所在的包的位置,找到对应的srv文件和库。
37.c-3)使用dlopen()函数加载srv文件所对应的库。
38.c-4)使用dlsym()函数解析库的接口,并创建srv文件对应的插件类。
39.c-5)使用插件类注册服务。
40.c-6)获取插件类的默认参数,进行参数比较。
41.c-7)如果参数比较后不兼容(参数名称不相同或者类型不相同),则抛出异常,关闭所有打开的动态库,如果参数比较后兼容,则缺少的参数使用默认值补全。
42.c-8)获取服务提供者使用的srv文件的md5码。
43.c-9)比对md5码是否相同,如果不相同,则提示错误并退出执行,如果相同,则执行步骤c-10);c-10)调用插件的服务接口,将请求参数发送给服务的提供者。
44.c-11)等待服务的返回结果,解析并打印结果。
45.实施例4:如附图1所示,步骤d)包括如下步骤:d-1)读取srv文件内容;d-2)创建一个json对象root;
d-3)判断srv文件是否已经读完,如果是,则执行步骤d-15),如果否则执行步骤d-4)(传入json对象root);d-4)获取一行数据;d-5)判断获取的数据是否为注释,如果是则返回执行步骤d-4),如果否则执行步骤d-6);d-6)获取参数名和类型名;d-7)判断类型名是否为基本类型,如果是则执行步骤d-8),如果否则执行步骤d-9);d-8)将参数名和基本类型插入到json对象(可能为root,也可能为msg)中后返回执行步骤d-4);d-9)判断类型名是否为msg类型,如果是,则执行步骤d-10),如果否则退出;d-10)获取msg文件所在的路径并打开,打开后执行步骤d-11);d-11)创建一个json对象msg;d-12)判断msg文件是否已读完(传入json对象msg),如果是则执行步骤d-13),如果否则返回执行步骤d-4);d-13)将参数名和json对象msg插入到json对象(可能为root,也可能为msg)中,返回执行步骤d-4);d-14)根据json对象value的类型设置默认值;d-15)将默认值写入到获取默认值接口中。
46.实施例5:步骤e)包括如下步骤:e-1)根据json对象的key的参数名进行排序。
47.e-2)将json对象序列化为字符串。在本发明的一个实施例中具体的字符串类型可以为:key在前面,基础类型使用对应的数字替代,对象类型前面加*号,结尾加#号,数组类型前面加[,结尾加]。
[0048]
e-3)使用md5解密算法对序列化的字符串进行加密。
[0049]
e-4)将srv文件参数对应的md5写入到接口函数中。
[0050]
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1