天天看点

STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定

1. 场景设置

1.1 显示STK窗口界面

%打开一个STK应用实例
uiapp = actxserver('STK10.application');
%获取STK用户界面
root = uiapp.Personality2;
%显示界面
uiapp.visible = 1; 
           

需要注意是创建uiapp的STK版本号要和本机安装的版本号一致,我这里安装的是STK10。

注:下面代码中出现的root变量均为本段代码中的root。

注意

(1)如果需要打开多个STK窗口(每个窗口为一个STK实例),为了防止STK窗口之间相互影响,需要进行隔离,具体做法是:

root.Isolate();
           

这是因为MATLAB和STK交互是直接与STK引擎交互,而窗口中的数据又是从引擎中读取的。 

 (2)运行MATLAB自动化代码时STK窗口要保持打开。

1.2 加载场景

(1)创建一个新场景 

创建一个名为STK Automation的场景:

% 创建一个新场景
root.NewScenario('STK Automation');  
           

(2)加载一个已有场景 

root.LoadScenario('D:\Users\Desktop\AirSimualtion.sc');
           

1.3 设置场景中物理量单位

场景包含的物理量的单位和可选值可以在对象浏览器中右键单击场景打开其属性窗口查看:

STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定

 设置单位的自动化代码示例:

设置时间日期单位

root.UnitPreferences.Item('DateFormat').SetCurrentUnit('UTCG');
           

 设置距离单位

root.UnitPreferences.Item('Distance').SetCurrentUnit('m');
           

其他单位照着场景属性窗口中的单位列表设置就行。 

 注意

在MATLAB命令行设置单位后,打开STK中的场景属性窗口,发现界面中的单位没有设定为我们选定的那个值,这是因为使用MATLAB命令行自动化时,是直接与STK引擎交互的,不是操作UI组件,打开属性窗口时,窗口在初始化时会采用默认值,因此我们并没有看到单位自动选中为我们设定的值。例如更改单位为m:

root.UnitPreferences.Item('Distance').SetCurrentUnit('m');
           

打开属性窗口查看单位发现依然是默认值km:

STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定

 使用命令行获取单位:

distance = root.UnitPreferences.GetCurrentUnitAbbrv("DistanceUnit");
           

 输出:

STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定

 可以发现单位格式设置实际上已经生效。

1.4 设置场景的仿真时间区间

打开一个STK窗口,并创建一个时间日期格式为UTCG的场景:

%设置时间日期格式为UTCG
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('UTCG');
%设置仿真时间区间
root.CurrentScenario.SetTimePeriod('1 Jul 2013 12:00:00.000', '2 Jul 2013 12:00:00.000');  
           

打开场景属性窗口,会发现时间区间跟着改变。 

注意

必须先设置时间日期格式然后再设置时间区间,如果时间日期格式与设定的时间区间初末时刻值格式不匹配则会报错。

2. 模型设置

2.1 插入飞机模型

aircraft = root.CurrentScenario.Children.New('eAircraft', 'MyAircraft');
           

现在就往当前创建的场景中添加了一个飞机,还需要设置至少两个轨迹点才能在视图上显示飞机模型。

STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定

 设置完后模型就显示出来了,现在显示的是默认飞机模型。

STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定

2.2 查看飞机的属性 

下面是一些仿真中常用属性的查看方法:

(1)查看路径点预报模型

aircraft.RouteType
           

输出:

STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定

(2)飞机的三维模型设置

aircraft.VO.Model.ModelData.get()
           

 输出:

STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定

 (3)路径点信息

路径点个数

aircraft.Route.Waypoints.Count()
           

导出所有路径点到MATLAB工作区:

aircraft.Route.Waypoints.ToArray()
           

2.3 设置飞机三维模型文件

设置飞机的三维文件有两种方法:

(1)通过设置文件名设定

三维模型的文件名不是任意字符串,而是在STK安装目录中的相对路径,一般STK将预置3D飞机模型保存在安装目录的STKData\VO\Models\Air目录中,因此使用文件名设置飞机三维模型的方法是:

aircraft.VO.Model.ModelData
.set('Filename','STKData\VO\Models\Air\b-52_stratofortress.mdl')
           

运行这个MATLAB命令可以发现模型从默认飞机设置为B52轰炸机: 

STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定

(2)通过绝对路径设置

aircraft.VO.Model.ModelData
.set('FileName',
'C:\Program Files (x86)\AGI\STK 10\STKData\VO\Models\Air\f-22a_raptor.mdl')
           

现在飞机的三维模型变为F22a了:

STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定

3. 路径点设定

3.1 添加单个轨迹点

% IAgAircraft aircraft: Aircraft object 
% Set route to great arc, method and altitude reference 
%路径点预测模型
aircraft.SetRouteType('ePropagatorGreatArc'); 
%获取飞机的路径对象
route = aircraft.Route; 
%路径生成方法,这里设置的是根据速度确定中间点的加速度和时刻
route.Method = 'eDetermineTimeAccFromVel'; 
% 高度参考系
route.SetAltitudeRefType('eWayPtAltRefMSL'); 
% 添加第一个轨迹点
waypoint = route.Waypoints.Add(); 
waypoint.Latitude = 37.5378; 
waypoint.Longitude = 14.2207; 
waypoint.Altitude = 5;  % km 
waypoint.Speed = .1;    % km/sec 
% 添加第二个轨迹点
waypoint2 = route.Waypoints.Add(); 
waypoint2.Latitude = 47.2602; 
waypoint2.Longitude = 30.5517; 
waypoint2.Altitude = 5; % km 
waypoint2.Speed = .1;    % km/sec 
%保存轨迹点
route.Propagate; 

           

代码中aircraft就是上面插入的飞机模型。 运行代码可以看到轨迹设置已经生效:

STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定
STK 航空仿真(二)STK MATLAB自动化(2)场景和飞机模型基础设置1. 场景设置2. 模型设置3. 路径点设定

3.2 添加多个路径点 

% IAgAircraft aircraft: Aircraft object 
route = aircraft.Route; 
ptsArray = {37.5378,14.2207,5000,20,5; 
            47.2602,30.5517,5000,20,5;
            47.2602,30.5517,5000,20,5;
            37.5378,14.2207,5000,20,5;}; 
route.SetPointsSmoothRateAndPropagate(ptsArray); 
%Propagate the route 
route.Propagate; 
           

 3.3 注意事项

(1)设置多个路径点时,必须传入2个或以上的点,否则将会清空之前存在的所有路径点。这意味着ptsArray至少是2维数组。

(2)路径点设置时会自动去重,相同点只会设置一次。

(3)设置飞机路径点时,STK的单位设置要和输入的数据点单位一致,否则会自动进行单位转换。