基于MATLAB与VC的鱼雷弹道三维可视化的实现*
2013-10-16苑秉成张宗波李瑞亮
陈 龙 苑秉成 谢 勇 张宗波 李瑞亮
(1.海军工程大学兵器工程系 武汉 430033)(2.92840部队 青岛 266405)
1 引言
鱼雷实航试验的水下弹道一般通过外场测量获取,但是需要特定的水域,并在水下布放水声弹道测量系统。本文以鱼雷实航内测记录器采集记录的相关数据为基础,综合应用计算机技术,设计弹道可视化软件。通过对鱼雷航行时记录在存储器上的相关参数回放到计算机上,经分析处理实现鱼雷水下运动弹道的可视化,解决了无外场测量系统条件下水下运动弹道的难题。有效提高了鱼雷实航弹道的分析效率,克服了特定水域及设备的制约[1]。利用VC和MATLAB混合编程开发,而MATLAB的图形只能输出在自己的Figure窗口上,无法嵌入到VC的程序界面中,给混合编程应用造成了很大的障碍。利用COM组件技术的窗口嵌入方法,实现脱离MATLAB环境的应用程序开发。
2 鱼雷内测系统记录的弹道相关参数
鱼雷内测系统记录的参数主要包括:鱼雷总体参数、动力系统参数、控制系统参数、自导引信参数,其中与鱼雷水下运动弹道相关的参数有:
1)陀螺组件中的角度变换器的步进电机驱动信号(MPP)
此信号代表了鱼雷的转向指令转换产生的三相脉冲序列,由鱼雷控制系输出到步进电机上,形成如图1(a)所示的阶梯型的信号,阶梯的倾斜方向表示鱼雷的旋回方向,阶梯的宽度表示旋回运动的回转速率的大小,脉冲发生一次变化,就表示鱼雷回转a°。无叠加高频信号的脉冲表示,鱼雷无捕获目标时执行的初始转向或搜索指令如图1(a)所示。当鱼雷处于追踪目标阶段时,脉冲信号有高频信号叠加,如图1(b)所示。
图1 步进电机信号
记录的MPP信号中,没有出现阶梯型脉冲,则可认为鱼雷运动在水平面的投影是直航的;当存在阶梯脉冲时,则鱼雷发生了旋回运动,旋回的速率与阶梯脉冲的宽度有关,旋回运动的方向与阶梯信号的倾斜方向有关。直航运动就是旋回速率为零的运动。
2)推进器转数信号(GIE)
推进器转数信号是由转数传感器每n转就输出一个电压脉冲,而鱼雷的速度与脉冲的频率成线性关系。如图2所示。
图2 推进器转数信号
3)压力信号(PRESS)
由压力传感器测得的数据,可转换成鱼雷航行深度数据。
3 鱼雷三维弹道的可视化数学模型与方法
鱼雷弹道是鱼雷航行的轨迹,物理学上轨迹的计算就是取速度对时间的积分。但是在记录的数据中,无法直接获得速度矢量。鱼雷速度的大小,可根据GIE数据,根据式(1),可以得到鱼雷航行速度的大小S,根据压力数据可得到深度随时间的变化,在时间的微分可得到速度在垂直方向的分量ST,这样根据勾股定理可计算出鱼雷的速度水平方向的分量So,根据式(2)可根据ST,S求出夹角θ,然后求出So。速度解算示意图如图3所示。速度公式如下:
其中N为一定时间内的信号脉冲数,n为出现一个脉冲代表推进器转n转,Δt为时间间隔,单位s,K为经验常数,S的单位为kn。
图3 速度分解示意图
由MPP信号得出鱼雷水平的瞬时回转速率βi,分为直航和旋向运动,直航式(4),旋向运动式(5),水平航向角的计算公式如(3)
其中αi为某时刻的航向角,α0为初始航向角,单位:弧度;βn为回转速率,单位:1/s。
其中Xi,Yi分别为某时刻的水平坐标,Xi+1,Yi+1分别为下一个时刻的水平坐标,Δt为时间间隔
其中Rm为瞬时曲率半径。
利用VC编程实现对步进电机信号和推进器转数信号的转换计算。由于鱼雷记录的是采样后的离散数据,且都不是连续变化的,在编程中对数据变化上升沿与下降沿的计数,以及各沿之间的间隔,从而实现步进电机信号转换成鱼雷的回转速率,和推进器转数信号转换成鱼雷速度。
通过以上计算,依据弹道可视化模型,得到离散化的弹道坐标点 (Xi,Yi,Zi),生成数据文件。
4 混合编程
4.1 COM组件
组件对象模型(COM,Component Object Model)是微软提出的以组件为发布单元的软件开发技术。COM对象用C/S的方式,提供一类应用程序接口,允许任何符合标准的程序访问。COM对象是建立在二进制可执行代码的基础上,因此COM组件对象是语言无关的,这一特性使得用不同编程语言开发的组件对象进行交互成为可能。MATLAB可以通过MATLAB编译器和MATLAB COM Builder将MATLAB程序转换为动态链接库形式的COM组件,这些COM组件可以在其他程序中调用,这是VC和MATLAB混合编程的主要方式[2]。
4.2 混合编程的实现
4.2.1 实现混合编程的环境配置
要成功地实现混合编程,达到混合编程的要求并最终作为独立的应用程序发布,首先要对MATLAB及VC进行环境的配置。
对MATLAB编译环境进行设置:在MATLAB环境中运行mex setup命令,按屏幕提示选择有关选项,此处选编译器为 Microsoft VisualC/C++Version6.0in C:\Program Files\Microsoft Visual Studio,路径按实际路径选择。然后在MATLAB环境中运行mbuild setup命令,设置方法同上[3~4]。
4.2.2 MATLAB中的实现
首先建立实现鱼雷三维弹道可视化的M文件其中代码如下:
在MATLAB下创建COM组件:
1)在matlab command window输入如下命令:≫deploytool;
2)建立deployment project:trshow.prj,确定安装位置E:\matlab\trshow,选择目标:Generic COM Component;
3)在deployment tool的Build下添加类,将trshow.m文件添加进去;
4)点击Build生成COM组件,至此COM组件已经由MATLAB完成。
4.2.3 VC下调用COM组件
1)将 E:\matlab\trshow\src下的trshow_idl.h、trshow_idl_i.c和mwcomtypes.h文件拷贝到VC建立的工程目录下。
2)选择菜单Project-Settings-属性页Link-下拉列表中选择Input,在“Object/Library modules”编辑框中输入连接库文件名:mclmcrrt.lib trshow.lib。
3)为程序添加头文件trshow_idl.h、trshow_idl_i.c,mwcomtypes.h头文件已经在trshow_idl.h中有添加。
4)在按钮响应函数中添加COM组件的调用,主要代码如下:
MATLAB图像窗口在VC界面中显示用函数Find-Window、SetWindowPos和SetParent,就可实现,其中Find-Window寻找到Windows系统中指定名称的窗口;SetWindowPos把窗口移动到指定的位置;而SetParent函数改变窗口的父窗口。
5 实验结果
图4 三维弹道显示界面
通过对鱼雷记录的弹道相关参数的研究,建立了鱼雷水下运动弹道可视化模型,并通过VC生成弹道坐标文件,运用COM组件技术,实现MATLAB的三维弹道显示窗口在VC界面中显示,结果如图4所示,此显示程序保留了MATLAB图形工具,可实现弹道的平面投影,如图5~图6所示。
图5 弹道水平面投影(XOY平面)
图6 弹道垂直面的投影(YOZ平面)
6 结语
利用COM组件技术,VC编译器调用MATLAB动态链接库,实现脱离MATLAB环境的应用程序开发,在很大程度上降低了软件开发的难度和编码工作量。VC的文件处理功能强大,支持大量数据的分析处理,由MATLAB绘制的3D弹道效果好,将MATLAB图形窗口嵌入到VC界面中,为弹道的绘制提供了方便,MATLAB的图形工具为鱼雷的弹道提供了便利,提高了编程效率及软件的可靠性,此绘制方法可实现数据分析处理及数据可视化的效果,提高了效率。
[1]Yuan BingCheng.MODERN HOMINNG TORPEDO TECHNOLOGY.WuHan: NANAL UNIVERSITY OF ENGINEERING,2005.
[2]牟彧清,王汝霖,李国新.MATLAB与VC接口技术的研究[J].微计算机信息,2006,7(3):275-277.
[3]刘维.精通 Matlab与C/C++混合程序设计[M].2版.北京:北京航空航天大学出版社,2008.
[4]董维国.深入浅出MATLAB 7.X混合编程[M].北京:机械工业出版社,2006.