您当前的位置:首页 > 计算机论文>计算机应用论文

基于HLA/RTI仿真的联邦成员的设计系统开发

2015-07-18 09:46 来源:学术参考网 作者:未知

  引言
  仿真技术的发展经过了三个阶段:仿真网络(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-)女,江苏省连云港,本科学历,讲师,研究方向:程序设计和数据库。

相关文章
学术参考网 · 手机版
https://m.lw881.com/
首页