虚拟仿真中单机多人协同技术的实现与应用
2022-07-08曹朋飞邸彦强冯少冲崔浩浩陈志佳
曹朋飞 邸彦强 冯少冲 崔浩浩 陈志佳
(陆军工程大学石家庄校区 河北省石家庄市 050000)
1 引言
虚拟仿真是指真实人员操纵仿真系统,通过电机控制、决策、通信等技巧实现人在回路的虚拟仿真系统,其中三维模拟训练系统是虚拟仿真中的一种重要仿真形式。在武器装备训练领域,装备的操作往往需要多名操作手协同工作来完成特定任务,因此在设计装备的三维模拟训练系统时需要考虑多人协同作业的功能需求,以提高训练效果。目前多人协同的三维模拟训练系统均采用网络互联的方式实现协同功能,如采用基于C/S架构的Socket通信或者采用基于分布式的架构通过网络中间件进行通信。该方式对于多种装备的大型模拟训练系统效果较好,但是在平台级的单装三维模拟训练系统中,采用网络互联方式实现多人协同效果较差,主要原因有两点:一是需要解决多个节点间的系统状态同步问题;二是该单装模拟训练系统在与其他仿真系统进行联动训练时,由于自身拓扑结构复杂,不易集成。因此,针对平台级单装三维模拟训练系统提出一种新的多人协同作业技术,即单机多人协同技术(Single-machine Multi-user Collaboration Technology,SMCT)。
SMCT在一台计算机中连接多个显示设备和多套输入设备,通过对多套输入设备的数据处理与驱动实现多个操作手协同作业功能,避免了多用户网络互联问题,有效简化了系统结构。同时,使用一台计算机即可实现模拟训练的多人协同功能,有效减少了成本。此外,在与其他仿真系统进行互联时,采用单机形式的三维模拟训练系统与采用多机联网形式的模拟训练系统相比,更易于集成。
2 单机多人协同技术
2.1 单机多输入设备协同技术原理
在三维模拟训练系统中,为单台计算机连接多个显示设备和多套输入设备,如鼠标、键盘、触控屏等,SMCT为每个用户分配一个显示设备和一套输入设备,同时为每个用户生成一套虚拟的输入设备图标,如虚拟鼠标指针等,其示意图如图 1所示。目前计算机中单个显卡可以支持多路视频输出,通过特定设备可以进一步增加显示设备的数量,能够满足平台级装备模拟训练系统的需求。对于由多套输入设备产生的计算机USB接口不足等问题,可采用USB-HUB等设备对计算机USB接口数量进行扩展。
图1:SMCT示意图
SMCT通过操作系统提供的RawInput相关接口采集各用户输入设备的原始输入信息,然后对采集的输入数据进行解析与封装,形成可供三维模拟训练系统识别的数据结构,采用多线程异步处理算法处理封装后的数据结构,根据各用户的输入信息生成三维模拟训练系统中的操作事件,最后通过委托机制将该操作事件分发给系统中所需要驱动的三维模型,以完成相应的训练操作,其结构框架如图 2所示。
图2:SMCT结构框架
SMCT框架可分为数据层和应用层,数据层通过操作系统提供的应用程序接口(Application Programming Interface,API)采集各输入设备的输入数据、设备身份标识等信息,通过对输入设备数据的解析处理形成三维模拟训练系统中的输入事件供应用层使用。应用层根据采集的输入设备信息将各输入设备虚拟化,为每个用户生成相应的虚拟输入设备图标。通过用户标定模块将虚拟输入设备分配给各用户,通过使用数据层产生的输入事件对相应的三维模型进行操作。
2.2 多输入设备数据采集、解析与驱动
SMCT通过操作系统提供的API采集输入设备信息,其具体步骤如下所述。
2.2.1 获取输入设备信息
通过操作系统提供的API获取计算机中接入的所有输入设备的信息并记录在列表中,其中包含设备类型、设备名称以及设备句柄等信息。
2.2.2 注册输入设备
对需要采集的输入设备类型进行注册,注册后操作系统会产生这些输入设备的原始输入信息,其中常用输入设备类型编码参数如表 1所示。
表 1:输入设备类型参数
2.2.3 输入设备数据采集
采用Hook方法截获操作系统中的WM_INPUT消息,使用RAWINPUT数据结构存储输入设备数据信息,根据输入数据中的设备类型分别针对各种设备数据进行处理。在采集到输入设备的数据之后可根据具体的三维模拟训练系统需求对数据进行解析封装,最终形成设备事件驱动上层应用,其示意图如图 3所示。
图3:数据采集、解析、驱动原理示意图
以鼠标设备为例,鼠标设备输入数据信息中包含鼠标指针在屏幕中的坐标信息、鼠标的按键状态信息,如鼠标左键按下和抬起状态、鼠标中键按下和抬起状态以及鼠标右键按下和抬起状态。根据鼠标按键状态的变化可生成鼠标动作事件,如鼠标单击事件、鼠标双击事件以及鼠标拖动事件等。
2.3 多输入设备的协同
SMCT采用多线程异步处理算法结合委托机制共同完成多设备的协同。在SMCT中,每种类型的输入设备维护一个设备数据列表,该数据列表以设备句柄作为其列表索引,在设备初始化时即可确定该列表的结构与长度。多线程异步处理算法通过对设备数据列表的异步读写初步完成了设备输入与响应的分离,使得多设备可同时操作。该算法包含输入设备数据采集线程和数据处理线程,其中输入设备数据采集线程监控所有已注册设备的输入消息,当有输入消息时对输入数据进行采集,针对不同类型的设备数据,将其存入对应设备的设备数据列表中,同时根据数据中的设备句柄更新设备列表中对应的设备数据。数据处理线程定时访问设备数据列表,对列表中各设备数据进行解析处理生成设备输入事件,其原理流程图如图 4所示。
图4:多线程异步处理算法原理流程图
SMCT通过委托机制将生成的设备输入事件分发给三维模拟训练系统中的三维模型,系统中三维模型根据具体的输入事件做出相应的动作响应完成训练任务,其具体步骤如下所示:
(1)针对设备类型,定义该设备的输入事件;
(2)在三维模拟训练系统中的各模型对其需要的设备输入事件进行注册,同时绑定事件处理函数;
(3)当产生设备输入事件时,将该事件通过委托机制分发给三维模拟训练系统中的各个模型部件;
(4)系统中各模型部件收到事件时,触发相应的事件处理函数,对系统中的三维模型进行响应操作,如移动、旋转等。
通过上述操作实现了多设备协同驱动三维模拟训练系统中的作业任务。
3 SMCT中的设备虚拟化与用户标定
在应用层SMCT主要完成输入设备的虚拟化和用户标定功能,为多人协同作业提供支撑。
3.1 设备虚拟化
设备虚拟化是指在三维模拟训练系统中为接入系统的多套输入设备构建相应的虚拟设备,如为每个鼠标设备构建一个鼠标指针图标,为每个键盘设备构建一个光标等,然后通过标定功能将该虚拟设备与用户进行绑定。设备虚拟化的具体实现如下所述:
(1)在三维模拟训练系统初始化时,获取接入操作系统的所有输入设备信息;
(2)根据设备类型过滤出三维模拟训练系统需要的设备并存入设备列表;
(3)对设备列表进行遍历,根据设备类型与数量在三维模拟训练系统中绘制相应的虚拟设备图标;
(4)三维模拟训练系统实时接收输入设备信息,更新对应的虚拟设备图标位置和状态。
3.2 用户工作区分割与标定
SMCT在硬件结构上采用一机多屏的形式,即一台计算机连接多台显示设备,每台显示设备作为一个用户的工作区。在操作系统中多台显示设备采用扩展模式进行排列,在三维模拟训练系统中SMCT根据显示设备的屏幕分辨率通过设置仿真引擎中的摄像机数量与显示比例将三维模拟训练系统工作区均匀分割。对于每个用户工作区的边界坐标可根据工作区排列方式进行计算,如图 5所示,在仿真引擎中设整个系统的工作区坐标由(x,y,w,h)表示,其中x和y表示工作区左下角相对屏幕坐标的位置,w和h表示工作区占系统显示的宽和高的比例,则整个系统的坐标可表示为(0,0,1,1),如图中工作区1坐标表示为(0.5,0.5,0.5,0.5)。
图5:用户工作区分割示意图
设三维模拟训练系统中工作区以X×Y方式进行排列,即横排为X个工作区,纵排有Y个工作区,其中第i个工作区(i从0开始)的边界(Vx,Vy,Vw,Vh)计算公式如式 1所示。
其中Vx,Vy,Vw,Vh组成工作区的矩形边界,Vx为工作区左下角x坐标,Vy为工作区左下角y坐标,Vw为工作区宽度占比,Vh为工作区高度占比。
在使用三维模拟训练系统之前需要通过用户标定模块为每个用户分配工作区,该过程为用户标定过程。用户标定建立了三维模拟训练系统中工作区与虚拟输入设备以及用户之间的映射关系,其中使用不同的颜色对多套虚拟设备进行区分。标定原理如图 6所示,SMCT为每个工作区分配一个ID,通过标定过程将输入设备句柄与工作区ID进行绑定,采用配置文件对其映射关系进行记录,在三维模拟训练系统运行过程中,根据设备与工作区的映射关系,各用户分别在其选择的工作区进行协同作业。
图6:用户标定原理
以一机两屏为例,标定过程如图 7所示,SMCT将三维模拟训练系统分割为两个工作区,接入两套输入设备,支持两个用户协同工作。依据工作区排列顺序依次显示系统标定界面,其余工作区为黑屏状态,用户选择一套输入设备激活标定按钮,将该设备分配给当前工作区,完成用户与工作区的绑定。
图7:用户标定过程示意图
4 SMCT在基于Unity 3D的三维模拟训练系统中的应用
Unity3D是丹麦Unity Technology公司开发的跨平台综合型游戏开发引擎,它以优质的3D渲染效果和支持跨平台的特点在虚拟仿真领域得到广泛应用。目前,该引擎已经是虚拟仿真领域中三维模拟训练系统的主要开发引擎之一。SMCT在基于Unity3D引擎的三维模拟训练系统中将操作系统外接输入设备的信号转换为Unity3D引擎中的操作事件,驱动场景中对应的虚拟输入设备产生动作。Unity3D引擎在其场景中虚拟设备所处的当前位置发射一条射线,该射线在场景中进行碰撞检测,第一次碰撞检测到的模型为该虚拟设备拾取的对象模型。当多个用户进行协同训练时,每个用户所对应的虚拟输入设备所产生的不同动作会映射到该虚拟设备所拾取到的不同的对象模型上,使场景中的多个模型同时产生相应的操作,达到多用户协同训练的目的。
目前该技术已成功应用于多套三维模拟训练系统中,达到了很好的效果。如图 8所示,在某装备模拟训练系统中基于SMCT实现了对装备的多人协同操作训练,该系统运行于一台计算机中,采用三个显示器以扩展模式进行连接,在计算机中接入三套鼠标设备,通过标定过程分别为每个用户绑定一个显示器区域和一个虚拟鼠标指针。该系统中三位用户分别使用绿色、黄色和红色的虚拟鼠标通过点击、拖动等动作同时对同一辆装备进行训练操作,协同完成装备模拟训练的过程。
图8:某装备模拟训练系统多人协同训练效果图
5 结论
本文依据装备三维模拟训练中的实际需求,设计了一种多人协同技术框架,对其中功能模块的设计与实现进行了论述,实现了在平台级装备三维模拟训练中多人协同作业的目的。该技术采用单机多显示设备结合多输入设备的硬件架构,实现了外接硬件输入数据的采集、解析、封装与驱动,采用多线程异步处理算法结合委托机制实现了多设备的协同,同时设计了一种用户工作区的分割与标定方法,支撑了该技术的应用。该技术规避了多节点网络之间的复杂关系,简化了系统结构,降低了成本。并且,易于与其他异构系统进行分布式互联集成。该技术适用于少量用户的多人协同作业,对于大规模的系统可通过该技术与网络相结合的方法进行实现。