基于面向对象的分布式交互仿真应用程序的开发方法

文档序号:6587421阅读:282来源:国知局
专利名称:基于面向对象的分布式交互仿真应用程序的开发方法
技术领域
本发明属于计算机虚拟现实和计算机图形学技术领域,特别是涉及一种基于面向对象的分布式虚拟现实交互方仿真应用程序的开发方法。
1983年,美国国防部高级项目研究计划局和美国陆军共同制定了一项合作研究计划仿真网络,形成了世界上第一个分布式虚拟战场环境,用于进行复杂战场任务的训练。在该仿真网络的基础上美国发展了DIS(分布交互仿真协议),并成为IEEE的标准“IEEE 1278”。该协议的核心是PDU(协议数据单元)和DR(静态推算算法)。协议数据单元是它定义的标准消息格式,用来描述某个仿真实体的状态或某种类型事件的发生等。各个主机通过接收和发送各种协议数据单元进行交互,并由接收方决定对其它实体和事件的处理。静态推算算法是按照一定的运动学方程根据实体先前的状态信息来估算实体当前的位置和方向的方法。使用静态推算法是为了限制实体状态协议数据单元的发送频率,以降低网络负载。
分布式交互仿真应用系统涉及图形显示、网络通讯、仿真处理、人机交互等多方面的技术,规模庞大,结构复杂,因此这类系统的开发是相当困难的。另外在我国,分布式交互仿真的研究起步时间只有短短的5年左右,但是应用要求却比较迫切。因此,如何快速开发分布交互仿真应用系统成为一个急需解决的问题。
为完成发明目的,本发明采取的技术方案是基于面向对象技术的分布式交互仿真程序的开发方法,包括以面向对象的方法封装所有的协议数据单元,为分布仿真应用程序提供基于对象的处理方法,实现与计算机系统平台无关的分布交互仿真通讯功能,并以回调函数的形式向应用程序提供以协议数据单元对象为交互数据的通讯服务,实现实体管理,为应用程序自动管理包括本地实体和远程实体的所有实体的状态信息,设计并实现一个应用程序开发者简单易用的框架结构。
协议数据单元还包括用户自定义协议数据单元,用户自定义协议数据单元是基础协议数据单元类的子类,以用户自定义协议数据单元为基类,用户可以自己方便地定义各种协议数据单元格式;通讯进一步包括建立统一网络接口,统一网络数据格式,以回调函数的数据传递机制将数据合理地传送给应用程序的步骤;通讯进一步包括将协议数据单元对象类到网络数据的相互转换功能封装在一个单独的对象中的步骤;实体管理部分包括实体状态仓库、本地实体管理和远程实体管理;实体管理采用静态推算算法来计算实体当前状态,以上次状态更新时的状态数据和上次状态数据更新时刻到当前时刻的时间段为前提,根据给定的静态推算算法,选用对应的公式计算出当前的实体状态;远程实体管理进一步包括当接收到实体状态协议数据单元,先检查对应的实体是否已经存在,如果没有就创建一个新的远程实体,并添加到远程实体列表中,如果已经存在就检查是不是实体退出时发送的一个终结协议数据单元,若是就删除这个实体,否则更新该实体的实体状态仓库数据的步骤。
从计算机技术上来说,本发明具有以下几个优点1、面向对象的设计方法。这种程序设计方法比较适合分布交互仿真应用程序的开发,而且C++代码编写的程序具有很高的运行效率。2、与系统平台无关。既方便应用程序的编写,又使应用程序具有良好的可移植性。3、方便的回调函数机制。不仅使应用程序的结构更加清晰,而且同一类型的协议数据单元允许多个回调函数的方法使应用程序具有良好的可扩展性。4、良好的框架结构。为分布仿真应用程序提供了一个合理的框架结构,用户可以比较容易地进行分布仿真应用程序的开发。使用本发明编写应用程序能够具有构造简洁、编写灵活、扩展性好、移植方便、代码效率高等特点,因此本发明成为一个快速开发分布交互仿真应用程序的良好工具。
本发明的实施例是一个军事演习的分布式交互仿真应用程序的开发方法,第一步骤是采用面向对象的方法封装所有的协议数据单元。
首先,定义一个基础协议数据单元类,它只包含分布交互仿真标准中协议数据单元头部信息协议版本、演习编号、协议家族编号、时间戳、长度等。这也是所有协议数据单元共同的信息。
然后以基础协议数据单元类为基类定义各种协议数据单元对象类,这些对象包括实体状态协议数据单元、碰撞协议数据单元、开火协议数据单元、爆炸协议数据单元、服务请求协议数据单元、提供供给协议数据单元、接收供给协议数据单元、完成修理协议数据单元、取消供给协议数据单元、响应修理协议数据单元、数据协议数据单元、数据查询协议数据单元、设置数据协议数据单元、创建实体协议数据单元、撤离实体协议数据单元、电磁发射协议数据单元等。这些协议数据单元对象都具有友好简洁的数据存取接口,可以方便地访问。
以上协议数据单元对象都在分布交互仿真协议定义范围之内,但是分布式交互仿真标准并不能含盖所有的分布交互仿真的交互要求。实际开发分布交互仿真应用系统时,可能希望根据具体要求,在交互过程中数据格式使用自己定义的数据内容。为了解决这种问题,本发明专门定义了一种特殊协议书据单元——用户自定义协议数据单元。用户自定义协议数据单元也是基础协议数据单元类的子类。以用户自定义协议数据单元为基类,用户可以自己方便地定义各种协议数据单元格式,同时还能保持其它使用方式不变。
本发明第二个步骤是实现与计算机系统平台无关的分布交互仿真通讯功能,并以回调函数的形式向应用程序提供以协议数据单元对象为交互数据的通讯服务。
这个步骤又分为三个子步骤建立演习的统一网络接口,统一网络数据格式以及回调函数的数据传递机制。
首先是建立演习的网络接口。IEEE 1278标准规定所有数据在网络使用用户数据报协议广播的通讯方式,同时只有具备相同演习编号的系统才能进行交互。所以本发明根据用户指定的用户数据报协议端口建立一个标准架构,这个架构负责接收与本地演习编号相同的数据,同时发送数据时填写本地的演习编号。本发明也采用面向对象的方法将这个功能封装在一个对象——分布交互仿真演习接口对象中。
其次是统一网络数据格式。不同的计算机系统内部对数据的存储格式是不一致的,比如32位的整数在个人电脑上的存储顺序与大型计算机完全相反。因此,运行在不同系统平台上的分布交互仿真应用程序需要正确交互的话,就必须有所有系统都能读懂的顺序“格式”。然后把所有传输到网络中的数据都转换成这种格式的话,问题就可以迎刃而解了。因此本发明把所有的协议数据单元都定义了一种统一的网络数据格式,并完成了由这种网络数据到协议数据单元对象类的相互转换功能。本发明将协议数据单元对象类到网络数据的相互转换功能封装在一个单独的对象——协议数据单元工厂中。
通讯服务的最后一个步骤是将数据合理地传送给应用程序。对应用程序来说,发送数据是一种主动行为,容易控制,但是接收数据却是一种被动行为,不容易控制。所以,当接收到数据如何传递给应用程序进行处理,是决定分布交互仿真系统运行效率以及结构复杂度的一个重要因素。本发明采用了回调函数机制来向应用程序传递数据。
这个机制是这样的,先构造一个回调函数管理器。这个回调函数管理器对象可以根据协议数据单元对象类型添加、删除、查找对应的函数,这些函数可以是应用程序开发人员定义的协议数据单元对象的处理方法。因此,对于接收到的各种协议数据单元,只要应用程序定义好相应的处理方法,并把它们作为协议数据单元回调函数添加到回调函数管理器中,本发明在分布交互仿真演习接口对象接收到数据时就可以根据协议数据单元类型直接回调相应的协议数据单元回调函数来处理这些数据。这样的结果等于应用程序处理了这些数据。由于回调函数管理器可以方便的添加删除回调函数,同时一种类型协议数据单元可以对应多个回调函数,因此应用程序在功能扩展性方面变得十分方便。总的来说,这种机制不仅使应用程序对接收数据的响应十分及时,而且增加应用程序的扩展性。


