-
Notifications
You must be signed in to change notification settings - Fork 17
/
fuselageSetState.m
78 lines (73 loc) · 3.42 KB
/
fuselageSetState.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
function fuselage = fuselageSetState( fuselage, alpha, beta, V, omega, xyz_cg, varargin )
%fuselageSetState set state struct in fuselage struct
% All required fuselage specifiy variables that change during simulation
% are computed and the most important ones are stored in the
% fuselage.state struct.
%
% Syntax:
% fuselage = fuselageSetState( fuselage, alpha, beta, V, omega, xyz_cg )
% fuselage = fuselageSetState( fuselage, alpha, beta, V, omega, xyz_cg, ...
% 'atmosphere', atmosphere )
% fuselage = fuselageSetState( fuselage, alpha, beta, V, omega, xyz_cg, ...
% 'wind', V_Wb, V_Wb_dt )
% fuselage = fuselageSetState( fuselage, alpha, beta, V, omega, xyz_cg, ...
% 'structure_pos', structure_pos )
% fuselage = fuselageSetState( fuselage, alpha, beta, V, omega, xyz_cg, ...
% 'structure_pos', structure_pos, 'structure_vel', structure_vel )
% fuselage = fuselageSetState( fuselage, alpha, beta, V, omega, xyz_cg, ...
% 'unsteady', alpha_unst, beta_unst )
%
% Inputs:
% fuselage fuselage struct (see fuselageInit)
% alpha flight-path angle of attack (scalar), in rad
% beta flight-path sideslip angle (scalar), in rad
% V flight-path velocity (scalar), in m/s
% omega angular velocity (3x1 array), in rad/s
% xyz_cg center of gravity position in fuselage frame (3x1
% array), in m
% atmosphere atmosphere struct (see isaAtmosphere)
% V_Wb local wind velocity vecotrs
% (fuselage.state.external.V_Wb)
% V_Wb_dt local wind acceleration vectors
% (fuselage.state.external.V_Wb_dt)
% structure_pos structure position state
% structure_vel structure velocity state
% alpha_unst unsteady (effective) angle of attack
% (fuselage.state.aero.unsteady.alpha), in rad
% beta_unst unsteady (effective) sideslip angle
% (fuselage.state.aero.unsteady.beta), in rad
%
% Outputs:
% fuselage fuselage struct (see fuselageInit)
%
% See also:
% fuselageInit, fuselageCreate, fuselageSetAeroState
% Disclaimer:
% SPDX-License-Identifier: GPL-3.0-only
%
% Copyright (C) 2020-2022 Yannic Beyer
% Copyright (C) 2022 TU Braunschweig, Institute of Flight Guidance
% *************************************************************************
for i = 1:length(varargin)
if ischar(varargin{i})
if isequal(varargin{i},'atmosphere')
fuselage.state.external.atmosphere = varargin{i+1};
elseif isequal(varargin{i},'V_Wb')
fuselage.state.external.V_Wb(:) = varargin{i+1};
elseif isequal(varargin{i},'V_Wb_dt')
fuselage.state.external.V_Wb_dt(:) = varargin{i+1};
elseif isequal(varargin{i},'structure_pos') && fuselage.config.is_flexible
fuselage = fuselageSetGeometryState(fuselage,'pos',varargin{i+1});
elseif isequal(varargin{i},'structure_vel') && fuselage.config.is_flexible
fuselage = fuselageSetGeometryState(fuselage,'vel',varargin{i+1});
elseif isequal(varargin{i},'unsteady') && fuselage.config.is_unsteady
fuselage.state.aero.R_Ab_i(:) = varargin{i+1};
fuselage.state.aero.R_Ab_i(1,:) = 0;
end
end
end
% set current rigid body state
fuselage = fuselageSetBodyState( fuselage, alpha, beta, V, omega );
% set aerodynamics state
fuselage = fuselageSetAeroState( fuselage, xyz_cg );
end