一种基于C++实现IROS设备与IROS设备通信的方法技术

技术编号:36450777 阅读:7 留言:0更新日期:2023-01-25 22:47
本发明专利技术提供了一种基于C++实现IROS设备与IROS设备通信的方法,使用C++在IROS端开发irosBridge工具,作为IROS与非IROS通信的中间消息代理,irosBridge遵循rosbridge协议,将JSON字符串作为消息传输的格式,websocket连接作为消息的传输方式,irosBridge实现JSON字符串与C++类实例之间的转换,使用C++的基类和函数多态实现JSON字符串与C++类实例之间的转换;对于非IROS设备发往IROS设备的消息,irosBridge将收到的JSON字符串转化为消息类型的类实例,再调用IROS的C++接口实现与IROS的通信。本发明专利技术将机器人上的IROS与开发语言、操作系统OS解耦合,使任何设备都能在不安装IROS的环境下实现与IROS设备的通信,降低通信难度和开发成本。难度和开发成本。

【技术实现步骤摘要】
一种基于C++实现IROS设备与IROS设备通信的方法


[0001]本专利技术涉及一种基于C++实现IROS设备与IROS设备通信的方法,属于机器人通信


技术介绍

[0002] IROS作为一种机器人操作系统,采用分布式节点的方式为机器人之间的通信提供了基础。IROS节点可以是分布在多台设备上的多个IROS节点,只要在不同设备上建立起双向连接,IROS就能实现各节点间的消息通信,但IROS节点的创建依赖于IROS环境,这就要每台通信设备上都要搭建IROS环境。
[0003]在实际需求中,并不只有机器人之间需要通信,有时采用手机等便携设备能更方便地与机器人进行交互,因此对于一些与机器人通信的设备而言,它们所使用的开发语言,甚至操作系统OS都是不确定的,靠IROS来适配一切通信设备的安装和开发语言显然是不现实的,况且即使IROS适配了设备的安装和开发语言,仍需要技术人员基于IROS接口做一些开发,才能达到与IROS设备通信的目的,这对不了解IROS接口的技术人员而言也是一种学习成本。为此,有必要在设备不安装IROS的前提下实现与IROS设备之间的通信。

技术实现思路

