一种机器人跨平台通信协议和控制方法与流程

文档序号:15556392发布日期:2018-09-29 01:13阅读:1540来源:国知局

本发明属于ros系统通信和控制领域,具体涉及一种机器人跨平台通信协议和控制方法。



背景技术:

ros系统的前身是斯坦福人工智能实验室为了支持斯坦福智能机器人stair而建立的交换庭switchyard项目。它是一个机器人软件平台,能为异质计算机集群提供类似操作系统的功能。ros(robotoperatingsystem)系统的主要目标是为机器人研究和开发提供代码复用的支持。所以它是一个分布式的进程框架,这些进程被封装在易于被分享和发布的程序包和功能包中。ros系统提供一些标准操作系统服务,例如硬件抽象,底层设备控制,常用功能实现,进程间消息以及数据包管理等。

近年来随着机器人、人工智能的日益壮大,ros系统这一开源系统凭借其高效稳定的性能逐步为许多机器人厂商所使用,使其蓬勃发展。

然而ros系统还在逐步成长中,在跨平台控制和通信方面做得并不够出色,rosjava等也不够完善,所以解决ros系统的跨平台通信和控制问题就显得尤为重要,本方法基于轻量级的rosbridge协议,利用unity3d的跨平台性,巧妙地实现了ros系统的跨平台交互,可用于轻量级的通信和机器人控制中。



技术实现要素:

针对现有技术的不足之处,本方法提出一种机器人跨平台通信协议和控制方法,实现ros系统的跨平台通信和控制。

本发明采用如下技术方案,一种机器人跨平台通信协议和控制方法,包括以下步骤:

(1)在unity3d中设计控制面板界面,unity3d通过脚本连接模块与控制机器人的ros系统实现传输控制协议tcp(transmissioncontrolprotocol)或者用户数据报协议udp(userdatagramprotocol)连接;

(2)unity3d端读取使用者输入到控制面板中的运动信息,并向ros系统发送控制命令控制机器人运动;

(3)ros系统向unity3d端发送实时的机器人运动信息,unity3d端实时监听机器人运动状态。

优选地,在步骤(1)中,在unity3d中使用内置ui控件ugui设计ui界面控制面板,所述控制面板包括ip地址输入框,连接按钮,角速度线速度输入框,前进停止按钮和运动信息显示框,利用photoshop实现界面图标的优化和渲染。

优选地,在步骤(1)中,所述脚本连接模块是将unity3d的应用平台与ros系统的主机放在同一个局域网下,建立c#脚本,新建一个tcp或者udp客户端类,即tcpclient类或者udpcilent类,与控制机器人的ros系统实现传输控制协议tcp或者用户数据报协议udp连接。

优选地,在unity3d中场景的主摄像机上绑定一个c#脚本,使用c#提供的网络编程类和函数,新建tcpclient类或者udpclient类的对象client,利用tcpclient类或者udpcilent类中的connect函数与控制机器人的ros系统实现连接,即利用语句client.connect("xxx.xxx.xxx.xxx",9090)与控制机器人的ros系统进行连接,参数("xxx.xxx.xxx.xxx",9090)中,xxx.xxx.xxx.xxx为从控制面板中读取用户输入的ros系统所在主机的ip地址,9090为默认rosbridge连接端口,可以根据需要更改。

优选地,在所述步骤(2)中:unity3d端向ros系统发送控制命令控制机器人,具体步骤为:

a)构造订阅发布信息类,根据rosbridge协议构造订阅发布信息类,

其中的必需字段为“op”字段,“op”字段指定向ros系统发送消息的操作类型,每个“op”字段指定自身的消息语义,将“op”字段设定为“advertise”类型,即发送消息的操作类型为“广告”类型,构造订阅发布信息类的实例化对象,将实例化对象序列化为json格式,利用tcpclient的传输函数即send函数向机器人传送序列化为json格式的数据。

b)构造控制命令信息类,其中的必需字段为“op”字段和“msg”字段,将“op”字段设定为“publish”类型,即发送消息的操作类型为“发布”类型,构造控制命令信息类的实例化对象,其中“msg”字段应包含控制面板中读取的运动信息,将实例化对象序列化为json格式,利用tcpclient的传输函数即send函数向机器人传送序列化为json格式的数据,即向机器人发布命令信息,控制机器人运动。

优选地,在所述步骤(3)中,首先构造“op”字段为“subscribe”类型,即“订阅”类型的订阅发布信息类的实例化对象,将订阅发布信息类的实例化对象序列化为json格式并且发送,编写脚本时利用c#提供的backgroundworker类实现多线程操作,用backgroundworker类的对象在后台线程中不断执行用于接收机器人运动信息的函数,即client.client.receive函数,其中client为最初建立的tcpclient类或者udpcilent类的对象,监听接收机器人json格式的信息数据,将json格式数据进行解析,将位置信息输出到运动信息显示框。

发明所达到的有益效果:本方法是一种机器人跨平台通信协议和控制方法,避免了从底层写起将ros系统嵌入其他平台的复杂性,基于轻量级的rosbridge协议,利用json这一简单、传输快速的数据交换格式,使其可以支持不同语言不同开发环境,进而可以进行多种语言环境的通信,其次利用unity3d的跨平台性,可以导出不同平台的应用,从而巧妙地实现了ros系统的跨平台交互,是轻量级的机器人通信和控制的很好选择。

