基于Unity3D的虚拟康复机器人实时动态演示

2020-07-10 09:16刘方全林泽磊刘伟尧李景涛
科学与财富 2020年13期

刘方全 林泽磊 刘伟尧 李景涛

摘 要:选取已完成的上肢康复机器人本体为研究对象,使用SolidWork软件对上肢康复机器人进行三维建模,使用3DsMax对模型附加材质调整坐标轴等。将调整好的三维模型导入Unity3D软件当中,并且用MFC建立康复机器人的控制面板。控制面板上各电动机的转动参数一方面同过串口下发给康复机器人本体,控制其运动。另一方面通过Socket通信传递给Unity3D,控制康复机器人模型的运动。通过康复机器人模型的运动实时展现机器人本体的运动状态。

关键词:上肢康复机器人;Unity3D;Socket通信

1 三维模型的建立

1.1 上肢康复机器人模型的建立

上肢康复机器人是比较复杂的机械系统,为了保证仿真结果与真实接近,所有的零件都按照电子版图提供的数据进行1:1建模,使用SolidWork软件建立各个零件的实体模型,并将生成的零件装配成总体,生成stl文件格式,导入到3DsMax中,在对各个零件添加材质和贴图。

1.2 人物模型的建立

为使上肢康复机器人的模拟动画能真实的体现上肢康复机器人本体的运动状况,人物模型的尺寸应充分考虑到康复机器人模型的尺寸,应使人物模型的腕关节、肘关节、肩关节与康复机器人的各关节相对应,尽量保证人物模型与康复机器人的各关节同轴,这样能使展示效果更加逼真。

人物模型分为对头部和身体的建模,在3DsMax中采用多边形建模方法,建立人物的初步模型,然后对人物模型添加平滑组,这样可以增加模型的光滑度,然后为人物模型添加材质和贴图形成最终的效果图。

1.3 骨骼和绑定的添加与调整

人物模型必须绑定骨骼才能实现模型的运动,首先用biped建立一个骨骼系统,在运动命令面板,点击biped卷展览的figure mode。在各视图中,使用旋转缩放位移的方式,调整骨骼的位置与模型的位置,让二者对齐,调整好其中的一部分之后,复制到另一半上。

骨骼建立完成之后必须与模型进行绑定,常用的绑定方式有skin和physique两种绑定方式,一般来说两者没有本质的区别,在进行动画制作时都可以使用。但是如果使用physique将骨骼与模型进行绑定,将生成的新模型导入到Unity3D时,会产生一些列问题。而使用skin不会存在这样的问题,所以此次绑定使用skin进行绑定。

1.4 模型的导出及注意的问题

在3DsMax中的运动控制命令中,将人物模型和康复机器人模型进行调整,最终效果图如图1所示,并将生成的模型生成Fbx格式导入到Unity3D当中,导出的模型应主要考虑3方面:坐标轴、比例和贴图。

2 康复机器人控制面板与Unity 3D之间的Socket通信

2.1 Socket简介

Socket通常也叫作“套接字”,是一种建立在传输层协议上的通信机制。最初是由美国加州Berklry大学提出,为UNIX操作系统开发的网络通信接口,它定义了两台计算机间的通信规范(也就是一种编程规范)[2]。Socket通信屏蔽了网络传输传输中低层通信协议的复杂性和差异性,使任意两台安装TCP软件的计算机之间通信成为了可能,而且因为Socket通信具有易于理解,便于掌握等特点,目前已经成为TCP/IP网络最为通用的API,也是在Internet上进行应用开发最为通用的API[3]。

2.2 Socket基本类型

Socket通信主要有三种类型:流式套接字、数据报套接字和原始套接字。流式套接字是一种面向连接的套接字,能够实现无差错无重复的顺序数据传输,内设流量控制,避免数据流超限。数据被看成字节流,无长度限制。数据报套接字是一种面向无连接的套接字,数据通过相互独立的报文进行传输,是无序的,并且不能保证数据传输的可靠性,数据的最大传输最大长度为64KB。原始套接字允许对底层协议IP活ICMP直接访问,主要用于网络协议的测试,一般不会提供给普通用户[4]。为了保证数据传输的准确性,此次通信用到的是面向连接的流式套接字。

2.3 Socket编程主要流程

Socket通信才用来目前网络编程流行的ClientSocket/SeverSocket模式,客户/服务器模式通常是采用监听/连接的方式实现。首先,服务器端启动等待客户端的请求,客户端启动后请求一个连接,向服务器提出请求,服务器接到请求并驗证后开启连接,启动一个特殊的服务器端套接字,并与客户端套接字相互连接。建立连接的过程是客户机主动申请,服务器被动等待。连接建立之后,双方都可以自由发出数据的传输请求,也可以都发送数据[5]。

服务器端:(1)服务器首先启动,用Socket类建立一个Socket套接字;(2)调用bind函数将该套接字与本地IP地址和端口绑定;(3)调用listen监听连接情况(4)调用accept接受连接,并产生一个新的套接字。若无连接请求,服务器处于无限循环状态;(5)产生的新套接字与客户端套接字建立连接,调用read、write函数与客户端进行通信,先前的套接字继续用于监听客户端的请求;(6)服务进程调用close函数关闭监听套接字,中断连接,终止服务。

客户端:(1)调用Socket建立一个Socket客户端;(2)调用connect函数向服务器进程发送连接请求;(3)调用read、write函数与服务器新线程进行双向通信;(4)完成通信后,客户进程调用close函数,中断连接。

2.4 服务器与客户端运行结果

将unity3D作为服务器端进行编程,设置本地的IP地址为219.231.156.82,端口号设置为8000,设置后服务器的参数之后点击运行,然后将控制面板客户端进行编程,同样设置本地的IP地址,并将需要发送的数据填写完成之后,点击“连接”按钮,客户端会提示连接成功,并将控制面板上的各参数发送给服务器,如图2所示,并且服务器根据发送来的参数来控制康复机器人模型的运动,来间接反映康复机器人本体的运动情况。

4 结束语

本文虚拟上肢康复机器人实时动态显示主要是由上肢康复机器人的建模和Socket通信两部分实现的。通过Solidwork软件在基础建模方面方便快捷的特性建立上肢康复机器人的基础模型,以及利用3DsMax软件在模型渲染上的强大功能对模型进行后续的加工处理,是模型更加真实。Socket可以提供C++和C#两种语言的API函数,刚好满足了MFC和Unity3D这两款软件的编程要求,同时目前大多数进程间的通信都是Socket编写的,通过Socket编程可以方便快捷的实现进程间的通信。

参考文献:

[1] 赵航. 基于下肢康复机器人虚拟现实技术的研究与实现[D]. 河北工业大学, 2014.

[2] 刘骏, 颜钢锋. 基于Socket的网络编程技术及其实现[J]. 江南大学学报(自然科学版), 2004, 3(3):249-251.

[3] 周炎涛, 李立明. TCP/IP协议下网络编程技术及其实现[J]. 航空计算技术, 2002, 32(3):122-124.

[4] 李存斌, 汪兵. Delphi深度编程及其项目应用开发[M]. 中国水利水电出版社, 2002.

[5] 阮戈. 最新Unix程序设计与编程技巧[M]. 清华大学出版社, 2001.