基于人机交互的液压支架运动状态仿真研究
2015-01-27李阿乐郑晓雯陈雪婷
李阿乐,郑晓雯,陈雪婷,李 伟
(中国矿业大学(北京)机电与信息工程学院,北京 100083)
0 引言
随着虚拟现实技术以其所带来的身临其境的逼真效果逐渐被应用到计算机辅助工业设计[1,2],它使得人们不再满足于像以往一样观察产品固定的、静态的图像或文字信息,而是对具有动态的、三维的、实时可交互的三维虚拟仿真系统具有十分迫切的需求,作为开发虚拟产品的Unity 3D 虚拟现实软件就是非常好的一个平台。目前,无论在国内还是国外,利用Unity 3D 来开发产品的虚拟展示系统和地面的漫游系统都已经得到了非常普遍的应用[3~7],因此用Unity 3D 来开发煤矿综采工作面液压支架的运动状态仿真系统,可以实现其他三维建模软件所不具备的动态交互功能。本文在Windows 平台下,利用Unity 3D 虚拟现实开发软件和Pro/E 三维建模软件,并结合JavaScript 和C# 语言来编写实现交互的程序,完成了形象逼真的、数据量小的、实时可交互的液压支架运动状态仿真系统。
1 液压支架零部件三维建模和装配
由于Unity 3D 虚拟现实软件平台不具备构建复杂几何模型的功能,因此本文采用Pro/E 三维建模软件对液压支架进行三维建模,研究对象为ZZ4400/17/35 型四柱支撑掩护式液压支架。
在三维建模软件Pro/E 的零件模块中对液压支架的主要组成部分,即底座、立柱、立柱缸、前后连杆、顶梁、掩护梁等进行三维建模,再在该软件的装配模块中,按照它们之间正确的装配关系进行装配得到整体液压支架的三维模型,即将所建立好的液压支架底座模型作为下一步要装配的整机模型的第一个基础零件加载到工作区里面,此时底座默认被添加为固定的属性。按照底座和四个连杆、四个立柱缸之间的装配关系,依次调入这些零件的模型并把它们装配到底座上,其他零部件的装配也依据和已有装配件的装配关系进行正确装配。需要注意的是:进行液压支架装配的时候,是从底座开始的,这里选取的第一个基本零件是底座,然后再根据约束关系把其他的组成零部件依次装上。那么底座的坐标系即为后续液压支架导入导出时的整体坐标系,这也为交互设计时的脚本编写提供了很大的方便。液压支架的整体三维模型如图1 所示。
图1 液压支架的三维模型Fig.1 3D model of hydraulic support
2 液压支架模型的处理和导入
经过装配之后的液压支架三维模型可以直接在Pro/E中保存为obj 格式的文件,然后导入到3ds Max 中,在此操作环境中对液压支架进行材质的添加和着色渲染。本文液压支架用来做运动仿真时的材质选用的材质类型是“Standard”,即系统默认,未做更改。在建立好所需的不同颜色的材质球后依次给液压支架的组成零部件上色即可得到接近真实外观的液压支架,并将其保存为Unity 3D 可兼容的.fbx 格式,然后将模型导入到Unity 3D 中。此时导入到Unity 3D 里面的液压支架在运行时是一片漆黑的,由于系统在场景视图中只默认添加了一个摄像机“Camera”,因此为了观察液压支架,必须在Unity 3D 的场景编辑器里面添加一个灯光。具体方法为在编辑器的组成对象列表上方点击“Create”按钮,选择相应的“Directional Light”选项即可完成平行光的添加。这时再调整视图中的灯光和摄像机到一个合适的位置,就可以在运行的时候看到液压支架明亮的显示状态。
在导入之前需要注意的是,液压支架的每个零件在建模时都自有一个坐标系,这个自有的局部坐标系会随着整个液压支架三维模型一起被导入到Unity 3D 中,为了方便仿真之前的运动状态分析,需要在3ds Max 中将每个活动零件的局部坐标系调整到合适的位置。
3 液压支架模型在Unity 3D 中运动关系的建立
Unity 3D 在其层次视图中提供了各组成对象之间父子关系的设立,为了模拟控制虚拟液压支架的升、降、推、移等运动,只需在Unity 3D 中设置好各零部件之间的父子关系,然后计算出它们的瞬时位置坐标和角度参数,并通过编写的脚本来表达即可实现人机之间的交互。
为了方便运动分析时各位姿参数的求解,并结合液压支架各零部件已有的组成关系,现将它们之间的父子关系在Unity 3D 的Hierarchy 视图中设置为如图2 所示。
图2 父子关系图Fig.2 Parent-child relationship
下一步就是根据相应的几何关系计算出各零部件在系统坐标系中的坐标值,在后连杆转动的同时,通过这些时刻变化的位姿参数表达式来模拟液压支架其他活动零部件的真实运动。关于液压支架组成零部件位姿参数求解,以图3 所示的液压支架运动简图为例,简单加以介绍。图中把A 点设置为液压支架在系统坐标系中的原点。那么A、B、C、D 四点所构成的部分可看成一个四连杆机构,如果建立一个以AB方向为x 轴,另一个垂直该轴方向为y 轴的平面坐标系,把这个简化的四连杆机构单独拿出来分析,如图4 所示。由于A、B两点高度和水平距离是可以测量得到的,AB 段的长度经计算先表示为L0,图中液压支架的前后连杆长度分别为L2、L1,CD 长度假定为L,这些已知量都是可以通过测量结果预先得到的。由连杆在x 轴和y 轴方向上的投影可得:
L1cos(π-θ1-α)+Lcosβ=L2cos(π-θ2-α)+L0L1sin(π-θ1-α)+Lsinβ=L2sin(π-θ2-α)
XC=L1cosθ1,YC=L1sinθ1
XD=XB+L2cosθ2,YD=YB+L2sinθ2
则计算可得掩护梁的倾角为:
图3 液压支架运动简图Fig.3 Motion diagram of hydraulic support
图4 简化四连杆机构Fig.4 Simplified four bar mechanism
上述等式中,角度α 可以通过计算得出,角度β 为中间量。在测量出AB 长度L0、长度L2、L1和后连杆的偏转角θ1后,可以由以上几组等式计算出前连杆的倾角θ2的大小、C、D 两点的坐标值以及掩护梁的倾角θ3的大小。回到上面液压支架运动简图,顶梁的倾角θ4有一个初始设置的大小,因为顶梁是作为一个子对象附加在掩护梁上,所以顶梁上F、G 两点的坐标可以很容易求解,同理由底座和前后立柱缸之间的父子关系,H、I 两点的坐标值也可以轻易求解。那么在已知G、I、F、H四点的坐标值后,前、后立柱的倾角θ6和θ5可以依次计算出来。依此,根据顶梁和护帮板之间的父子关系,可以直接得出点J、K、L 的坐标值,再加上L3的长度值,则由余弦定理可计算出角θ7的大小。最后在计算出所有需要的坐标参数表达式并把它们代入到所编写的脚本中,则可通过控制液压支架后连杆的转动来实现其他构件的整体虚拟运动。
4 人机交互设计
为了实现整个液压支架的运动状态仿真和人机交互,即达到一种可以通过鼠标和键盘来实时操控的效果,Unity 3D 脚本在此时的系统开发中是关键要素,模型各零部件之间任何逻辑的判断和GUI 状态显示都需要通过脚本来完成。为此,在Unity 3D 中把编写好的带有各零部件准确位姿参数的脚本绑定到液压支架的相关部件上,经调试无误后,在运行时即可实现人机之间的动态交互。本文主要采用的是JavaScript 语言来编写实现动态交互的程序,编写环境为Unity 3D 软件自带的MonoDevelop 脚本编辑器。在处理整个液压支架的运动状态时,所需计算的运动参数较多,仿真时所编写的代码也较多,在此以较为基础的整架移动和后连杆转动命令为例加以介绍。
操作者若想通过键盘或鼠标来驱动虚拟的液压支架,分别以按键“A”、“D”控制前后移架,按键“S”同时还可对界面上按钮的点击来控制液压支架后连杆的转动,从而进一步实现其他活动零部件的运动为例,部分利用JavaScript 语言的编写如下:
var RotateSpeed=20;
var MoveSpeed=30;
function OnGUI () {
If (GUI.Button (Rect (10,10,130,30) ,“升架”,)) {
transform.Rotate (Vector3.right*Time.deltaTime*RotateSpeed) ;}
if (GUI.RepeatButton (Rect (Screen.width-150,10,130,30) ," 向前移动液压支架")) {
transform.Translate (-Vector3.forward*Time.deltaTime*MoveSpeed) ; }
if (GUI.RepeatButton (Rect (Screen.width-150,50,130,30) ," 向后移动液压支架")) {
transform.Translate (Vector3.forward*Time.deltaTime* MoveSpeed) ;}
}
function Update () {
if (Input.GetKey (KeyCode.S)) {
transform.Rotate (Vector3.right*Time.deltaTime*RotateSpeed) ;
}
if (Input.GetKey (KeyCode.D)) {
transform.Translate (-Vector3.forward*Time.deltaTime*MoveSpeed) ;
}
if (Input.GetKey (KeyCode.A)) {
transform.Translate (Vector3.forward*Time.deltaTime*MoveSpeed) ;
}
}
完成了整个仿真系统的工作之后,最终可以在Unity 3D 平台中将系统发布成相应的可执行文件和网络文件。系统发布之前在Unity 3D 中的显示界面如图5 所示。
图5 系统发布前显示界面Fig.5 Display interface
5 结束语
通过三维建模软件Pro/E、模型渲染工具3ds Max和虚拟现实软件Unity 3D 的综合应用,最终完成了液压支架运动状态仿真系统。相对于简单的图片和视频展示,操作者可以在人机交互的状态下动态地模拟操控液压支架的运动,从而更加直观地了解液压支架的真实工作状态。该系统不仅可以应用于虚拟的教学演示和培训中,也可以在真实液压支架上添加传感器进行工作状态的监测和数据的采集、传输,并通过开发的虚拟仿真系统进行真实驱动,还可以将该系统扩展到整个综采工作面上。本文的研究为煤矿综采工作面设备的虚拟仿真和远程监控系统的改进奠定了基础。
[1]宣雨松.Unity 3D 游戏开发[M].北京:人民邮电出版社,2012.
[2]倪乐波,戚鹏,遇丽娜,等.Unity 3d 产品虚拟展示技术的研究与应用[J].数字技术与应用,2010,9.
[3]欧阳攀,李强,卢秀慧.基于Unity 3D 的虚拟校园开发研究与实现[J].现代电子技术,2013,4.
[4]李红涛,张驎.人机工程在煤矿中的应用现状及展望[J].矿山机械,2013,5.
[5]胡松刚,李浩雷.浅谈虚拟模拟技术在煤机操作培训中的应用前景[J].矿山机械,2010,2.
[6]周广新,李威,张丽平.基于3D-VR 的煤矿综采面液压支架虚拟系统的研究[J].矿山机械,2010,11.
[7]闫海峰,巩明,唐大放,等.基于Virtools 4.0 的综采支护虚拟现实系统开发[J].矿山机械,2009,23.