基于虚拟仿真的多人协同训练数据存储技术
2020-07-18◆徐伟黄婧杨光
◆徐 伟 黄 婧 杨 光
(中国电子科技集团公司第二十八研究所 江苏 210007)
1 引言
在现代军事训练领域中,虚拟仿真作为一项重要技术,推动了训练模式的创新与变革,而与动作捕捉技术的结合,更加提高了其沉浸式的训练体验。借助动作捕捉设备,实时采集受训人员的体感数据,输入至虚拟仿真训练系统,驱动三维虚拟角色模型,在虚拟空间中映射人员动作[1],是提高受训人员训练效果的有效手段。
本文基于一种虚拟仿真模拟训练系统,以实现模拟训练数据全面高效地采集与管理为目标,对体感及非体感两类模拟数据的存储进行研究。针对体感数据采样率高、单帧数据量大[2]、存储访问时系统数据处理压力大等问题,结合动作捕捉骨骼数据编码优化方法,提出一种高采样率下空间定位数据的合批存储方法,实现数据的高效存储;同时,针对非体感数据事件存储[3]下实体状态需要逐层解析的问题,提出一种基于事件存储的实体状态参数化解析机制,实现了非体感数据的高效存储和实体状态的快速解析。
2 训练数据分类
2.1 体感数据
体感数据是指通过全身动作捕捉设备获取的身体各关键节点的位置与旋转数据,共涉及了包括头部、躯干、四肢在内的共19个关节点,其采样率达100Hz,每帧数据表示了捕捉对象的某一瞬时状态。
2.2 非体感数据
训练过程中,除了由穿戴体感设备的实兵产生的体感数据外,因战场环境仿真[4]、虚实协同[5]需要,系统中的作战人员、武器装备等各类仿真实体会产生大量非体感训练数据,如图1所示。
图1 非体感训练数据分类图
(1)实体生成数据,包含了实体的生成时间及初始状态,系统开始对实体属性与状态进行仿真解算,并在场景中绘制实体;实体销毁数据,描述实体销毁时间,系统停止更新实体属性与状态,并且不再绘制实体;
(2)实体位置数据,描述实体当前在场景中的位置坐标,该数据主要通过实体移动寻路进行更新;
(3)实体朝向数据,描述实体当前在场景中面朝的方向,该数据主要当实体沿路径移动或播放特定动画序列时发生变更;
(4)实体动画状态数据,描述实体当前播放的动画序列状态,该数据当实体状态发生改变时也会相应变更;
3 体感数据合批存储
针对体感数据存储优化问题,从体感数据结构、体感数据编码优化、体感数据合批存储几个方面进行研究,如图2所示。
3.1 体感数据结构分析
体感数据中记录的关节点位置信息和旋转信息均是通过3个单精度浮点数表示,分别对应着以米为单位的空间坐标值X、Y、Z,和以X、Y、Z为旋转轴的欧拉角度值。每个单精度浮点数以4字节计算,采样率按100Hz计算,则每名受训人员每分钟会产生2.6兆字节数据。同时,每名受训人员产生的体感数据都要以广播的形式实时同步到其他客户端,即网络中的广播数据量与受训人员数量的平方成正比。当训练系统的受训人员数量进一步拓展时,训练系统进行数据广播时网络带宽压力也会大幅度增加。
图2 体感数据合批存储技术路线
3.2 体感数据编码优化
针对训练人员数量拓展受限的问题,本节从节点信息冗余、采样频率冗余、数据精度冗余三个方面对数据编码进行优化。
节点信息冗余优化:在单帧体感数据中,基于节点之间存在的拓扑关系进行单帧体感数据还原时,可从根节点出发,沿着节点间以树形拓扑关系构成的正向运动链,逐级解算子节点的位置信息。因此,除根节点外,可将其余节点位置信息全部删除,实现体感数据的冗余节点信息优化。优化前后的数据对比,如表1所示。
表1 节点信息冗余优化前后数据量对比
采样频率冗余优化:基于自适应降频采样算法,在节点位置及旋转信息变化速率较低时降低数据采样频率,在节点位置及旋转信息变化速率较高时相应保持较高的数据采样频率,实现体感数据的冗余采样频率优化。
数据精度冗余优化:由于单精度浮点数能够支持的数据精度(有效数字达到七位)远超体感数据的实际精度(动作捕捉设备测量的位置信息精度可达毫米级,旋转信息精度可达1度)。因此,将单精度浮点数的小数点第四位后部分删除,实现体感数据的冗余精度优化。优化前后的数据对比,如表2所示。
表2 数据精度冗余优化前后数据量对比
3.3 体感数据合批存储
体感数据的存储采用“化零为整”的思路,将数据帧按时间顺序进行合批,形成体感数据块,以数据块为基本单元进行数据的存储与访问。该方法可有效减少数据库读写操作频次,优化体感数据存储访问效率,具体实现如下:
首先,统一体感数据帧的时间戳信息,采用基于二分搜索的插入排序算法[6],提升体感数据帧的合批排序效率。其次,将排序后的数据帧,以1分钟为间隔拆分为数据块,每个数据块保存为一个数据文件存储在硬盘上,同时在数据库中保存文件索引信息,便于对文件进行检索访问。文件索引信息采用均衡二叉树存储,均衡二叉树可以在数据结构生成过程中,对树结构进行动态调整,使得二叉树各分支始终保持相对一致的高度,提升检索效率。整个存储过程采用异步方式进行,不堵塞后台数据服务的主线程。
4 非体感数据存储与参数化解析
非体感数据的存储通常采用事件存储的技术路线。事件存储,通过将实体状态的改变转化为事件消息,以增量形式记录非体感数据,可大幅减少需要存储的非体感数据量。但是进行实体状态解析时,需要从实体初始状态开始,逐一解析与实体相关的事件消息,逐层递进式地还原实体状态,增加了实体状态解析的处理复杂度。
本节针对事件存储下实体状态需要从初始状态逐层解析的问题,对非体感数据的存储与解析机制进行研究。
4.1 非体感数据存储解析原理
根据产生时间顺序依次存储各仿真实体的事件消息,形成各实体的状态变更时间轴。时间轴上各节点表示实体相关的事件消息,实体在该时间点发生状态变更,两个节点之间的时间段实体处于前一节点所表示的状态,如图3所示。
图3 实体状态变更示意图
基于此原理,给定任意时间t,以及当前实体状态S,在不经由实体初始状态及事件消息分步迭代计算的前提下,可通过实体状态关于时间t的等价解算函数,快速解算出实体在时间t的所有状态数据,即:
S_t=F_s(t)
其中t为时间,S_t为处于状态S的实体在t时间的状态数据,F_s为状态S的等价解算函数。
等价解算函数F_s主要涉及实体事件消息的数据结构与实体状态数据的参数化解析算法,需要根据各状态的特性分别设定。
4.2 非体感数据的存储与解析
将仿真实体状态进行归纳整理,梳理各类仿真实体状态数据的可能变更方式,形成实体状态事件消息清单,如表3所示。
表3 实体状态事件消息清单
(1)实体位置状态
实体位置状态的事件消息记录实体 ID、实体的移动路径及实体的移动速度。其中,实体的移动路径需要记录移动路径中的每一个路径节点位置,任意两个路径节点之间实体做直线移动。每当实体重新进行寻路计算时,会产生一个新的实体位置状态事件消息。
解析实体位置状态时,根据时间参数t对实体路径进行位置插值采样,以此作为实体位置状态的等价解算函数。首先,根据实体的移动速度,计算在时间t,实体位于哪两个路径节点之间。该计算可通过对路径节点以抵达时间顺序排序后,采用二分搜索算法计算得到。之后,计算在时间t,实体完成位移的百分比,可通过对时间t进行归一化得到。最后,根据上一步计算的位移百分比,计算出实体的当前位置。
(2)实体朝向状态
实体朝向状态的事件消息记录了实体 ID、实体朝向两项数据。当实体朝向发生改变时,会产生一个新的实体朝向状态事件消息。该事件消息直接获取实体ID与新的实体朝向状态数据,并记录于事件消息中。
解析实体朝向状态时,由于实体在状态持续时间内不会发生朝向改变,因此实体朝向状态的等价解析函数与时间t无关,可直接返回事件消息记录的实体朝向。
(3)实体动画状态
实体动画状态的事件消息记录了实体ID、实体动画ID及动画播放时间(即,完整播放一遍动画所需的时间)。实体动画状态是实体行为状态的直观表现。每当实体行为发生变化时,实体的动画状态也会相应改变,产生一个新的实体动画状态事件消息。事件消息获取实体ID、实体动画ID及动画播放时间,记录于事件消息中。
解析实体动画状态时,根据时间参数t对实体动画序列进行插值采样,以此作为实体动画状态的等价解算函数。首先,计算在时间 t,实体动画播放时间占动画序列总长度的百分比。如果时间t不超过动画序列单次播放所需时间,则直接计算时间百分比;如果时间t超过动画序列单次播放所需时间,则考虑动画循环播放的情况,需要从时间t减去已完成的动画播放时间,再计算时间百分比。然后,根据时间百分比对动画序列进行线性插值采样,获取当前实体动画状态。
(4)实体生成与销毁状态
实体生成状态的事件消息可以删除,改为通过解析实体其他状态,替代实体生成状态的解析,以进一步优化压缩非体感数据的存储编码。当能够解析出实体位置、旋转等其他状态时,表明实体存在,需要生成实体,反之实体不存在,应销毁实体。
5 结束语
本文研究了基于虚拟仿真的多人协同训练数据存储技术。针对体感数据,形成了高效的压缩编码能力和合批存储能力,有效降低训练数据在网络传输与存储访问时对系统产生的数据处理压力。针对非体感数据,提出了训练数据的参数化解析机制,实现基于时间参数的实体状态解算能力。在军事仿真训练领域,该研究成果将有效支撑虚拟仿真训练系统的复盘与评估,帮助用户深入了解训练情况,开展训练分析,从而提升训练效能。