STK空间目标建模技术的分析和应用

144 篇文章 151 订阅

STK空间目标建模技术的分析和应用

张延鑫   金巍
酒泉卫星发射中心

摘要  本文首先介绍了创建STK模型的两种主要方法,在充分比较两者各自的优缺点后,又通过一个具体的实例,详细介绍了如何利用标准的STK建模语言为空间目标等对象建立模型,如何设置它们的位置、大小、方向、变换以及纹理和关节等属性,如何在模型查看程序(MDE)中观察、测试、分析模型的结构和性能,以及如何将创建好的模型应用到一个具体的STK三维场景中去的方法。
关键词  STK;纹理;关节;MDE;三维场景

1 引言

STK的全称是Satellite Tool Kit(卫星仿真工具包),是由美国AGI公司开发,并在当前航天工业领域中处于领先地位的卫星系统分析软件,利用它可以快速方便地分析航天任务中各种错综复杂的情况,并能以形象直观的三维场景方式真实地再现空间目标整个寿命周期(包括发射、轨道插入、定轨、在轨任务规划、变轨、脱轨等)的运行情况(如位置、姿态、可见性、传感器覆盖性及空间实时操作等),为专家、领导的正确分析和决策提供强有力的支持。三维建模技术作为STK的重要组成部分,为空间目标的分析提供了很大的便利。
本文首先介绍了创建STK模型的两种主要方法,并比较了这两种方法的优缺点。然后详细介绍了如何利用STK建模语言建立三维模型;如何设置模型的位置、大小、方向、关节、变换等属性;如何在模型查看程序(MDE)中观察、测试、分析模型的结构和性能;以及如何在STK场景中应用已创建的模型。

2 建立模型的常用方法

目前创建STK模型主要有两种方法:
1.使用三维模型制作软件LightWave创建空间三维立体模型,然后使用转换工具,将做好的模型文件转换成标准的STK模型文件。其中使用的转换工具是STK网站提供的LwConvert.exe。
2.使用标准的STK建模语言手工编辑。STK建模语言可以在任意文本编辑器中使用。
上述两种方法各有其优缺点,对于习惯用专业建模软件(如LightWave、3DMax等)来创建模型的人来说,前者的优点是使用简单方便,而且对结构比较复杂的模型(如飞机、坦克、舰船等)也不难操作,但是通过转化生成的扩展名为.mdl的模型文件全部由多边形集合(polygonmesh)组成,很难看懂且极难修改(若要修改模型中某一组件,即模型某一组成部分的大小、位置、方向、纹理等属性,就必须在建模软件中重新制作,然后再转化成.mdl格式),一旦加载到具体的STK场景中以后,修改起来就更加不便了。
另外,在STK模型中占有相当重要地位的活动关节(模型中可进行平移、旋转、缩放控制的部分),用建模软件无法产生,这对于在整个寿命周期必须做出很多动作的空间目标来说,是不能接受的。
而使用后一种方法,即用标准的STK建模语言进行编辑,所有的组件都是由操作者用STK提供的几何结构描述模块(类似于C语言中的函数)生成,这些几何结构包括螺旋体、多边形、旋转体和球体等等。利用这种方法能够方便快捷地生成一些形状比较规整的模型(如火箭、导弹、卫星等),而且根据实际需要,可以随时随地对任何组件的纹理和活动关节等进行精确的控制和修改,不过对于一些结构很复杂的模型(如飞机、坦克等)来说,操作起来就比较麻烦了。
相比之下,前者更适合于制作结构复杂、不需要活动关节且生成之后几乎不需要什么改动的模型,而后者则适合于制作结构比较规整但经常需要进行调试和修改的模型,两种方法都各有自己的优势,又有各自的不足之处。事实上,在模型的制作过程中,可以根据实际需要将这两种方法结合起来使用,这样就兼顾了操作简单和修改方便两个优点,使得模型的制作过程变得更加快捷和便利。
由于使用专业建模软件创建模型的方法已经很成熟,关于这方面的书籍和资料也已经很普遍,这里就不再赘述,下面就重点介绍一下如何利用STK建模语言建立一个STK模型。

3 利用STK建模语言建立模型文件

在用STK建模语言建立模型文件之前,先来了解一下模型文件的组成结构。3D模型文件为分级结构,包括组件、实体和参数。每个组件都对应着模型中一个特定的组成部分,例如卫星上的天线、太阳帆板,导弹的一级、二级;每个实体都定义了一个具体的几何结构,如圆柱体、多边形;而参数则是为了更详尽地描述组件和实体的属性和特征,如颜色、大小、纹理等等。图1和图2就是描述一个模型文件组成结构的树形图(其中矩形框表示组件,六边形框表示实体,框下面的汉字是对框内组件名或实体名的注释)。



