卫星工具包在分布式仿真中的实时控制研究
刘成国,祁 飞
摘 要:提出了基于STK-RTI 的分布式仿真架构,给出了具体的时间同步策略;然后介绍了基于STK/ Connect 模块的网络通信原理和编程实现方法;其次给出了两种实时驱动卫星工具包(STK)的方式“SetTime”方式和“Real-Time / X-Real-Time”方式,进而阐明了两种驱动方式的原理和优缺点;最后针对“Real-Time / X-Real-Time”方式给出了一种更加高效、精确的实时获得STK 时间的算法。
关键词:分布式仿真;卫星工具包;运行时间支撑环境;时间同步
0 引言
卫星工具包( Satellite Tool Kit,STK)是由美国AGI 公司研制开发的一款先进的商品化系统分析软件,在航天领域处于绝对领先的地位。它支持航天任务周期的全过程,包括概念、需求、设计、制造、测试、发射、运行、和应用等。STK 具有强大的计算能力、逼真的图形显示、可靠的数据报告,利用它可以快速方便的分析复杂任务,确定最佳解决方案。随着软件的不断升级,STK 现已逐渐扩展成为分析和执行陆、海、空、天、电(磁)任务的专业仿真平台[1]。
随着航天仿真规模的不断扩大和仿真力度的不断加深,仅利用单台计算机进行仿真往往负载过重,分布式仿真得到了广泛的应用。1996 年美国国防部建模与仿真办公室提出的一种全新的分布交互仿真系统结构HLA( High LevelArchitecture),以促进仿真的互操作性、可重用性、可伸缩性、实时性和协同性,其显著特点是通过运行时间支撑环境(Run Time Infrastructure,RTI),提供通用的、相对独立的支撑服务程序,将仿真应用同底层的支撑环境分开。2000 年9 月HLA已被正式接受为IEEE 标准,成为新一代分布交互仿真体系结构的标准[2]。
为了将STK 和RTI 有机的结合在一起,文献[3]提出了一种STK-RTI 中间件的思想,但对在分布式环境下如何实现对STK 的实时控制,并未作具体的阐述。本文继前文的研究,首先提出了基于STK-RTI 的分布式仿真架构,给出了两种实时驱动STK 的方式:“ SetTime”方式和“Real-Time / X-Real-Time”方式,针对“Real-Time / X-Real-Time”方式给出了一种更加高效、精确的实时获得STK 时间的算法。
1 基于STK-RTI 的分布式仿真架构
STK/ Connect 是STK 的重要模块之一,提供用户在客户机/ 服务器环境下与STK 网络连接的功能。HLA 为实现分布式仿真的互操作和重用提供了一个通用的技术框架。HLA
定义的联邦系统是一个开放性的分布式仿真系统,具有系统可扩展性,成员之间的交互通过RTI 提供的服务来实现,在这种结构中,RTI 从某种程度上来说是一种软总线,联邦成员可以在联邦运行过程中随时插入。
本文将STK 与HLA 的支撑环境RTI 有机的结合在一起,提出基于STK-RTI 的分布式仿真架构。在基于STK-RTI 的分布式仿真中,不同的联邦成员(邦元)可以运行在局域网内不同的计算机上,邦元之间的网络通讯和时间管理通过RTI 实现,同时邦元可以通过STK/ Connect 模块与STK 建立连接,实时驱动图形界面里各种图元的动作和获取数据,仿真系统的体系结构如图1 所示。
时间同步是分布式仿真的关键,在基于STK-RTI 的分布式仿真中,采取的时间同步策略是:以STK 演示时钟为基准时钟,通过STK/ Connect 模块绑定服务器端演示邦元与STK的时间同步,从而在演示邦元中建立仿真虚拟世界的时间基准;通过RTi,保证邦元之间的时间同步,从而实现整个分布式系统的时间同步。具体的仿真运行流程如图2 所示。
在整个系统的时间同步过程中,服务器端演示邦元扮演着中心纽带的角色,一方面它与STK 绑定,维护着系统的仿真基准时间;另一方面通过RTi 总线,可以控制整个仿真系统
的推进速度。其中最为关键的是演示邦元与STK 的高精度时间同步。
2 基于STK/ Connect 模块的网络通信的实现
STK/ Connect 模块允许STK 以服务器方式运行,用户可以通过TCP/ iP 或UniX Domain Sockets 方便的建立客户端应用程序和STK 的接口,向STK 发送指令数据,在分布式环境下实时驱动STK 运行。同时STK/ Connect 具有提供信息的功能,可按用户规定的各种方式输出错误信息和诊断信息。STK/ Connect 原理如图3 所示。
STK/ Connect 与三维显示模块( STK/ VO)相连,用户可以利用STK 的强大的二维和三维的图形界面显示功能,通过Connect 命令实时驱动三维场景的演示,同时也可以从STK获得对象数据,进行任务分析。Connect 命令的数据类型很多,包括对象的位置、速度、姿态和三维模型的关节序列等。STK/ Connect 包括一系列函数,用来与Connect 建立连接以及向STK 发送命令和接收数据,并在通讯结束后关闭连接[4]。
l)STK/ Connect 模块的初始化
在启动Connect 模块之前,首先要进行初始化,初始化的代码如下:
char *connection1 = NULL;
char *initFileName = NULL;
char connectName[ 256] = "localhost: 5001";
AgConInit( initFileName ) ;
AgConOpenSTK( &connection1, "TCPSOCKET", connectName) ;
函数int AgConInit(char * initFileName)负责Connect 模块的初始化,参数initFileName 为空表示Connect 将启用缺省配置文件。函数int AgConOpenSTK( char ** context,char * connectType,char *connectName )负责建立与STK 的连接,参数connectType 用于指定连接的类型,可以为“TCPSOCKET”或“UNIXSOCKET”。对于TCP/ IP 连接,需要指定主机名称和通信端口号。参数context 用来标记一个应用程序打开的多个连接,对于单个连接可缺省设为NULL。
2)发送命令与接收数据
完成STK/ Connect 模块的初始化后,可以通过函数int AgConProcessSTKCmd( char * context,char * cmdString,AgTConReturnInfo *returnInfo )来给STK 发送命令。参数context 用以区分不同的连接,参数cmdString 为发送的具体命令,参数returnInfo 用来存储从STK 返回的信息,发送命令具体的代码如下:
AgTConReturnInfo returnInfo;
char cmdString[ 256] = "new / Scenario /*/ Satellite Sat1";
AgConProcessSTKCmd ( connection1, cmdString, &returnInfo) ;
AgConCleanupReturnInfo ( &returnInfo ) ;
参数returnInfo 是一个结构,类型为AgTConReturnInfo,具体定义如下:
typedef struct AgTConReturnInfo
{
char hdrType[ AgCRMHAHdrTypeLen + 1] ;
char transId[ AgCRMHAHdrIdLen + 1] ;
int numEntries;
char ** returnList;
} AgTConReturnInfo;
参数hdrType 和transId 只与异步模式的Conect 相关。参数numEntries 记录了STK 返回数据的数目。参数returnList是一个字符串列表,存储了具体的返回数据。returnList 中数据的数目与numEntries 一致。如果函数AgConProcessSTKCmd( )成功,则返回AgCNoError;如果失败则返回AgCError;如果命令发送成功但被STK 拒绝,则返回AgCNackReturned。每次成功接收数据后,必须调用函数AgConCleanupReturnInfo 来释放函数AgConProcessSTKCmd( )返回的内存空间。
3)关闭连接
在Connect 连接的最后,需要调用函数AgConCloseSTK 来关闭连接,代码如下:
AgConCloseSTK( &connection1) .
3 STK 的实时控制方法
随着分布式航天仿真的发展,对可视化仿真的实时性要求越来越高,比如在卫星发射仿真中,对火箭的遥测数据、发动机的点火熄火、测控指令传输、卫星有效载荷的调度等均要求在场景中进行实时的演示。如何在分布式仿真环境下,实现外部程序对STK 的高效率、高精度的实时控制,显得至关重要。STK 提供两种实时控制的方式:一种是“Set Time”方式;另一种是“Reai-Time / X-Reai-Time”方式[5]。
“Set time”方式是利用发送时间戳来实时驱动StK。在这种驱动方式下,StK 的内部时钟不会做任何推进,场景也不会做任何刷新,除非外部的Connect 命令更新它的时间戳。这意味着在相邻两次外部实时命令的时间间隔之内,StK 场景是静止不动的,这样导致的结果是屏幕显示的动作不够平滑,场景中的对象从一个位置运动到另一个位置,视觉效果好像在“眨眼”;另一个不利的因素是如果存在网络延时,此刻StK 的动作将要被冻结,以等待下一时刻网络数据的刷新。“Settime”方式对仿真硬件设备的要求较高,如果要仿真画面的刷新率达到20 帧/ 秒,则要求时间戳指令的网络更新速率至少20 次/ 秒,这会加重网络的数据传输负担。在复杂的分布式交互式仿真中,在硬件条件一般的情况下,采用“Settime”方式很难达到画面流畅的平滑效果。
“ReaI-time / X-ReaI-time”方式是通知StK 在每次连接更新之后不挂断场景中对象的时间推进,这意味着存在多种方法对每个时间点的对象数据进行外推,外推可以包括位置、速
度、和姿态,这种实时传播器对卫星、导弹、发射设施和地面交通工具等运动对象都存在。这种实时控制方式也存在着危险,因为StK 外推的位置可能没有准确地反映对象的实际位置,合理的设置对象的实时传播器参数,可以有效的降低这种外推误差。用户可以选择不同的传播器外推算法,如最简单的DR(Dead Reckoning)算法和一些复杂的外推算法:卫星的J2 / J4、导弹的BaIIistic 等。“ReaI-time / X-ReaI-time”方式减少外部控制指令的发送,可以最大限度的保证画面的流畅,本文选用这种方式。
在使用“ReaI-time / X-ReaI-time”方式实时控制StK 时,用户可以设置参数LookBehind 来控制传播器记忆对象历史数据的时间长短,也可以设置参数LookAhead 来控制传播器从最后一个数据点外推多远;设某个对象发送给StK 的最后一个数据点的时间戳为
t
i,则传播器只负责外推生成对象在[
t
i- LookBehind,
t
i + LookAhead]区间内的运动参数,因此只有当StK 的演示时间落在到该区间内时,对象才会被StK 的二维或三维窗口显示出来。如果当StK 的演示时间推进到
t
i +LookAhead,而且此时对象下一时刻的数据还没有到来,对象将从屏幕中消失。如图4 所示。
为了避免这种情况发生,要控制StK 的演示速度小于或等于数据发送的速度。
4 获取StK 时间的高精度算法
实现服务器端演示邦元与StK 的高精度时间同步是本系统的关键。传统的做法[6]:在演示邦元的程序中开启一个对StK 当前演示时间的实时监测线程,通过Connect 命令动
态获取StK 的时间,保持演示邦元与StK 的时间同步。这种方法的本质以一定的时间间隔对StK 时间进行离散采样,在采样点瞬时的时间是精确的,但在采样间隔之间,存在着截断误差。设采样时间间隔为△t,StK 的演示速度为V( 演示速度定义为计算机时间每推进1秒,StK 时间推进的数值),则截断误差最大值可达到V·△t,在V 比较大的情况下,这种截断误差是不可忽略的,当V = l 000,△t = 30ms,则截断误差将达到30 秒钟。另一方面,由于每次获得StK 的时间都要发送Connect 命令,当采样间隔△t 较小时,高频率的网络数据传输会增加网络负担。
在“ReaI-time / X-ReaI-time”方式下,StK 内部时间推进原理是:设StK 在机器时间T1时的演示时间为t1,在机器时间T2时的演示时间为t2,假设在T1 ~ T2之间,演示速度V 没有发生变化,则:
t2 = t1 + V·(T2 - T1) (1)
本文利用StK 的内部时间推进原理,实现了一种更加高效、精确的实时获得StK 时间的算法:将服务器端演示邦元程序与StK 主程序放在同一台计算机上( 目的是共享同一台
主机的CPU 时间),在仿真初始节点时间T0( 机器时间),获取StK 的显示时间t0和演示速度V0,StK 的演示速度受演示邦元程序控制:
l)当StK 演示速度不变时,当前机器时刻T 的StK 时间t 可由公式(1)直接计算:t = ti + Vi·(T - Ti)。
其中Ti是靠近时刻T 的最近的一个节点。
2)当StK 的演示速度在机器Ti+l( Ti+l ≤T)时刻被演示邦元改变,需要更新节点数据,重新获取Ti+l时刻StK 的显示时间ti+l和演示速度Vi+l,令Ti = Ti+l,ti = ti+l,Vi = Vi+l,然后返回(l)。
改进后的时间同步算法,具有下面的优点:l)新算法不需要实时对StK 的时间进行采样,只需要在显示速度发生改变的关键时刻,进行时间对准,减少了大量的网络命令传输。
2)新算法的时间模型为连续模型,没有离散采样方法带来的截断误差,精度更高。
参考文献
[ l] 杨颖, 王琦. StK 在计算机仿真中的应用[ M] . 北京: 国防工业出版社, 2005.
[ 2] 周彦, 戴剑伟. HLA 方针程序设计[ M] . 北京: 电子工业出版社,2002.
[ 3] 王达, 邱晓刚, 黄柯棣. 基于StK-RtI 中间件的天地一体作战建模仿真研究[ J] . 系统仿真学报, 2005. 2.
[ 4] StK User s ManuaI Version 4. 0. 5 for PCS[ M] . AnaIyticaI Graphics.INC( AGI) . l998.
[ 5] REAL-tIME DAtA FEEDS IN StK[ M] . AnaIyticaI Graphics. INC( AGI) . 2004.
[ 6] 李睿, 曾德贤. StK 用于网络环境下方针的实现算法[ J] . 航天控制, 2005. 6.
更多STK学习资料免费下载:
http://download.csdn.net/user/appe1943