update FT24 presets

This commit is contained in:
v.chau 2025-08-22 17:39:32 +02:00
parent 7650d02541
commit 247696eab6
31 changed files with 298 additions and 274 deletions

View File

@ -1,4 +1,4 @@
function [sidebarLabel] = sidebar_stats(pltData)
function [sidebarLabel] = sidebar_stats(stats)
%SIDEBAR_STATS Summary of this function goes here
% Detailed explanation goes here
sidebarLabel = sprintf(...
@ -9,13 +9,13 @@ function [sidebarLabel] = sidebar_stats(pltData)
" Peak (mean): %1.f kW\n" + ...
"\nDistance: %.2f km\n" + ...
"\nTopspeed: %.1f km/h\n", ...
pltData.energy_used_kwh, ...
pltData.energy_regen_kwh, ...
pltData.energy_kwh, ...
pltData.peakPower_kw, ...
pltData.peakPowerMean_kw, ...
pltData.distanceTotal_km, ...
pltData.maxSpeed_kph ...
stats.energy_used_kwh, ...
stats.energy_regen_kwh, ...
stats.energy_kwh, ...
stats.peakPower_kw, ...
stats.peakPowerMean_kw, ...
stats.distanceTotal_km, ...
stats.maxSpeed_kph ...
);
end

View File