组件是模型的基本组成部分,一个模型可由一个或多个组件组成,一个组件又可由一个或多个实体组成。每个实体定义了一个几何结构,模型文件中可用的实体有Extrusion(突起),Cylinder(圆柱体、圆锥体),Helix(螺旋体),Polygon(多边形),Polygonmesh(多边形集合),Revolve(旋转体),Skin(表面),、Sphere(球体)和Refer(引用)。
模型文件的每个组件都必须使用关键词Rear(引用)提交,同时文件中还必须包含Root(根)命令,Root命令所在的组件是模型中所有组件的父级。

下面介绍导弹模型Missile.mdl的创建过程。

1.新建一个模型

建立3D模型最简便的方法是修改现成的模型文件,将它重命名为新文件,然后使用标准的文本编辑器打开并进行编辑。任意一个扩展名为.mdl的模型文件副本重命名为Missle.mdl,再将文件内容清空,或根据实际需要保留可以重用的部分组件。

2.添加组件或子组件

导弹模型由一级、二级和末修级组成。首先建立根组件,命名为Missile,根组件使用Root标识。在根组件中添加三个子组件,并命名为YiJi、ErJi和MoXiuJi,共同组成Missile组件。具体代码如下。

Component Missle  #定义组件命为Missle
    Root #表示Missile是模型文件中最高层组件的标志
Refer #子组件语句开始标志
Component MoXiuJi#子组件名为MoXiuJi
EndRefer #子组件语句结束标志
Refer
Component Erji.

EndRefer
Refer
Component YiJi
EndRefer
EndComponent #组件定义语句结束标志
注:代码中以“#”开头的文字是代码的注释。

3.为组件增加实体

组件YiJi的子组件JiJianHouDuan由一个空心的旋转体(即没有上下底的圆台)构成,它的颜色是灰色,高0.2米,上底半径0.55米,下底半径0.6米。在模型文件Missle.mdl中添加如下代码。

Component JiJianHouDuan

Revolve #旋转体实体定义语句开始标志

FaceColor %192192192 #旋转体颜色RGB值
StartAngle 0 #绕x轴旋转的起始角度
EndAngle 360 #绕X轴旋转的终止角度
NumRevolve 36 #绕X轴旋转的次数
NumVerts 2 #绕X轴旋转的直线上包含的点数
Data #绕x轴旋转的直线上包含的点的坐标
0.0  0.55  0.0
0.2  0.6    0.0
EndRevolve#旋转体实体定义语句结束标志
EndComponent
按同样的方法,为组件YiJi的YiJiFaDongJi、YiJiJi、FlameAssm等子组件分别增加Revolve(旋转体)、Skin(表面)和Polygon(多边形)等实体。

4.组件的变换

组件的变换实现组件的位置、方向和大小的改变,在模型文件中对应的语句分别为Translate(平移)、Rotate(旋转)和Scale(缩放)。每条语句中均有三个参数,其中Translate<tx><ty><tz>表示组件在X、Y、z轴上移动的距离分别为tx、ty、tz,Rotate<rx><ry><rz>表示组件绕x、Y、z轴转动的角度分别为rx、ry、rz,Scale<sx><sy><sz>表示组件在X、Y、z轴缩放的比例分别为SX、sy、sz。
一般来说,模型的任意组件都可以在坐标系原点创建,然后通过必要的变换将它放到特定的位置。需要强调的是,如果一个组件既要平移又要旋转,那么这两种变换的顺序是必须经过严格的计算来确定,顺序不同,则变换后的效果就可能完全不一样。下面这段语句表示YiJi组件的JiJianHouDuan子组件沿X轴平移7.501 m,而子组件FlameAssm则是先绕X轴旋转180度,再绕Z轴旋转90度,最后沿X轴平移14.118 m。
Component YiJi
Refer
Translate 7.501 0 0

Component JiJianHouDuan
EndRefer

.

.

.


Refer
Rotate 180 0 90
Translate 14.118 0 0
Component FlameAssm
EndRefer
EndComponent

5.增加活动关节

活动关节对空间目标(如卫星、导弹等)模型来说非常重要。通过定义活动关节,我们可以实现导弹的一二级分离、火焰的点火与熄灭,也可以实现卫星太阳帆板的展开、通信天线的伸缩,这样使得三维场景的显示更加真实。
活动关节的命令种类跟组件的变换一样有三种,即平移(xTranslate、yTranslate、zTranslate)、旋转(xRotate、yRotate、zRotate)和缩放(uniformScale),具体的命令形式为:<Articulation Command><Articulation Command Name><Min Value><Init Value><Max Value>,其中Articulation CommandName是我们为这个关节命令定义的名字。对模型活动关节的控制,实际上就是修改变量值的过程。
下面的语句为YiJi组件的子组件HameAssm(尾焰)添加了几个活动关节。
Component YiJi
Refer
Rotate 180 0 90
Translate 14.118 0 0
Articulation Flame_YiJi #关节语句开始标志,同时给关节命名为Flame_YiJi
unifomlScale Size 0 0 1 #在X、Y、z轴上统一的缩放比例范围是0一1,初值为0
xRotate Roll  -360 0 360
yRotate Pitch -360 0 360
zRotate Yaw  -360 0 360
#以上3行定义绕x轴、Y轴、z轴旋转的角度范围是-360度~360度,初值为0
xTranslate MoveX -1000 0 1000
yTranslate MoveY -1000 0 1000
zTranslate MoveZ -1000 0 1000
#以上3行定义,沿x轴、Y轴、z轴平移的距离范围是-1000~1000 m,初值为0
EndArticulation #关节语句结束标志
Component FlameAssm #指定与这个关节相关的组件
EndRefer
EndComponent

