%随机航迹生成 test1
%航迹参考点 ABCDEFGHI 单位为米
%初步的debug完成
%修改步长设置 将转弯的0.005改为0.01 统一 可以!
function [random_track]= random_track_test1
High=0;
randomA=rand;%用于声称随机高度的随机数A
randomX1=rand;%用于计算的随机数1
if randomA<=0.13 %生成随机高度
High=1350*randomX1+1000;
elseif randomA>0.13 &&randomA<=0.38
High=2350+2650*randomX1;
elseif randomA>0.38 &&randomA<=0.70
High=5000+5000*randomX1;
elseif randomA>0.70 &&randomA<=0.92
High=10000+10000*randomX1;
elseif randomA>0.92 &&randomA<=0.99
High=20000+22000*randomX1;
elseif randomA>0.99 &&randomA<=1
High=42000+18000*randomX1;
end
Higho=High*0.3048;%对应米制
Vo=0;
%生成初始速度 随机生成的速度单位为节
randomB=rand;%生成随机速度的参考随机数
randomX2=rand;%用于计算的随机数
if High<=10000
if randomB<=0.005
Vo=45+5*randomX2;
elseif randomB>0.005 && randomB<=0.024
Vo=50+25*randomX2;
elseif randomB>0.024 && randomB<=0.139
Vo=75+25*randomX2;
elseif randomB>0.139 && randomB<=0.314
Vo=100+25*randomX2;
elseif randomB>0.314 && randomB<=0.486
Vo=125+25*randomX2;
elseif randomB>0.486 && randomB<=0.616
Vo=150+25*randomX2;
elseif randomB>0.616 && randomB<=0.700
Vo=175+25*randomX2;
elseif randomB>0.700 && randomB<=0.785
Vo=200+25*randomX2;
elseif randomB>0.785 && randomB<=0.821
Vo=225+25*randomX2;
elseif randomB>0.821 && randomB<=0.895
Vo=250+25*randomX2;
elseif randomB>0.895 && randomB<=0.949
Vo=275+25*randomX2;
elseif randomB>0.949 && randomB<=0.977
Vo=300+25*randomX2;
elseif randomB>0.977 && randomB<=0.988
Vo=325+25*randomX2;
elseif randomB>0.988 && randomB<=0.997
Vo=350+25*randomX2;
elseif randomB>0.997 && randomB<=0.998
Vo=375+25*randomX2;
elseif randomB>0.998 && randomB<=0.999
Vo=400+25*randomX2;
elseif randomB>0.999 && randomB<=1
Vo=425+25*randomX2;
end
else
if randomB<=0.005
Vo=75+5*randomX2;
elseif randomB>0.005 && randomB<=0.034
Vo=100+25*randomX2;
elseif randomB>0.034 && randomB<=0.064
Vo=125+25*randomX2;
elseif randomB>0.064 && randomB<=0.116
Vo=150+25*randomX2;
elseif randomB>0.116 && randomB<=0.171
Vo=175+25*randomX2;
elseif randomB>0.171 && randomB<=0.211
Vo=200+25*randomX2;
elseif randomB>0.211 && randomB<=0.294
Vo=225+25*randomX2;
elseif randomB>0.294 && randomB<=0.361
Vo=250+25*randomX2;
elseif randomB>0.361 && randomB<=0.427
Vo=275+25*randomX2;
elseif randomB>0.427 && randomB<=0.528
Vo=300+25*randomX2;
elseif randomB>0.528 && randomB<=0.602
Vo=325+25*randomX2;
elseif randomB>0.602 && randomB<=0.692
Vo=350+25*randomX2;
elseif randomB>0.692 && randomB<=0.813
Vo=375+25*randomX2;
elseif randomB>0.813 && randomB<=0.883
Vo=400+25*randomX2;
elseif randomB>0.883 && randomB<=0.940
Vo=425+25*randomX2;
elseif randomB>0.940 && randomB<=0.972
Vo=450+25*randomX2;
elseif randomB>0.972 && randomB<=0.987
Vo=475+25*randomX2;
elseif randomB>0.987 && randomB<=0.993
Vo=500+25*randomX2;
elseif randomB>0.993 && randomB<=0.998
Vo=525+25*randomX2;
elseif randomB>0.998 && randomB<=0.999
Vo=550+25*randomX2;
elseif randomB>0.999 && randomB<=1
Vo=575+25*randomX2;
end
end
V1=0;
Vo;
V1=Vo*0.514;%记录米每秒的换算
V2=Vo*0.514/1000;%记录公里每秒
V3=V1*196.8/60;%换成英尺每秒
Vo=Vo*1.852;%将节换为公里小时
Theta=0;
%生成初始仰角 角度制 最后换换算成弧度
randomC=rand;%生成随机仰角的参考随机数
randomX3=rand;%用于计算的随机数
%对于高度层 考虑向西飞行 使用双数高度层
if High<=3000
Theta=0.5+randomX3*4.5;
elseif High<=10000 && High>3000
if randomC<=0.3
Theta=0.5+randomX3*4.5;
else
Theta=-0.5-randomX3*9.5;
end
else
if randomC<=0.5
Theta=0.5+randomX3*4.5;
else
Theta=-0.5-randomX3*9.5;
end
end
Theta=Theta*pi/180;%换成弧度制
%初始化
initpos = [763000 317000 Higho]; % 初始位置在A 高度为英尺 水平为公里
initvel = [-cos(Theta)*V1 0 sin(Theta)*V1]; % 初始速度
initacc = [0 0 0]; % 初始加速度 默认为0
phi=0*pi/180; % 初始滚转 默认为0
theta=Theta; % 初始仰角 之前计算过
psi=270*pi/180; % 初始偏航 与初始航向相等
initdcm=eulr2dcm([phi theta psi]); % 计算初始飞机姿态方向余弦矩阵 程序默认
%轨迹生成
%轨迹为初始先由初始位置飞行至目标高度层 然后不再进行加/减速
%到达目标高度后 平飞飞至航迹参考点C 转弯飞行
%方向转弯后 进行上升或下降 当更多的是平飞 调节1-2个飞行高度层
%结束调节高度后 转弯飞向H点 不再进行更多的飞行调整
%T1的计算
T1=0;
randomD=rand;
T_part1=410*(2/3)/(cos(Theta)*Vo)*3600;%条件判断还有问题!!!!!问题解决
while ( abs(randomD*T_part1*V3*sin(Theta)+High-3000)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-4900)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-6900)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-8900)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-10800)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-12800)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-14800)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-16700)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-18700)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-20700)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-22600)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-24600)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-26600)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-29100)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-31100)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-31100)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-33100)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-35100)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-37100)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-39100)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-41100)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-44900)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-48900)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-52900)>=3 &&abs(randomD*T_part1*V3*sin(Theta)+High-56900)>=3)
randomD=rand;
while randomD*T_part1*V3*sin(Theta)+High<1000
randomD=rand;%生成随机时间的参考随机数
end
end
T1=randomD*T_part1;%T1为随机抽取的目标高度层所需时间
High1=0;
High1=High+T1*V3*sin(Theta);%记录当前高度 英尺
%计算转弯半径
Ro=0;
Ro=V1*V1/(9.8*tan(15*pi/180))/1000;%换算成公里
delta_X1=Ro/tan(73*pi/180);
%计算T2
T2=(410-delta_X1)/V2-T1;
%生成随机仰角Pitch
Pitch=0;
randomE=rand;
randomX4=rand;%参考上方生成初始迎角的方式
if High1<=3000
Pitch=0.5+randomX4*4.5;
elseif High1<=10000 && High1>3000
if randomE<=0.3
Pitch=0.5+randomX4*4.5;
else
Pitch=-0.5-randomX4*9.5;
end
else
if randomE<=0.5
Pitch=0.5+randomX4*4.5;
else
Pitch=-0.5-randomX4*9.5;
end
end
%Pitch=Pitch*pi/180;%换成弧度制
%T3的计算
T3=0;
randomF=rand;
T_part2=(305-delta_X1)*(2/3)/(cosd(Pitch)*Vo)*3600;
%abs(randomF*T_part2*V3*sind(Pitch))<2500 &&
while ( abs(randomF*T_part2*V3*sind(Pitch)+High1-3000)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-4900)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-6900)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-8900)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-10800)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-12800)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-14800)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-16700)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-18700)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-20700)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-22600)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-24600)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-26600)>=3 &&abs(randomF*T_part2*V3*sind(Pitch)+High1-2
- 1
- 2
- 3
- 4
- 5
- 6
前往页