基于OSG的三维雷达探测范围构建与优化实现
2018-05-09王家润李小娟
任 菲,王家润,李小娟,尹 辉
(华北计算技术研究所,北京 100083)
0 引 言
随着军事信息技术的不断提高,战争形态不断发生改变,电子对抗已经成为了现代战争的序幕与先导,并贯穿于战争的全过程[1]。雷达对抗是电子对抗的重要组成部分,对抗过程中使用雷达进行目标检测、目标跟踪、目标定位、目标速度测量、目标识别、精确制导等。在三维战场的构建中,绘制三维雷达探测范围,展现三维作战态势,能够科学直观地展现雷达探测范围,有助于指挥员准确判断态势,合理部署调配电子对抗力量[2]。本文使用OpenSceneGraph(OSG)进行三维开发。OSG是基于OpenGL的三维渲染引擎,具有高性能、跨平台、开发便捷等特点,是虚拟仿真行业软件开发的首选之一[3]。
三维战场中的雷达种类繁多,包括预警雷达、警戒雷达、机载雷达、气象雷达、敌我识别雷达等,因此在三维作战态势的构建过程中,部署的雷达数量大、种类多,且需要根据数据驱动实时更新位置、状态。三维雷达探测范围的绘制必须具有通用、高性能的特性,才能满足应用的需求。采用多线程技术使程序分为多个单元并行处理,可以充分地利用CPU的空闲时间片,提高进程的整体运行效率[4]。
本文基于OSG的坐标系,参照文献[5]中提出的雷达三维探测范围的简化生成方法,进行改造扩展,实现雷达探测范围的通用计算方法,雷达探测二维包络线支持用户输入任意形状,垂直方向图函数支持用户输入和函数类型选择2种方式。对三维雷达探测范围的计算方法进行优化,降低算法复杂度。基于OSG的多线程技术对雷达探测范围的绘制并行处理,实现三维雷达探测范围的高性能展现。
1 雷达探测范围的通用计算
雷达探测范围定义为对目标进行连续观察的三维空域的区域边界[6]。在三维空间中对雷达探测范围数据进行离散化,在俯仰角、方位角2个方向进行采样,得到由离散点组成的雷达三维区域边界。在三维场景中生成三维网格,来表示三维探测范围的区域边界。
1.1 基于OSG坐标系构建
参照OSG的坐标系,X正方向向右,Y正方向朝里,Z正方向向上。O为坐标原点,假设雷达装备放在O点,得到雷达探测范围三维空间的构造如图1所示。雷达的探测区域上的某一点P,在XY平面内,与X轴正方向的夹角为β,与Z轴正方向夹角为θ。
图1 OSG坐标系下的探测范围
Pm,P为同一垂直面上的2点,其中Pm点为该垂直面上探测距离最大的位置。参照文献[7],雷达探测范围的简化计算方法为:
R=Rm×f(θ)
(1)
其中,R是P点到原点的距离,Rm是Pm到原点的距离,f(θ)是雷达的方向图函数。在OSG的坐标系中,雷达探测区域上各点x,y,z分量的计算如式(2)所示:
(2)
将公式(1)代入公式(2),得到雷达探测范围的点:
(3)
1.2 通用数据支持
雷达数据RadarData的数据结构如图2所示。RadarData存储雷达装备的ID,位置(Lon,Lat,Hgt),二维包络线pRecoArea,垂直方向图函数采样pFVertical。
图2 雷达数据结构
RecoArea的结构如图3所示。RecoArea存储区域几何类型;RegionType:0-扇形,1-圆形,2-多边形;方位角集vAzimuths;距离集vDistances;是否闭合bClosed。
图3 二维包络线数据结构
FVertical的结构如图4所示。起始俯仰角为dPitchStart,dPitchEnd;雷达天线垂直方向图采样点集vFs。如果输入的vFs为空,则使用垂直方向图函数计算得到起始俯仰角和采样点集。
图4 垂直方向图函数采样数据结构
对于圆形和扇形,vDistances中只有一个值,即半径。因此对于β取任何值,都有Rm=vDistances[0]。
对于圆形,方位角为[0,2π]。扇形在vAzimuths中存储起始方位角:vAzimuths[0],vAzimuths[1]。β在起始方位角之间采样,θ在起始俯仰角dPitchStart,dPitchEnd之间采样,构建雷达探测范围。
对于多边形,给定了一组方位角对应的一组距离值。当β=vAzimuths[i]时,Rm=vDistances[i]。
1.3 计算方法实现
本文使用垂直方向图函数计算得到起始俯仰角和采样点集。雷达按照方向图类型分类为全向雷达、高斯型雷达、sin(X)/X型雷达、平方余割包线型雷达等。不同的雷达,它们的方向图函数各不相同[8]。本文使用sin(X)/X型雷达进行计算,其方向图函数如式(4):
(4)
{for(10-6<|θ-Aelev|Amax)
{
P.x=Rm×f(θ)×sin (β)×cos (θ)
P.y=Rm×f(θ)×cos (β)×cos (θ)
P.z=Rm×f(θ)×sin (θ)
}
}
其中,Rm=vDistances[0],绘制效果如图5所示。
图5 圆形雷达
图6 扇形雷达
二维包络线使用多边形数据,支持任意多边形数据。使用sin(X)/X型雷达的垂直方向图函数进行绘制,绘制效果如图7所示。
图7 多边形雷达
2 计算方法优化及实现
2.1 方法优化
正弦余弦等三角函数计算复杂,消耗CPU时间较多,通过减少三角函数计算,可极大减少计算时间。俯仰角、方位角2个方向上分别采样计算,从而降低for循环的次数,提高计算性能。将公式(3)中与俯仰角θ相关的部分进行整理,公式变形为:
(5)
将与θ相关的部分提取出来,作为垂直方向函数在x,y,z方向的分量,记为FV.x,FV.y,FV.z,则有:
FV.x=FV.y=f(θ)×cos (θ)
FV.z=f(θ)×sin (θ)
则公式(5)变形为:
(6)
然后将公式(6)中与β相关的部分进行整理,得到雷达探测值在x,y,z方向的分量,记为FH.x,FH.y,FH.z,则有:
FH.x=Rm×sin (β)
FH.y=Rm×cos (β)
FH.z=Rm
则公式(5)变形为:
(7)
2.2 优化后方法实现
通过优化,将俯仰角与方位角相关的计算分开处理,雷达探测范围的计算分成3个阶段:
1)俯仰角方向采样计算。由于FV.x=FV.y,因此在俯仰角方向采样时,只需计算得到FV.x,FV.z的值:
for(10-6<|θ-Aelev|Amax)
{
FV.x=f(θ)×cos (θ)
FV.z=f(θ)×sin (θ)
}
2)方位角方向采样计算。圆形雷达的Rm值不随方位角变化,为固定值,FH.z不需进行计算。因此在方位角方向采样,只需计算得到FH.x,FH.y的值:
{
FH.x=Rm×sin (β)
FV.y=Rm×cos (β)
}
3)使用2个方向采样计算的结果结合计算最终值。在俯仰角、方位角2个方向上采样,将FH,FV分量代入,计算得到三维雷达探测范围各点的值:
{
for(10-6<|θ-Aelev|Amax)
{
P.x=FH.x×FV.x
P.y=FH.y×FV.y
P.z=FH.z×FV.z
}
}
3 多线程优化
多线程开发是指从软件或者硬件上实现多个任务并发执行的技术。每个正在系统上运行的程序都可以视为一个进程(Proccess),每个进程包含一个或多个线程(Thread)。使用多个线程与主进程并行工作,可在程序中同时执行多个任务[3]。
线程的执行开销小,但是不利于数据的管理和保护。几个线程之间往往存在数据竞争,即它们同时读写一处内存数据。此时通常使用互斥体(Mutex)来完成线程之间的协调操作,当一个线程操作数据时,对该处数据加锁以阻止其他线程侵入。
3.1 多线程的绘制过程
雷达的多线程绘制如图8所示,有一个软件的主进程用于放入数据,针对每个雷达创建一个线程用于处理数据。主进程在接收到外部发来的数据后,转为本文定义的雷达数据类型RadarData。根据RadarData中的ID判断该数据应该由哪个雷达线程来处理。如果当前雷达还没有创建线程,则会创建该雷达线程,并启动它。对雷达线程中的数据进行加锁,删除之前的旧数据,放入当前数据,该操作会在雷达线程处理滞后的时候起到跳帧的效果,使得雷达线程一直处理最新的数据。雷达线程中有一个循环,不停地判断是否有需要处理的雷达数据,如果有,则对雷达数据进行处理,处理完毕后清除雷达数据。
图8 雷达的多线程处理流程
3.2 基于OSG的实现
OSG封装了跨平台的开源线程库OpenThreads,支持多线程的创建及管理。在这里主要使用3个类进行处理:Thread类、Mutex类和ScopedLock模板类。
Tread类即线程实现类,每派生一个Thread类就生成一个可独立调度的线程。Thread类结构如图9所示。
图9 Thread类结构图
Thread类主要函数的定义如下:
1)YieldCurrentThread:要求当前线程出让CPU控制权,交给其他正在等待的线程。
2)start:启动线程。此时将自动开始执行线程的run函数。
3)cancel:虚函数,用于终止线程的执行。
4)isRunning:判断线程是否处于执行状态。
5)run:线程执行的主程序,在这个函数中可以循环执行一段线程功能代码。
使用Mutex类即互斥体接口类处理数据的加解锁。当线程使用某一资源时,先使用互斥量加锁。ScopedLock模板类与Mutex配合出现,在其作用域内对共享资源进行加锁,作用域外则解锁。
基于OpenThreads创建线程类RadarTread,结构如图10所示。
图10 RadarTread类结构图
m_listRadarData用于存储待处理的雷达数据,m_mutexRadarData对雷达数据进行加锁,m_bDone用于存储是否完成了处理。通过重写run和cancel这2个成员函数,实现线程运行时和取消时的操作;通过调用start和cancel函数,可以启动或终止已经定义的线程对象。单个雷达线程的具体实现流程如图11所示。
图11 单个雷达线程的处理流程
单个雷达线程在主程序中被启动(start),随即RadarTread自动调用启动run函数,开启雷达线程的运行。run函数中是一个dowhile循环,循环处理雷达数据m_listRadarData。如果m_listRadarData不为空,就把m_listRadarData进行加锁,然后取出数据进行绘制,然后将m_listRadarData清空。是否结束循环使用m_bDone来标识,当m_bDone为true时,退出循环。直到主线程调用cancel函数,将该线程关停,m_bDone置为true,才会结束循环。在每次循环结束时,都会调用microsleep函数,给其他线程分配时间。
4 实验与分析
4.1 计算方法优化测试
针对第2章提出的雷达探测范围优化计算方法进行测试。假设β采样m次,θ采样n次,则优化前后的结果比较见表1所示。
表1 优化前后计算次数比较
计算内容计算次数(优化前)计算次数(优化后)f(θ)m×nnsin(β)m×nmcos(β)m×nmsin(θ)m×nncos(θ)m×nn
通过比较可以看出,算法改进后能够大幅度降低计算量,适用于实时性要求比较高、数据量比较大的情况。
使用VS2010编程,对算法改进前后的性能进行测试。对β,θ取不同采样次数,对优化前后,雷达探测范围计算所需的时间进行比较,实验结果如表2所示。
表2 优化前后的时间比较
β采样次数×θ采样次数优化前时间/ns优化后时间/ns90×30468.75312.50180×30937.50625.00180×601875.001093.75360×603593.752031.25
可见优化后速度得到了较大的提高。随着β采样次数×θ采样次数的增大,优化后的算法优势就更加明显,当计算雷达探测范围时,面对大量数据,该优化的方法更能满足实时性的要求。
4.2 多线程优化测试
在三维地球场景中,基于优化后的雷达探测范围计算方法,分别使用多线程、单线程2种方式绘制雷达探测范围,对本文提出的方法进行实验,验证性能。三维场景渲染性能采用帧率统计。视觉流畅的一般标准:帧率≥30。本文实验中开启垂直同步,最高帧率为60。
图12 三维场景中的性能测试
实验环境选用VS2010的VC++编程,三维图形引擎OSG使用3.0的版本。配置为i7-3770 CPU,4 GB内存。以圆形雷达的绘制为例进行验证,使用β采样90次,θ采样30次。每1秒更新一次雷达数据,对雷达探测范围进行重新绘制。在三维场景中绘制雷达探测范围的效果如图12所示。
通过设置每秒雷达更新的数量,比较单线程、多线程对雷达更新的性能支撑能力,具体结果见表3。
表3 单线程、多线程版本性能比较
每秒更新雷达数单线程版本/帧率多线程版本/帧率5405910305815235820857250.956300.7555
通过比较可看出,对于三维雷达探测范围,这种数据量比较大的三维网格构建算法,多线程具有明显的性能优势。在雷达数量达到20个以后,三维场景帧率急剧下降,尤其是雷达数量达到25个以后,三维场景渲染帧率很低,用户感觉较卡,实际工程中基本不可用。而此时,多线程版本性能的下降并不明显,仍然维持在55帧以上,用户体验非常好。
5 结束语
本文基于OSG坐标系,实现了三维雷达探测范围的计算方法。通过减少循环次数,减少对三角函数的计算,对计算方法进行优化。为了满足多部雷达实时更新的需求,基于OSG的多线程技术,实现了雷达对象之间的并行处理方法。通过对计算方法优化前后计算时间的实验,可以看出计算时间大幅度降低,优化后的效果非常明显。通过多线程优化前后的性能测试,验证了多线程的版本比单线程的版本渲染帧率较高,能够保障用户体验的流畅。本文研究的成果已在实际项目中应用,效果良好。
参考文献:
[1] 张伟. 电子对抗装备[M]. 北京:航空工业出版社, 2009:1-35.
[2] 陈鹏. 虚拟战场环境中雷达作用范围表现技术研究[D]. 长沙:国防科学技术大学, 2007.
[3] 王锐,钱学雷. OpenSceneGraph三维渲染引擎设计与实践[M]. 北京:清华大学出版社, 2009:320-325.
[4] 吴渝. 基于.NET架构的多线程组件技术研究与应用[D]. 重庆:重庆大学, 2005.
[5] 齐峰,刘雅奇,娄宁. 一种简化的雷达三维探测数据生成方法研究[J]. 计算机仿真, 2010,27(3):12-15.
[6] 张阳,何俊. 干扰下雷达三维威力范围可视化研究[J]. 电子信息对抗技术, 2011,26(6):73-77.
[7] 孟国明. 虚拟战场环境中雷达探测范围表现技术研究[D]. 长沙:国防科学技术大学, 2005.
[8] 杨超. 雷达最大探测范围三维建模和可视化研究与实现[D]. 长沙:国防科学技术大学, 2006.
[9] 姬涛. 基于P2P网络的多线程下载技术研究[J]. 电脑开发与应用, 2014,27(7):18-20.
[10] 李宇翔,龚光红. 基于HLA攻防对抗仿真中三维视景设计与实现[J]. 系统仿真学报, 2005,17(12):2961-2964.
[11] 林卫明,刘德权. 利用OpenGL技术实现雷达探测范围的三维显示[J]. 武汉理工大学学报(交通科学与工程版), 2002,26(1):72-75.
[12] 张徳锋,陈永光,郭玉霞,等. 雷达电子战三维实时视景仿真系统的设计与实现[J]. 电光与控制, 2005,12(4):79-80.
[13] 邱航,陈雷霆,蔡洪斌. 复杂环境影响下雷达探测范围三维可视化[J]. 电子科技大学学报, 2010,39(5):731-736.
[14] 白玉兵. 复杂环境下雷达探测范围可视化研究[D]. 长沙:湖南大学, 2013.
[15] 冯晓哲,杨瑞,王健,等. 雷达探测威力范围与三维可视化研究[J]. 现代雷达, 2015,37(5):74-78.
[16] 孙忠秋,程承旗. 全球经纬度网格的雷达探测范围真三维建模[J]. 测绘科学, 2017,42(6):144-148.
[17] 陈达,段耀峰,王剑. 地形影响下的雷达探测范围建模与三维可视化[J]. 地矿测绘, 2012,28(4):21-23.