6.添加纹理

在实际的建模过程中,我们往往不会满足于仅仅将模型用一些简单的几何结构拼凑起来,而是希望我们建立的模型具有尽可能接近真实效果的光照和阴影等特征。STK中可以将一幅图像(如木纹、布料、石头、金属等真实物体表面的照片)应用到几何结构的表面以提供附加的细节特征,从而实现模型高度的真实感。这种技术通常被称为“纹理贴图”,我们提供的图像就叫做“纹理”。

在STK中,添加纹理的方法比较简单,只需在实体描述语句中捕^几行描述纹理文件的语句即可,下面以组件火焰TailGIow为例来说明如何添加纹理的过程。
Component  TailGlow
Polygon
FaceEmissionColor white
Texture #纹理描述语句开始标忠
RGB flametex -orange#指定需要添加的纹理文件名(扩展名为.ppm)
Alpha flamealpha3 #指定需要添加的透明度纹理文件名(扩展名为.ppm)
Parm AA #参数AA表示纹理不透明,应用反锯齿技术使纹理平滑
EndTextum  #纹理描述语句结束标志
TxGen #将二维纹理图片转化为三维图片的涪旬
NumVerts 4
Data
0.0 96 -12.5
0.0 96 12.5
0.0 -4 0 12.5
0.0 -4 0 -12.5
EndPolygon
EndComponent

4 模型开发环境MDE的使用

模型开发环境MDE(Model Development Environment)是随VO模块一起提供的一个工具,利用它打开U编辑好的模型立件,就可以查看、编辑和测试我们需要了解的模型。

使用MDE程序打开Missilemdl文件,如图3所示。


模型上面的红、绿、蓝三条线分别表示导弹弹体坐标系的x、Y、Z轴。通过鼠标控制模型在窗口中的变换(其中鼠标左键控制模型的旋转,Ctrl+左键控制平移.右键和滚轮均可控制缩放),能够从不同位置、不同角度观察到模型各个组成部分的细节特征,从而验证模型是否满足实际的需要。
除了可以查看模型外,MDE的EDIT菜单下还有下面几项主要功能:
1 Edit-Articulatioll(关节)
单击Edit-Articulation命令,打开模型的关节对话框,在里面可以对整个模型或某组件的关节进行控制,下面就以一级尾焰关节为倒,来介绍关节的控制方法。
在“Articulation”列表框中选择一级尾焰关节Flame_YiJi,然后在“Transformations”列表框中将关节命令名“Size”的值从0变为1。这样,在MDE窗口中,就可以明显地看到导弹的尾焰了,如图4所示。



2 Edit-Reducion(缩图)
这个命令可以控制所选组件的revolve(旋转体)、skin(表而)和polygon(多边形)等实体的显示精度。除非计算机性能很差,或者待显示的模型太多,否则采用默认值即可。



以上是在MDE程序中使用较多的菜单命令,其他的就不再赘述

5 在VO场景中载入和观察3D模型

现在我们用新建的模犁来史换皴认导掸模型,并存VO场嚣中察看新模型
(1)在STK浏览窗,选中导弹别象,打开VO属性窗口。
(2)在Model栏,选择...(浏览文件)按钮。

(3)寻找Missile.mdl文件并打开。点击VO属性的Apply(应用)按钮。

(4)现在,在VO窗口,点击View Position and Direction按钮(眼球图标),选择导弹Missile(即在VO场景中以Missile为中心观看),点击确定。

(5)在VO窗口中,町以看到我们新建的模掣.如图5所示。



(6)打开导弹模型的VO属性窗口,在Model栏,点击Articulations区域下的View按钮。导弹以及它所有组件的活动关节(如Size、Roll、Pitch、Yaw、MoveX、MoveY和MoveZ等)都会出现在对话框中,选择其中之一,拖动滑动条,观察VO窗口中的变化。完成后关闭窗口。
(7)在VO窗口中缩放和旋转,观察导弹运动情况。完成后保存并关闭场景。

6 结束语

从理论上讲,利用文中介绍的方法,我们已经能够建立任何类型的模型,如飞机、地面站、运载器、导弹、卫星、舰船和地面目标等,但由于对模型很多参数的设置还处于初步尝试的阶段,对许多工具的使用还不够熟练,因此模型制作的效果还远远没有达到尽善尽美的程度。要创建出更形象、更逼真、更美观的模型,还必须在如何更好地体现模型的层次感、如何确保各组件之间过渡的平滑度、以及如何制作更精美的纹理图片上进一步摸索和实践。

更多STK学习资料免费下载:

http://download.csdn.net/user/appe1943


  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值