【摘 要】液压支架的运动仿真是采煤工作面场景仿真的关键问题,由于其构造复杂,支架各部件之间的协同运动关系描述是运动仿真的难点。本文提出了生成关键帧的运动仿真方法,提取支架各部件的空间关系,提出部件空间位置与运动时刻的关系模型,来描述支架周期性运动过程。根据部件之间的几何结构及运动关系,提出基于时间参数的路径无关性协同控制算法控制支架运动,建立支柱及顶梁等部件运动模型。采用OSG图形平台,根据液压支架的协同控制算法及部件运动模型实施了支架运动仿真,满足仿真的实时性和运动的准确性。
【关键词】模型仿真;液压支架;运动控制;关键帧
0 引言
采用虚拟现实技术(VR)进行采煤工作面的三维场景仿真,将整个采煤过程可视化,进行采矿生产过程模拟,服务于工作面的隐患预警,提高煤炭开采的安全性,用于煤矿人员技术培训。
采煤工作面的设备包括刮板输送机、采煤机和液压支架,其中液压支架的结构组成复杂。液压支架由多个部件构成,组件类型多,部件的运动模式各不相同,包括垂直方向的升降运动、水平方向的平移运动,依赖升降的旋转运动等,组件间的运动关系难以准确描述。准确的实施液压支架运动仿真的基础是设计液压支架的运动控制技术,也是采煤工作面仿真的关键技术。
VR技术在煤矿领域的仿真工作主要有煤矿设备的虚拟设计、矿井火灾模拟和瓦斯爆炸模拟[1]等,但存在设备仿真模型粗糙、场景控制技术简单和实时性差等缺陷。由于采煤设备的多样性、采煤过程和场景的复杂性,采煤工作面的场景仿真研究很少。液压支架的运动仿真及运动控制的相关研究没有见诸报道。
1 基于时间参数的路径无关关键帧生成技术
1.1 液压支架的构成及运动关系
1.1.1 液压支架的组件
液压支架的运动由立柱的升降为主导,随着B的升降,顶梁A随着立柱平动,底座C保持不变,拉杆E绕着W点旋转,掩护梁D的运动是最复杂的,不仅有升降还有旋转,对D的运动控制是工作的重中之重。液压支架组件描述表1如下:
表1 支架组件描述表
液压支架的运动是周期性的,设液压支架的一个周期为时间T,整个周期T运动状态又可以分为四个阶段,支架部件在上述阶段的运动模式见表2:
表2 支架部件不同阶段运动模式
液压支架运动过程表达为若干个关键帧,计算关键帧时刻支架所处的位置和状态信息,以帧的形式组织描述支架状态,连接关键帧形成支架运动仿真过程[2-3]。通过场景中的几何模型关系计算求解关键帧的方法,解决了液压支架的复杂运动部件的路径信息难以获取的问题。
设置运动路径是常用的运动控制及仿真方法,即求出场景中物体的真实运动数学关系模型,根据运动数学模型生成运动路径[4]。如果运动数学关系模型特别复杂,提取数学关系模型困难,以及场景仿真时会运算量巨大,仿真的实时性差,也无法提高渲染效率。提取关键帧的方法在保证仿真真实性的情况下,能够很好的解决这个问题。
2 液压支架运动仿真实现
2.1 实现平台OSG介绍
本系统是基于OpenSceneGraph(OSG)图形库开发[5],OSG 包含了一系列的开源图形库,主要为图形图像应用程序的开发提供场景管理和图形渲染优化的功能。它使用可移植的ANSI C++编写,并使用已成为工业标准的OpenGL底层渲染API。因此,OSG具备跨平台性,可以运行在Windows,MacOSX 和大多数类型的UNIX 和Linux 操作系统上。
OSG提供了树状的结构组织模型,有效液压支架进行场景组织。3DMAX制作生成前六个设备部件模型文件,并进行组织,然后由OSGExp插件导出为.osg格式文件。
2.2 模型加载与控制
液压支架是采煤工作面仿真的核心设备模型,通过OSG中加载模型函数osgDB::readNodeFile()从文件中读取设备模型,然后对场景模型进行相应的运动控制。
加载液压支架模型,首先按照液压支架的运动位移范围及运动时间,切分出若干关键点实施控制。控制变量包括:双精度型时间变量,包括动画的起始时间和持续时间;向量型变量osg::Vec,用来控制关键点节点的位置;表示运动方式的四元数变量osg::Quat,其矢量部分表示旋转轴,标量部分表示关键点之间的旋转角度。
由于液压支架各部件功能各异,其运动形式也不同。因为液压支架为周期性运动,前面我们分析了在周期不同的阶段各部件的运动状态,针对不同阶段不同的运动状态给不同的部件编写动画函数。
首先设定动画持续的时间time,为整个周期T内一段时间,起始时间time_start,以及整个动画过程由n个关键帧组成。
1)平移运动控制
平移以顶梁A为例,需设定升降的距离,即位移量displacement。由函数osg::Vec position() 生成平动时两关键帧之间的位移量;函数osg::AnimationPath::insert()把运动时间、位移量插入动画路径函数,完成路径设置。顶梁A节点调用动画路径回调函数osg::Node::setUpdateCallback()完成运动路径。
2)旋转运动控制
旋转以连杆E为例,首先设置旋转角度angle。关键帧之间的节点旋转角度为angle/n,所用的时间为time/n,由函数osg::Quatrotation()更新旋转角度。最后同样调用insert()函数插入时间和当前状态,返回动画路径。同样连杆E节点通过函数osg::Node::setUpdateCallback()调用动画路径。