Files
2022-04-10 23:58:09 +02:00

146 lines
4.5 KiB
Matlab

clear all;
%% Initializing VI files
addpath_vicrt_20;
cfg = createCfg('vicrt_cdb.cfg');
systemFile = 'file://C:/Users/ashwi/Desktop/VIgrade/MMRtestVehicle.xml';
modelDirFiles='crtWork';
systemStruct = generateSystemStruct(systemFile,cfg,modelDirFiles);
baseFingerprint='fingerprintSLT.xml';
%% Inputs
aeroBalF = .2:0.01:.32;
aeroBalR = ones(size(aeroBalF)) - aeroBalF;
df = 495.4;
aeroFile = 'C:\Program Files\VI-grade\VI-CarRealTime 20\acarrt\MMR_2019.cdb\aero_forces.tbl\MMR_2019_aero.aer';
%% Output arrays
laptime = NaN(size(aeroBalF));
pitchAng = NaN(size(aeroBalF));
u = cell(size(aeroBalF));
Faf = cell(size(aeroBalF));
Far = cell(size(aeroBalF));
gear = cell(size(aeroBalF));
%% Batch Simulations
for i = 1:length(aeroBalF)
fdf = df .* aeroBalF(i);
rdf = df .* aeroBalR(i);
Parse_aero(aeroFile,fdf, rdf);
[successFlag, outputNameList]=runViCrt(baseFingerprint,systemStruct,'work',modelDirFiles);
split = regexp(outputNameList{1, 1} , '\', 'split');
ResFile = strcat(split{1,2},'.csv');
OUT{i} = readtable(ResFile);
laptime(i) = OUT{i}.xTime(end);
pitchAng(i) = mean(OUT{i}.Chassis_Pospitch);
u{i} = OUT{i}.Speed;
Faf{i} = OUT{i}.Aero_DownForceF;
Far{i} = OUT{i}.Aero_DownForceR;
gear{i} = OUT{i}.Driver_Gear;
X{i} = OUT{i}.X;
Y{i} = OUT{i}.Y;
s(i) = OUT{i}.S(end);
end
%% Plots
% Laptime
figure(1)
clf
b = bar(aeroBalF,laptime,'BarWidth',0.7 );
text(b.XEndPoints,b.YEndPoints,string(b.YEndPoints),'HorizontalAlignment','center',...
'VerticalAlignment','bottom');
ylim([min(laptime)-1 max(laptime)+1]);
title('Laptime')
xlabel('Aero balance- Front [*100%]')
ylabel('Laptime [s]')
grid on;
% Speed map
figure(2)
clf
for i = 1:length(aeroBalF)
ax(i) = subplot(round(length(aeroBalF)/2),2,i);
h = surf([X{i} X{i}],[Y{i} Y{i}],zeros(size([Y{i} Y{i}])),[u{i} u{i}],'EdgeColor','interp');
title(strjoin({'Velocity maps | Front aero distribution=', sprintf('%d',aeroBalF(i)*100),'%'}));
hold on
plot(X{i}(1),Y{i}(1),'+')
hold on
idx = find(abs(diff(OUT{i}.Driver_Gear))) + 1; % gear change index
plot(X{i}(idx),Y{i}(idx),'d')
gearNum = cellstr(num2str(OUT{i}.Driver_Gear(idx)));
text(X{i}(idx)+0.1,Y{i}(idx)+3, gearNum,'FontSize',8);
[maxu(i),idxu] = max(u{i});
maxuc = cellstr(num2str(maxu(i)));
%text(X{i}(idxu),Y{i}(idxu), maxuc,'FontSize',14,'Color','r');
h.LineWidth = 2;
%h.DisplayName = 'Front aero dist: %.3f %',aeroBalF(i)*100;
colormap('turbo')
colorbar;
view(2)
end
linkaxes(ax,'xy')
% Brake maps
figure(3)
clf
for i = 1:length(aeroBalF)
ax(i) = subplot(round(length(aeroBalF)/2),2,i);
h = surf([X{i} X{i}],[Y{i} Y{i}],zeros(size([Y{i} Y{i}])),[OUT{i}.Driver_Brake OUT{i}.Driver_Brake],'EdgeColor','interp');
title(strjoin({'Brake % | Front aero distribution=', sprintf('%d',aeroBalF(i)*100),'%'}));
view(2)
h.LineWidth = 2;
colorbar;
colormap('turbo')
end
linkaxes(ax,'xy')
% Throtle maps
figure(4)
clf
for i = 1:length(aeroBalF)
ax(i) = subplot(round(length(aeroBalF)/2),2,i);
h = surf([X{i} X{i}],[Y{i} Y{i}],zeros(size([Y{i} Y{i}])),[OUT{i}.Driver_Brake OUT{i}.Driver_Throttle],'EdgeColor','interp');
title(strjoin({'Throttle % | Front aero distribution=', sprintf('%d',aeroBalF(i)*100),'%'}));
view(2)
h.LineWidth = 2;
colorbar;
colormap('turbo')
end
linkaxes(ax,'xy')
%% Functions
function Parse_aero(aeroFile,fdf, rdf)
A = fileread(aeroFile);
C = regexp(A, '\n', 'split');
C{1, 39} = sprintf('0 %.3f %.3f %.3f %.3f %.3f %.3f', fdf, fdf ,fdf ,fdf ,fdf, fdf);
C{1, 40} = sprintf('25 %.3f %.3f %.3f %.3f %.3f %.3f', fdf, fdf ,fdf ,fdf ,fdf, fdf);
C{1, 41} = sprintf('50 %.3f %.3f %.3f %.3f %.3f %.3f', fdf, fdf ,fdf ,fdf ,fdf, fdf);
C{1, 42} = sprintf('75 %.3f %.3f %.3f %.3f %.3f %.3f', fdf, fdf ,fdf ,fdf ,fdf, fdf);
C{1, 43} = sprintf('100 %.3f %.3f %.3f %.3f %.3f %.3f', fdf, fdf ,fdf ,fdf ,fdf, fdf);
C{1, 55} = sprintf('0 %.3f %.3f %.3f %.3f %.3f %.3f', rdf, rdf ,rdf ,rdf ,rdf, rdf);
C{1, 56} = sprintf('25 %.3f %.3f %.3f %.3f %.3f %.3f', rdf, rdf ,rdf ,rdf ,rdf, rdf);
C{1, 57} = sprintf('50 %.3f %.3f %.3f %.3f %.3f %.3f', rdf, rdf ,rdf ,rdf ,rdf, rdf);
C{1, 58} = sprintf('75 %.3f %.3f %.3f %.3f %.3f %.3f', rdf, rdf ,rdf ,rdf ,rdf, rdf);
C{1, 59} = sprintf('100 %.3f %.3f %.3f %.3f %.3f %.3f', rdf, rdf ,rdf ,rdf ,rdf, rdf);
combinedStr = strjoin(C,'\n');
fprintf(1,'fdf = %.3f\trdf = %.3f\n',fdf,rdf)
% Save file
fid = fopen(aeroFile, 'w+');
fprintf(fid, combinedStr);
fclose(fid);
end