引言
仿真技术的发展经过了三个阶段:仿真网络(SIMNET),分布交互仿真(DIS)和聚合级仿真协议(ALSP)高级体系结构(HLA)。[1]基于HLA的分布仿真是今后仿真发展的主要方向,故文章选用高级体系结构对空地对抗仿真的联邦成员进行了研究。
1 高级体系结构
HLA中将实现某种特定仿真目的的仿真系统称为联邦。联邦由若干交互的仿真应用和其它一些相关的应用(统称联邦成员Federate)、运行支持系统(RTI)和联邦对象模型(OM)构成。[2]联邦成员由若干对象构成, 成员间通过RTI提供的服务来实现交互。
1.1 RTI简介
RTI是一个按照HLA接口规范开发的软件系统,能为仿真应用提供通用的、相对独立的支撑服务,其功能类似于分布式操作系统。[3]
1.2 对象模型模版
对象模型模板(OM
2 模拟仿真
实例:A方出动一架战斗机空袭B方阵地,攻击目标为阵地司令部,B方探查到空情指示,奉命拦截该架战斗机。
2.1 联邦成员设计
在作战中,设计了两个成员来仿真该空袭过程。一个为A方空袭飞机成员,一个B方阵地。双方公布/定购关系如下:A方飞机成员(B方阵地订购): 对象类-飞机,交互类-飞机投掷炸弹、飞机被击毁;B方阵地成员公布(A方飞机成员订购):对象类-B方阵地营司令部,交互类-高炮对飞机开火。
其FOM/SOM定义的对象类(表1)和交互类(表2)如下:
表1 对象类表
表2 交互类表
2.2 RTI实现
将表1和表2输入OMDT生成Fed文件,当RTI创建联邦时予以加载。
下面以A方飞机为例,详细介绍仿真如何实现:
(1)创建联邦
调用rtiAmb.createFederationExecution(“空地对抗仿真”,“airraid.fed”);其中“空地对抗仿真”是将要创建的联邦的名字,“airraid.fed”是由FOM/SOM生成的Fed文件名。
(2)加入联邦
调用FedHandle=rtiAmb.joinFederationExecution(“A方空袭飞机”,“空地对抗仿真”,&fedAmb);其中“A方空袭飞机”为联邦成员名,FedHandle为函数返回的成员句柄值。
(3)获取Fed文件定义的对象类及其属性、交互类及其参数的句柄值
获取B方司令部对象类及其属性的句柄值:
HeadquartersId=rtiAmb.getObjectClassHandle( “Headquarters”);
positionId= rtiAmb.getAttributeHandle(“position”, HeadquartersId);
获取飞机交互类及其属性的句柄值:
PlaneDamageId=rtiAmb.getInteractionClassHandle(“PlaneDama ge”);
PCrashId=Id=rtiAmb.getParameterHandle(“num”,PlaneDamageId);
(4)声明公布/定购关系
公布A方飞机对象类:
AttributeHandleSet *Attributes= RTI::AttributeHandleSetFactory::create(3);
Attributes->add( PnumId ); //加入飞机编号属性
Attributes->add( PpositionId ); //加入飞机位置属性
Attributes->add( PvelocityId ); //加入飞机速度属性
rtiAmb.publishObjectClass( PlaneId, *Attributes);//公布飞机对象类
Attributes->empty();
定购B方司令部对象类:
Attributes->add(HpositionId ); //加入司令部位置属性
Attributes->add(HstateId ); //加入司令部状态属性
rtiAmb.subscribeObjectClass(HId, *Attributes);//订购司令部对象类
delete Attributes;
公布飞机投弹和飞机坠毁交互类:
rtiAmb.publishInteractionClass(DropBombId );//公布飞机投弹类
rtiAmb.publishInteractionClass(PlaneDamageId );//公布飞机坠毁类
定购高炮开火交互类:
rtiAmb.subscribeInteractionClass(FireId);
(5)声明时间推进策略
飞机成员的时间推进既Regulating又为Constrained。
rtiAmb.enableTimeConstrained(); //声明时间推进为Constrained
rtiAmb.enableTimeRegulation(Federate_time,Lookahead_time);//声明时间推进为Regulating.其中Federate_time为当前的联邦仿真时间,Lookahead_time为成员的前瞻时间。
(6)注册飞机对象类
PlaneInstanceId = rtiAmb.registerObjectInstance (PlaneId);
(7)发送飞机投掷炸弹交互
ParameterHandleValuePairSet*pParams=RTI::ParameterSetFactory::create(3);
pParams->add(Dbomb_typeId,(char*)&bombType,sizeof(bombType));
pParams->add(Dbomb _noId,(char*)&bombNum , sizeof(bombNo));
pParams->add(Bpoint_fallId,(char*)&point_fall , sizeof(Vector));
rtiAmb.sendInteraction(DBombId, *pParams, time_stamp,NULL);
(8)请求时间推进
rtiAmb.timeAdvanceRequest(requestTime);//请求时间推进
FederateAmbassador::timeAdvanceGrant;//通知成员当前的联邦仿真时间grantTime
然后跳转第7步,直至仿真结束。
3 结束语
文章以模拟的空地对抗仿真为研究内容,基于HLA/RTI设计和实现了仿真联邦成员。在设计和实现过程中采用通用的技术框架、模型和数据标准,具有较好的通用性。
参考文献
[1]周彦,戴剑伟.HLA仿真程序设计[M].北京:电子工业出版社,2002:3-20.
[2]齐欢,代建民,吴义明. HLA仿真与UML建模[M]. 北京:科学出版社, 2004:6-40.
[3]郝江波.基于HLA的分布交互仿真应用系统开发研究[J].系统仿真学报,2000, 12(05): 253-255.
[4]王元慧.基于HLA的舰船操纵综合仿真平台的设计[J].系统仿真学报, 2009, 21(2): 386-387.
作者简介:刘娅,(1981.12-)女,江苏省连云港,本科学历,讲师,研究方向:程序设计和数据库。