diff options
author | Nao Pross <np@0hm.ch> | 2024-05-23 00:22:59 +0200 |
---|---|---|
committer | Nao Pross <np@0hm.ch> | 2024-05-23 01:15:06 +0200 |
commit | 9c1c729b88f89d5d0672aa48e1afb87b99fe2350 (patch) | |
tree | 304f9930942948f7465f806040b8e1a68ff48389 /uav_params.m | |
parent | Improve code for DK-iteration (diff) | |
download | uav-9c1c729b88f89d5d0672aa48e1afb87b99fe2350.tar.gz uav-9c1c729b88f89d5d0672aa48e1afb87b99fe2350.zip |
Update DK-iteration and clean up
Diffstat (limited to 'uav_params.m')
-rw-r--r-- | uav_params.m | 66 |
1 files changed, 15 insertions, 51 deletions
diff --git a/uav_params.m b/uav_params.m index a1c0e4a..e87e4fd 100644 --- a/uav_params.m +++ b/uav_params.m @@ -65,7 +65,7 @@ params.actuators = struct(... % IMU runs in NDOF mode params.measurements = struct(... - 'SensorFusionDelay', 20e-3, ... % in s + 'SensorFusionDelay', 50e-3, ... % in s 'LIDARAccuracy', 10e-3, ... % in m 'LIDARMaxDistance', 40, ... % inm 'LIDARBandwidth', 100, ... % in Hz for z position @@ -82,6 +82,11 @@ omega_max = params.actuators.PropellerMaxAngularVelocity; F_max = 38.637; % in N (measured) k_T = F_max / omega_max^2; +% Lift coefficient from data +% flap_stair = readtable('meas/Flap_Force_Stair.csv'); +% [~, istart] = min(abs(flap.Force)); +% [~, iend] = min(abs(flap.Force - 3)); + % FIXME: LiftCoefficient comes from % https://scienceworld.wolfram.com/physics/LiftCoefficient.html params.aerodynamics = struct(... @@ -120,56 +125,15 @@ params.linearization = struct(... % ------------------------------------------------------------------------ % Performance requirements -params.performance = struct(... - 'ReferencePosMaxDistance', 1, ... % m - 'HorizontalPosMaxError', 2, ... % m - 'HorizontalMaxSpeed', 2, ... % m / s - 'HorizontalSettleTime', 6, ... % s - 'VerticalPosMaxError', 2, ... % m - 'VerticalMaxSpeed', 2, ... % m / s - 'VerticalSettleTime', 4, ... % s - 'AngleMaxPitchRoll', 10 * pi / 180, ... % in rad - 'AngleMaxYaw', pi, ... % rad - 'AngleMaxAngularRate', 20 * pi / 180 ... % rad / s +params.normalization = struct(... + 'HPosition', 1, ... % m + 'VPosition', 1, ...% m + 'HSpeed', 2, ... % m / s + 'VSpeed', 2, ... % m / s + 'PitchRollAngle', 10 * pi / 180, ... % rad + 'YawAngle', 5 * pi / 180, ... % rad + 'AngularRate', 2 * pi / 180, ... % rad / s + 'WindSpeed', 2 ... % m / s ); - -% Scaling matrices (because signals are normalized wrt parameter performance) -p = params.performance; - -params.ErrorScalingMatrix = blkdiag(... - eye(4) * params.actuators.ServoAbsMaxAngle, ... - params.actuators.PropellerMaxAngularVelocity ... - - params.linearization.Inputs(5), ... - eye(2) * p.HorizontalPosMaxError, ... - p.VerticalPosMaxError, ... - eye(2) * p.HorizontalMaxSpeed, ... - p.VerticalMaxSpeed, ... - eye(2) * p.AngleMaxPitchRoll, ... - p.AngleMaxYaw); - -params.OutputScalingMatrix = blkdiag(... - eye(2) * p.HorizontalPosMaxError, ... - p.VerticalPosMaxError, ... - eye(2) * p.HorizontalMaxSpeed, ... - p.VerticalMaxSpeed, ... - eye(2) * p.AngleMaxPitchRoll, ... - p.AngleMaxYaw, ... - eye(3) * p.AngleMaxAngularRate); - - -horiz_settle_speed = (1 - exp(-1)) / params.performance.HorizontalSettleTime; -if horiz_settle_speed > params.performance.HorizontalMaxSpeed - fprintf(['Contradictory performance requirements: ' ... - 'velocity needed to attain horizontal settle time is ' ... - 'higher than HorizontalMaxSpeed']); -end - -vert_settle_speed = (1 - exp(-1)) / params.performance.VerticalSettleTime; -if vert_settle_speed > params.performance.VerticalMaxSpeed - fprintf(['Contradictory performance requirements: ' ... - 'velocity needed to attain vertical settle time is ' ... - 'higher than VerticalMaxSpeed']); -end - end % vim: ts=2 sw=2 et: |