基于HLA/RTI仿真的联邦成员的设计与实现
针对空地对抗作战仿真问题,采用高级体系结构和运行支撑框架技术设计和实现了模拟空地对抗作战仿真的联邦成员。构建了FOM/SOM并生成了FED文件,为以后空地对抗仿真平台研究提供基础。
标签:高级体系结构;运行支持系统;对象模型
引言
仿真技术的发展经过了三个阶段:仿真网络(SIMNET),分布交互仿真(DIS)和聚合级仿真协议(ALSP)高级体系结构(HLA)。[1]基于HLA的分布仿真是今后仿真发展的主要方向,故文章选用高级体系结构对空地对抗仿真的联邦成员进行了研究。
1 高级体系结构
HLA中将实现某种特定仿真目的的仿真系统称为联邦。联邦由若干交互的仿真应用和其它一些相关的应用(统称联邦成员Federate)、运行支持系统(RTI)和联邦对象模型(OM)构成。[2]联邦成员由若干对象构成, 成员间通过RTI提供的服务来实现交互。
1.1 RTI简介
RTI是一个按照HLA接口规范开发的软件系统,能为仿真应用提供通用的、相对的支撑服务,其功能类似于分布式操作系统。[3]
1.2 对象模型模版
对象模型模板(OMT)是HLA应用系统中联邦执行数据交互的基础。OMT 主要由对象模型鉴别表、对象类结构表、交互类结构表、属性表、参数表、枚举数据类型表、复合数据类型表、路径空间表、FOM/SOM 词典九种表格组成。[4]
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)声明时间推进策略