Skip to content
Snippets Groups Projects
Commit 47abe145 authored by Pier Francesco A. Bachini's avatar Pier Francesco A. Bachini
Browse files

Fix initSensor and config for Gemini and Roccaraso mission

parent 84e0a634
Branches
No related tags found
2 merge requests!19Update main with the Gemini simulator development,!17Fault simulation implementation in dev
......@@ -20,19 +20,20 @@ sensorSettings.barometer1.min_fault_time = 6; %min seconds to wait before possib
% fault generation
switch settings.fault_sim.fault_type(1)
case "offset",
case "offset"
offset_value_1 = round((settings.fault_sim.max_offset-settings.fault_sim.min_offset)*rand() + settings.fault_sim.min_offset);
sensorSettings.barometer1 = sensorSettings.barometer1.setOffset(offset_value_1); % i don't know the unit of measurment as of now
[sensorSettings.barometer1, fault_time_1] = sensorSettings.barometer1.setErrorTime(); % in seconds
case "degradation",
case "degradation"
degradation_value_1 = round((settings.fault_sim.max_degradation-settings.fault_sim.min_degradation)*rand() + settings.fault_sim.min_degradation);
sensorSettings.barometer1 = sensorSettings.barometer1.setDegradation(degradation_value_1); % i don't know the unit of measurment as of now
[sensorSettings.barometer1, fault_time_1] = sensorSettings.barometer1.setErrorTime(); % in seconds
case "freezing",
case "freezing"
sensorSettings.barometer1.setFreezing;
[sensorSettings.barometer1, fault_time_1] = sensorSettings.barometer1.setErrorTime(); % in seconds
otherwise
end
%% barometer2 - static measure (HSCMAND001BAAA5)
sensorSettings.barometer2 = Sensor_with_fault_sim(); % presure in mbar, temp should be in C°
sensorSettings.barometer2.maxMeasurementRange = 1000; % 1100, 1300 in mbar
......@@ -48,19 +49,20 @@ sensorSettings.barometer2.min_fault_time = 6; %min seconds to wait before possib
% fault generation
switch settings.fault_sim.fault_type(2)
case "offset",
case "offset"
offset_value_2 = round((settings.fault_sim.max_offset-settings.fault_sim.min_offset)*rand() + settings.fault_sim.min_offset);
sensorSettings.barometer2 = sensorSettings.barometer2.setOffset(offset_value_2); % i don't know the unit of measurment as of now
[sensorSettings.barometer2, fault_time_2] = sensorSettings.barometer2.setErrorTime(); % in seconds
case "degradation",
case "degradation"
degradation_value_2 = round((settings.fault_sim.max_degradation-settings.fault_sim.min_degradation)*rand() + settings.fault_sim.min_degradation);
sensorSettings.barometer2 = sensorSettings.barometer2.setDegradation(degradation_value_2); % i don't know the unit of measurment as of now
[sensorSettings.barometer2, fault_time_2] = sensorSettings.barometer2.setErrorTime(); % in seconds
case "freezing",
case "freezing"
sensorSettings.barometer2.setFreezing;
[sensorSettings.barometer2, fault_time_2] = sensorSettings.barometer2.setErrorTime(); % in seconds
otherwise
end
%% barometer3 - digital measure (LPS28DFWTR)
sensorSettings.barometer3 = Sensor_with_fault_sim(); % presure in mbar, temp should be in C°
sensorSettings.barometer3.maxMeasurementRange = 4060; % 1100, 1300 in mbar
......@@ -76,15 +78,15 @@ sensorSettings.barometer3.min_fault_time = 6; %min seconds to wait before possib
% fault generation
switch settings.fault_sim.fault_type(3)
case "offset",
case "offset"
offset_value_3 = round((settings.fault_sim.max_offset-settings.fault_sim.min_offset)*rand() + settings.fault_sim.min_offset);
sensorSettings.barometer3 = sensorSettings.barometer3.setOffset(offset_value_3); % i don't know the unit of measurment as of now
[sensorSettings.barometer3, fault_time_3] = sensorSettings.barometer3.setErrorTime(); % in seconds
case "degradation",
case "degradation"
degradation_value_3 = round((settings.fault_sim.max_degradation-settings.fault_sim.min_degradation)*rand() + settings.fault_sim.min_degradation);
sensorSettings.barometer3 = sensorSettings.barometer3.setDegradation(degradation_value_3); % i don't know the unit of measurment as of now
[sensorSettings.barometer3, fault_time_3] = sensorSettings.barometer3.setErrorTime(); % in seconds
case "freezing",
case "freezing"
sensorSettings.barometer3.setFreezing;
[sensorSettings.barometer3, fault_time_3] = sensorSettings.barometer3.setErrorTime(); % in seconds
otherwise
......
......@@ -28,11 +28,8 @@ settings.Vy_final = 0;
settings.y_final = 0;
%% CONTROL AND SENSOR FREQUENCIES
if settings.electronics
settings.frequencies.controlFrequency = 10; % [hz] control action frequency
else
settings.frequencies.controlFrequency = 50;
end
settings.frequencies.arbFrequency = 10; % [hz] air brakes control frequency
settings.frequencies.prfFrequency = 1; % [hz] parafoil control frequency
settings.frequencies.accelerometerFrequency = 100; % [hz] sensor frequency
......@@ -84,12 +81,13 @@ settings.servo.maxAngle = fix(settings.servo.maxAngle*1e9)/1e9; % to avoid compu
%% NAS TUNING PARAMETERS
settings.nas.dt_k = 0.02; % [s] nas time step
settings.nas.sigma_baro = 5; % [m/2] estimated barometer variance
settings.nas.sigma_mag = 1; % [mgauss^2] estimated magnetometer variance
settings.nas.sigma_baro = 50; % [2] estimated barometer variance
settings.nas.sigma_mag = 10; % [mgauss^2] estimated magnetometer variance
settings.nas.sigma_GPS = 5; % [mg^2] estimated GPS variance
settings.nas.sigma_w = 1; % [rad^2/s^2] estimated gyroscope variance;
settings.nas.sigma_w = 10; % [rad^2/s^2] estimated gyroscope variance;
settings.nas.sigma_beta = 1e-4; % [rad/s^2] estimated gyroscope bias variance;
settings.nas.sigma_pitot = 20^2; %DA CAMBIARE
settings.nas.sigma_pitot = 20^2;
settings.nas.sigma_pitot2 = 100;
settings.nas.Mach_max = 0.4; % max mach number expected for the mission (for nas with pitot update purposes) - not currently used
......
......@@ -5,30 +5,90 @@
% release 16/09/2023
%% barometer1 - static measure (HSCMAND001BAAA5)
sensorSettings.barometer1 = Sensor_no_offset(); % presure in mbar, temp should be in C°
sensorSettings.barometer1 = Sensor_with_fault_sim(); % presure in mbar, temp should be in C°
sensorSettings.barometer1.maxMeasurementRange = 1000; % 1100, 1300 in mbar
sensorSettings.barometer1.minMeasurementRange = 0; % 300, 10 in mbar
sensorSettings.barometer1.bit = 24; % adc on rocket is 24 bits
sensorSettings.barometer1.resolution = (sensorSettings.barometer1.maxMeasurementRange -sensorSettings.barometer1.minMeasurementRange)/(2^sensorSettings.barometer1.bit);
sensorSettings.barometer1.noiseVariance = 1; % mbar^2
%% barometer1 - static measure (HSCMAND001BAAA5)
sensorSettings.barometer2 = Sensor(); % presure in mbar, temp should be in C°
sensorSettings.barometer1.fault_time = 9; %if negative it will be generated at random between a max and a min value
sensorSettings.barometer1.max_fault_time = 96; %max seconds to wait before possible fault
sensorSettings.barometer1.min_fault_time = 6; %min seconds to wait before possible fault
% fault generation
switch settings.fault_sim.fault_type(1)
case "offset"
offset_value_1 = round((settings.fault_sim.max_offset-settings.fault_sim.min_offset)*rand() + settings.fault_sim.min_offset);
sensorSettings.barometer1 = sensorSettings.barometer1.setOffset(offset_value_1); % i don't know the unit of measurment as of now
[sensorSettings.barometer1, fault_time_1] = sensorSettings.barometer1.setErrorTime(); % in seconds
case "degradation"
degradation_value_1 = round((settings.fault_sim.max_degradation-settings.fault_sim.min_degradation)*rand() + settings.fault_sim.min_degradation);
sensorSettings.barometer1 = sensorSettings.barometer1.setDegradation(degradation_value_1); % i don't know the unit of measurment as of now
[sensorSettings.barometer1, fault_time_1] = sensorSettings.barometer1.setErrorTime(); % in seconds
case "freezing"
sensorSettings.barometer1.setFreezing;
[sensorSettings.barometer1, fault_time_1] = sensorSettings.barometer1.setErrorTime(); % in seconds
otherwise
end
%% barometer2 - static measure (HSCMAND001BAAA5)
sensorSettings.barometer2 = Sensor_with_fault_sim(); % presure in mbar, temp should be in C°
sensorSettings.barometer2.maxMeasurementRange = 1000; % 1100, 1300 in mbar
sensorSettings.barometer2.minMeasurementRange = 0; % 300, 10 in mbar
sensorSettings.barometer2.bit = 24; % adc on rocket is 24 bits
sensorSettings.barometer2.resolution = (sensorSettings.barometer2.maxMeasurementRange -sensorSettings.barometer2.minMeasurementRange)/(2^sensorSettings.barometer2.bit);
sensorSettings.barometer2.noiseVariance = 1; % mbar^2
sensorSettings.barometer2.fault_time = -1; %if negative it will be generated at random between a max and a min value
sensorSettings.barometer2.max_fault_time = 96; %max seconds to wait before possible fault
sensorSettings.barometer2.min_fault_time = 6; %min seconds to wait before possible fault
% fault generation
switch settings.fault_sim.fault_type(2)
case "offset"
offset_value_2 = round((settings.fault_sim.max_offset-settings.fault_sim.min_offset)*rand() + settings.fault_sim.min_offset);
sensorSettings.barometer2 = sensorSettings.barometer2.setOffset(offset_value_2); % i don't know the unit of measurment as of now
[sensorSettings.barometer2, fault_time_2] = sensorSettings.barometer2.setErrorTime(); % in seconds
case "degradation"
degradation_value_2 = round((settings.fault_sim.max_degradation-settings.fault_sim.min_degradation)*rand() + settings.fault_sim.min_degradation);
sensorSettings.barometer2 = sensorSettings.barometer2.setDegradation(degradation_value_2); % i don't know the unit of measurment as of now
[sensorSettings.barometer2, fault_time_2] = sensorSettings.barometer2.setErrorTime(); % in seconds
case "freezing"
sensorSettings.barometer2.setFreezing;
[sensorSettings.barometer2, fault_time_2] = sensorSettings.barometer2.setErrorTime(); % in seconds
otherwise
end
%% barometer3 - digital measure (LPS28DFWTR)
sensorSettings.barometer3 = Sensor_no_offset(); % presure in mbar, temp should be in C°
sensorSettings.barometer3 = Sensor_with_fault_sim(); % presure in mbar, temp should be in C°
sensorSettings.barometer3.maxMeasurementRange = 4060; % 1100, 1300 in mbar
sensorSettings.barometer3.minMeasurementRange = 260; % 300, 10 in mbar
sensorSettings.barometer3.bit = 24;
sensorSettings.barometer3.resolution = (sensorSettings.barometer3.maxMeasurementRange -sensorSettings.barometer3.minMeasurementRange)/(2^sensorSettings.barometer3.bit);
sensorSettings.barometer3.noiseVariance = 4.06; % guess in mbar
sensorSettings.barometer3.fault_time = -1; %if negative it will be generated at random between a max and a min value
sensorSettings.barometer3.max_fault_time = 96; %max seconds to wait before possible fault
sensorSettings.barometer3.min_fault_time = 6; %min seconds to wait before possible fault
% fault generation
switch settings.fault_sim.fault_type(3)
case "offset"
offset_value_3 = round((settings.fault_sim.max_offset-settings.fault_sim.min_offset)*rand() + settings.fault_sim.min_offset);
sensorSettings.barometer3 = sensorSettings.barometer3.setOffset(offset_value_3); % i don't know the unit of measurment as of now
[sensorSettings.barometer3, fault_time_3] = sensorSettings.barometer3.setErrorTime(); % in seconds
case "degradation"
degradation_value_3 = round((settings.fault_sim.max_degradation-settings.fault_sim.min_degradation)*rand() + settings.fault_sim.min_degradation);
sensorSettings.barometer3 = sensorSettings.barometer3.setDegradation(degradation_value_3); % i don't know the unit of measurment as of now
[sensorSettings.barometer3, fault_time_3] = sensorSettings.barometer3.setErrorTime(); % in seconds
case "freezing"
sensorSettings.barometer3.setFreezing;
[sensorSettings.barometer3, fault_time_3] = sensorSettings.barometer3.setErrorTime(); % in seconds
otherwise
end
%% accelerometer (6 dof imu - LSM6DSRXTR)
sensorSettings.accelerometer = Sensor3D(); % acceleration in mg
......@@ -98,7 +158,7 @@ sensorSettings.pitot_static.resolution = (sensorSettings.pitot_static.maxMeasure
sensorSettings.pitot_static.noiseVariance = 0.043043; % from flight logs
% total pressure
sensorSettings.pitot_total = Sensor_no_offset();
sensorSettings.pitot_total = Sensor();
sensorSettings.pitot_total.maxMeasurementRange = 2*1034.21; % mbar ( 30psi)
sensorSettings.pitot_total.minMeasurementRange = 0;
sensorSettings.pitot_total.bit = 12;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment