,,, ,
(海军航空大学 青岛校区,山东 青岛 266041)
在海军“走向深蓝”战略指引下,依托模拟器开展飞行仿真训练已成为部队不可或缺的训练手段,部队需求也从体验式、程序性操作训练上升到战术层面协同作战训练,迫切要求通过模拟器这种相对廉价的训练方式使人员更高效的掌握战法,以快速提升我军战斗力。在此背景下,多模拟器在复杂电磁环境下联网对抗训练已经成为飞行仿真的重要方向。飞行仿真中,视景系统是一个关键组成部分,直接影响着飞行仿真系统的整体逼真性和任务覆盖率,逼真的视景环境可以使飞行员感受到更真实的战场环境。视景系统基于虚拟现实技术实现,提供一个基于真实模型的地形地貌,以及影响武器效能的自然环境,演示各武器分系统的仿真结果,表现战场敌我双方的对抗场面。在完成某型战斗机分队级战术仿真开发过程中,发现多台模拟器进行联网编队或对抗仿真时,在本地模拟器视景中观察远程模拟器时,当距离很近时会发现邻近对象会出现不规则图像抖动现象,严重影响了仿真效果,丧失了沉浸感和逼真度,很难达到训练要求。
对于图像抖动问题,主要涉及到视频图像的电子稳像处理,文献[1]提出一种基于相邻帧补偿的高速运动目标图像稳像算法,结合自适应中值滤波方法和灰度化直方图均衡方法对图像进行预处理,用尺度不变特征变换(SIFT)算法提取视频图像中的特征点,利用仿射模型求解运动参数,采用Kalman滤波对视频图像中的正常扫描进行滤波,最后用相邻补偿方法将图像的前一帧作为参考帧对当前帧进行参数补偿,实现了高速运动目标的视频图像电子稳像处理;文献[2]提出了一种基于预先划定一个或多个目标匹配区域的颜色直方图匹配算法来消除干扰位移。针对虚拟环境下的图像抖动问题,文献[3]针对精确头部追踪中的时间延迟和图像抖动问题提出了一种两步预测算法消除虚拟环境的中图像抖动。针对虚拟环境中引起图像抖动的原因,徐勇波[5]认为是由数据帧不同步和视点坐标转换中数据不平滑引起的;陈学文[6]和李尚林[4]认为在大场景渲染中的单精度浮点数的低精度会导致的图像抖动和撕裂问题。王炜[7]在研究基于飞参开发虚拟飞行再现系统时发现由于飞参数据采样频率较低及异常值会引起视景抖动。
本文所针对的问题与文献[5]类似,文献[5]采用七点滑动平均算法处理基本消除了抖动现象,应用过程发现该方法需要缓存20个仿真数据,对系统实时性造成影响,不能满足训练要求。因此,本文首先对作为问题背景的某型战斗机分队级战术训练仿真系统及出现的视景抖动现象进行了简要说明,进一步分析了引起视景系统图像抖动的原因,并给出了基于加权滑动平均滤波算法的视景抖动消除方法,测试表明:基于该方法不但消除了视景抖动现象,而且对系统仿真的实时性影响不大。
针对某型战斗机开展分队战术模拟训练的需求,开发了仿真训练系统,该系统由多个仿真训练单元组成,每个单元是一个半实物模拟器,由模拟座舱、多通道视景显示屏、仿真计算机等硬件设备组成。每个仿真训练单元还包括雷达模型、电子对抗模型、武器模型、硬件采集系统、飞控解算系统以及视景显示系统等多个软件模块,多个模块通过总线系统以可插拔的形式进行通信和交互。仿真训练单元之间又同时连接到联网服务器上,通过联网服务器进行数据交互。系统中的战场环境模型、蓝军CGF模型、态势显示系统以及记录回放系统同时通过联网服务器连入训练网络中。为保证实时性要求,联网服务器采用原生的套接字进行通信。总控台通过组播网络对多个仿真训练单元进行控制。基于该系统可以开展战斗机1对1、1对2等空中格斗战术科目训练。系统总体结构如图1所示。
图1 分队战术训练仿真系统总体结构
在系统开发过程中,发现在开展战斗机编队飞行或进行对抗训练时,视景中的远程模拟器在视景中的运动图像存在明显抖动现象。具体表现为,在仿真训练单元1的视景显示系统中观察仿真训练单元2模拟器运动时,当相对运动速度较快且两者距离较近时,单元2在视景中出现不规则抖动,这对于开展分队级战术模拟训练是不可接受的。
现实飞行训练中显然不会出现视景抖动的重影现象,在模拟训练中出现该问题根本原因在于分布式虚拟环境中的时空不一致问题。所谓时空不一致是指分布式虚拟环境中各节点由于时钟不同步、网络延迟等原因,不同节点对虚拟环境的时间与空间耦合关系的认知不一致[8]。
现有的典型时空一致性控制技术主要有本地滞后技术、推算定位技术、时间扭曲技术、实体迁移技术、异地状态延迟技术、分层控制技术、滞后状态同步技术等[9]。例如支持DIS协议的分布式虚拟环境支撑平台提供了推算定位技术,可以减轻网络负载,隐藏部分网络延迟,从一定程度上缓解了分布式虚拟环境的时空一致性问题;支持HLA/RTI协议的时间管理服务则通过数据过滤等技术对各仿真节点的逻辑时间推进进行同步,保证事件接收满足时间戳顺序。
以上技术一般提供保证仿真过程中的例如开火、爆炸等离散性事件在各仿真节点按照因果顺序发生的机制,确保时空因果顺序的一致性,但对于实体状态连续变化所涉及到的时空一致性问题没有给出针对性的保证措施。为解决上述时空不一致问题,本系统通过为每个节点的状态数据添加时间戳,并由联网服务器向所有节点发送全局时间进行时间同步,保证所有节点按照全局时间进行推进,从而解决了错帧和跳帧问题。但由于多个计算模型是多步长推进的,网络延迟也不稳定,且各仿真计算模型的仿真度也是有限,因此即使保证了状态数据的前后顺序正确也无法消除本地模型与远程模型之间数据交互(本系统中主要体现在坐标变换)存在的误差。这种误差起源于不同仿真模型的逼真度无法统一以及仿真数据传输延迟时间不能准确预测。客观存在的误差对分布式虚拟环境的时空一致性产生了相关影响,根据误差理论可知,系统误差是无法根本消除的。
对于一般的仿真训练过程而言,这种由不同模型数据交互误差所引起的时空不一致的影响是可忽略的。由于飞机运动速度较快,当这种交互性误差大于某一个阈值时就会在视觉上产生影响因而带来视景上的图像抖动,此时这种影响就不能忽略。在这种视景图像抖动不能根除的情况下,对仿真数据进行处理进而减小误差所带来的影响是消除抖动的必行之路。
(1)
d′=d+(-1)nσd
(2)
表1 抖动阈值-相对距离关系表
由测试结果可知:视景抖动随两仿真实体的相对距离d的增大非线性减小;当相对距离d在500米以上时视景抖动的影响可忽略不计。图3和表1可作为判断消除算法有效性的依据。
由以上分析可知,分布式仿真计算模型之间的数据交互时会产生误差从而出现数据抖动,当数据抖动达到一定程度时会在视觉上视景抖动现象。因此有必要采取措施对交互数据进行平滑处理。文献[5]采用直线拟合的方法进行平滑处理,该方法将滑动窗口取为20个历史数据间隔,对这20个历史数据进行平滑后再由视景进行显示,该方法有效去除了视景抖动,但是缓存数据太多,带来了100ms以上的延迟,这不符合本系统关于实时性要求的指标。因此本文提出了一种基于加权滑动平均滤波视景抖动消除方法,该方法在保证实时性指标的前提下能有效的消除视景抖动。
滑动平均滤波法就是相当于有一个固定长度为L的滑动窗口,沿离散时间序列滑动。每滑动一个采样间隔,窗口前面进入一个新的数据,窗口后面去掉一个旧的的数据,这样在窗口始终有L个“最新”的数据。只要每次在滑动后把窗口的L个数据进行算术平均,就可得到一组经过滑动平均后滤波后的新序列[10],其表达式为:
(3)
式中,L为滑动窗口的宽度。滑动平均滤波相当于一个低通滤波器,衰减了较高频率的信号,对数据起到平滑的作用。通过合理设置窗口宽度,就可以在抑制噪声的同时尽可能保存信号,从而达到提高信噪比的目的。对周期性干扰有良好的抑制作用,平滑度高,适用于高频振荡的系统,但灵敏度低,对偶然出现的脉冲性干扰抑制作用较差,不易消除由于脉冲干扰所引起的采样值偏差。
针对滑动平均滤波灵敏度低的问题,对不同时刻的数据加以不同的权值,称为加权滑动平均滤波,其表达式如下[7]:
(4)
式中wp.n-k是数据x[n-k]对应的权值。通常是越接近现时刻的数据,权取得越大,给予新采样的权系数越大,则灵敏度越高,但信号平滑度越低。
本文要处理的仿真数据包含了高频抖动的噪声,目的是要尽可能抑制噪声以得到相对平滑的数据,并可通过调整权值以减小仿真的实时性的影响。对仿真数据的平滑在图1所示的各仿真单元中的视景显示模块进行,基于加权滑动平均滤波的抖动消除方法总体流程如图3所示。
图3 基于加权滑动平均滤波的视景抖动消除方法流程图
在仿真开始前,需先设置滑动窗口宽度L值和对应的权值集合wp,首先从总线获取远程模拟器状态数据,远程模拟器状态数据是多个远程模拟器的状态数据数组,数组每个成员是一个结构体,定义如下:
struct simulator_state
{
double lat; //纬度
double lon;//经度
float alt; //高度
float H; //偏航角
float P; //俯仰角
float R; //滚转角
};
获取的上述数据是基于全局坐标系的,需转换为在本地模拟器机体坐标系下的位置数据,将转化后的数据压入样本队列中,所述的样本队列长度等于滑动窗口宽度L。初始时,样本队列中数据个数小于L,则不断压入新的数据直到填满。填满后每次新来数据都进行平滑滤波处理,处理后的数据再变换为全局坐标并在视景中进行显示,注意视景显示后还要切换到本机视角。
样本宽度L和权值集wp可根据测试获得,本系统中设置L=10,wp={4,3,2,2,2,1,1,1,1,1}。
实现时,在图1所示的分队战术训练仿真系统的每个仿真训练单元中的视景显示模块中完成。仿真开始前设置好窗口宽度和权值数组,并设置缓冲池以队列的方式存放缓冲数据。仿真开始后在一个while循环中完成,首先接收联网服务器发送过来的其他仿真节点的状态并转化为本地坐标,然后判断缓冲池是否已满,如果已满则对接收的数据进行滤波,滤波后将状态数据转换为全局坐标并在视景上显示;如果不满足则将接收的数据压入缓冲池中。
采用C++语言实现上述过程,处理的伪代码如下:
void FilterAndShow()
{
int L=10;//窗口宽度
int[10] Wp={4,3,2,2,2,1,1,1,1,1};//加权值
list< simulator_state > SimulatorPool;//缓冲池
while(1)
{
RecvRemSimState();//接收远程数据
if(SimulatorPool.size() { push_backPool();//向缓冲池压入数据 } else { smoothFilter();//调用filter()函数 show();//在视景上显示 } sleep(20);//仿真周期 } } 伪代码中的smoothFilter()函数图3右侧的平滑滤波处理过程:首先将待处理的数据压入样本队列头部,同时将样本队列尾部数据弹出,然后迭代滑动窗口宽度L次,求出样本数据的加权和,最后根据公式(4)将得到的样本数据加权和除以权值和得到平滑后的数据。 平滑滤波处理的C++算法代码如下: void filter(float* input,float *output,VALUE_LST * pSample,COE_ARRAY *pIndex,int COE_SUM) { //进一个新数据并弹出旧数据 pSample->push_back(*input); pSample->pop_front(); *output = 0.0; //求加权平均值 for (int i=0;i<(int)pSample->size();i++) { *output += (*pIndex)[i] * (*pSample)[i]; } *output /= COE_SUM; } 基于如图1所示的系统架构进行测试,两个模拟器单元进行互联,由两名飞行员开展相距100 m(一般的编队距离)的编队飞行,系统飞控解算模型仿真周期是20 ms,视景刷新率是50 fps。进行4次测试,分别是:(1)不进行任何处理;(2)采用文献1给出的七点滑动平均算法;(3)采用算法参数为L=10,wp={1,1,1,1,1,1,1,1,1,1}的不加权的滑动平均滤波算法;(4)采用参数为L=10,wp={4,3,2,2,2,1,1,1,1,1}的加权滑动平均滤波算法。得到3种测试下高度维上相对坐标变化如图4所示。 图4 4种测试下高度维相对坐标数据对比 分析图4可知: 2)在实时性方面,文献[5]中的七点滑动平均需要缓存20个数据且要同时对这个20个数据进行处理得到新值后才能在视景进行显示,因此其带来较大延迟,如本系统仿真周期是20 ms,则最长需延迟420 ms。虽然可通过多线程的方式进行并行处理,但总体还是要大于100 ms,不符合本系统的实时性指标。而对于滑动平均滤波算法,其基于滑动窗口,得到的数据就是当前值,可直接进行显示。由于滤波是对真实数据进行了平均处理,因此满足实时性指标就转化为对当前值的敏感度,通过加权处理要比直接进行平均滤波更能体现当前值影响。图5是两种滤波方法处理后的值与当前值得偏离情况对比,很明显加权滑动平均滤波算法得到的数据比滑动平均滤波算法得到的值更接近原始值。 图5 两种滤波处理值与真实值偏离对比 由以上分析可知,采用基于加权滑动平均的视景抖动消除方法对消除视景抖动是有效的,且对系统的实时性的影响在仿真训练的接受范围之内。 可知,由于分布式虚拟环境下的各实体连续状态的时空不一致性问题在飞行仿真器联网对抗仿真中具有特殊形式的表现,即本地视景中显示远程模拟器的不规则抖动现象。本文首先论述了引起视景抖动的原因,并说明了完全消除的不可能性,定量描述了数据高频抖动何时会影响到视景的视觉显示。并给出了基于加权滑动平均滤波的视景抖动消除方法,有效的解决了抖动问题,此方法可进一步推广到解决其他分布式虚拟环境下数据抖动问题。3.3 测试结果及评价
4 结语