一种二维平面运动目标航迹仿真方法
2014-06-27杨冲
杨 冲
(昆明船舶设备研究试验中心 第一研究室, 云南 昆明 650051)
0 引言
目标航迹仿真作为一种重要的研究分析手段,在目标跟踪、导航制导、遥感遥测、作战演练等应用中得到了高度重视,相应地也形成了一些有代表性的仿真方法.但这些方法通常是针对特定的目标而设计,仿真的有效性在很大程度上建立在对目标特点的准确把握上.如文献[1]和文献[2]都是基于以飞机为代表的空中目标的若干种特征航迹的分析而建立仿真模型.但在别外一些应用中,目标不具
有明显的所谓特征航迹或其特征航迹难以遍历,因而现有的这些仿真方法难以直接套用.
例如,在油田安防监控系统中,为了最大限度地减小移动作业平台、运输工具、过往船只、浮游冰块等各种运动体对钻井平台、输油管缆、生活设施等硬件资源所造成的安全隐患,只要是监控区域出现的目标都是系统关注的对象,特别是各类船只会成为监控的重点.
在这些船只中,搭载的辅助航行设备等因素的差异会使其在接近受保护对象时,对航行参数的调节余地、能力及方式不同;不同吨位及尺度的船只往往具有不同的航行速度、回转半径、变速能力等;作业船只可能仅在一个较小的区域内来回周旋,而过往商船则可能短暂逗留后直航离开……
无疑,由于被探测目标具有类型、尺度、航行意图等方面的不确定性,其航行方式、机动能力等运动特征不可能被准确预知或一概而论,从而需要一种在航迹多样化背景下具备较好通用性的方法.为达到此目的,该方法应在不明显降低仿真效果的前提下对先验运动参数具有最小的约束,以提供最大的航路规划灵活性.
本文以二维平面运动目标为研究对象,建立了共性的基本运动模型,以此为基础研究了利用基本运动航路综合实际运动航路的方法,并通过仿真验证了该方法的模拟效果.
1 二维平面内目标的基本运动模型
目标运动可用其位置坐标随时间的变化关系来描述.而引起这种变化的直接因素为目标的有向速度,所以对有向速度的建模是描述目标运动的基础[3-6].由于在一段很短的时间内,目标的有向速度难以发生显著变化,在大多数情况下可认为有向速度变化率恒定.
如果用加速度的大小描述有向速度大小的变化率,而用角加速度的大小描述有向速度方向的变化率,则大多数目标的运动可近似描述为若干个匀变速直线运动或匀变速弧线运动的时间合成[7,8].在二维平面内,这两种基本运动可建模如下.
1.1 匀变速直线运动
匀变速直线运动比较简单,可直接给出如式(1)所示的运动模型
(1)
其中,x(0)|y(0)为初始位置;t为时间;v为初始速度;a为航向,定义为速度方向与x正半轴的夹角.
1.2 匀变速弧线运动
最简单的匀变速弧线运动为匀变速圆弧运动,前者可继续近似为后者的时间合成,所以这里建立的是匀变速圆弧运动的模型.
对于一个有确定弧心和半径的圆弧运动,其坐标的时间函数取决于瞬时相位的大小[3,9,10].由于匀变速圆弧运动的目标角速度ω(t)满足式(2),所以瞬时相位φ(t)满足式(3),进而可将运动建模为式(4).各式中,ω0为初始角速度,aω为角加速度,φ0为初始相位,xc、yc为圆弧弧心,r为半径.
(2)
(3)
(4)
(5)
需要指出的是,当目标转向与相位增量正方向相反时,式(4)中的相位差Δφ(如式(5)定义)应添加负号.
对于二维平面内运动目标航迹的仿真,首先要解决的是目标理想航迹的生成问题.在将运动分解为若干匀变速直线运动和匀变速圆弧运动后,该问题已转化为两个问题:(1)根据规划的航路点,基于基本运动合成实际运动的航路综合;(2)基于综合航路添加参数约束,赋予仿真曲线物理运动特征.
2 基于规划航路点的航路综合
作为分解的逆过程,航迹综合的关键在于保证边界连续,具体说就是要保证相继两个基本运动的位置坐标、速度、航向等运动参数平滑过渡.由于“直线转直线”和“弧线转直线”相对简单,这里仅介绍“直线转弧线”和“弧线转弧线”两种情况下的边界参数计算方法[11].
2.1 从直线运动过渡为圆弧运动
根据上述介绍,从直线运动过渡为圆弧运动时,应根据直线运动的航路以及圆弧运动的目标航路点推算圆弧运动的半径、圆心、初始角速度、初始相位和转向[12-14].
由于直线运动的终点为圆弧运动的起点,根据解析几何的知识,可知式(6)、式(7)成立.
yc=k(xc-x1)+y1
(6)
(x1-xc)2+(y1-yc)2=(x2-xc)2+(y2-yc)2
(7)
其中,x1、y1为过渡点坐标;x2、y2为圆弧运动目标航路点坐标;k为过渡点与圆心连线的斜率,可由式(8)计算.
(8)
经推导,圆心横坐标
(9)
代入式(6),可得圆心纵坐标.从而,半径和初始相位可由式(10)、式(11)、式(12)求得
(10)
(11)
(12)
初始角速度则依据直线运动的末速度等于圆弧运动的初始线速度,可容易求出;对于转向,可以根据圆弧起点坐标、终点坐标、圆心坐标以及初始航向确定.其中,初始航向可由直线航路的斜率和上述几个特征点的相对坐标关系确定,判断流程如图1所示.
图1 直线运动转圆弧运动初始转向判断流程
2.2 从圆弧运动过渡为新的圆弧运动
在这种情况下,匀变速圆弧运动的几何参数计算方法与上一种情况类似.只不过是,起点与圆心连线的斜率,除了按式(8)近似计算(上一种情况利用该式为准确计算)外,即由前一段圆弧运动的圆心和终点坐标计算,还可根据相位关系由式(13)计算得到
(13)
其中,Δφ为前一段圆弧运动的相位变化量,分别为相继两段圆弧起点与弧心连线的斜率;初始角速度为前一段圆弧运动的终点角速度,亦可容易求出.转向确定同样简单给出如图2所示的判断流程,其中航向的判断方法与上一种情况类似.
图2 圆弧运动转圆弧运动初始转向判断流程
3 二维平面内运动目标航迹的仿真
基于上述模型和方法,对于一条由若干匀变速直线运动和匀变速圆弧运动综合而成的二维平面运动目标航路,只需给定第一段子航路的初始运动参数以及其余各段子航路的目标航路点,即可完全确定目标的运动过程.
根据探测设备的工作周期、测量精度、虚警率、漏警率和探测范围等指标,对目标运动过程做时间采样后,叠加测量噪声和虚假点迹、去除漏警回波,然后定时输出,由此便实现了二维平面内运动目标航迹的仿真.
然而,对于数值仿真来说,探测设备的工作周期、目标的运动方式、计算机的有限字长效应等因素的影响,会使得离散航迹存在不可避免的采样误差.对于可用匀变速直线运动和匀变速圆弧运动综合建模的目标来说,只要航路采样频率不太低,采样误差不会对处于基本运动阶段的目标航迹仿真产生显著影响.但在基本运动的边界处则可能导致推算出的后续航路参数与规划航路截然不同(前期仿真中曾多次碰到),所以,每一子航路的采样终止条件应在确保不引起“边界异化”的前提下,尽量控制采样误差.
最简单的采样终止条件,是当前采样点与目标航路点的距离小于某一预设门限.但这种方式不能保证最末航路点与目标航路点距离最小,由此带来的采样误差在后续子航路中将被传递甚至放大,因而可能无法满足一些对航路仿真精度要求苛刻(如强机动目标)的应用要求.
本文借鉴“过零检测”的思想,采用下述方法给航路采样提供终止条件.
基于本文提出的模型、方法和流程,在VC平台下开发了一套多传感器多目标航迹仿真软件,并将软件的输出数据利用Matlab做图来验证本文提出的仿真方法.
例如在图3中,将匀速直线运动、匀减速圆弧运动、匀加速弧线运动和匀速直线运动等4段顺序拼接,实现了对4条复杂目标航路的逼近及仿真,其中需要指定的参数如表1所示.为了观察理想航迹的仿真效果,图3中未体现虚警和漏警信息.
图3 航迹仿真示例
目标起始坐标直线运动1速度航路点1坐标圆弧运动1加速度航路点2坐标圆弧运动2加速度航路点3坐标直线运动2/时间1(317124,4424250)3(314827,4424480)-0.5(311548,4422860)0.3(307758,4419870)202(307158,4423850)5(309634,4422510)-0.6(312362,4422070)0.2(316315,4421090)903(310746,4423600)2(308640,4422010)-0.4(309482,4420290)0.1(314820,4419930)1154(311154,4419600)4(312949,4420900)-0.3(312427,4421910)0.4(307288,4424140)58
其主要仿真程序如下:
vector
CSimulateData::IdealTrack(input_para* p_inPara)
{
double x0=p_inPara->x0;
double y0=p_inPara->y0;
double x1=p_inPara->x1;
double y1=p_inPara->y1;
double velocity=p_inPara->velocity;
double acceleration=p_inPara->acceleration1;
double fs=p_inPara->fs;
double L_end=p_inPara->L_end;
static vector
if (!track.empty())
{
track.clear();
}
vector
if (velocity { velocity=V_MIN; } vector p_linear=LinearTrack(x0,x1,y0,y1,velocity,acceleration,fs); for (vector iter=p_linear->begin();iter!=p_linear->end();iter++) { track.push_back(*iter); } //第一段结束 double slope_cycle=CycleSlope(x0,x1,y0,y1); double x_end=(p_linear->back()).x; double y_end=(p_linear->back()).y; double x_to=p_inPara->x2; double y_to=p_inPara->y2; arc_parameter* p_arc=ArcParameter(slope_cycle,x_end,y_end,x_to,y_to); int j=(p_linear->size())-1; double velocity_end=velocity+acceleration*j/fs; if (velocity_end>V_MAX) { velocity_end=V_MAX; } if (velocity_end { velocity_end=V_MIN; } acceleration=p_inPara->acceleration2; BOOL clockwise=Clock(x0,x1,x_to,y0,y1,y_to,slope_cycle); vector p_arc1=ArcTrack(p_arc,x_end,y_end,x_to,y_to,velocity_end,acceleration,fs,clockwise); for (vector iter=p_arc1->begin();iter!=p_arc1->end();iter++) { track.push_back(*iter); } //第二段结束 int k=p_arc1->size(); slope_cycle=(p_arc->y_cycle_center-(p_arc1->back()).y)/(p_arc->x_cycle_center-(p_arc1->back()).x); x_end=(p_arc1->back()).x; y_end=(p_arc1->back()).y; x_to=p_inPara->x3; y_to=p_inPara->y3; p_arc=ArcParameter(slope_cycle,x_end,y_end,x_to,y_to); velocity_end=velocity_end+acceleration*k/fs; if (velocity_end>V_MAX) { velocity_end=V_MAX; } if (velocity_end { velocity_end=V_MIN; } acceleration=p_inPara->acceleration3; double x2=p_inPara->x2; double y2=p_inPara->y2; double x_end_prior=(*(&(p_arc1->back())-1)).x; double y_end_prior=(*(&(p_arc1->back())-1)).y; clockwise=Clock(x2,x_to,x_end,x_end_prior,y2,y_to,y_end,y_end_prior,slope_cycle); vector p_arc2=ArcTrack(p_arc,x_end,y_end,x_to,y_to,velocity_end,acceleration,fs,clockwise); for (vector iter=p_arc2->begin();iter!=p_arc2->end();iter++) { track.push_back(*iter); } //第三段结束 x0=(p_linear->back()).x; y0=(p_linear->back()).y; int m=p_arc2->size(); velocity=velocity_end+acceleration*m/fs; if (velocity>V_MAX) { velocity=V_MAX; } if (velocity { velocity=V_MIN; } acceleration=0; double x_cycle_center=p_arc->x_cycle_center; double y_cycle_center=p_arc->y_cycle_center; x_end=(p_arc2->back()).x; y_end=(p_arc2->back()).y; point to=linear_to(x_cycle_center,y_cycle_center,x_end,y_end,L_end,clockwise); x1=to.x; y1=to.y; p_linear=LinearTrack(x_end,x1,y_end,y1,velocity,acceleration,fs); for (vector { track.push_back(*iter); } return p_ideal; } 本文针对油田安防监控等领域中被监控目标具有类型、尺度、航行意图等方面的不确定性,以及其航行方式、机动能力等运动特征不可被准确预知或一概而论,从而导致现有针对特定目标的航迹仿真方法难以通用的现实问题,提出了一种基于匀变速直线运动和匀变速圆弧运动模型综合目标实际航路的仿真方法. 该方法仅需指定初始运动条件,以及运动各阶段的目标航路点和加速度大小,即可对二维平面内运动目标的理想航迹进行数值计算,进而完成传感器的目标探测航迹仿真.对于可用匀变速运动近似的一般目标而言,此方法简单有效且具备一定的通用性. [1] 胡 凯.空中运动目标的特征航迹描述及仿真[J].通信技术,2010,43(5):13-15,18. [2] 苏春梅,冯朝阳,王力军.通用飞机航迹生成技术[J].兵工自动化,2010,29(12):20-25. [3] 宋 元,章新华,郭徽东,等.态势估计系统中空中目标航迹仿真模型研究[J].系统仿真学报,2006,18(3):557-560. [4] 王争艳,杨廷梧,刘上乾.一种基于目标航迹的跟踪算法[J].电子科技,2009,22(4):54-56. [5] 孙 炜,白剑林.一种空中目标航迹的灰色预测方法[J].电光与控制,2009(6):12-16. [6] 张 尉,金素华,程柏林.目标航迹的参数模拟法[J].空军雷达学院学报,1999,13(2):61-66. [7] 李 眈,任丽香,龙 腾.单脉冲雷达目标航迹的实时视频模拟器[J].北京理工大学学报,1999,19(1):68-72. [8] 孙泾彤,刘 健.灰色关联分析法在目标航迹分析中的应用和模型研究[J].弹箭与制导学报,2006,26(2):970-973. [9] 王晓丽.基于雷达组网提高空中目标航迹测量精度的数据融合方法研究[D].成都:电子科技大学,2012. [10] 林长川,陈朝阳,洪爰助,等.雷达与AIS目标航迹模糊关联与统计加权合并融合方法的探讨[J].中国航海,2003,57(4):70-74. [11] 王兴申,田康生,刘 婕.基于运动方程的目标航迹模拟方法[J].现代电子技术,2006(5):4-7. [12] 陈连平,宗瑞良,董大群.非固定水下平台对目标航迹的确定[J].探测与控制学报,1999,21(3):57-59. [13] 李启元,段 立,李亚楠.海战场目标航迹间距离聚类方法[J].计算机与数字工程,2010,38(5):28-30,48. [14] 田国英,史存虎.目标航迹与飞行计划不相关成因分析[J].空中交通管理,2011(4):17-19.4 结束语