潜艇天文导航测天视景仿真关键技术
2019-11-16王洁王凯弘李兴东范学满
文/王洁 王凯弘 李兴东 范学满
1 引言
潜望镜是一种高精度的大型军用光学仪器,是潜艇必须配置的重要装备之一。战时潜望镜测天导航是一种自主定位手段,加强潜望镜的测天训练显得尤为重要。但实际训练中,往往受到天气的影响,很难达到预期的训练效果。另外用实装进行训练,设备磨损严重,损耗较大。在模拟训练中,操作者脱离了真实的环境,这样就有必要提供能表示真实环境的视景仿真系统,其中环境效果生成及潜望镜的测天功能模拟实现占有比较重要的地位。本文通过潜望镜视景实用化研究,解决潜望镜视景模拟中的几个主要问题,为受训人员提供真实感强的操作环境。
2 三维视景实时驱动技术
目前,基于底层的三维图形库OpenGL,出现了许多高层的三维视景开发环境。当前支持实时三维视景处理的软件包括IRIS Performer,MultiGen-Paradigm Vega,CG2 Vtree,Lockheed Martin SE/View Quantum3D OpenGVS等。我们选用了功能比较强大的OpenGVS。
OpenGVS是Quantum3D公司的产品,用于3D场景图形视景仿真实时开发。它具有很多优点:易用性和重用性好,巨大的编程灵活性和良好的可移植特性。OpenGVS提供各种软件资源,利用资源自身提供的API(Application Programming Interface,应用程序接口)可以很好地以接近自然和面向对象的方式组织视景诸元和进行编程,来模拟视景的各个要素。图1所示为OpenGVS的软件资源及其相互关系。
OpenGVS既为用户提供高层的场景管理API,同时又提供了对点、线、面等基本图元的支持。开发人员可用系统提供的对象引入工具,引入在其他标准建模工具中已经建好的三维几何模型。用系统提供的场景工具、光源工具、雾工具、相机工具、通道工具、帧缓存工具等创建场景,控制场景中物标的运动。其中,相机工具是我们经常用到的一种重要工具。它主要用来控制动态场景的显示,一般来说,简单的相机只包含单一的相机平台。但对于某些复杂视景的需要,例如俯视、仰视,或相对于一个特定点偏移与定位相机,就需要为其相继创建额外的分层控制平台。
依据OpenGVS的软件层次(如图2所示),在开发潜望镜视景驱动程序时,将已经建好的模型通过OpenGVS提供的对象引入工具(Import Facility),引入到系统中进行显示。视景的动态控制则是根据具体功能实现的要求,通过设置通道、相机等工具来实现。另外,也可用OpenGVS提供的底层函数实现其算法,以满足特殊应用的需要。
图1:OpenGVS软件资源及相互关系图
图2:OpenGVS软件层次图
3 潜望镜测天环境仿真
所谓潜望镜测天导航是指潜艇处于潜望深度航行时,使用潜望镜导航装置进行测天定位,确定潜艇的地理位置。在经过改装的模拟潜望镜中,功能的实现由驱动软件控制,星空视景变化的控制需符合运用实装测天的一般规律,这里重点介绍与测天有关功能的实现方法。
3.1 潜望镜俯仰观测
实现潜望镜的俯仰观测功能,即俯仰角度范围从-10度到+70度,是调用了OpenGVS相机工具的另一个函数GV_cam_set_rotation_x()来实现系统相机绕X轴的转动。当操作者转动俯仰瞄准定位机构的俯仰定位手柄时,通过数模转换装置将转动的模拟量转换为数字量,潜望镜通道计算机实时地将该数字量作为函数GV_cam_set_rotation_x()的旋转角度参数输入,以匹配相应角度的视景。
表1:天体方位每分钟变化量
图3:OpenGVS坐标系
3.2 潜望镜滤光镜观测
潜望镜光学系统中设置了滤光镜,用于在各种情况下提高观察效果。为了在系统中模拟实现滤光镜效果,运用了计算机图形学中的深度缓存(Z-Buffer)技术。Z-Buffer是帧缓存中的一种,它用来存储画面上每个像素内可见表面采样点的深度,是一个独立的深度缓存器。在计算机绘制图形时,将待处理的景物表面上的采样点变换到图像空间,计算其深度Z值,并根据采样点在屏幕上的投影位置,将其Z值与已存储在Z缓存上相应象素处的深度值进行比较。如果采样点位于Z缓存记录的可见点之前,则将该采样点处表面颜色值填入帧缓存相应的像素,同时用其深度值更新Z缓存存储的深度值。否则,不写入也不更新。
OpenGL中投影平面定义成视见体的前裁剪窗,位于前裁剪窗上的物体的深度值最小。于是在前裁剪窗位置上绘制两个可切换的半透明多边形,并且保证多边形的大小能完全遮住整个屏幕窗口。当系统需要使用滤光镜功能时,就将其中一个多边形显示在视景系统中。由于多边形的深度值最小,它将完全显示出,而视景中的其他物体则被该多边形遮挡,只显示一种被某种颜色遮罩的效果,从而实现滤光镜功能。
具体实现时,利用MultiGen Creator先将滤光镜多边形的模型建好,再利用视景驱动程序OpenGVS的Import工具将该模型引入到视景系统中,并将模型设置在前裁剪窗的位置。为了保证能完全遮罩视景系统中的其他物体,可以将滤光镜多边形拉伸一定的长度。
3.3 潜望镜测天环境实现
3.3.1 模拟人工水天线
实际观测天体过程中,环境参数是不断变化的,例如,当海面有涌浪时,人工水天线虽一直保持水平,但观测者却随艇体摇摆。在虚拟环境中欲使操作人员有真实的测天感觉,就必须人工水天线相应变化,包括因相对运动引起的变化和实际情况中人工水天线的抖动,这对观测结果的影响往往较大。因此,需要研究建立人工水天线的相对运动模型。
实际艇上水平陀螺仪模拟的人工水平标线零位误差主要由潜艇摇摆和地球自转引起,其大小可表示为:
具体实现时,可通过设置相机函数:
GV_cam_set_rotation(GV_Camera camhdl,int platform,const G_Rotation * angles_in),其中,参数camhdl为指向场景中相机对象的指针(handle句柄);platform为相机对象所设置的平台的序号,参数的定义类型为整型;yrot_in指输入的绕Y轴的旋转角度,参数的定义类型为浮点型。
将人工水天线的相对运动与零位误差相叠加,转换成OpenGVS中的坐标系(图3),即构成视景中的人工水天线的晃动,从而使受训人员有真实的测天感觉。
3.3.2 “跑星”的模拟
观测天体时,须将天体影像置于视场中央。因天体运动,方位在变化,所以天体在视场中的位置不断改变。尤其是潜艇航行中因涌浪摇摆,而潜望镜导航视场仅有14°,在实际观测过程中容易造成“跑星”的现象,模拟过程中必须予以充分考虑。对于天空,系统使天空的图像随潜望镜视点(视向、视距)的变化而变化。
经计算,天体方位每分钟变化量如表1所示。由表1可知,天体方位变化量△A随航行纬度φ和天体高度h变化。在青岛地区观测高度75°的天体时,其方位每分钟变化0.9°。对同一个天体测定五次高度约5~6分钟,方位变化就达5°左右。导航视场仅有14°,如开始时将天体影像放在视场中央,当观测天体的第五个高度时,天体像就跑到视场边缘去了。所以,在仿真实现时,应该考虑到这一点。
“跑星”的效果通过两方面的工作来实现。首先是通过控置模拟海况函数实现因涌浪而产生的视场变化,其次是简化天体运动方程,并通过相机位置函数GV_cam_set_position(GV_Camera camhdl,int platform,const G_Position * pos_in)来模拟天体运动。在这两个因素的共同作用下便可实现“跑星”的效果。
4 结束语
本文基于MultiGen Creator和OpenGVS仿真软件平台,在已开发出的潜望镜视景仿真系统基础上,实现诸如潜望镜测天主要功能,解决了测天过程中测天人员真实感环境模拟等技术问题,达到了潜望镜测天视景仿真的逼真性和实时性要求,提高了受训人员的沉浸感和真实感。