[0004]本专利技术目的是提供了一种基于C++实现IROS设备与IROS设备通信的方法,使装有IROS的机器人能够借助irosBridge实现与任何非IROS设备之间的通信。
[0005]本专利技术为实现上述目的,通过以下技术方案实现:一种基于C++实现IROS设备与IROS设备通信的方法,其特征在于,使用C++在IROS端开发irosBridge工具,作为IROS与非IROS通信的中间消息代理,irosBridge遵循rosbridge协议,将JSON字符串作为消息传输的格式,websocket连接作为消息的传输方式,irosBridge实现JSON字符串与C++类实例之间的转换,使用C++的基类和函数多态实现JSON字符串与C++类实例之间的转换;对于非IROS设备发往IROS设备的消息,irosBridge将收到的JSON字符串转化为消息类型的类实例,再调用IROS的C++接口实现与IROS的通信;IROS设备发往非IROS设备的消息,经由irosBridge将消息类型的类实例转化为JSON字符串后传输给非IROS设备。
[0006]优选的,所述irosBridge使用C++实现JSON字符串与类实例之间的转换的具体方式如下:编写reflect.h头文件,定义RosbridgeBase类和DynamicCreator<T>模板类,作为IROS消息类的基类,定义RosbridgeCreator类,遵循单例模式,对外提供创建消息类型的类实例接口;在RosbridgeBase类中定义JSON和类实例之间转换的虚成员函数,将虚成员函数的具体行为在IROS消息类型的头文件中进行复写;DynamicCreator<T>类模板类型T为该
IROS消息类的类型,用于将IROS消息的类型和创建对应实例的函数注册到一个map<string, function>容器中;在irosBridge中通过RosbridgeCreator提供的接口创建消息的类实例,并使用基类指针RosbridgeBase*指向消息的类实例,使用基类指针调用基类中JSON和类实例之间转换的虚成员函数,实现JSON成员与类成员变量之间的赋值转换。
[0007]优选的,generate程序为每种IROS消息类型生成的头文件中,都包含reflect.h,同时generate程序将生成的所有IROS消息类型的头文件记录到一个all_include.h头文件中。
[0008]本专利技术的优点在于:本专利技术提供了一种基于C++实现IROS设备与非IROS设备通信的方法,将机器人上的IROS与开发语言、操作系统OS解耦合,使任何设备都能在不安装IROS的环境下实现与IROS设备的通信,能在方便与IROS通信的同时降低通信难度和开发成本。
附图说明
[0009]附图用来提供对本专利技术的进一步理解,并且构成说明书的一部分,与本专利技术的实施例一起用于解释本专利技术,并不构成对本专利技术的限制。
[0010]图1为本专利技术的总体工作示意图;图2为本专利技术中JSON与类之间转换的具体示例示意图;图3为本专利技术中JSON与类之间转换的实现思路示意图;图4为本专利技术中irosBridge的工作流程示意图。
具体实施方式
[0011]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0012]一种基于C++实现IROS设备与IROS设备通信的方法,基于C++在IROS端开发irosBridge工具,用来作为IROS(Intelligent Robot Operating System,智能机器人操作系统)与非IROS通信的中间消息代理,irosBridge采用websocket连接传输消息,并遵循rosbridge协议,协议将JSON字符串作为消息传输的统一格式,此为现有技术,不再赘述,这就要求irosBridge实现JSON字符串与C++类实例之间的转换,本文结合IROS消息类型的生成方式以及C++语言的特性,使用C++的基类和函数多态实现JSON字符串与C++实例之间的转换。对于非IROS设备发往IROS设备的消息,irosBridge将收到的JSON字符串转化为消息类型的类实例,再调用IROS的C++接口实现与IROS的通信;对于IROS设备发往非IROS设备的消息,经由irosBridge将消息类型的类实例转化为JSON字符串后传输给非IROS设备。
[0013]为了使用C++实现JSON字符串与类实例之间的转换,本权利编写reflect.h头文件,其中主要定义了RosbridgeBase类和DynamicCreator<T>模板类,作为IROS消息类的基类,还定义了一个RosbridgeCreator类,该类遵循单例模式,对外提供创建消息类型的类实例接口。RosbridgeBase中定义了JSON和类实例之间转换的虚成员函数,这些虚函数的具体行为会在IROS消息类型的头文件中进行复写。DynamicCreator<T>作为IROS消息类的基类,
其模板类型T是该IROS消息类的类型,用于将IROS消息的类型和创建对应实例的函数注册到一个map<string, function>容器中。在irosBridge中通过RosbridgeCreator提供的接口创建消息的类实例,并使用基类指针RosbridgeBase*指向消息的类实例,这样就能使用基类指针调用基类中JSON和类实例之本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于C++实现IROS设备与IROS设备通信的方法,其特征在于,使用C++在IROS端开发irosBridge工具,作为IROS与非IROS通信的中间消息代理,irosBridge遵循rosbridge协议,使用JSON字符串作为消息传输的格式,websocket连接作为消息的传输方式,irosBridge实现JSON字符串与C++类实例之间的转换,使用C++的基类和函数多态实现JSON字符串与C++类实例之间的转换;对于非IROS设备发往IROS设备的消息,irosBridge将收到的JSON字符串转化为消息类型的类实例,再调用IROS的C++接口实现与IROS的通信;IROS设备发往非IROS设备的消息,经由irosBridge将消息类型的类实例转化为JSON字符串后传输给非IROS设备。2.根据权利要求1所述的基于C++实现IROS设备与IROS设备通信的方法,其特征在于,所述irosBridge使用C++实现JSON字符串与类实例之间的转换的具体方式如下:编写reflect.h头文件,定义RosbridgeBase类和DynamicCreator<T>模板类,作...

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

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

1