MATLAB与STK互联48:仿真案例9——航空器路径设置(aircraft)

在一些任务仿真中,可能会用到航空器。本文就借着AGI公司提供的例子,简单介绍下aircraft对象。
关于这个例子的简单描述:假设存在一个探空气球,在高度变化、速度变化、位置变化有约束的条件下,随机生成探空气球的漂移路径。例子中使用的单位:高度单位:英尺(foot),速度单位:节(knot,海里/小时)。例子中有这些单位跟国际单位的转换关系,所以就沿用了这些单位。
下面上代码:
uiap = actxserver(‘STK11.application’);
root = uiap.Personality2;
root.NewScenario(‘aircraft’);
sc = root.CurrentScenario;
%插入aircraft对象
aircraft = sc.Children.New(‘eAircraft’,‘mycraft’);
查看mycraft对象的属性页,如下图所示。这个例子中,只应用到了Route,也就是设置航空器的路径。Route的Propagator类型包括:GreatArc、StkExtternal、realtime、aviator,本例中只用到了GreatArc。
在这里插入图片描述
aircraft.SetRouteType(‘ePropagatorGreatArc’);
aircraft.route.Method = ‘eDetermineTimeAccFromVel’;
%Range_LA:偏离初始点的最大纬度
%Range_LO:偏离初始点的最大经度
Range_LA = 1.0;
Range_LO = 1.0;

%Max_Speed:最大速度,单位:节
%Min_Speed:最小速度,单位:节
Max_Speed = 20;
Min_Speed = 1;

%First_Waypoint:初始位置坐标,纬度、经度
%Number_of_Waypoints:路径点数量
%Starting_Altitude:初始高度,单位:英尺
%Max_Altitude_Change:最大高度变化,单位:英尺

First_Waypoint = [2.0, -50];
Number_of_Waypoints = 60;
Starting_Altitude = 70000;
Max_Altitude_Change = 5000;

接下来是生成60个路径点的纬度、经度、高度、速度
英制单位转国际单位,Feet_to_Km:英尺换算为公里,Knots_to_Km_per_Second:节转换为km/s。
Feet_to_Km = 0.3048/1000;
Knots_to_Km_per_Second = 1.852/3600;

% 随机生成1、-1组成的数组,数组长度与路径点数量相等。这个数组用于路径点纬度生成
u = rand(Number_of_Waypoints, 1);
ind = u >= 0.5;
u(ind) = 1;
u(~ind) = -1;

% 随机生成1、-1组成的数组,数组长度与路径点数量相等。这个数组用于路径点经度生成
v = rand(Number_of_Waypoints, 1);
ind = v >= 0.5;
v(ind) = 1;
v(~ind) = -1;

% 随机生成1、-1组成的数组,数组长度与路径点数量相等。这个数组用于路径点高度生成
x = rand(Number_of_Waypoints, 1);
ind = x >= 0.5;
x(ind) = 1;
x(~ind) = -1;

% 随机生成1、-1组成的数组,数组长度与路径点数量相等。这个数组用于路径点速度生成
y = rand(Number_of_Waypoints,1);
ind = y >= 0.5;
y(ind) = 1;
y(~ind) = -1;

%在计算高度时,是按照1000英尺来计算的,所以这里先把最大高度变化量除以1000,后续应用Altitude_Difference变量。
Altitude_Difference = Max_Altitude_Change/1000;

for i=1:Number_of_Waypoints
if i == 1
Results(i,1) = First_Waypoint(1);
Results(i,2) = First_Waypoint(2);
Results(i,3) = (Starting_Altitude)Feet_to_Km;
Results(i,4) = (randi([Min_Speed,Max_Speed]))Knots_to_Km_per_Second;
else
Results(i,1) = First_Waypoint(1) + randi(100,1)/100
Range_LA
u(i);
Results(i,2) = First_Waypoint(2) + randi(100,1)/100Range_LOv(i);
Results(i,3) = (Starting_Altitude + randi(Altitude_Difference, 1)1000x(i))*Feet_to_Km;
Results(i,4) = (randi([Min_Speed,Max_Speed]))*Knots_to_Km_per_Second;
end
end

%添加路径点
for i = 1 : Number_of_Waypoints

waypoint = aircraft.route.Waypoints.Add();
waypoint.Latitude = Results(i,1);
waypoint.Longitude = Results(i,2);
waypoint.Altitude = Results(i,3);  
waypoint.Speed = Results(i,4);   

end

%添加完成后,进行运行
aircraft.route.Propagate;

运行后,查看mycraft的Route属性页,有如下结果:
在这里插入图片描述
mycraft对象路径在三维场景中的显示效果如下图。
在这里插入图片描述
先写到这里,大家可以多尝试一下,其他方式、其他参数的设置,这里我就给不出演示和分析了。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值