时间:2024-05-04
张春明,杨天鸿
(1.东北大学资源与土木工程学院,沈阳 110006;2.东北大学资源与土木工程学院实验中心,沈阳 110006)
东北大学金属矿山岩石力学与安全开采虚拟仿真教学实验中心2016年1月成功入选教育部国家级虚拟仿真实验教学中心,我们自主研发的多款沉浸式多通道虚拟教学软件成功地用于多门本科生课程的实验教学,使学生可以实时地对虚拟空间的对象进行操作并得到反馈,加深学生对采矿生产工艺、基础理论和岩石力学问题的理解,对改善实验教学理念、开辟创新实验教学新思路、改进实验教学效果、促进教学实验室建设与发展具有重要意义。值得一提的是,我们在虚拟现实教学软件开发过程中使用的技术方法同样适用于矿业虚拟现实软件的开发,如开采优化设计、生产设备调度、人员培训、事故过程模拟、各种逃生救灾方案优选对比等。总之,产学研相结合的应用前景十分广阔,这也是本文的宗旨所在[1-3]。
国内矿山用户早已开始使用三维矿业软件进行CAD辅助设计、矿山地质建模、露天采矿设计、地下采矿设计和采掘计划编排等。考虑到自主版权和本地化等因素,也涌现出一批优秀的国产软件,而专为国内用户量身打造的3DMine三维矿业工程软件更是其中的佼佼者,其创新的设计、简单易用的接口和广泛的兼容性,使之成为矿山工程师手中必备的利器。另一方面,随着虚拟现实技术的不断完善,其应用早已广泛深入到矿业领域当中,但应用数量远远不能满足实际需要,这是由研究对象、研究目标和应用需求决定的。因此,人们迫切需要在新建或已有的矿业应用软件中引入虚拟现实技术,实现工作成果可视化,并打造出前所未有的立体视觉体验[4-9]。这首先要求开发的虚拟现实应用软件必须支持立体显示技术,以获得更为逼真的效果。其次,必须能够实时、动态地生成具有景深感的立体场景,并且能够实现实时互动,而不是像普通立体电影那样需事先生成立体影片然后简单地静态播放。
考虑到工作量和成本等因素,矿业虚拟现实应用软件的开发不应片面强调从底层做起,而是要更多采用专为虚拟现实、科学仿真、计算可视化等高性能图形应用而开发设计的虚拟现实软件开发平台。如果用户有程序开发基础,可以选择OSG等开源虚拟现实开发平台,反之,可选择VRP、Vizard、Virtools和U3D等可视化虚拟现实开发平台。对于矿业工程师来说,应尽可能使用可视化开发平台做开发,减少在编写与行业无关的源代码上花费的时间,以便集中精力解决专业问题,取得事半功倍的效果。众所周知,虚拟现实应用软件的开发一般分成两种开发模式:一种是完全在虚拟现实开发平台上进行,利用其提供的脚本语言进行定制,以实现所需的专业功能,但限制较多;另一种是以通用语言作为宿主语言来调用虚拟现实开发引擎,既可解决虚拟现实平台固有的限制问题(局限于虚拟现实功能和羸弱的脚本语言能力),又能充分发挥通用编程语言的优势(功能可以扩展到任何领域),而且对开发出的软件在功能上没有任何限制。我们采用的就是这种开发模式,它能集众家之所长,是开发矿业虚拟现实软件的一次有益尝试。中视典数字科技有限公司开发的VRP是首个国产商用虚拟现实三维引擎,也是拥有自主知识产权的完全本地化的虚拟现实开发平台。它可以直接导入其他建模软件制作的三维模型,也可以方便地使用其他软件(如3DMine等)生成的数据处理成果,并且支持主动立体和被动立体技术。在应用开发方面,VRP同时提供对上述两种开发模式的支持。它自带脚本语言和内嵌LUA脚本编程语言,但在数据库和报表等功能上十分有限,因此,它还另外通过VRP-SDK系统二次开发包提供了与其他通用编程语言的开发接口,允许在其他语言中调用VRP提供的完备虚拟现实功能,与此同时,开发人员可以自由地加入VRP平台本身不具备的矿业软件功能[10-11],而且生成的虚拟现实应用软件可以脱离VRP开发平台独立运行,减少了用户成本。在立体显示技术方面,VRP支持主动立体技术与被动立体技术,它们各有优缺点。主动立体技术因其部署简便而逐渐成为展示类应用的主流,开发也更为便捷,但主动立体(快门式)显示模式存在一些固有的弊端,如只能使用VRP平台本身的界面元素,Windows对话框和其他界面元素由于被信号刷新频率达120Hz的立体画面所遮挡而无法显示,也就无法实现人机交互等。被动立体(不闪式)显示模式则不存在上述问题,因此,更符合我们现阶段的要求。我们使用的是大多影院采用的偏光或偏振式被动立体技术,虽然对投影机数量要求较多,但只需普通投影机加上偏振片即可,而且配套的偏振光立体眼镜价格也十分低廉。正是基于以上几个原因,我们最终决定在VRP二次开发平台的基础上开发各种沉浸式多通道矿业虚拟现实软件。具体地说,只在需要立体显示时才调用VRP-SDK二次开发包接口实现被动立体显示,这样可以确保所有对话框和Win⁃dows界面元素正常显示,解决了主动立体看不到Windows对话框等界面元素及无法与之互动的问题,另一方面还可以尽情发挥宿主语言的优势。
沉浸式虚拟现实软件效果逼真,能够令人沉浸其中,其优点不言而喻。要开发具有沉浸感的矿业虚拟现实软件,必须满足屏幕足够大、视野足够宽的要求,即人的视野不易受画外因素干扰或脱离屏幕范围。这是普通显示器无论如何无法实现的,也是我们要采用多通道技术(多通道画面无缝衔接)的原因所在[12]。
不失一般性,下面以双通道为例说明多通道大屏幕虚拟现实系统软硬件搭建和开发过程。
我们构建的被动立体系统硬件主要包括一块大型金属投影幕、两台VRP工作站(两台配置完全相同的主机)、一台视频矩阵切换器、两台硬件融合机和四台被动立体投影机和二台普通显示器(当作监视器使用),并通过交换机连接成一个内部数字网络。矩阵切换器分别与VRP工作站和融合机相连。融合机内左右通道画面在内部融合后分别生成左眼或右眼视频信号,再输出到相应的投影机上。系统体系结构如图1所示。
图1 系统体系结构
由于各通道之间要做边缘融合处理,因此,相邻投影机的投影画面需要有部分重叠,且重叠部分宽度应不低于单台投影机投影画面宽度的20%。屏幕的最大宽度应根据下式确定:
屏幕的最大宽度=(0.8×通道数+0.2)×屏幕高度×单台投影机分辨率的宽高比
我们构建的被动立体系统是多通道系统,在其上运行的多通道程序的安装和设置也比较复杂。假设我们开发的矿业虚拟现实程序命名为矿业VR软件,下面简要介绍其安装和配置过程。
(1)首先在位于同一局域网内配置完全相同的所有VRP工作站上安装VRP多通道管理器软件包,其中一台VRP工作站安装netmanserver服务端程序作为多通道被动立体系统的服务端,余下的VRP工作站均安装netmanClient客户端程序作为多通道被动立体系统的客户端。
(2)然后在所有VRP工作站上安装上“矿业VR软件”,安装路径必须完全相同。根据启动软件时传入的参数不同,该软件将分别作为(该软件本身的)服务器端和客户端运行。即在多通道被动立体系统服务端安装该软件的服务端(/S参数),在多通道被动立体系统客户端安装该软件的客户端(/C参数)。
(3)由于多通道程序作为VRP多通道管理器NetMan的子进程使用,因此,程序的启动、调用及参数设置均需要通过配置多通道管理器Com⁃mand脚本文件来实现。脚本文件包括由[]分隔的多个节,例如:[2-0]表示其后面为位于NetMan用户定制界面第三行第一列(行和列均从0开始计算)按钮所对应程序的参数。若将该按钮作为本程序的快捷按钮,需要将caption设置为“矿业VR软件”,即显示在该按钮上的文本。然后,设置run命令对应的动作act1和act2。需事先将拷贝到各VRP工作站安装文件夹下的VRP二次开发程序可执行文件xxx.exe重命名为VRP-Player.EXE,这样做的好处是netman可以对最大化、关闭程序窗口等进行统一管理,省去了额外编制程序代码的麻烦。下一步是设置命令行参数,参数/S和/C分别代表程序作为服务端程序运行和作为客户端程序运行,命令行最后面的参数用于指定多通道配置文件所在路径。最后,通过Inc参数和exc参数指定在哪些IP地址的VRP工作站自动运行何种参数的命令。
(4)在服务端和客户端主机上进行联机多通道调试。从服务端多通道设置对话框左侧列表中选择不同的客户端以设置其融合系数,如融合宽度、曲面校正等。设置结果保存到多通道配置文件中供多通道程序运行时读取。
(5)安装和设置完成后,点击多通道管理器NetMan服务端程序界面上的“矿业VR软件”快捷程序图标,自动在相应VRP工作站上启动“矿业VR软件”的服务端和客户端程序。
由于“矿业VR软件”使用了多通道,因此在交互操作必须使用同步鼠标,以便所有VRP工作站(各对应一个通道)上运行的“矿业VR软件”实例能够步调一致。而且,即使使用了同步鼠标,也会遇到各种问题。比如,在选择同一控件时由于各工作站屏幕设置存在差异,也可能导致不同的操作结果,如不同的工作站选择了不同的记录等。这就要求所有VRP工作站的屏幕设置(如分辨率等)必须完全相同,Windows底部任务栏设置也必须完全相同,如均设置为“锁定任务栏”和“自动隐藏”。注意:未经特殊处理,切不可使用键盘,否则可能引起各工作站步调不一致。好在上述的键盘和同步鼠标问题借助一些编程技巧和特殊处理完美地得到了解决,详见后面说明。
本文所述方法的特点是一次开发,多场合适用,即开发出的软件可以适用各种环境,包括立体和非立体(常规)环境,以及服务端和客户端环境。
(1)在同一命名空间内定义一个全局变量VRMODE,用于表示程序的当前模式或状态,默认为非立体模式(状态)。若程序运行时通过命令行传入的参数为/S或/C,则表示当前处于被动立体模式(状态),且分别作为服务端/客户端程序运行。对于多通道程序来说,只有一台VRP工作站作为服务端运行,其余均作为客服端运行。多通道程序的制作有别于一般程序,它要根据当前运行状态(当前程序是作为服务端还是客户端程序运行)执行不同的流程。由于服务端程序与客户端程序共享同一程序代码(但运行在不同主机上,分属不同的进程),因此,换个角度讲也减少了分别编程带来的巨大工作量。最典型的就是采用switch或if语句判断当前状态,然后执行相应的代码。
(2)由于采用被动立体模式,因此要显示出立体效果,无论服务端还是客户端都必须设置为全屏模式。
(3)创建virtualReality类,并完成VR引擎的初始化,然后判断VRMODE当前状态。如果当前是服务端(为简化代码,普通非立体程序也执行与服务端相同的代码,只是没有立体效果),那么调用VR引擎建立多通道服务器端实例、设置分屏模式(如水平双屏)、读取并装入多通道配置文件、开启多通道效果和显示融合区等。如果当前是客户端的话,那么用VR引擎建立多通道客户端实例,连接到服务端并开启多通道效果。客户端在连接服务端的同时,服务端会自动将多通道配置参数推送给客户端,并与之建立同步。其实现过程流程如图2所示。
图2 多通道程序实现流程及演示效果示例
(4)多通道程序一个需要着重考虑的问题是服务端和客户端之间的同步可能存在差异,导致服务端角色的动作与客户端角色的步调相差很大,甚至出现客户端画面中看不到角色,或者偶而才能看到角色。造成这种现象的根本原因在于程序无法保证服务器端和客户端在同一时刻运行相同的代码段,尤其是在内部循环中根本无法控制服务器端和客户端始终处于同一循环步,如服务器端可能运行到第10步,而客户端则可能才运行到第3步。同时,它也是造成同一帧画面左右眼画面不同步的一个重要因素。这些都需要在软件中采取一定的措施和技巧加以规避。找到了问题原因,也就找到了解决办法。首先把客户端的主动执行代码去掉,然后服务端通过内部通道向客户端发送脚本指令来间接执行相关代码,这样可以保证两者高度同步。而且要尽可能先让客户端执行一个动作,然后服务器端再执行同一个动作,这是因为向客户端发出指令以及客户端执行指令都需要一定的时间。这一点可从示例流程图中采用骨骼动画实现的井下工人的一系列动作的执行时序上加以体会。经过手工同步后,可以确保进入偏光眼镜的左右眼图像保持同步,实现多通道联动,并且在大脑中形成正确的立体视觉,这也是制作被动立体软件的难点所在。
(5)多通道程序的键鼠同步问题前文已有述及,即采用同步鼠标进行交互操作,并确保所有VR工作站的屏幕设置完全一致,但在实践中无法保证所有用户严格遵照执行,且键盘操作的问题也无法解决。因此,真正完美的解决方案还在于主动出击,只有这样才能变被动为主动。我们采取的办法是将所有涉及交互的操作全部放到服务端执行,即禁止在客户端显示交互界面,仅在程序判定当前为服务端时才动态显示出操作界面。同理,对数据库的所有操作,包括界面操作和存取操作也全部在服务端进行。客户端不显示交互界面对程序本身的运行以及对大屏幕的视觉效果没有任何影响,这一切对用户都是透明的,用户无需了解其内部的工作机制。
(6)其他一些技巧问题。比如,VR相机设定为角色跟随后,会因角色(如井下工作人员)在运动时伴有跳跃动作而出现上下晃动。此时将相机设定为跟踪一个虚拟模型,其坐标与角色完全重合,且坐标轴方向也设置完全一致(如果设置模型坐标轴时出现z轴与角色z轴方向相反,这时可以将其沿y轴镜像),最后将虚拟模型设为隐藏。此外,应设置较大的近剪裁面值0.43,以避免场景中的物体遮挡住目标。
通过推进产学研深度融合,我们在矿业虚拟现实应用软件研发方面积累了一定的经验。以下是取得的一些典型成果。
例如,与招金集团下属夏甸金矿合作完成的“基于虚拟现实技术的矿山围岩稳定性评价系统研发”获得2015年中国黄金协会科技进步特等奖,成为产学研合作成功典范。
图3 招金集团浸沉式多通道矿业虚拟现实软件实例
与河北钢铁集团有限公司下属矿山石人沟铁矿及司家营铁矿合作进行露天转地下开采关键技术的科研攻关。随后将相关科研成果转化为虚拟仿真场景,成为矿山现场工作人员的培训资源和学生认识露天转地下开采过程的重要教学素材。科研成果分别获得河北省科技进步奖一等奖及中国冶金矿山科学技术三等奖。
与济南钢铁集团下属张马屯铁矿合作,完成整个充填采矿方法的虚拟可视化,以帮助理解填充采矿工艺流程,并整合微震监测技术,开发了微震实时监测虚拟现实系统。我们知道,岩石等弹脆性材料在应力作用下产生局部弹性能集中,当能量积聚到临界值后,会产生裂隙甚至引起破坏,并伴有能量的快速释放和传播。原始微震信号经由传感器接收后加以处理和分析,可以实现任一时间段(由起始时间和终止时间确定)、任一时间点、任意能量范围(由最小原始能量和最大原始能量确定)的微震事件的空间定位和动态演示,而且可以任意视角观察处于真三维空间的模型和事件,甚至可以对事件进行逐帧分析,它有助于厘清事件的时序及前后邻近关系,统计事件时间间隔和距离间隔,找出内在规律以及预测破坏趋势。为便于分析,采用能量球对微震事件进行可视化。其中:能量球的位置代表着声源位置;能量球的大小代表着能级高低;能量球的颜色代表着微震事件发生的先后次序,颜色越浅表示事件发生得越早,颜色越深表示事件发生得越晚,之间的过渡色则代表此期间内发生的微震事件。为便于逐帧分析,还可显示能量迁移线(即轨迹线)。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!