附图说明

图1是本发明的通信和控制方法流程图;

图2是本发明的控制面板组成图;

图3是本发明的通信过程和控制机器人的流程图。

具体实施方式

下面结合附图并结合实施例对本发明的技术方案作进一步阐述。

图1是本发明的通信和控制方法的流程图,一种机器人跨平台通信协议和控制方法,具体包括以下步骤:

(1)在ros中安装rosbridge,命令:sudoapt-getinstall

ros-indigo-rosbridge-suite,然后在unity3d中使用内置ui控件ugui设计ui界面控制面板,控制面板包括图2所示的ip地址输入框,连接按钮,角速度线速度输入框,前进停止按钮和运动信息显示框;将unity3d的应用平台与ros系统的主机放在同一个局域网下,在unity3d中场景的主摄像机maincamera上绑定一个c#脚本,使用c#提供的网络编程类和函数,新建tcpclient类或者udpclient类的对象client,利用tcpclient类或者udpcilent类中的connect函数与控制机器人的ros系统实现连接,即利用语句client.connect("xxx.xxx.xxx.xxx",9090)与控制机器人的ros系统进行连接,参数("xxx.xxx.xxx.xxx",9090)中,xxx.xxx.xxx.xxx为从控制面板中读取用户输入的ros系统所在主机的ip地址,9090为默认rosbridge连接端口,可以根据需要更改;

(2)unity3d端读取使用者输入到控制面板中的运动信息,并向ros系统发送控制命令控制机器人运动,具体步骤为:

a)构造订阅发布信息类,根据rosbridge协议构造订阅发布信息类,

classrjson

{

publicstringop{get;set;}

publicstringid{get;set;}

publicstringtopic{get;set;}

publicstringtype{get;set;}

publicintthrottle_rate{get;set;}

publicstringqueue_size{get;set;}

publicstringcompression{get;set;}

}

其中的必需字段为“op”字段,“op”字段指定向ros系统发送消息的操作类型,每个“op”字段指定自身的消息语义,将“op”字段设定为“advertise”类型,即发送消息的操作类型为“广告”类型,此外订阅发布信息类还包括“id”(消息标识)、“topic”(主题)、“type”(主题类型)、“throttle_rate”(发送消息之间必须经过的最小时间量)、“queue_size”(缓冲消息队列的大小)、“compression”(可选字符串,用于指定要在消息上使用的压缩方案)这些字段,根据所连接ros系统的机器人和使用者需求填写“op”、“topic”、“type”、“throttle_rate”、“queue_size”、“compression”等字段的属性信息,构造订阅发布信息类的实例化对象,将实例化对象序列化为json格式,利用tcpclient的传输函数即send函数向机器人传送序列化为json格式的数据;

b)构造控制命令信息类,

classmsgjson

{

publicstringop{get;set;}

publicstringtopic{get;set;}

publicstringid{get;set;}

publicjobjectmsg{get;set;}

}

其中的必需字段为“op”字段,将“op”字段设定为“publish”类型,即发送消息的操作类型为“发布”类型,此外控制命令信息类还包括“topic”(主题)、“id”(消息标识)、“msg”(关于该主题所要发布的消息,包括运动信息等)这些字段,根据所连接ros系统机器人和使用者需求填写“topic”、“id”、“msg”字段的属性信息,构造控制命令信息类的实例化对象,其中“msg”字段应包含控制面板中读取的运动信息,将实例化对象序列化为json格式,利用tcpclient的传输函数即send函数向机器人传送序列化为json格式的数据,即向机器人发布命令信息,控制机器人运动;

(3)ros系统向unity3d端发送实时的机器人运动信息,unity3d端实时监听机器人运动状态,具体为:首先构造“op”字段为“subscribe”类型,即“订阅”类型的订阅发布信息类的实例化对象,将订阅发布信息类的实例化对象序列化为json格式并且发送给unity3d端,编写脚本时利用c#提供的backgroundworker类实现多线程操作,用backgroundworker类的对象在后台线程中不断执行用于接收机器人运动信息的函数,即client.client.receive函数,其中client为最初建立的tcpclient类或者udpcilent类的对象,监听接收机器人json格式的信息数据,将json格式数据进行解析,将位置信息输出到运动信息显示框;最后在unity3d中导出跨平台应用。

图3为与机器人通信过程和控制机器人流程图,具体流程如下:

(1)在控制机器人的ros系统中启动rosbridge;

(2)在控制面板中填写控制信息,ip地址为ros系统所在主机ip地址,点击连接,即可看到控制机器人的ros系统中出现连接信息;

(3)在面板中填写相应的速度等运动信息,点击开始按钮,后端脚本自动运行从角速度线速度输入框中获取参数,用以构造json数据包,构造好的数据包发送到ros主机;

(4)ros系统主机接收到角速度线速度信息,控制机器人以相应的速度进行运动,运动轨迹显示,机器人运动规律符合角速度线速度输入框中所输入的信息;

(5)在运动信息显示框中可以收到ros主机实时发送的机器人的运动状态,即机器人相对运动位置信息;

(6)点击stop按钮,机器人停止运动。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1