赵文杰 刘镇瑜 霍烁烁 宋 磊 杨晓宇 霍江涛
(63891部队 洛阳 471000)
在某些任务中,需要组织多种机型、多架飞机进行协同飞行来构建典型应用场景,这些场景对飞机的飞行构型有严格的要求。在这些任务的组织实施中,构型的实时显示是指挥员指挥的重要依据。现有文献中主要研究无人机集群协同飞行的控制算法、多机协同的模拟训练系统、分布式控制架构系统等进行研究[1~6],缺少针对多种机型协同飞行构型与偏差实时显示的相关研究。本系统着眼实际需求,开展了基于实时数据接收分析、基于GIS的三维场景构建、三维坐标的二维分解显示等技术研究,构建了多机协同飞行空中构型实时显示系统,为指挥人员提供直观的显示效果,为其指挥决策提供了依据。
多机协同飞行空中构型实时显示系统需要对多机数据进行实时监控、更新、交互,达到多机协同构型显示实时性、同步性、稳定性等要求[1],其主要功能需求包括:
1)数据实时接收、处理。接收多机的实时测控数据,并进行数据处理,转换到统一坐标系中,计算同理论构型的偏差。
2)飞机位置与构型显示。根据飞机飞行数据,实时显示飞机在三维GIS中的位置与构型。
3)构型偏差实时显示。将三维坐标进行二维映射,在三视图中实时显示飞机实际位置与理论位置,并显示偏差值。
该系统主要分为数据接收分析处理和数据实时显示两个模块,其功能设计图如图1所示。
图1 软件功能设计图
数据接收分析处理数据接收分析处理模块主要负责接收数据,并对接收的数据进行解析处理,将飞机经纬高坐标转换到以某机为中心的站心坐标,并根据飞行方向,修正坐标系指向,得到相对坐标值,再根据理论构型计算出构型偏差。
数据的可视化模块主要负责数据实时显示,首先显示多架飞机的实时测控链路数据状况,其次在三维地理信息系统中显示飞机的实时位置与构型,最后以某机为坐标原点,实时显示其他飞机在前后、左右、高度三个方向的相对位置与偏差情况。
空间一点P在大地经纬高坐标系中的坐标(Lp,Bp,Hp),P点在大地直角坐标系中的坐标(Xp,Yp,Zp),所应用的计算公式如下:
其中,椭球在纬度Bp处的卯酉圈曲率半径(a是椭球的长半径,e是椭球的第一偏心率,WGS-84坐标系中:a=66378137.0 m,e=1/298.257223563)。
空间一点P在大地经纬高坐标系中的坐标(Lp,Bp,Hp),以某测站S为原点的站心水平面极坐标系(测站S在大地经纬高坐标系中的坐标是(LS,BS,HS),以测站S为原点的站心水平面极坐标系的坐标北与大地北的夹角为γ,如果以大地北为坐标北,则γ=0°)。P点在以测站S为原点的站心水平面极坐标系中的坐标(rp,αp,βp)。
大地经纬高坐标到站心水平面极坐标变换算法的功能分解具体的转换步骤如下:
步骤1:利用上述式(1~3),P点在大地直角坐标系中的坐标(Xp,Yp,Zp)。
步骤2:利用上述式(1~3),测站S在大地直角坐标系中的坐标(Xs,Ys,Zs)。
步骤3:P点在以测站S为原点的站心水平面直角坐标系中的坐标(X'p,Y'p,Z'p)。
步骤4:P点在以测站S为原点的站心水平面极坐标系中的坐标(rp,αp,βp)。
因理论构型中站心坐标水平方向夹角的基准并非是与正北方向的夹角,而是与航线方向的夹角,俯仰角与距离均不变,因此上述计算公式中αp应减去航向与正北方向的夹角θ,即
所以P点在以测站S为原点的站心水平面构型极坐标系中的坐标(rp,αp',βp)。由站心极坐标转换为空间直角坐标(Xn,Yn,Zn)的公式为
假定飞机0处于P点位置,飞机n相对于飞机0的理论坐标为(xn,yn,zn),则飞机n相对于飞机0与理论构型的偏差为(Xn-xn,Yn-yn,Zn-zn)。
系统采用Microsoft Windows 7操作系统进行开发,以Visual Studio 2010作为开发平台,采用C#编程语言,具体开发方法如下:
1)采用。Net中Socket类方法进行网络通信编程,实现多机测控链路的实时位置数据接收。
2)将接收到的数据进行解析处理,通过坐标转换,将大地坐标系下的经度、纬度和高度坐标转换为以参考机为站心的水平面极坐标,再根据已知的理论构型数据计算出实际偏差值。
3)利用STK软件中的三维GIS进行空间构型显示,调用STK的组件对象模型(COM)接口进行二次开发,实现应用程序嵌入STK三维显示窗口,基于数字地球进行精准定位,实现多机位置实时更新与构型实时显示。
4)利用基于C#构建的自定义图表控件,通过三视图的方式显示飞机的理论相对位置、实际相对位置关系、报警阈值范围以及与理论构型的偏差。
4.2.1 数据分析处理模块
系统接收到的数据一般为大地坐标系下的经度、纬度和高度坐标数据,以四机同飞为例理论构型一般给出的形式如图2所示:“以飞机0为基准,飞机1在飞机0的正前方1000m靠左300m的位置,飞机2在飞机0正前方1000m靠下300m的的位置,飞机3在飞机0正前方1000m靠下300m且靠左300m的位置”。若要计算出与理论构型的偏差,需要将其他飞机的经纬高坐标转换为以飞机0为原点的站心坐标,计算方法在本文第3节的坐标转换算法中已说明。
图2 四机协同飞行理论构型示意图
4.2.2 基于GIS的三维构型态势显示
卫星工具包(STK)是由美国Analytical Graphics公司(AGI)开发的一款在航天领域处于领先地位的商业分析软件[7]。STK通过精确的二维和三维视觉效果和分析数据输出能够帮助用户增强对情景的感知和理解[8]。该软件支持用户进行二次开发,用户可以在程序中调用STK界面或将STK引擎嵌入程序[9]。
本系统为实现多机位置实时更新与构型实时显示,利用STK的组件对象模型(COM)接口进行二次开发[10],实现应用程序嵌入STK三维显示窗口,基于三维数字地球进行飞机的精准定位与显示,主要过程如下:
步骤一:场景编辑。打开STK软件构建相应的三维场景,如加载地形及地图影像、添加飞机对象并命名、添加飞机三维模型、设置场景及飞机对象为实时模式。
步骤二:构建程序环境。首先添加飞机VS2010工程中添加调用STK对象模型的COM组建引用库,包括 AGI.STKObjects、AGI.STKUtil、AGI.STKVgt、AGI.STKX、AxAGI.STKX[11];
步骤三:加载三维场景。首先程序初始化并构建STKObjectRoot对象,主要代码为AGI.STKObjects.AgStkObjectRoot STKRoot=new AGI.STKObjects.AgStkObjectRoot()。其次加载三维场景,主要代码为STKRoot.LoadScenario(stkfilepath),其中stkfilepath为已编辑并保存的STK场景.sc工程文件路径;
步骤四:实时构型显示。启动软件接收飞机数据并解算后,通过STK提供的Connect接口与STK进行交互,实现多架飞机的实时移动。主要代码如下为:string strCommand="SetPosition*/Aircraft/"+FeiJiName+"LLA"+"""+day.ToString("dd MMM yyyy H:mm:ss.fff",System.Globalization.CultureInfo.CreateSpecificCulture("en-US"))+"""+L.ToString()+""+B.ToString()+""+H.ToString();STKRoot.ExecuteCommand(strCommand)[12]。其中 FeiJiName为需要实时驱动的飞机名称,L、B、H分别为当前飞机的纬度、经度、高度值。
程序运行中的三维实时构型图如下图3所示。
图3 基于GIS的4机构型三维构型图
4.2.3 自定义构型显示控件
为清晰显示多机协同构型同理论构型的位置偏差,将三维坐标进行二维映射,分别从侧视、俯视和后视三个角度显示飞机构型,主要显示内容包括各飞机理论位置、实时位置、飞机编号和报警阈值范围等,为了便于分工和快速开发需求,采用构建自定义构型显示控件的方式进行开发。
本系统在Visual Studio 2010下使用C#开发。NET自定义构型显示控件,先将Window控件库UserControl基类集成一个类,通过设计视图添加所需要的控件功能[13],利用双坐标模式,实现了不同颜色标号点迹、不同粗细线型等的绘制以及坐标标尺的动态范围自动调整功能,另外提供显示网格、局部放大等功能,极大限度地实现了代码重用和程序的快速开发,在该控件的设计实现中,采用坐标换算来实现显示和局部放大。控件显示效果如下图4所示。
图4 自定义构型显示控件
本系统运行效果如图5所示,界面均分为四个区域,左上角以标签的形式来进行构型偏差值显示、数据状态显示、三维构型(理论)显示、动态构型显示以及系统参数设置等,构型偏差主要显示转换到某机为原点的坐标系中相对理论构型在前后、左右、高度的偏差值,数据状态主要显示飞机的数据接收状态,三维构型则实时显示飞机在三维GIS中的实时位置构型,动态构型主要显示构型的理论要求,参数设置则用来设置系统运行、计算需要的一些参数,如系统接收网络设置、数据刷新率、报警阈值、理论构型参数设置等。
图5 系统运行界面效果图
本文根据任务中对多机协同飞行空中构型实时显示的要求,结合现状,基于.NET开发平台,利用C#语言和STK软件的二次开发,采用模块化、组件化的设计方法,运用了多种坐标转换算法,设计了多机协同飞行空中构型实时显示系统。系统实现了网络数据实时接收、基于三维GIS的构型实时显示、三视图相对位置实时显示、理论偏差值实时显示、位置偏离报警提示等功能,能够有效显示多机实时构型,为指挥决策提供了有力支撑。