@ -5,7 +5,7 @@ function [pltData, stats] = sortdata(data)
time_s = time_s - time_s(1); % set beginning of session to 0
% x-Axis:
pltData.time_s = time_s -time_s(1);
pltData.time_s = time_s;
pltData.time_hms = time_hms;
% distance calculation
@ -14,12 +14,12 @@ function [pltData, stats] = sortdata(data)
for i = 2:length(speed_mps)
pltData.distance(i) = speed_mps(i)*(time_s(i)-time_s(i-1)) + pltData.distance(i-1);
end
pltData.distance = pltData.distance.'
pltData.distance = pltData.distance.';
pltData.xAxis = pltData.time_s; % set time as default x-Axis for plotting
%% Misc
pltData.app_percent = data.ABX_Driver_ABX_APPS_percent;
pltData.speed_kph = 3.6*movmean(data.ABX_Driver_ABX_Speed,50); % same filter as for distance calculation ???
pltData.speed_kph = 3.6*movmean(data.ABX_Driver_ABX_Speed,50); % same fi.'lter as for distance calculation ???
pltData.steering_deg = data.ABX_Driver_ABX_Steering_Angle;
%% AMS:

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_accumulator(panel, start, stop, pltData)
function [outputArg] = plot_accumulator(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,27 +7,27 @@ function [outputArg] = plot_accumulator(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: power [kW]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Power [kW]")
plot(ax2,pltData.xAxis(start:stop),pltData.ams_ptot(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.ams_ptot(tr,:))
% plot 3: Max Cell Temp [°C]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Max Cell Temp [°C]")
plot(ax3,pltData.xAxis(start:stop),pltData.ams_tmax(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.ams_tmax(tr,:))
% plot 4: State of charge [%]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "SOC")
plot(ax4,pltData.xAxis(start:stop),pltData.ams_soc(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.ams_soc(tr,:))
% link all x axes
linkaxes([ax1, ax2, ax3, ax4],"x")

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_brakes(panel, start, stop, pltData)
function [outputArg] = plot_brakes(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,15 +7,15 @@ function [outputArg] = plot_brakes(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: brake pressure front/rear [bar]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Brake Pressure F/R [bar]")
plot(ax2,pltData.xAxis(start:stop),pltData.brakePFront_bar(start:stop))
plot(ax2,pltData.xAxis(start:stop),pltData.brakePRear_bar(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.brakePFront_bar(tr,:))
plot(ax2,pltData.xAxis(tr,:),pltData.brakePRear_bar(tr,:))
legend(ax2, "Front", "Rear")
% plot 3: longitudinal acceleration [g]
@ -23,17 +23,17 @@ function [outputArg] = plot_brakes(panel, start, stop, pltData)
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Long Acc [g]")
plot(ax3,pltData.xAxis(start:stop),pltData.acc_long_g(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.acc_long_g(tr,:))
% plot 4: Brake Temp [°C]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Brake Temp [°C]")
plot(ax4,pltData.xAxis(start:stop),pltData.brakeTFrontLeft_degC(start:stop))
plot(ax4,pltData.xAxis(start:stop),pltData.brakeTFrontRight_degC(start:stop))
plot(ax4,pltData.xAxis(start:stop),pltData.brakeTRearLeft_degC(start:stop))
plot(ax4,pltData.xAxis(start:stop),pltData.brakeTRearRight_degC(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.brakeTFrontLeft_degC(tr,:))
plot(ax4,pltData.xAxis(tr,:),pltData.brakeTFrontRight_degC(tr,:))
plot(ax4,pltData.xAxis(tr,:),pltData.brakeTRearLeft_degC(tr,:))
plot(ax4,pltData.xAxis(tr,:),pltData.brakeTRearRight_degC(tr,:))
legend(ax4, "FL", "FR", "RL", "RR")
% plot 5: brake bias [%]
@ -41,7 +41,7 @@ function [outputArg] = plot_brakes(panel, start, stop, pltData)
hold(ax5, "on")
grid(ax5, "on")
title(ax5, "Brake Bias [%]")
plot(ax5,pltData.xAxis(start:stop),pltData.brakeBias_perc(start:stop))
plot(ax5,pltData.xAxis(tr,:),pltData.brakeBias_perc(tr,:))
% link all x axes
linkaxes([ax1, ax2, ax3, ax4, ax5],"x")

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_custom(panel, start, stop, pltData)
function [outputArg] = plot_custom(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"flow");
@ -10,7 +10,7 @@ function [outputArg] = plot_custom(panel, start, stop, pltData)
ylabel(ax1, "y-axis label")
xlabel(ax1, "x-axis label")
%"XXX = enter name of data you want to plot"
plot(ax1,pltData.xAxis(start:stop),pltData.XXX(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.XXX(tr,:))
% more plots for customizing
@ -19,21 +19,21 @@ function [outputArg] = plot_custom(panel, start, stop, pltData)
% hold(ax2, "on")
% grid(ax2, "on")
% title(ax2, "Power [kW]")
% plot(ax2,pltData.xAxis(start:stop),pltData. XXXX (start:stop))
% plot(ax2,pltData.xAxis(tr,:),pltData. XXXX (tr,:))
% plot 3:
% ax3 = nexttile(tl);
% hold(ax3, "on")
% grid(ax3, "on")
% title(ax3, "Max Cell Temp [°C]")
% plot(ax3,pltData.xAxis(start:stop),pltData. XXXX (start:stop))
% plot(ax3,pltData.xAxis(tr,:),pltData. XXXX (tr,:))
% plot 4:
% ax4 = nexttile(tl);
% hold(ax4, "on")
% grid(ax4, "on")
% title(ax4, "SOC")
% plot(ax4,pltData.xAxis(start:stop),pltData. XXXX (start:stop))
% plot(ax4,pltData.xAxis(tr,:),pltData. XXXX (tr,:))
% link all x axes

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_driver_braking(panel, start, stop, pltData)
function [outputArg] = plot_driver_braking(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,25 +7,25 @@ function [outputArg] = plot_driver_braking(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: accelerator pedal position [%]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "APP [%]")
plot(ax2,pltData.xAxis(start:stop),pltData.app_percent(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.app_percent(tr,:))
% plot 3: brake pressure front [bar]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Brake Pressure Front [bar]")
plot(ax3,pltData.xAxis(start:stop),pltData.brakePFront_bar(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.brakePFront_bar(tr,:))
% plot 4: longitudinal acceleration [g]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Long Acc [g]")
plot(ax4,pltData.xAxis(start:stop),pltData.acc_long_g(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.acc_long_g(tr,:))
% link all x axes
linkaxes([ax1, ax2, ax3, ax4],"x")

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_driver_general(panel, start, stop, pltData)
function [outputArg] = plot_driver_general(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,25 +7,25 @@ function [outputArg] = plot_driver_general(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: accelerator pedal position [%]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "APP [%]")
plot(ax2,pltData.xAxis(start:stop),pltData.app_percent(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.app_percent(tr,:))
% plot 3: brake pressure front [bar]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Brake Pressure Front [bar]")
plot(ax3,pltData.xAxis(start:stop),pltData.brakePFront_bar(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.brakePFront_bar(tr,:))
% plot 4: steering angle [°]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Steering Angle [°]")
plot(ax4,pltData.xAxis(start:stop),pltData.steering_deg(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.steering_deg(tr,:))
% link all x axes
linkaxes([ax1, ax2, ax3, ax4],"x")

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_driver_statistics(panel, start, stop, pltData)
function [outputArg] = plot_driver_statistics(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,13 +7,13 @@ function [outputArg] = plot_driver_statistics(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: accelerator pedal position [%]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "APP [%]")
plot(ax2,pltData.xAxis(start:stop),pltData.app_percent(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.app_percent(tr,:))
linkaxes([ax1, ax2],"x")
% plot 3: accelerator pedal position histogram
ax3 = nexttile(tl);
@ -22,7 +22,7 @@ function [outputArg] = plot_driver_statistics(panel, start, stop, pltData)
title(ax3, "APP distribution")
ylabel(ax3, "\sigma [%]")
xlabel(ax3, "APP [%]")
histogram(ax3,pltData.app_percent(start:stop),"Normalization","percentage")
histogram(ax3,pltData.app_percent(tr,:),"Normalization","percentage")
% plot 4: brake pressure histogram
ax4 = nexttile(tl);
hold(ax4, "on")
@ -30,7 +30,7 @@ function [outputArg] = plot_driver_statistics(panel, start, stop, pltData)
title(ax4, "BrakeP distribution")
ylabel(ax4, "\sigma [%]")
xlabel(ax4, "Brake Pressure Front [bar]")
histogram(ax4,pltData.brakePFront_bar(start:stop),"Normalization","percentage")
histogram(ax4,pltData.brakePFront_bar(tr,:),"Normalization","percentage")
% return null (not relevant for plots!)
outputArg = [];

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_driver_steering(panel, start, stop, pltData)
function [outputArg] = plot_driver_steering(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,13 +7,13 @@ function [outputArg] = plot_driver_steering(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: steering angle [°]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Steering Angle [°]")
plot(ax2,pltData.xAxis(start:stop),pltData.steering_deg(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.steering_deg(tr,:))
% plot 3: oversteer
ax3 = nexttile(tl);
hold(ax3, "on")
@ -26,9 +26,9 @@ function [outputArg] = plot_driver_steering(panel, start, stop, pltData)
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Lateral Acc [g]")
plot(ax4,pltData.xAxis(start:stop),pltData.acc_lat_g)(start:stop)
plot(ax4,pltData.xAxis(tr,:),pltData.acc_lat_g(tr,:))
% link all x axes
linkaxes([ax1, ax2, ax3, ax4],"x")
%linkaxes([ax1, ax2, ax3, ax4],"x")
% return null (not relevant for plots!)
outputArg = [];

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_inverter(panel, start, stop, pltData)
function [outputArg] = plot_inverter(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,38 +7,38 @@ function [outputArg] = plot_inverter(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: Inverter Temps [°C]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Inverter Temp [°C]")
plot(ax2,pltData.xAxis(start:stop),pltData.invL_temp(start:stop))
plot(ax2,pltData.xAxis(start:stop),pltData.invR_temp(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.invL_temp(tr,:))
plot(ax2,pltData.xAxis(tr,:),pltData.invR_temp(tr,:))
legend(ax2, "Left", "Right")
% plot 3: Torque request / actual inverter left
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Left Torque")
plot(ax3,pltData.xAxis(start:stop),pltData.invL_torqueDemand(start:stop))
plot(ax3,pltData.xAxis(start:stop),pltData.invL_torqueActual(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.invL_torqueDemand(tr,:))
plot(ax3,pltData.xAxis(tr,:),pltData.invL_torqueActual(tr,:))
legend(ax3, "Demand", "Actual")
% plot 4: Torque request / actual inverter right
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Right Torque")
plot(ax4,pltData.xAxis(start:stop),pltData.invR_torqueDemand(start:stop))
plot(ax4,pltData.xAxis(start:stop),pltData.invR_torqueActual(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.invR_torqueDemand(tr,:))
plot(ax4,pltData.xAxis(tr,:),pltData.invR_torqueActual(tr,:))
legend(ax4, "Demand", "Actual")
% plot 5: Motor velocities
ax5 = nexttile(tl);
hold(ax5, "on")
grid(ax5, "on")
title(ax5, "Motor Velocities [1/min]")
plot(ax5,pltData.xAxis(start:stop),pltData.motL_vel_rpm(start:stop))
plot(ax5,pltData.xAxis(start:stop),pltData.motR_vel_rpm(start:stop))
plot(ax5,pltData.xAxis(tr,:),pltData.motL_vel_rpm(tr,:))
plot(ax5,pltData.xAxis(tr,:),pltData.motR_vel_rpm(tr,:))
legend(ax5, "Left", "Right")
% link all x axes

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_powertrain(panel, start, stop, pltData)
function [outputArg] = plot_powertrain(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,36 +7,36 @@ function [outputArg] = plot_powertrain(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: power [kW]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Power [kW]")
plot(ax2,pltData.xAxis(start:stop),pltData.ams_ptot(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.ams_ptot(tr,:))
% plot 3: Inverter Temps [°C]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Inverter Temp [°C]")
plot(ax3,pltData.xAxis(start:stop),pltData.invL_temp(start:stop))
plot(ax3,pltData.xAxis(start:stop),pltData.invR_temp(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.invL_temp(tr,:))
plot(ax3,pltData.xAxis(tr,:),pltData.invR_temp(tr,:))
legend(ax3, "Left", "Right")
% plot 4: Motor Temps
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Motor Temp [°C]")
plot(ax4,pltData.xAxis(start:stop),pltData.motL_temp(start:stop))
plot(ax4,pltData.xAxis(start:stop),pltData.motR_temp(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.motL_temp(tr,:))
plot(ax4,pltData.xAxis(tr,:),pltData.motR_temp(tr,:))
legend(ax4, "Left", "Right")
% plot 5: Motor velocities
ax5 = nexttile(tl);
hold(ax5, "on")
grid(ax5, "on")
title(ax5, "Motor Velocities [1/min]")
plot(ax5,pltData.xAxis(start:stop),pltData.motL_vel_rpm(start:stop))
plot(ax5,pltData.xAxis(start:stop),pltData.motR_vel_rpm(start:stop))
plot(ax5,pltData.xAxis(tr,:),pltData.motL_vel_rpm(tr,:))
plot(ax5,pltData.xAxis(tr,:),pltData.motR_vel_rpm(tr,:))
legend(ax5, "Left", "Right")
% link all x axes

View File

@ -1,30 +1,30 @@
function [outputArg] = plot_suspension_histogram(panel, start, stop, pltData)
function [outputArg] = plot_suspension_histogram(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
% plot 1: position heave front [mm/s]
ax1 = nexttile(tl);
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Front left [mm/s]")
histogram(ax1, pltData.velocity_FL_mmps(start:stop),"Normalization","percentage")
title(ax1, "Heave Front [mm/s]")
histogram(ax1, pltData.velocityHeaveFront_mmps(tr,:),"Normalization","percentage")
% plot 2: position roll front [mm/s]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Front right [mm/s]")
histogram(ax2, pltData.velocity_FR_mmps(start:stop),"Normalization","percentage")
title(ax2, "Roll Front [mm/s]")
histogram(ax2, pltData.velocityHeaveFront_mmps(tr,:),"Normalization","percentage")
% plot 3: position heave front [mm/s]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Rear left [mm/s]")
histogram(ax3, pltData.velocity_RL_mmps(start:stop),"Normalization","percentage")
title(ax3, "Heave Rear [mm/s]")
histogram(ax3, pltData.velocityHeaveFront_mmps(tr,:),"Normalization","percentage")
% plot 4: position roll front [mm/s]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Rear right [mm/s]")
histogram(ax4, pltData.velocity_RR_mmps(start:stop),"Normalization","percentage")
title(ax4, "Roll Rear [mm/s]")
histogram(ax4, pltData.velocityHeaveFront_mmps(tr,:),"Normalization","percentage")
linkaxes([ax1, ax2, ax3, ax4],"x")
% return null (not relevant for plots!)

View File

@ -1,30 +1,30 @@
function [outputArg] = plot_suspension_positions(panel, start, stop, pltData)
function [outputArg] = plot_suspension_positions(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
% plot 1: position front left [mm]
% plot 1: position heave front [mm]
ax1 = nexttile(tl);
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Damper Position Front left [mm] !!!check sortdata calculation!!!")
plot(ax1, pltData.xAxis(start:stop),pltData.damper_FL_mm(start:stop))
% plot 2: position front right [mm]
title(ax1, "Heave Front [mm]")
plot(ax1, pltData.xAxis(tr,:),pltData.damperHeaveFront_mm(tr,:))
% plot 2: position roll front [mm]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Damper Position Front right [mm]")
plot(ax2, pltData.xAxis(start:stop),pltData.damper_FR_mm(start:stop))
% plot 3: position rear left [mm]
title(ax2, "Roll Front [mm]")
plot(ax2, pltData.xAxis(tr,:),pltData.damperRollFront_mm(tr,:))
% plot 3: position heave front [mm]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Damper Position Rear left [mm]")
plot(ax3, pltData.xAxis(start:stop),pltData.damper_RL_mm(start:stop))
% plot 4: position rear right [mm]
title(ax3, "Heave Rear [mm]")
plot(ax3, pltData.xAxis(tr,:),pltData.damperHeaveRear_mm(tr,:))
% plot 4: position roll front [mm]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Damper Position Rear right [mm]")
plot(ax4, pltData.xAxis(start:stop),pltData.damper_RR_mm(start:stop))
title(ax4, "Roll Rear [mm]")
plot(ax4, pltData.xAxis(tr,:),pltData.damperRollRear_mm(tr,:))
linkaxes([ax1, ax2, ax3, ax4],"x")
% return null (not relevant for plots!)

View File

@ -1,30 +1,30 @@
function [outputArg] = plot_suspension_velocities(panel, start, stop, pltData)
function [outputArg] = plot_suspension_velocities(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
% plot 1: velocity front left [mm/s]
% plot 1: velocity heave front [mm/s]
ax1 = nexttile(tl);
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Damper Front Left Velocity [mm/s] !!!check sortdata calculation!!!")
plot(ax1, pltData.xAxis(start:stop), pltData.velocity_FL_mmps(start:stop))
% plot 2: velocity front right [mm/s]
title(ax1, "Heave Front [mm/s]")
plot(ax1, pltData.xAxis(tr,:), pltData.velocityHeaveFront_mmps(tr,:))
% plot 2: velocity roll front [mm/s]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Damper Front Right Velocity [mm/s]")
plot(ax2, pltData.xAxis(start:stop), pltData.velocity_FR_mmps(start:stop))
% plot 3: velocity rear left [mm/s]
title(ax2, "Roll Front [mm/s]")
plot(ax2, pltData.xAxis(tr,:), pltData.velocityRollFront_mmps(tr,:))
% plot 3: velocity heave front [mm/s]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Damper Rear Left Velocity [mm/s]")
plot(ax3, pltData.xAxis(start:stop), pltData.velocity_RL_mmps(start:stop))
% plot 4: velocity rear right [mm/s]
title(ax3, "Heave Rear [mm/s]")
plot(ax3, pltData.xAxis(tr,:), pltData.velocityHeaveRear_mmps(tr,:))
% plot 4: velocity roll front [mm/s]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Damper Rear Right Velocity [mm/s]")
plot(ax4, pltData.xAxis(start:stop), pltData.velocity_RR_mmps(start:stop))
title(ax4, "Roll Rear [mm/s]")
plot(ax4, pltData.xAxis(tr,:), pltData.velocityRollRear_mmps(tr,:))
linkaxes([ax1, ax2, ax3, ax4],"x")
% return null (not relevant for plots!)

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_tires_firctionCircle(panel, start, stop, pltData)
function [outputArg] = plot_tires_firctionCircle(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"flow");
@ -10,10 +10,20 @@ function [outputArg] = plot_tires_firctionCircle(panel, start, stop, pltData)
ylabel(ax1, "Longitudinal Acc [g]")
xlabel(ax1, "Lateral Acc [g]")
colors = colororder(ax1);
plot(ax1,pltData.acc_lat_g(start:stop), pltData.acc_long_g(start:stop),"Color",colors(i,:))
K = convhull(pltData.acc_lat_g(start:stop), pltData.acc_long_g(start:stop));
plot(ax1,pltData.acc_lat_g(K), pltData.acc_long_g(K),"Color",colors(i,:),"LineStyle","--","LineWidth",2)
% old code for reference
% for i = 1:length(selected_laps)
% plot(ax1,pltData(selected_laps(i)).acc_lat_g, ...
% pltData(selected_laps(i)).acc_long_g,"Color",colors(i,:))
% K = convhull(pltData(selected_laps(i)).acc_lat_g, pltData(selected_laps(i)).acc_long_g);
% plot(ax1,pltData(selected_laps(i)).acc_lat_g(K), ...
% pltData(selected_laps(i)).acc_long_g(K),"Color",colors(i,:),"LineStyle","--","LineWidth",2)
% end
plot(ax1,pltData.acc_lat_g(tr,:), pltData.acc_long_g(tr,:))
K = convhull(pltData.acc_lat_g(tr,:), pltData.acc_long_g(tr,:));
plot(ax1,pltData.acc_lat_g(K), pltData.acc_long_g(K))
% return null (not relevant for plots!)
outputArg = [];
end

View File

@ -1,4 +1,4 @@
function [sidebarLabel] = sidebar_stats(pltData)
function [sidebarLabel] = sidebar_stats(stats)
%SIDEBAR_STATS Summary of this function goes here
% Detailed explanation goes here
sidebarLabel = sprintf(...
@ -9,13 +9,13 @@ function [sidebarLabel] = sidebar_stats(pltData)
" Peak (mean): %1.f kW\n" + ...
"\nDistance: %.2f km\n" + ...
"\nTopspeed: %.1f km/h\n", ...
pltData.energy_used_kwh, ...
pltData.energy_regen_kwh, ...
pltData.energy_kwh, ...
pltData.peakPower_kw, ...
pltData.peakPowerMean_kw, ...
pltData.distanceTotal_km, ...
pltData.maxSpeed_kph ...
stats.energy_used_kwh, ...
stats.energy_regen_kwh, ...
stats.energy_kwh, ...
stats.peakPower_kw, ...
stats.peakPowerMean_kw, ...
stats.distanceTotal_km, ...
stats.maxSpeed_kph ...
);
end

View File

@ -1,44 +1,45 @@
function [pltData] = sortdata(data,start,stop)
function [pltData, stats] = sortdata(data)
date = dateshift(data.Time(1),'start','day');
time_hms = data.Time-date;
time_s = seconds(time_hms);
time_s = time_s - time_s(1); % set beginning of session to 0
% x-Axis:
pltData.Time = data.Time(start:stop);
pltData.time_s = time_s(start:stop)-time_s(start);
pltData.time_hms = time_hms(start:stop);
pltData.time_s = time_s;
pltData.time_hms = time_hms;
% distance calculation
speed_mps = movmean(data.ABX_Driver_ABX_Speed(start:stop),50); % TODO: test different speed filters for distance calculation
speed_mps = movmean(data.ABX_Driver_ABX_Speed,50); % TODO: test different speed filters for distance calculation
pltData.distance(1) = 0;
for i = 2:length(speed_mps)
pltData.distance(i) = speed_mps(i)*(pltData.time_s(i)-pltData.time_s(i-1)) + pltData.distance(i-1);
pltData.distance(i) = speed_mps(i)*(time_s(i)-time_s(i-1)) + pltData.distance(i-1);
end
pltData.distance = pltData.distance.';
pltData.xAxis = pltData.time_s; % set time as default x-Axis for plotting
%% Misc
pltData.app_percent = data.ABX_Driver_ABX_APPS_percent(start:stop);
pltData.speed_kph = 3.6*movmean(data.ABX_Driver_ABX_Speed(start:stop),50); % same filter as for distance calculation ???
pltData.steering_deg = data.ABX_Driver_ABX_Steering_Angle(start:stop);
pltData.app_percent = data.ABX_Driver_ABX_APPS_percent;
pltData.speed_kph = 3.6*movmean(data.ABX_Driver_ABX_Speed,50); % same filter as for distance calculation ???
pltData.steering_deg = data.ABX_Driver_ABX_Steering_Angle;
%% AMS:
pltData.ams_soc = data.AMS_Status_SOC(start:stop);
pltData.ams_tmax = data.AMS_Status_Max_cell_temp(start:stop);
pltData.ams_utot = data.Shunt_Voltage1_Shunt_Voltage1(start:stop);
pltData.ams_itot = data.Shunt_Current_Shunt_Current(start:stop);
pltData.ams_soc = data.AMS_Status_SOC;
pltData.ams_tmax = data.AMS_Status_Max_cell_temp;
pltData.ams_utot = data.Shunt_Voltage1_Shunt_Voltage1;
pltData.ams_itot = data.Shunt_Current_Shunt_Current;
% calculations:
pltData.ams_ptot = pltData.ams_utot.*pltData.ams_itot/1000;
%% Brakes
% brake pressure
pltData.brakePFront_bar = data.ABX_Driver_ABX_BrakeP_F(start:stop);
pltData.brakePRear_bar = data.ABX_Driver_ABX_BrakeP_R(start:stop);
pltData.brakePFront_bar = data.ABX_Driver_ABX_BrakeP_F;
pltData.brakePRear_bar = data.ABX_Driver_ABX_BrakeP_R;
% brake disc temperatures
pltData.brakeTFrontLeft_degC = data.ABX_BrakeT_ABX_BrakeT_FL(start:stop);
pltData.brakeTFrontRight_degC = data.ABX_BrakeT_ABX_BrakeT_FR(start:stop);
pltData.brakeTRearLeft_degC = data.ABX_BrakeT_ABX_BrakeT_RL(start:stop);
pltData.brakeTRearRight_degC = data.ABX_BrakeT_ABX_BrakeT_RR(start:stop);
pltData.brakeTFrontLeft_degC = data.ABX_BrakeT_ABX_BrakeT_FL;
pltData.brakeTFrontRight_degC = data.ABX_BrakeT_ABX_BrakeT_FR;
pltData.brakeTRearLeft_degC = data.ABX_BrakeT_ABX_BrakeT_RL;
pltData.brakeTRearRight_degC = data.ABX_BrakeT_ABX_BrakeT_RR;
% calculate brake bias [%]
minBrakeP = 5; % minimum brake pressure to avoid artifacts due to sensor noise near 0 bar
brakePFront = pltData.brakePFront_bar;
@ -51,10 +52,10 @@ function [pltData] = sortdata(data,start,stop)
%% Dampers
% damper positions
pltData.damper_FL_mm = data.ABX_Dampers_ABX_Damper_FL(start:stop); %Heave_F
pltData.damper_FR_mm = data.ABX_Dampers_ABX_Damper_FR(start:stop); %Roll_F
pltData.damper_RL_mm = data.ABX_Dampers_ABX_Damper_RL(start:stop); %Heave_R
pltData.damper_RR_mm = data.ABX_Dampers_ABX_Damper_RR(start:stop); %Roll_R
pltData.damper_FL_mm = data.ABX_Dampers_ABX_Damper_FL; %Heave_F
pltData.damper_FR_mm = data.ABX_Dampers_ABX_Damper_FR; %Roll_F
pltData.damper_RL_mm = data.ABX_Dampers_ABX_Damper_RL; %Heave_R
pltData.damper_RR_mm = data.ABX_Dampers_ABX_Damper_RR; %Roll_R
% calculate damper velocities
pltData.velocity_FL_mmps(1) = 0;
pltData.velocity_FR_mmps(1) = 0;
@ -68,36 +69,36 @@ function [pltData] = sortdata(data,start,stop)
pltData.velocity_RR_mmps(i) = pltData.damper_RR_mm(i)-pltData.damper_RR_mm(i-1)/timestep;
end
% filter damper velocities ??? bessere Berechnung über mittelwert aus mehreren werten? Vorfilterung?
pltData.velocity_FL_mmps = movmean(pltData.velocity_FL_mmps,100);
pltData.velocity_FR_mmps = movmean(pltData.velocity_FR_mmps,100);
pltData.velocity_RL_mmps = movmean(pltData.velocity_RL_mmps,100);
pltData.velocity_RR_mmps = movmean(pltData.velocity_RR_mmps,100);
pltData.velocity_FL_mmps = movmean(pltData.velocity_FL_mmps,100).';
pltData.velocity_FR_mmps = movmean(pltData.velocity_FR_mmps,100).';
pltData.velocity_RL_mmps = movmean(pltData.velocity_RL_mmps,100).';
pltData.velocity_RR_mmps = movmean(pltData.velocity_RR_mmps,100).';
%% IMU - VN200, no need to implement didnt work well anyway
% Acceleration
% pltData.acc_long_g = movmean(data.XSens_Acceleration_XSens_accX(start:stop),100)/9.81;
% pltData.acc_lat_g = movmean(data.XSens_Acceleration_XSens_accY(start:stop),100)/9.81;
pltData.acc_long_g = movmean(data.VN200_IMU_ACC_LIN_AccLinX,100)/9.81;
pltData.acc_lat_g = movmean(data.VN200_IMU_ACC_LIN_AccLinY,100)/9.81;
% Rate of turn
% pltData.rot_roll_degps = movmean(data.XSens_RateOfTurn_XSens_gyrX(start:stop),100);
% pltData.rot_pitch_degps = movmean(data.XSens_RateOfTurn_XSens_gyrY(start:stop),100);
% pltData.rot_yaw_degps = movmean(data.XSens_RateOfTurn_XSens_gyrZ(start:stop),100);
pltData.rot_roll_degps = movmean(data.VN200_IMU_ACC_ANG_AccAngX,100);
pltData.rot_pitch_degps = movmean(data.VN200_IMU_ACC_ANG_AccAngY,100);
pltData.rot_yaw_degps = movmean(data.VN200_IMU_ACC_ANG_AccAngZ,100);
%% Inverters
% inverter temperatures
pltData.invL_temp = data.INV_L_TxPDO_1_T_Inv_L(start:stop);
pltData.invR_temp = data.INV_R_TxPDO_1_T_Inv_R(start:stop);
pltData.invL_temp = data.INV_L_TxPDO_1_T_Inv_L;
pltData.invR_temp = data.INV_R_TxPDO_1_T_Inv_R;
% motor temperatures
pltData.motL_temp = data.INV_L_TxPDO_1_T_Mot_L(start:stop);
pltData.motR_temp = data.INV_R_TxPDO_1_T_Mot_R(start:stop);
pltData.motL_temp = data.INV_L_TxPDO_1_T_Mot_L;
pltData.motR_temp = data.INV_R_TxPDO_1_T_Mot_R;
% motor velocities
pltData.motL_vel_rpm = 60*data.INV_L_TxPDO_4_Velocity_L(start:stop);
pltData.motR_vel_rpm = 60*data.INV_R_TxPDO_4_Velocity_R(start:stop);
pltData.motL_vel_rpm = 60*data.INV_L_TxPDO_4_Velocity_L;
pltData.motR_vel_rpm = 60*data.INV_R_TxPDO_4_Velocity_R;
% inverter torque demand
pltData.invL_torqueDemand = data.INV_L_TxPDO_3_DemandedTorque_L(start:stop)/10; % /10 to match autobox torque
pltData.invR_torqueDemand = data.INV_R_TxPDO_3_DemandedTorque_R(start:stop)/10;
pltData.invL_torqueDemand = data.INV_L_TxPDO_3_DemandedTorque_L/10; % /10 to match autobox torque
pltData.invR_torqueDemand = data.INV_R_TxPDO_3_DemandedTorque_R/10;
% inverter actual torque
pltData.invL_torqueActual = data.INV_L_TxPDO_3_ActualTorque_L(start:stop)/10;
pltData.invR_torqueActual = data.INV_R_TxPDO_3_ActualTorque_R(start:stop)/10;
pltData.invL_torqueActual = data.INV_L_TxPDO_3_ActualTorque_L/10;
pltData.invR_torqueActual = data.INV_R_TxPDO_3_ActualTorque_R/10;
%% Wheelspeed
@ -109,15 +110,18 @@ function [pltData] = sortdata(data,start,stop)
power_regen_kw(power_regen_kw > 0) = 0;
power_used_kw = pltData.ams_ptot;
power_used_kw(power_used_kw < 0) = 0;
pltData.energy_kwh = trapz(pltData.time_s, pltData.ams_ptot)/3600;
pltData.energy_regen_kwh = trapz(pltData.time_s, power_regen_kw)/3600;
pltData.energy_used_kwh = trapz(pltData.time_s, power_used_kw)/3600;
pltData.distanceTotal_km = trapz(pltData.time_s, pltData.speed_kph./3.6)/1000; % 1/3.6 for km/h to m/s and /1000 for km output
pltData.peakPower_kw = max(pltData.ams_ptot);
pltData.peakPowerMean_kw = max(movmean(pltData.ams_ptot,500));
stats.energy_kwh = trapz(time_s, pltData.ams_ptot)/3600;
stats.energy_regen_kwh = trapz(time_s, power_regen_kw)/3600;
stats.energy_used_kwh = trapz(time_s, power_used_kw)/3600;
stats.distanceTotal_km = trapz(time_s, pltData.speed_kph./3.6)/1000; % 1/3.6 for km/h to m/s and /1000 for km output
stats.peakPower_kw = max(pltData.ams_ptot);
stats.peakPowerMean_kw = max(movmean(pltData.ams_ptot,500));
pltData.maxSpeed_kph = max(pltData.speed_kph);
pltData.startTime = time_hms(start);
pltData.stopTime = time_hms(stop);
stats.maxSpeed_kph = max(pltData.speed_kph);
% pltData.startTime = time_hms(1);
% pltData.stopTime = time_hms(end);
%% struct2timetable
pltData = table2timetable(struct2table(pltData), "RowTimes", data.Time);
end

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_accumulator(panel, start, stop, pltData)
function [outputArg] = plot_accumulator(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,27 +7,27 @@ function [outputArg] = plot_accumulator(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: power [kW]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Power [kW]")
plot(ax2,pltData.xAxis(start:stop),pltData.ams_ptot(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.ams_ptot(tr,:))
% plot 3: Max Cell Temp [°C]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Max Cell Temp [°C]")
plot(ax3,pltData.xAxis(start:stop),pltData.ams_tmax(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.ams_tmax(tr,:))
% plot 4: State of charge [%]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "SOC")
plot(ax4,pltData.xAxis(start:stop),pltData.ams_soc(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.ams_soc(tr,:))
% link all x axes
linkaxes([ax1, ax2, ax3, ax4],"x")

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_brakes(panel, start, stop, pltData)
function [outputArg] = plot_brakes(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,15 +7,15 @@ function [outputArg] = plot_brakes(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: brake pressure front/rear [bar]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Brake Pressure F/R [bar]")
plot(ax2,pltData.xAxis(start:stop),pltData.brakePFront_bar(start:stop))
plot(ax2,pltData.xAxis(start:stop),pltData.brakePRear_bar(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.brakePFront_bar(tr,:))
plot(ax2,pltData.xAxis(tr,:),pltData.brakePRear_bar(tr,:))
legend(ax2, "Front", "Rear")
% plot 3: longitudinal acceleration [g]
@ -23,17 +23,17 @@ function [outputArg] = plot_brakes(panel, start, stop, pltData)
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Long Acc [g]")
plot(ax3,pltData.xAxis(start:stop),pltData.acc_long_g(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.acc_long_g(tr,:))
% plot 4: Brake Temp [°C]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Brake Temp [°C]")
plot(ax4,pltData.xAxis(start:stop),pltData.brakeTFrontLeft_degC(start:stop))
plot(ax4,pltData.xAxis(start:stop),pltData.brakeTFrontRight_degC(start:stop))
plot(ax4,pltData.xAxis(start:stop),pltData.brakeTRearLeft_degC(start:stop))
plot(ax4,pltData.xAxis(start:stop),pltData.brakeTRearRight_degC(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.brakeTFrontLeft_degC(tr,:))
plot(ax4,pltData.xAxis(tr,:),pltData.brakeTFrontRight_degC(tr,:))
plot(ax4,pltData.xAxis(tr,:),pltData.brakeTRearLeft_degC(tr,:))
plot(ax4,pltData.xAxis(tr,:),pltData.brakeTRearRight_degC(tr,:))
legend(ax4, "FL", "FR", "RL", "RR")
% plot 5: brake bias [%]
@ -41,7 +41,7 @@ function [outputArg] = plot_brakes(panel, start, stop, pltData)
hold(ax5, "on")
grid(ax5, "on")
title(ax5, "Brake Bias [%]")
plot(ax5,pltData.xAxis(start:stop),pltData.brakeBias_perc(start:stop))
plot(ax5,pltData.xAxis(tr,:),pltData.brakeBias_perc(tr,:))
% link all x axes
linkaxes([ax1, ax2, ax3, ax4, ax5],"x")

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_custom(panel, start, stop, pltData)
function [outputArg] = plot_custom(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"flow");
@ -10,7 +10,7 @@ function [outputArg] = plot_custom(panel, start, stop, pltData)
ylabel(ax1, "y-axis label")
xlabel(ax1, "x-axis label")
%"XXX = enter name of data you want to plot"
plot(ax1,pltData.xAxis(start:stop),pltData.XXX(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.XXX(tr,:))
% more plots for customizing
@ -19,21 +19,21 @@ function [outputArg] = plot_custom(panel, start, stop, pltData)
% hold(ax2, "on")
% grid(ax2, "on")
% title(ax2, "Power [kW]")
% plot(ax2,pltData.xAxis(start:stop),pltData. XXXX (start:stop))
% plot(ax2,pltData.xAxis(tr,:),pltData. XXXX (tr,:))
% plot 3:
% ax3 = nexttile(tl);
% hold(ax3, "on")
% grid(ax3, "on")
% title(ax3, "Max Cell Temp [°C]")
% plot(ax3,pltData.xAxis(start:stop),pltData. XXXX (start:stop))
% plot(ax3,pltData.xAxis(tr,:),pltData. XXXX (tr,:))
% plot 4:
% ax4 = nexttile(tl);
% hold(ax4, "on")
% grid(ax4, "on")
% title(ax4, "SOC")
% plot(ax4,pltData.xAxis(start:stop),pltData. XXXX (start:stop))
% plot(ax4,pltData.xAxis(tr,:),pltData. XXXX (tr,:))
% link all x axes

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_driver_braking(panel, start, stop, pltData)
function [outputArg] = plot_driver_braking(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,25 +7,25 @@ function [outputArg] = plot_driver_braking(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: accelerator pedal position [%]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "APP [%]")
plot(ax2,pltData.xAxis(start:stop),pltData.app_percent(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.app_percent(tr,:))
% plot 3: brake pressure front [bar]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Brake Pressure Front [bar]")
plot(ax3,pltData.xAxis(start:stop),pltData.brakePFront_bar(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.brakePFront_bar(tr,:))
% plot 4: longitudinal acceleration [g]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Long Acc [g]")
plot(ax4,pltData.xAxis(start:stop),pltData.acc_long_g(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.acc_long_g(tr,:))
% link all x axes
linkaxes([ax1, ax2, ax3, ax4],"x")

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_driver_general(panel, start, stop, pltData)
function [outputArg] = plot_driver_general(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,25 +7,25 @@ function [outputArg] = plot_driver_general(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: accelerator pedal position [%]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "APP [%]")
plot(ax2,pltData.xAxis(start:stop),pltData.app_percent(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.app_percent(tr,:))
% plot 3: brake pressure front [bar]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Brake Pressure Front [bar]")
plot(ax3,pltData.xAxis(start:stop),pltData.brakePFront_bar(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.brakePFront_bar(tr,:))
% plot 4: steering angle [°]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Steering Angle [°]")
plot(ax4,pltData.xAxis(start:stop),pltData.steering_deg(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.steering_deg(tr,:))
% link all x axes
linkaxes([ax1, ax2, ax3, ax4],"x")

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_driver_statistics(panel, start, stop, pltData)
function [outputArg] = plot_driver_statistics(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,13 +7,13 @@ function [outputArg] = plot_driver_statistics(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: accelerator pedal position [%]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "APP [%]")
plot(ax2,pltData.xAxis(start:stop),pltData.app_percent(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.app_percent(tr,:))
linkaxes([ax1, ax2],"x")
% plot 3: accelerator pedal position histogram
ax3 = nexttile(tl);
@ -22,7 +22,7 @@ function [outputArg] = plot_driver_statistics(panel, start, stop, pltData)
title(ax3, "APP distribution")
ylabel(ax3, "\sigma [%]")
xlabel(ax3, "APP [%]")
histogram(ax3,pltData.app_percent(start:stop),"Normalization","percentage")
histogram(ax3,pltData.app_percent(tr,:),"Normalization","percentage")
% plot 4: brake pressure histogram
ax4 = nexttile(tl);
hold(ax4, "on")
@ -30,7 +30,7 @@ function [outputArg] = plot_driver_statistics(panel, start, stop, pltData)
title(ax4, "BrakeP distribution")
ylabel(ax4, "\sigma [%]")
xlabel(ax4, "Brake Pressure Front [bar]")
histogram(ax4,pltData.brakePFront_bar(start:stop),"Normalization","percentage")
histogram(ax4,pltData.brakePFront_bar(tr,:),"Normalization","percentage")
% return null (not relevant for plots!)
outputArg = [];

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_driver_steering(panel, start, stop, pltData)
function [outputArg] = plot_driver_steering(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,13 +7,13 @@ function [outputArg] = plot_driver_steering(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: steering angle [°]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Steering Angle [°]")
plot(ax2,pltData.xAxis(start:stop),pltData.steering_deg(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.steering_deg(tr,:))
% plot 3: oversteer
ax3 = nexttile(tl);
hold(ax3, "on")
@ -26,9 +26,9 @@ function [outputArg] = plot_driver_steering(panel, start, stop, pltData)
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Lateral Acc [g]")
plot(ax4,pltData.xAxis(start:stop),pltData.acc_lat_g)(start:stop)
plot(ax4,pltData.xAxis(tr,:),pltData.acc_lat_g(tr,:))
% link all x axes
linkaxes([ax1, ax2, ax3, ax4],"x")
%linkaxes([ax1, ax2, ax3, ax4],"x")
% return null (not relevant for plots!)
outputArg = [];

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_inverter(panel, start, stop, pltData)
function [outputArg] = plot_inverter(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,38 +7,38 @@ function [outputArg] = plot_inverter(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: Inverter Temps [°C]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Inverter Temp [°C]")
plot(ax2,pltData.xAxis(start:stop),pltData.invL_temp(start:stop))
plot(ax2,pltData.xAxis(start:stop),pltData.invR_temp(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.invL_temp(tr,:))
plot(ax2,pltData.xAxis(tr,:),pltData.invR_temp(tr,:))
legend(ax2, "Left", "Right")
% plot 3: Torque request / actual inverter left
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Left Torque")
plot(ax3,pltData.xAxis(start:stop),pltData.invL_torqueDemand(start:stop))
plot(ax3,pltData.xAxis(start:stop),pltData.invL_torqueActual(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.invL_torqueDemand(tr,:))
plot(ax3,pltData.xAxis(tr,:),pltData.invL_torqueActual(tr,:))
legend(ax3, "Demand", "Actual")
% plot 4: Torque request / actual inverter right
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Right Torque")
plot(ax4,pltData.xAxis(start:stop),pltData.invR_torqueDemand(start:stop))
plot(ax4,pltData.xAxis(start:stop),pltData.invR_torqueActual(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.invR_torqueDemand(tr,:))
plot(ax4,pltData.xAxis(tr,:),pltData.invR_torqueActual(tr,:))
legend(ax4, "Demand", "Actual")
% plot 5: Motor velocities
ax5 = nexttile(tl);
hold(ax5, "on")
grid(ax5, "on")
title(ax5, "Motor Velocities [1/min]")
plot(ax5,pltData.xAxis(start:stop),pltData.motL_vel_rpm(start:stop))
plot(ax5,pltData.xAxis(start:stop),pltData.motR_vel_rpm(start:stop))
plot(ax5,pltData.xAxis(tr,:),pltData.motL_vel_rpm(tr,:))
plot(ax5,pltData.xAxis(tr,:),pltData.motR_vel_rpm(tr,:))
legend(ax5, "Left", "Right")
% link all x axes

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_powertrain(panel, start, stop, pltData)
function [outputArg] = plot_powertrain(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
@ -7,36 +7,36 @@ function [outputArg] = plot_powertrain(panel, start, stop, pltData)
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Speed [km/h]")
plot(ax1,pltData.xAxis(start:stop),pltData.speed_kph(start:stop))
plot(ax1,pltData.xAxis(tr,:),pltData.speed_kph(tr,:))
% plot 2: power [kW]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Power [kW]")
plot(ax2,pltData.xAxis(start:stop),pltData.ams_ptot(start:stop))
plot(ax2,pltData.xAxis(tr,:),pltData.ams_ptot(tr,:))
% plot 3: Inverter Temps [°C]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Inverter Temp [°C]")
plot(ax3,pltData.xAxis(start:stop),pltData.invL_temp(start:stop))
plot(ax3,pltData.xAxis(start:stop),pltData.invR_temp(start:stop))
plot(ax3,pltData.xAxis(tr,:),pltData.invL_temp(tr,:))
plot(ax3,pltData.xAxis(tr,:),pltData.invR_temp(tr,:))
legend(ax3, "Left", "Right")
% plot 4: Motor Temps
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Motor Temp [°C]")
plot(ax4,pltData.xAxis(start:stop),pltData.motL_temp(start:stop))
plot(ax4,pltData.xAxis(start:stop),pltData.motR_temp(start:stop))
plot(ax4,pltData.xAxis(tr,:),pltData.motL_temp(tr,:))
plot(ax4,pltData.xAxis(tr,:),pltData.motR_temp(tr,:))
legend(ax4, "Left", "Right")
% plot 5: Motor velocities
ax5 = nexttile(tl);
hold(ax5, "on")
grid(ax5, "on")
title(ax5, "Motor Velocities [1/min]")
plot(ax5,pltData.xAxis(start:stop),pltData.motL_vel_rpm(start:stop))
plot(ax5,pltData.xAxis(start:stop),pltData.motR_vel_rpm(start:stop))
plot(ax5,pltData.xAxis(tr,:),pltData.motL_vel_rpm(tr,:))
plot(ax5,pltData.xAxis(tr,:),pltData.motR_vel_rpm(tr,:))
legend(ax5, "Left", "Right")
% link all x axes

View File

@ -1,30 +1,30 @@
function [outputArg] = plot_suspension_histogram(panel, start, stop, pltData)
function [outputArg] = plot_suspension_histogram(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
% plot 1: position heave front [mm/s]
ax1 = nexttile(tl);
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Front left [mm/s]")
histogram(ax1, pltData.velocity_FL_mmps(start:stop),"Normalization","percentage")
title(ax1, "Heave Front [mm/s]")
histogram(ax1, pltData.velocityHeaveFront_mmps(tr,:),"Normalization","percentage")
% plot 2: position roll front [mm/s]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Front right [mm/s]")
histogram(ax2, pltData.velocity_FR_mmps(start:stop),"Normalization","percentage")
title(ax2, "Roll Front [mm/s]")
histogram(ax2, pltData.velocityHeaveFront_mmps(tr,:),"Normalization","percentage")
% plot 3: position heave front [mm/s]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Rear left [mm/s]")
histogram(ax3, pltData.velocity_RL_mmps(start:stop),"Normalization","percentage")
title(ax3, "Heave Rear [mm/s]")
histogram(ax3, pltData.velocityHeaveFront_mmps(tr,:),"Normalization","percentage")
% plot 4: position roll front [mm/s]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Rear right [mm/s]")
histogram(ax4, pltData.velocity_RR_mmps(start:stop),"Normalization","percentage")
title(ax4, "Roll Rear [mm/s]")
histogram(ax4, pltData.velocityHeaveFront_mmps(tr,:),"Normalization","percentage")
linkaxes([ax1, ax2, ax3, ax4],"x")
% return null (not relevant for plots!)

View File

@ -1,30 +1,30 @@
function [outputArg] = plot_suspension_positions(panel, start, stop, pltData)
function [outputArg] = plot_suspension_positions(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
% plot 1: position front left [mm]
% plot 1: position heave front [mm]
ax1 = nexttile(tl);
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Damper Position Front left [mm] !!!check sortdata calculation!!!")
plot(ax1, pltData.xAxis(start:stop),pltData.damper_FL_mm(start:stop))
% plot 2: position front right [mm]
title(ax1, "Heave Front [mm]")
plot(ax1, pltData.xAxis(tr,:),pltData.damperHeaveFront_mm(tr,:))
% plot 2: position roll front [mm]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Damper Position Front right [mm]")
plot(ax2, pltData.xAxis(start:stop),pltData.damper_FR_mm(start:stop))
% plot 3: position rear left [mm]
title(ax2, "Roll Front [mm]")
plot(ax2, pltData.xAxis(tr,:),pltData.damperRollFront_mm(tr,:))
% plot 3: position heave front [mm]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Damper Position Rear left [mm]")
plot(ax3, pltData.xAxis(start:stop),pltData.damper_RL_mm(start:stop))
% plot 4: position rear right [mm]
title(ax3, "Heave Rear [mm]")
plot(ax3, pltData.xAxis(tr,:),pltData.damperHeaveRear_mm(tr,:))
% plot 4: position roll front [mm]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Damper Position Rear right [mm]")
plot(ax4, pltData.xAxis(start:stop),pltData.damper_RR_mm(start:stop))
title(ax4, "Roll Rear [mm]")
plot(ax4, pltData.xAxis(tr,:),pltData.damperRollRear_mm(tr,:))
linkaxes([ax1, ax2, ax3, ax4],"x")
% return null (not relevant for plots!)

View File

@ -1,30 +1,30 @@
function [outputArg] = plot_suspension_velocities(panel, start, stop, pltData)
function [outputArg] = plot_suspension_velocities(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"vertical");
% plot 1: velocity front left [mm/s]
% plot 1: velocity heave front [mm/s]
ax1 = nexttile(tl);
hold(ax1, "on")
grid(ax1, "on")
title(ax1, "Damper Front Left Velocity [mm/s] !!!check sortdata calculation!!!")
plot(ax1, pltData.xAxis(start:stop), pltData.velocity_FL_mmps(start:stop))
% plot 2: velocity front right [mm/s]
title(ax1, "Heave Front [mm/s]")
plot(ax1, pltData.xAxis(tr,:), pltData.velocityHeaveFront_mmps(tr,:))
% plot 2: velocity roll front [mm/s]
ax2 = nexttile(tl);
hold(ax2, "on")
grid(ax2, "on")
title(ax2, "Damper Front Right Velocity [mm/s]")
plot(ax2, pltData.xAxis(start:stop), pltData.velocity_FR_mmps(start:stop))
% plot 3: velocity rear left [mm/s]
title(ax2, "Roll Front [mm/s]")
plot(ax2, pltData.xAxis(tr,:), pltData.velocityRollFront_mmps(tr,:))
% plot 3: velocity heave front [mm/s]
ax3 = nexttile(tl);
hold(ax3, "on")
grid(ax3, "on")
title(ax3, "Damper Rear Left Velocity [mm/s]")
plot(ax3, pltData.xAxis(start:stop), pltData.velocity_RL_mmps(start:stop))
% plot 4: velocity rear right [mm/s]
title(ax3, "Heave Rear [mm/s]")
plot(ax3, pltData.xAxis(tr,:), pltData.velocityHeaveRear_mmps(tr,:))
% plot 4: velocity roll front [mm/s]
ax4 = nexttile(tl);
hold(ax4, "on")
grid(ax4, "on")
title(ax4, "Damper Rear Right Velocity [mm/s]")
plot(ax4, pltData.xAxis(start:stop), pltData.velocity_RR_mmps(start:stop))
title(ax4, "Roll Rear [mm/s]")
plot(ax4, pltData.xAxis(tr,:), pltData.velocityRollRear_mmps(tr,:))
linkaxes([ax1, ax2, ax3, ax4],"x")
% return null (not relevant for plots!)

View File

@ -1,4 +1,4 @@
function [outputArg] = plot_tires_firctionCircle(panel, start, stop, pltData)
function [outputArg] = plot_tires_firctionCircle(panel, pltData, tr)
% create tiledlayout (R2023a and newer)
tl = tiledlayout(panel,"flow");
@ -10,10 +10,20 @@ function [outputArg] = plot_tires_firctionCircle(panel, start, stop, pltData)
ylabel(ax1, "Longitudinal Acc [g]")
xlabel(ax1, "Lateral Acc [g]")
colors = colororder(ax1);
plot(ax1,pltData.acc_lat_g(start:stop), pltData.acc_long_g(start:stop),"Color",colors(i,:))
K = convhull(pltData.acc_lat_g(start:stop), pltData.acc_long_g(start:stop));
plot(ax1,pltData.acc_lat_g(K), pltData.acc_long_g(K),"Color",colors(i,:),"LineStyle","--","LineWidth",2)
% old code for reference
% for i = 1:length(selected_laps)
% plot(ax1,pltData(selected_laps(i)).acc_lat_g, ...
% pltData(selected_laps(i)).acc_long_g,"Color",colors(i,:))
% K = convhull(pltData(selected_laps(i)).acc_lat_g, pltData(selected_laps(i)).acc_long_g);
% plot(ax1,pltData(selected_laps(i)).acc_lat_g(K), ...
% pltData(selected_laps(i)).acc_long_g(K),"Color",colors(i,:),"LineStyle","--","LineWidth",2)
% end
plot(ax1,pltData.acc_lat_g(tr,:), pltData.acc_long_g(tr,:))
K = convhull(pltData.acc_lat_g(tr,:), pltData.acc_long_g(tr,:));
plot(ax1,pltData.acc_lat_g(K), pltData.acc_long_g(K))
% return null (not relevant for plots!)
outputArg = [];
end

View File

@ -1,4 +1,4 @@
function [sidebarLabel] = sidebar_stats(pltData)
function [sidebarLabel] = sidebar_stats(stats)
%SIDEBAR_STATS Summary of this function goes here
% Detailed explanation goes here
sidebarLabel = sprintf(...
@ -9,13 +9,13 @@ function [sidebarLabel] = sidebar_stats(pltData)
" Peak (mean): %1.f kW\n" + ...
"\nDistance: %.2f km\n" + ...
"\nTopspeed: %.1f km/h\n", ...
pltData.energy_used_kwh, ...
pltData.energy_regen_kwh, ...
pltData.energy_kwh, ...
pltData.peakPower_kw, ...
pltData.peakPowerMean_kw, ...
pltData.distanceTotal_km, ...
pltData.maxSpeed_kph ...
stats.energy_used_kwh, ...
stats.energy_regen_kwh, ...
stats.energy_kwh, ...
stats.peakPower_kw, ...
stats.peakPowerMean_kw, ...
stats.distanceTotal_km, ...
stats.maxSpeed_kph ...
);
end