Files
sunny360vfe_proj/tasks/csas_levelflight_shoots.m
2025-06-04 14:13:22 +08:00

128 lines
3.7 KiB
Matlab

function csas_levelflight_shoots(H,V,m)
proj = slproject.getCurrentProject;
wd = cd;
cd([proj.RootFolder '/work']);
[success,opts1, op_point] = get_trim_Lon(H,V,m);
if success
X0 = [0 0 opts1.h];
Z0 = [0 0 -opts1.h];
alpha = opts1.alpha;
v = opts1.v;
tht0 = opts1.tht;
V0 = [v*cos(alpha) 0 v*sin(alpha)];
Att0 = [0 tht0 0];
thr0 = opts1.throttle;
else
v = V;
X0 = [0 0 H];
Z0 = [0 0 -H];
Att0 = [0 0 0];
V0 = [V 0 0];
alpha = 0;
end
mdlName = 'ET39_sim_csas';
load('ET39_sim_csas_rtp.mat','rtp');
tf = 30;
in = struct;
in.time = [0 15 15.5 19 19.5 25 30]';
slen = length(in.time);
in.signals(1).values = single([0 0 30/57.3 30/57.3 0 0 0]'); % phi_c
in.signals(2).values = zeros(slen,1,'single'); % hdot_c
in.signals(3).values = ones(slen,1,'single').*v; % as_c
n = 50 ;
out = cell(n,1);
rtp1 = rsimsetrtpparam(rtp, 'X0', X0, ...
'V0', V0, ...
'Att0', Att0, ...
'mass0', m ...
);
out{1} = oneShoot(mdlName, rtp1, in, tf, 0);
for i=2:n
mass = m + (rand()-0.5)*2*2;
cg_x = (rand()-0.5)*2*0.01;
v2= v + (rand()-0.5)*2*2;
V0 = [v2*cos(alpha) 0 v2*sin(alpha)];
InertiaMoments_bias(1,1) = 6.432*(0.2*(rand()-0.5)*1);
InertiaMoments_bias(2,2) = 6.411*(0.2*(rand()-0.5)*1);
InertiaMoments_bias(3,3) = 12.112*(0.2*(rand()-0.5)*1);
rtp1 = rsimsetrtpparam(rtp, 'X0', X0, ...
'V0', V0, ...
'Att0', Att0, ...
'mass0', mass, ...
'CG_bias_m', [cg_x 0 0],...
'InertiaMoments_bias_kg_m2',InertiaMoments_bias ,...
'CD0UncertVal', 0.053*(rand()-0.5)*2*0.3 ,...
'CLaUncertGain', (rand()-0.5)*2*0.2 ,...
'CL0UncertVal', 0.62*(rand()-0.5)*2*0.3 ,...
'CLdelUncertGain', 1.0+(rand()-0.5)*2*0.2 , ...
'CLderUncertGain', 1.0+(rand()-0.5)*2*0.2 ,...
'CLqUncertGain', 1.0+(rand()-0.5)*2*0.5 ,...
'CY0UncertVal', 0.01*(rand()-0.5)*2*0.3 ,...
'CYbUncertGain', (rand()-0.5)*2*0.2 ,...
'CYdelUncertGain', 1.0+(rand()-0.5)*2*0.2 ,...
'CYderUncertGain', 1.0+(rand()-0.5)*2*0.2 ,...
'CYpUncertGain', 1.0+(rand()-0.5)*2*0.5 ,...
'CYrUncertGain', 1.0+(rand()-0.5)*2*0.2 ,...
'Cl0UncertVal', 0.00015*(rand()-0.5)*2*0.3 ,...
'ClbUncertGain', (rand()-0.5)*2*0.2 ,...
'CldarUncertGain', 1.0+(rand()-0.5)*2*0.2 ,...
'CldalUncertGain', 1.0+(rand()-0.5)*2*0.2 ,...
'ClpUncertGain', 1.0+(rand()-0.5)*2*0.5 ,...
'ClrUncertGain', 1.0+(rand()-0.5)*2*0.5 ,...
'Cm0UncertVal', 0.06*(rand()-0.5)*2*0.3 ,...
'CmaUncertPct', (rand()-0.5)*2*0.2 ,...
'CmdelUncertGain', 1.0+(rand()-0.5)*2*0.2 ,...
'CmderUncertGain', 1.0+(rand()-0.5)*2*0.2 ,...
'CmqUncertGain', 1.0+(rand()-0.5)*2*0.5 ,...
'Cn0UncertVal', 0.0005*(rand()-0.5)*2*0.3 ,...
'CnbUncertGain', (rand()-0.5)*2*0.2 ,...
'CnderUncertGain', 1.0+(rand()-0.5)*2*0.2 ,...
'CndelUncertGain', 1.0+(rand()-0.5)*2*0.2 ,...
'CnpUncertGain', 1.0+(rand()-0.5)*2*0.5 ,...
'CnrUncertGain', 1.0+(rand()-0.5)*2*0.5, ...
'deadband_dal', 0.2/57.3,...
'deadband_dar', 0.2/57.3,...
'deadband_del', 0.2/57.3,...
'deadband_der', 0.2/57.3);
%w = getCurrentWorker;
%pid = w.ProcessId;
pid = 1;
out{i} = oneShoot(mdlName, rtp1, in, tf, pid);
end
csas_shoots_plot(out);
% h{1,1} = '滚转通道';
% h{1,2} = figure(1);
% h{2,1} = '偏航通道';
% h{2,2} = figure(2);
% h{3,1} = '俯仰通道';
% h{3,2} = figure(3);
% h{4,1} = '状态参数';
% h{4,2} = figure(4);
% cd([proj.RootFolder '/docs']);
% labl = ['./H=',num2str(H), ' V=',num2str(V), ' Mass=',num2str(m)];
% if exist(labl,'dir') == 0
% mkdir(labl(3:end));
% else
% rmdir(labl(3:end),'s');
% mkdir(labl(3:end));
% end
% eval(['cd ' ,'''',labl(3:end),'''']);
% for idx=1:length(h)
% savefig(h{idx,2},h{idx,1});
% end
cd(wd);
end