图1本发明的实施例的一次协议数据单元通讯流程图。应用程序A要发送一个PDU P,先通过本发明的协议数据单元工厂转换成网络格式的协议数据单元,然后使用分布交互仿真演习接口发送到物理网络中。同一演习的其它应用程序如B,其分布交互仿真演习接口会接收到这个协议数据单元,然后通过协议数据单元工厂生成协议数据单元对象,然后调用对应的回调函数处理这个协议数据单元以达到向应用程序传递数据的目的。
本发明第三个步骤是实现实体管理。参阅图2,图2是本地实体管理流程图。在分布交互仿真中实体分为两种由本地应用程序控制的本地实体和由其它应用程序控制的远程实体。为了达到分布环境的一致性,本地的实体状态变化需要及时通知统一演习中其它的应用程序,同时要根据其它应用程序发送的实体状态协议数据单元来实时维护所有的远程实体状态。本发明的实体管理部分包括实体状态仓库、本地实体管理和远程实体管理等部分。
实体状态仓库是实体在计算机系统中的模块表示对象。应用系统可以根据仿真情况使用这个实体状态仓库来仿真一个实体。
仿真系统一般都是模拟某个特定实体对象如坦克、飞机等。这些实体受本地系统控制,其计算机中的模拟状态需要自己进行维护并及时向分布环境中的其它应用系统发布。本发明使用本地实体管理类来完成这些功能,其中使用一个实体状态仓库来管理这个实体的模型状态。
另外为了减少网络负载,分布交互仿真系统要采用静态推算算法来计算实体当前状态,本发明采用一个独立的静态推算器类完成这个功能。静态推算器类的基本思想是这样的以上次状态更新时的状态数据和上次状态数据更时刻到当前时刻的时间段为前提,根据给定的DR算法,选用对应的计算公式计算出当前的实体状态。
所以本地实体管理不仅要实时更新自己实体状态仓库中的数据,还要使用一个静态推算器类推算模拟状态与实际状态的误差,当误差超过一个阀值时,就向分布环境中前提应用系统发布自己的当前状态。这样就不必过于经常地发送数据,减少了网络中通讯负载,而且能保证一定的仿真精度。远程实体的管理与本地实体的管理相对应。每一个远程实体管理类也都拥有一个实体状态仓库和一个静态推算器,当接收到控制该实体的应用程序发送过来的实体状态协议数据单元后,更新实体状态仓库中的数据。没有的时候就使用静态推算器来计算这个实体的当前状态。
参阅图3,图3是远程实体管理流程图,由于远程实体一般都会有很多,所以使用一张动态远程实体表来管理所有的远程实体。当接收到实体状态协议数据单元,先检查对应的实体是否已经存在本发明的远程实体列表中,如果没有就需要创建一个新的远程实体,并添加到远程实体列表中;如果已经存在就检查是不是实体退出时发送的一个终结协议数据单元,若是就删除这个实体,否则更新该实体的实体状态仓库数据。应用程序可以根据实体状态仓库的数据来计算给操作者的逼真感受。
本发明第四个步骤是设计并实现一个合理的框架结构在使用本发明的以上三个部分的基础上,一个分布交互仿真应用系统的主仿真循环流程是1、接收仿真控制器如键盘、鼠标、传感器等的输入,根据具体仿真实体的仿真行为方程计算当前的实体状态;2、更新本地实体管理中的实体状态仓库数据;3、使用静态推算器计算误差,当误差超过一定的值时,发送实体状态协议数据单元;4、接收网络中的PDU,根据它们更新相应的远程实体状态;5、使用静态推算器计算所有远程实体的状态数据;6、通过图形系统显示环境和所有实体;7、回到1,循环。
使用本发明的框架,应用程序开发人员只需要集中精力解决仿真行为和三维图形等逼真显示的问题,就可以实现一个分布交互仿真应用系统。
从以上的过程中可以看出,本发明已经为分布式仿真应用程序提供了一个框架结构,并解决了分布交互的关键问题。分布交互仿真应用系统开发人的主要工作是处理传感器的数据接收与处理、碰撞检测、视景处理等具体的仿真行为。本发明对于许多已经完成了这些仿真行为的现有仿真器尤其有利,因为它们使用本发明通过少量的改进就可以变成一个分布式仿真应用程序通过网络参与协同或对抗演习。
权利要求
1.一种基于面向对象的分布式交互仿真程序的开发方法,其特征在于该方法包括以下步骤(1)以面向对象的方法封装所有的协议数据单元,为分布仿真应用程序提供基于对象的处理方法;(2)实现与计算机系统平台无关的分布交互仿真通讯功能,并以回调函数的形式向应用程序提供以协议数据单元对象为交互数据的通讯服务;(3)实现实体管理,为应用程序自动管理包括本地实体和远程实体的所有实体的状态信息。(4)设计并实现一个应用程序开发者简单易用的框架结构。
2.根据权利要求1所说的基于面向对象的分布式交互仿真程序的开发方法,其特征在于步骤(1)所说的协议数据单元还包括用户自定义协议数据单元,用户自定义协议数据单元是基础协议数据单元类的子类,以用户自定义协议数据单元为基类,用户可以自己方便地定义各种协议数据单元格式。
3.根据权利要求1所说的基于面向对象的分布式交互仿真程序的开发方法,其特征在于步骤(2)进一步包括(1) 建立统一网络接口;(2) 统一网络数据格式;(3) 以回调函数的数据传递机制将数据合理地传送给应用程序。
4.根据权利要求3所说的基于面向对象的分布式交互仿真程序的开发方法,其特征在于步骤(2)进一步包括将协议数据单元对象类到网络数据的相互转换功能封装在一个单独的对象中。
5.根据权利要求1所说的基于面向对象的分布式交互仿真程序的开发方法,其特征在于所说的实体管理部分包括实体状态仓库、本地实体管理和远程实体管理。
6.根据权利要求1所说的基于面向对象的分布式交互仿真程序的开发方法,其特征在于步骤(3)所说的实体管理采用静态推算算法来计算实体当前状态,以上次状态更新时的状态数据和上次状态数据更新时刻到当前时刻的时间段为前提,根据给定的静态推算算法,选用对应的公式计算出当前的实体状态。
7.根据权利要求1所说的基于面向对象的分布式交互仿真程序的开发方法,其特征在于步骤(3)所说的远程实体管理进一步包括(1)当接收到实体状态协议数据单元,先检查对应的实体是否已经存在,如果没有就创建一个新的远程实体,并添加到远程实体列表中;(2)如果已经存在就检查是不是实体退出时发送的一个终结协议数据单元,若是就删除这个实体,否则更新该实体的实体状态仓库数据。
全文摘要
本发明涉及一种基于面向对象的分布式虚拟现实交互方仿真应用程序的开发方法。主要解决目前开发交互方仿真应用程序困难等问题。本发明包括以面向对象的方法封装所有协议数据单元为分布仿真应用程序提供基于对象的处理方法,实现与计算机系统平台无关的分布交互仿真通讯功能,并以回调函数的形式向应用程序提供以协议数据单元对象为交互数据的通讯服务,为应用程序自动管理所有实体的状态信息,设计并实现一个应用程序开发者简单易用的框架结构的步骤。具有面向对象设计、与系统平台无关、方便的回调函数机制和良好的框架结构的优点,构造简洁、编写灵活、扩展性好、移植方便、代码效率高。是一个快速开发分布交互仿真应用程序的良好工具。
文档编号G06F9/455GK1409217SQ0213073
公开日2003年4月9日 申请日期2002年9月18日 优先权日2002年9月18日
发明者赵沁平, 吕良权, 何红梅, 周忠 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1