From 98e1a3bc15560a206eb31f02dd2fcacf51ff19b8 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 29 Mar 2024 21:17:40 +0100 Subject: Add MATLAB code --- uav_params.m | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 uav_params.m (limited to 'uav_params.m') diff --git a/uav_params.m b/uav_params.m new file mode 100644 index 0000000..fb9121f --- /dev/null +++ b/uav_params.m @@ -0,0 +1,81 @@ +% Copyright (C) 2024, Naoki Sean Pross, ETH Zürich +% +% Retrieve / compute parameters for UAV. + +function [params] = uav_params() + +% Unit of measurements unless specified otherwise are +% Mass in kg +% Lenghts in m +% Time in s +% Frequencies in Hz +% Angular velocities in rad / s + +params = struct(); + +% ------------------------------------------------------------------------ +% Physical constants + +params.physics = struct(... + 'Gravity', 9.81, ... + 'AirDensity', 1.204 ... % kg / m^3 +); + +% ------------------------------------------------------------------------ +% Mechanical measurements + +params.mechanical = struct(... + 'Mass', 4.0, ... + 'DuctRadius', 46e-3, ... + 'DuctHeight', 171e-3, ... + 'FlapZDistance', 98e-3, ... % flap distance along z from center of mass + 'InertiaTensor', 5e-3 * eye(3), ... % TODO, assume diagonal + 'GyroscopicInertiaZ', 0 ... % assume no gyroscopic effects for now +); + +% ------------------------------------------------------------------------ +% Actuator limits + +params.actuators = struct(... + 'TurbineMaxSpeed', 620.7, ... % In Hz + 'ServoAbsMaxAngleDeg', 25, ... % in Degrees + 'MeasurementDelay', 8e-3 ... % delay caused by sensor fusion algorithm +); + +% ------------------------------------------------------------------------ +% Aerodynamics modelling + +% Compute thrust proportionality factor from actuator limits +% from thrust relation F = k * omega^2. +% FIXME: this is not ideal, need better measurements +omega_max = params.actuators.TurbineMaxSpeed; +F_max = 38.637; % in N (measured) +k_T = sqrt(F_max / omega_max); + +params.aerodynamics = struct(... + 'ThrustOmegaProp', k_T, ... + 'FlapArea', 23e-3 * 10e-3 * 1.5, ... % FIXME factor 150% was chosen at random + 'DragCoefficients', [1, 1] .* 1e-3, ... % TODO + 'LiftCoefficient', 1e-3 ... % TODO +); + +% ------------------------------------------------------------------------ +% Linearization point of non-linear dynamics. + +% Compute theoretical thrust required to make the UAV hover +% from the relation mg = k * omega^2 +g = params.physics.Gravity; +m = params.mechanical.Mass; +k = params.aerodynamics.ThrustOmegaProp; + +omega_hover = sqrt(m * g / k); + +params.linearization = struct(... + 'Position', [0; 0; -3], ... % in inertial frame, z points down + 'Velocity', [0; 0; 0], ... % in inertial frame + 'Angles', [0; 0; 0], ... % in body frame + 'AngularVelocities', [0; 0; 0], ... % in body frame + 'Inputs', [0; 0; 0; 0; omega_hover] ... % Flaps at rest and turbine at X +); + +end \ No newline at end of file -- cgit v1.2.1