From 3bb31393c10b41568cdda8b524e130ea1de55798 Mon Sep 17 00:00:00 2001 From: Emilio Corigliano <emilio.corigliano@skyward.eu> Date: Fri, 12 Aug 2022 20:42:31 +0200 Subject: [PATCH] [pitot] fixed problems in simulating pitot --- sensors/acquisition_Sys.m | 7 ++++--- sensors/initSensors.m | 4 ++-- simulator/configEuroc.m | 13 +++++++------ simulator/configRoccaraso.m | 2 +- simulator/manageCalibration.m | 23 +++++++++++++++-------- simulator/manageSignalFrequencies.m | 6 +++--- simulator/start_simulation.m | 2 +- 7 files changed, 33 insertions(+), 24 deletions(-) diff --git a/sensors/acquisition_Sys.m b/sensors/acquisition_Sys.m index 3b5dfe87..aaa89921 100644 --- a/sensors/acquisition_Sys.m +++ b/sensors/acquisition_Sys.m @@ -99,11 +99,12 @@ OUTPUT: if isfield(sensorData, 'pitot') for ii=1:length(sensorData.pitot.time) - sensorData.pitot.measures(ii,:) = s.SSCDRRN015PDAD5.sens(sensorData.pitot.measures(ii)/100,... + asd = s.SSCDRRN015PDAD5.sens(sensorData.pitot.measures(ii)/100,... sensorData.pitot.temperature(ii) - 273.15); - sensorData.pitot.measures(ii,:) = sensorData.pitot.measures(ii)*100; + sensorData.pitot.measures(ii,1) = asd; + sensorData.pitot.measures(ii,1) = sensorData.pitot.measures(ii)*100; end - tot.pitot_tot(tot.npitot_old:tot.npitot_old + size(sensorData.pitot.measures,1) - 1,1) = sensorData.pitot.measures(1:end); + tot.pitot_tot(tot.npitot_old:tot.npitot_old + size(sensorData.pitot.measures,1) - 1,1) = sensorData.pitot.measures; tot.time_pitot(tot.npitot_old:tot.npitot_old + size(sensorData.pitot.measures,1) - 1) = sensorData.pitot.time ; tot.npitot_old = tot.npitot_old + size(sensorData.pitot.measures,2); end diff --git a/sensors/initSensors.m b/sensors/initSensors.m index 927b8734..3bf2a85b 100644 --- a/sensors/initSensors.m +++ b/sensors/initSensors.m @@ -98,10 +98,10 @@ s.SSCDRRN015PDAD5.minMeasurementRange = -1034; % in mbar (-1 s.SSCDRRN015PDAD5.offset = -1.9327; % in mbar s.SSCDRRN015PDAD5.resolution = 1; % in mbar s.SSCDRRN015PDAD5.noiseVariance = 75; % guess in mbar -s.SSCDRRN015PDAD5.error2dOffset = ep_data; % [p in mbar, T in celsius, ep in mbar] +% s.SSCDRRN015PDAD5.error2dOffset = ep_data; % [p in mbar, T in celsius, ep in mbar] % check 2d offset for pitot - +sensorTot.npitot_old = 1; sensorTot.np_old = 1; sensorTot.na_old = 1; sensorTot.ngps_old = 1; diff --git a/simulator/configEuroc.m b/simulator/configEuroc.m index 5289afdd..d4d5f3cd 100644 --- a/simulator/configEuroc.m +++ b/simulator/configEuroc.m @@ -122,12 +122,13 @@ settings.Controls = s.State.hprot'; clear('s'); %% CONTROL AND SENSOR FREQUENCIES -settings.frequencies.controlFrequency = 10; % [hz] control action frequency -settings.frequencies.accelerometerFrequency = 100; % [hz] control action frequency -settings.frequencies.gyroFrequency = 100; % [hz] control action frequency -settings.frequencies.magnetometerFrequency = 100; % [hz] control action frequency -settings.frequencies.gpsFrequency = 10; % [hz] control action frequency -settings.frequencies.barometerFrequency = 20; % [hz] control action frequency +settings.frequencies.controlFrequency = 10; % [hz] control action frequency +settings.frequencies.accelerometerFrequency = 100; % [hz] sensor frequency +settings.frequencies.gyroFrequency = 100; % [hz] sensor frequency +settings.frequencies.magnetometerFrequency = 100; % [hz] sensor frequency +settings.frequencies.gpsFrequency = 10; % [hz] sensor frequency +settings.frequencies.barometerFrequency = 20; % [hz] sensor frequency +settings.frequencies.pitotFrequency = 20; % [hz] sensor frequency %% KALMAN TUNING PARAMETERS settings.kalman.dt_k = 0.01; % [s] kalman time step diff --git a/simulator/configRoccaraso.m b/simulator/configRoccaraso.m index 1d63a434..69a1bf94 100644 --- a/simulator/configRoccaraso.m +++ b/simulator/configRoccaraso.m @@ -130,7 +130,7 @@ settings.frequencies.gyroFrequency = 100; % [hz settings.frequencies.magnetometerFrequency = 100; % [hz] sensor frequency settings.frequencies.gpsFrequency = 10; % [hz] sensor frequency settings.frequencies.barometerFrequency = 20; % [hz] sensor frequency -settings.frequencies.pitot = 20; % [hz] sensor frequency +settings.frequencies.pitotFrequency = 20; % [hz] sensor frequency %% KALMAN TUNING PARAMETERS diff --git a/simulator/manageCalibration.m b/simulator/manageCalibration.m index f1fcafe8..7b7bc645 100644 --- a/simulator/manageCalibration.m +++ b/simulator/manageCalibration.m @@ -4,6 +4,8 @@ Na = freq.accelerometerFrequency/freq.controlFrequency; Nm = freq.magnetometerFrequency/freq.controlFrequency; Ngps = freq.gpsFrequency/freq.controlFrequency; Nbar = freq.barometerFrequency/freq.controlFrequency; +Npit = freq.pitotFrequency/freq.controlFrequency; + ome = settings.OMEGA; phi = settings.PHI; @@ -14,33 +16,38 @@ for i = 1:Na SensorData.accelerometer.measures(i,:) = (A*[0; 0; -9.81])'; SensorData.gyro.measures(i,:) = [0, 0, 0]; end - SensorData.accelerometer.time = zeros(1,Na); - SensorData.gyro.time = zeros(1,Na); +SensorData.accelerometer.time = zeros(1,Na); +SensorData.gyro.time = zeros(1,Na); for i = 1:Nm SensorData.magnetometer.measures(i,:) = (A * magField)'; end - SensorData.magnetometer.time = zeros(1,Nm); +SensorData.magnetometer.time = zeros(1,Nm); for i = 1:Ngps SensorData.gps.velocityMeasures(i,:) = [0,0,0]; SensorData.gps.positionMeasures(i,:) = [settings.lat0,settings.lon0,settings.z0]; end - SensorData.gps.time = zeros(1,Ngps); +SensorData.gps.time = zeros(1,Ngps); - [T,~,P,~] = atmosisa(settings.z0); +[T,~,P,~] = atmosisa(settings.z0); for i = 1:Nbar SensorData.barometer.measures(i,1) = P; SensorData.barometer.temperature(i,1) = T; end - SensorData.barometer.time = zeros(1,Nbar); - +SensorData.barometer.time = zeros(1,Nbar); + +SensorData.pitot.measures = zeros(Npit,1); +for i = 1:Npit + SensorData.pitot.temperature(i,1) = T; end +SensorData.pitot.time = zeros(1,Npit); +end + function A = cdmrot(q) A = [q(1)^2 - q(2)^2 - q(3)^2 + q(4)^2, 2*(q(1)*q(2) + q(3)*q(4)), 2*(q(1)*q(3) - q(2)*q(4)); 2*(q(1)*q(2) - q(3)*q(4)), -q(1)^2 + q(2)^2 - q(3)^2 + q(4)^2, 2*(q(2)*q(3) + q(1)*q(4)) ; 2*(q(1)*q(3) + q(2)*q(4)), 2*(q(2)*q(3) - q(1)*q(4)), -q(1)^2 - q(2)^2 + q(3)^2 + q(4)^2]; - end \ No newline at end of file diff --git a/simulator/manageSignalFrequencies.m b/simulator/manageSignalFrequencies.m index c22f25fa..e8e3b5fe 100644 --- a/simulator/manageSignalFrequencies.m +++ b/simulator/manageSignalFrequencies.m @@ -287,7 +287,7 @@ if isfield(freq, 'pitotFrequency') z(i) = - m*iTimeBarometer + q; else vx(i) = Y(iTimePitot == T, 4); - z(i) = -Y(iTimeBarometer == T, 3); + z(i) = -Y(iTimePitot == T, 3); end end @@ -308,8 +308,8 @@ if isfield(freq, 'pitotFrequency') wind_body = ned2body*wind_ned; - v = vx + wind_body(1); % Speed x_body + wind in x_body direction + v = (vx + wind_body(1))'; % Speed x_body + wind in x_body direction sensorData.pitot.temperature = Temp; - sensorData.pitot.measures = 0.5*rho*v*v*sign(v); % differential pressure in Pascals + sensorData.pitot.measures = (0.5*rho'.*v.*v.*sign(v))'; % differential pressure in Pascals end diff --git a/simulator/start_simulation.m b/simulator/start_simulation.m index d5a06abf..79a36bd8 100644 --- a/simulator/start_simulation.m +++ b/simulator/start_simulation.m @@ -50,7 +50,7 @@ end %start simulation -[Yf, Tf, cpuTimes, flagMatr, otherData] = std_run(settings); + [Yf, Tf, cpuTimes, flagMatr, otherData] = std_run(settings); if not(settings.electronics) -- GitLab