128 lines
3.7 KiB
Matlab
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
|
|
|