Beruflich Dokumente
Kultur Dokumente
Drexel University
In Order to design a state-feedback controller, we first had to concatenate the aircraft plant and actuator dynamics into a single plant. We wrote the actuator dynamics, given to us in Laplace space, in state-space representations such that the output matrix C was the identity. This ensured that the states relating the actuators represented the actual actuator positions. This is the concatenated system:
Af Bf Cf Mf Df = = = = = [E^-1*A E^-1*B;zeros(2,4) [-10 0;0 -.2]]; [zeros(4,2);[10 0;0 .2]]; [rtod*[-1 0 0 1 0 0];0 0 1 0 0 0]; %monitored outputs = [climb angle;vt] [0 0 0 rtod 0 0;0 0 1 0 0 0]; %measured outputs = [theta, vt] zeros(size(Cf,1),2);
The six states in order are angle of attack, pitch rate, velocity, pitch, elevator deflection, and throttle setting. All angular states are stored in radians. The Cf and Mf matrices contain the transformations into degrees, so the system outputs are in degrees rather than radians. Our group designed two separate controllers, one for climb and one for cruise flight. For the first, we set
Q = diag([10 1]); r = diag([1000 1]); rho = 30;
The first element in Q weights climb angle and the second weights velocity. The first element in r weights elevator control and the second weights throttle. Rho is relatively high because the plane will vibrate on its short-period frequencies for low rho values. The high rho slows the response of the system and raises the damping ratio. We calculated feedback gain as follows:
F1 = -lqr(Af,Bf,Cf'*Q*Cf,rho^2*r);
Where the first output is climb angle, in degrees, and the second is velocity. This system drives the plane to equilibrium flight, however, and we needed to turn it into a setpoint controller by adding a setpoint filter placed between the setpoint and input to the system. To solve for this filter, we set the time derivative of the system to zero and solved for the input filter, as shown below. x represents the estimated states, r represents the input signal, and P represents the filter. The system is solved by saying r and y are equal at steady-state.
And Bc1 to
Bc1 = [Bf([1:end 1:end],1)]*Pi;
For the climb phase, only the first column of Bf and the first row of Cc are used, because the exam specifies that the setpoint controller for the climb phase is only controlling climb angle and is only commanding the elevator. For the level cruise phase, both rows of Cc and both columns of Bf are used. The block diagram for the closed-loop systems is below. The climb phase system has a slightly different form for its block diagram because the input r is a scalar; however, the general appearance of the block diagram still holds.
The eigenvalues of the closed-loop system for the climb phase are -20.0000 -10.0000 -0.8758 + 2.2356i -0.8758 - 2.2356i -0.4379 + 1.1178i -0.4379 - 1.1178i -0.3484 + 0.2862i -0.3484 - 0.2862i -0.1742 + 0.1431i -0.1742 - 0.1431i -0.0986 -0.1971 At first, our group mistakenly took this to mean that the LQR controller should not control throttle either. We set up that system and got some interesting results. The aircraft reached a steady state climb angle, but also maintained a nonzero pitch rate such that the plane was continuously pitching up and slowing down to maintain the climb angle. When the controller switched at 2000 feet, the plane rolled forward and
picked up speed, but actually loses 1500 feet of altitude before it settles to equilibrium. The graphs are included at the end of this report simply because we find them interesting. The controller for level, cruise flight is very similar to the one above, but with different values for r and Q.
Q = diag([10 1]);r = diag([1000 10]);rho = 30;
Elevator deflection is weighted more heavily here, as is climb angle. Since the setpoint controller must control both climb angle and velocity while commanding both elevator and throttle, the setpoint filter must be a 2x2 matrix:
Pi = -(Cc*Ac2^-1*[Bf;Bf])^-1;
Again, observer poles are simply placed at twice the regulator poles. The poles of the closed loop system with the second controller are -20.0000 -10.0000 -0.8758 + 2.2355i -0.8758 - 2.2355i -0.4379 + 1.1178i -0.4379 - 1.1178i -0.3743 -0.1590 + 0.1916i -0.1590 - 0.1916i -0.0795 + 0.0958i -0.0795 - 0.0958i -0.1872 To model these systems separately, one may simply use lsim(), but we could not do this for two reasons: First, we must model height and Northern (we assume the plane is going North) velocities, but we cannot accurately linearize those differential equations; second, the controllers must switch when the plane reaches 2000ft, and a linear system cannot contain background logic to do this. Instead, we wrote a differential function for use with ode45() or a similar solver. State-space systems are passed to this function via global variables, and the state vector is appended with altitude and North displacement. This way, we model both the linearized state-space system and the non-linear flight path system. To switch between the two controllers, a simple persistent Boolean variable is set when the plane hits 2000ft above the altitude from which it started. An if() statement separates the two closed-loop systems with the persistent Boolean as its argument.
Alpha Response 5.7 5.65 5.6 5.55 5.5 5.45 5.4 5.35 5.3 5.25 5.2 0 50 100 150 200 250 Time (s) 300 350 400 450 500 Alpha (deg)
Pitch Rate Response 0.3 q (deg/s) 0.2 0.1 0 -0.1 -0.2 -0.3 -0.4
50
100
150
200
300
350
400
450
500
Velocity Response 500.5 Vt (ft/s) 500 499.5 499 498.5 498 497.5 497 496.5 496
50
100
150
200
300
350
400
450
500
Pitch Response 1.2 theta (deg) 1.1 1 0.9 0.8 0.7 0.6 0.5
50
150
200
250
Figure -1 Plots of primary airplane variables b. Plots of climb angle response, elevator repose, throttle response and flight path are shown in figure 2. These demonstrations are further analyzed to see if the system has reached the settling time specifications. Climb angle is the command given by the team with the initial condition of 0 degree angle. The climb angle is zero at start and reaches desired 1o in 84 seconds and the angle is maintained until the plane reaches the altitude of 32070 ft. Overall, the auto-pilot takes 238 seconds to come from 30000 ft to 32000 ft.
Second graph shows that there is a spike in the elevator deflection at 238 seconds which is caused when leveling off from 1o climb angle. This takes approximately 38 seconds while the overall leveling process takes 50 seconds. It should be also noted that the there is an inverse relation between the climb angle and the elevator deflection therefore when the elevator deflection is negative, climb angle is positive. Last graph can be analyzed to observe the settling time in terms of displacement. 126700 feet of north displacement is needed to reach to the desired altitude and 25100 ft more to go back to the level-off position.
Climb Angle Response 1.2 gamma (deg) 1 0.8 0.6 0.4 0.2 0 -0.2
50
100
150
200
300
350
400
450
500
50
100
150
200
300
350
400
450
500
0.25 0.24 0.23 0.22 0.21 0.2 0 50 100 150 200 250 Time (s) 300 350 400 450 500
3.25
x 10
Flight Path
3.2
Altitude (ft)
3.15
3.1
3.05
0.5
2.5 x 10
5
Figure 2 Airplane response I c. Response plots for at least two different values of indicating the improvement in performance at the expense of larger actuator-activity 1. There are two rho values for each controller as one controller is for one degree flight and the other is for level cruise flight. The values of rho are 30 for each controller. First, both values of rho indicated were decreased by 30% and the following graphs were obtained. Plane is expected to vibrate on its short-period frequencies for lower rho values. Alpha and pitch rate responses oscillate more when leveling off from 1o climb angle. In addition, the plane does not slow down as much during this change.
Overall, the response of the system is increases but this drives system to be less stable. Graph 4 shows that spike up from -4.095 to -4.096 in elevator deflection whereas there are no significant changes in other variables.
Alpha Response 5.9 Alpha (deg) 5.8 5.7 5.6 5.5 5.4 5.3 5.2 5.1
50
100
150
200
300
350
400
450
500
Pitch Rate Response 0.3 q (deg/s) 0.2 0.1 0 -0.1 -0.2 -0.3 -0.4
50
100
150
200
300
350
400
450
500
Velocity Response 500.5 Vt (ft/s) 500 499.5 499 498.5 498 497.5 497
50
100
150
200
300
350
400
450
500
Pitch Response 1.2 theta (deg) 1 0.8 0.6 0.4 0.2 0 -0.2
50
100
150
200
300
350
400
450
500
Climb Angle Response 1.2 gamma (deg) 1 0.8 0.6 0.4 0.2 0 -0.2
50
100
150
200
300
350
400
450
500
-4.096 -4.098 -4.1 -4.102 -4.104 -4.106 -4.108 0 50 100 150 200 250 Time (s) 300 350 400 450 500
0.25 0.24 0.23 0.22 0.21 0.2 0 50 100 150 200 250 Time (s) 300 350 400 450 500
3.25
x 10
Flight Path
3.2
Altitude (ft)
3.15
3.1
3.05
0.5
2.5 x 10
5
2. The values of rho are 30 for each controller. Secondly, both values of rho indicated were increased by 50% and the following graphs were obtained. The system response is expected to slow down while the damping ratio is expected to rise. The same expected results are illustrated in figures 6 & 7. Alpha and pitch rate response have small spikes while having more oscillations as a result of increase in damping
ratio. The plane needs less velocity to overcome the same angle change but takes slightly longer time to settle down because of the oscillations.
Alpha Response 5.75 5.7 5.65 5.6 5.55 5.5 5.45 5.4 5.35 5.3 5.25 0 50 100 150 200 250 Time (s) 300 350 400 450 500 Alpha (deg)
Pitch Rate Response 0.3 q (deg/s) 0.2 0.1 0 -0.1 -0.2 -0.3 -0.4
50
100
150
200
300
350
400
450
500
Velocity Response 501 Vt (ft/s) 500 499 498 497 496 495 494
50
100
150
200
300
350
400
450
500
Pitch Response 1.2 theta (deg) 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4
50
100
150
200
300
350
400
450
500
Climb Angle Response 1 gamma (deg) 0.8 0.6 0.4 0.2 0 -0.2 -0.4
50
100
150
200
300
350
400
450
500
-4.098
Elevator Deflection (deg)
-4.1
-4.102
-4.104
-4.106
-4.108
50
100
150
200
300
350
400
450
500
0.25 0.24 0.23 0.22 0.21 0.2 0 50 100 150 200 250 Time (s) 300 350 400 450 500
3.25
x 10
Flight Path
3.2
Altitude (ft)
3.15
3.1
3.05
0.5
2.5 x 10
5
Part b.
From FinalExamRobustness, we also get the linearized system for the evaluation. Using this model, we replaced our design model and with the evaluation model. The eigenvalues of both closed loop systems is shown below.
Orignal System -20.0000 -10.0000 -0.8758 + 2.2356i -0.8758 - 2.2356i -0.4379 + 1.1178i -0.4379 - 1.1178i -0.3484 + 0.2862i -0.3484 - 0.2862i -0.1742 + 0.1431i -0.1742 - 0.1431i -0.0986 -0.1971
Evaluation Model -20.0000 -10.0000 -0.8755 + 2.2370i -0.8755 - 2.2370i -0.4047 + 1.0765i -0.4047 - 1.0765i -0.3501 + 0.2834i -0.3501 - 0.2834i -0.1776 + 0.1414i -0.1776 - 0.1414i -0.0847 -0.2047
We can see that the poles have shifted slightly, but overall, the evaluation model is stable and approximately equal to the design model.
Appendix 1: Code
Main script code
%% MEM 530 Midterm Exam 2 % clear all %% Problem A % Plane Properties rtod = 57.29578; %was used to convert radians to degrees s = 2170; cbar = 17.5; mass = 5.0e3; Iyy = 4.1e6; tstat = 6e4; dtdv = -38.0; ze = 2; cdcls = .042; cla = .085*rtod; cma = -.022*rtod; cmde =-.016*rtod; cmq = -16.0; cmadot = -6; cladot = 0; cl0 = .2; cd0 = .016; cm0 = .05; dcdg = 0; dcmg = 0; clq = 0; clv = 0; cmv = 0; cdv = 0; clde = 0; cdde = 0; gd = 32.17; xcg = .25; %% %team specific properties h = 30000; vt = 500; gamma = 0*pi/180; [m, qbar] = adc(vt,h); qs = qbar*s; %% %Equilibrium flight conditions [deltaee, deltate, alphae] = MyTrim(vt, h, gamma); cle = cl0 + cla*alphae; cme = dcmg + cm0 + cma*alphae + cmde*deltaee + cle*(xcg-.25); cde = dcdg + cd0 + cdcls*cle*cle; weight = mass * gd; lift = qs*cle; drag = qs*cde; thrust = (drag+weight*sin(gamma))/cos(alphae); global vte vte = vt; %% % Residual of steady-state flight res = thrust*sin(alphae)+lift-weight*cos(gamma); %% %constants for state space construction Zalphadot = qs*cbar/(2*mass*vt)*cladot; Malphadot = qs*cbar^2/(Iyy*2*vt)*cmadot; Zalpha = -qs/mass*(cde + cla); Zq = qs*cbar/(2*mass*vt)*clq; Zv = -qs/(mass*vt)*(2*cle+clv);
%% for debug
Zde = -qs/mass*clde; Xtv = 1/mass*dtdv*deltate; Xde = -qs/mass*cdde; Malpha = qs*cbar/Iyy*cma; Mtalpha = 0; Mq = qs*cbar^2/(Iyy*2*vt)*cmq; Mv = qs*cbar/(Iyy*vt)*(2*cme+cmv); Mtv = 1/Iyy*dtdv*deltate; Mde = qs*cbar/Iyy*cmde; Mdt = 1/Iyy*ze*(tstat+dtdv*vt); Xdt = 1/mass*(tstat+dtdv*vt); cdalpha = 2*cdcls*cle*cla; Xalpha = qs/mass*(cle-cdalpha); Xv = -qs/(mass*vt)*(2*cde+cdv); %% %state space representation E = [vt - Zalphadot, 0, 0, 0; -Malphadot 1 0 0; 0 0 1 0; 0 0 0 1]; A = [Zalpha, vt + Zq, Zv - Xtv*sin(alphae), -gd*sin(gamma); Malpha + ... Mtalpha, Mq, Mv + Mtv, 0; Xalpha, 0, Xv + Xtv*cos(alphae), ... -gd*cos(gamma); 0 1 0 0]; B = [Zde -Xdt*sin(alphae);Mde Mdt;Xde Xdt*cos(alphae);0 0]; C = eye(4)*rtod; C(3,3)=1; g = ss(E^-1*A,E^-1*B,C,zeros(4,2)); %% % Eignevectors, values [v e] = eig(E^-1*A) %% % Periods, damping ratios % [omega d] = damp(diag(e)); % fprintf('\n\nFrequency\tPeriod\t\tdamping ratio\n'); % fprintf('%1.4f\t\t%1.4f\t\t%1.4f\n',[omega 2*pi./omega d]'); %% Part A %% I. Full State Feedback Design %% % Augment system with actuator dynamics % x=[alpha;q;vt;theta;de;dt] Af = [E^-1*A E^-1*B;zeros(2,4) [-10 0;0 -.2]]; Bf = [zeros(4,2);[10 0;0 .2]]; Cf = [rtod*[-1 0 0 1 0 0];0 0 1 0 0 0]; %monitored outputs = [climb angle;vt] Mf = [0 0 0 rtod 0 0;0 0 1 0 0 0]; %measured outputs = [theta, vt] Df = zeros(size(Cf,1),2); global Ac1 Ac2 Cc Bc1 Bc2 U %% Build separate controllers % Out = [gamma;vt] Cc = [rtod*[-1 0 0 1 0 0 0 0 0 0 0 0]; [0 0 1 0 0 0 0 0 0 0 0 0]]; %% For 1 Degree of Climb % Find LQR feedback gain Q = diag([10 1]); r = diag([1000 1]); rho = 30;
F1 = -lqr(Af,Bf,Cf'*Q*Cf,rho^2*r); eRegulator = eig(Af+Bf*F1) %% % Place observer poles H1 = -place(Af',Mf',eRegulator*2)'; eObserver = eig(Af+H1*Mf) %% % Build closed-loop system Ac1 = [Af Bf*F1;-H1*Mf Af+H1*Mf+Bf*F1]; Pi = -(Cc(1,:)*Ac1^-1*[Bf([1:end 1:end],1)])^-1; Bc1 = [Bf([1:end 1:end],1)]*Pi; eClosedLoop1 = eig(Ac1) %% For Level Cruise Flight % Find LQR feedback gain Q = diag([10 1]); r = diag([1000 10]); rho = 30; F2 = -lqr(Af,Bf,Cf'*Q*Cf,rho^2*r); eRegulator = eig(Af+Bf*F2) %% % Place observer poles H2 = -place(Af',Mf',eRegulator*2)'; eObserver = eig(Af+H2*Mf) %% % Build closed-loop system Ac2 = [Af Bf*F2;-H2*Mf Af+H2*Mf+Bf*F2]; Pi = -(Cc*Ac2^-1*[Bf;Bf])^-1; Bc2 = [Bf;Bf]*Pi; eClosedLoop2 = eig(Ac2)
%% Simulation t = 0:.01:500; % zeroU = [zeros(1,length(t))+2;zeros(1,length(t))+1]; %we want 1 degree of % climb % system is linearized around steady-state deltas, so input is 0 % [outC] = lsim(gc,zeroU,t,.0*[alphae;0;vt;gamma;0;0;0;0;0;0;0;0]); clear modelDiff U = [1;2]; % [t X] = ode45(@modelDiff,[t(1) t(end)],[.1*alphae;0;.1*vt;0;0;0;0;0;0;0;0;0;h;0]); [t X] = ode45(@modelDiff,[t(1) t(end)],[zeros(12,1);h;0]); outC = (Cc*X(:,1:12)')'; % X = [alpha,q,vt,theta,de,dt, % alphaHat,qHat,vtHat,thetaHat,deHat,dtHat, % altitude,north displacement] %% % Primary airplane variable responses
figure(1);clf subplot(211) plot(t,X(:,[1])*rtod+alphae*rtod); legend 'Alpha (deg)' xlabel 'Time (s)' title 'Alpha Response' subplot(212); plot(t,X(:,[2])*rtod); legend 'q (deg/s)' xlabel 'Time (s)' title 'Pitch Rate Response' figure(2) subplot(211); plot(t,X(:,[3]) + vte); legend 'Vt (ft/s)' xlabel 'Time (s)' title 'Velocity Response' subplot(212); plot(t,X(:,[4])*rtod+gamma*rtod); legend 'theta (deg)' xlabel 'Time (s)' title 'Pitch Response' %% % Meeting-the-Objectives plots figure(3);clf subplot(211); plot(t,outC(:,[1])); legend 'gamma (deg)' xlabel 'Time (s)' title 'Climb Angle Response' subplot(212); plot(t,X(:,5)+deltaee*rtod); ylabel 'Elevator Deflection (deg)' xlabel 'Time (s)' title 'Elevator Response' figure(4) subplot(211); plot(t,X(:,6)+deltate); ylabel 'Throttle' xlabel 'Time (s)' title 'Throttle Response' subplot(212); plot(X(:,14),X(:,13)); ylabel 'Altitude (ft)' xlabel 'North Displacement (ft)' title 'Flight Path' %% % Plot states to show observer convergence figure(5) plot(t,X(:,1:12)) legend 'alpha (rad)' 'q (rad/s)' 'Vt (ft/s)' 'theta (rad)' 'Elevator (rad)' 'throttle' axis([0 60 -.15 .1]) figure(5) plot(t,X(:,1:12)) legend 'alpha (rad)' 'q (rad/s)' 'Vt (ft/s)' 'theta (rad)' 'Elevator (rad)' 'throttle' axis([230 350 -.2 .1]) %% [eRobust deltaeEval deltatEval alphaEval] = FinalExamRobustness(Af,Bf,Mf,H2,F2); fprintf('\n\n\n\nTrim Values:\n'); fprintf('\t\t\tOrignal System\t\tEvaluation Model\n')
fprintf('Elevator (deg):\t%1.4f\t\t\t%1.4f\n',deltaee*rtod,rtod*deltaeEval); fprintf('Throttle: \t%1.4f\t\t\t%1.4f\n',deltate,deltatEval); fprintf('Alpha (deg): \t%1.4f\t\t\t%1.4f\n',alphae*rtod,rtod*alphaEval); fprintf('\n\nClosed-loop poles:\n') fprintf('Orignal System\t\tEvaluation Model') [eClosedLoop2 eRobust]
Function acd
function [amach,qbar] = adc(vt,alt) r0 = 2.377e-3; tfac = 1-0.703e-5*alt; t = 519*tfac; if(alt >= 35000) t=390; end rho=r0*tfac^4.14; amach=vt/sqrt(1.4*1716.3*t); qbar=.5*rho*vt^2; end
Function cost
function f = cost(s) global x u gamma h u2 u(1) = s(1); u(2) = s(2); x(2) = s(3); x(3) = x(2) + gamma; time = 0; [xd] = transp(time, x, u, h, u2); f = xd(1)^2 + 100*xd(2)^2 + 10*xd(4)^2; end
Function FinalExamRobustness
%% MEM 530 Final Exam, part C function [eRobust deltaeEval deltatEval alphaEval] = FinalExamRobustness(Af,Bf,Mf,H,F) %% Problem A % Plane Properties rtod = 57.29578; %was used to convert radians to degrees s = 2170; cbar = 17.5; mass = 5.0e3; Iyy = 4.1e6; tstat = 6e4; dtdv = -38.0; ze = 2; cdcls = .042; cla = .085*rtod; cma = -.022*rtod; cmde =-.016*rtod; cmq = -16.0; cmadot = -6; cladot = 0; cl0 = .2; cd0 = .016; cm0 = .05; dcdg = 0; dcmg = 0; clq = 0; clv = 0; cmv = 0; cdv = 0; clde = 0; cdde = 0; gd = 32.17;
xcg = .25; %% %team specific properties h = 32000; vt = 500; gamma = 1*pi/180; [m, qbar] = adc(vt,h); qs = qbar*s; %% %Equilibrium flight conditions [deltaee, deltate, alphae] = MyTrim(vt, h, gamma); cle = cl0 + cla*alphae; cme = dcmg + cm0 + cma*alphae + cmde*deltaee + cle*(xcg-.25); cde = dcdg + cd0 + cdcls*cle*cle; weight = mass * gd; lift = qs*cle; drag = qs*cde; thrust = (drag+weight*sin(gamma))/cos(alphae); global vte vte = vt; %% % Residual of steady-state flight res = thrust*sin(alphae)+lift-weight*cos(gamma); %% %constants for state space construction Zalphadot = qs*cbar/(2*mass*vt)*cladot; Malphadot = qs*cbar^2/(Iyy*2*vt)*cmadot; Zalpha = -qs/mass*(cde + cla); Zq = qs*cbar/(2*mass*vt)*clq; Zv = -qs/(mass*vt)*(2*cle+clv); Zde = -qs/mass*clde; Xtv = 1/mass*dtdv*deltate; Xde = -qs/mass*cdde; Malpha = qs*cbar/Iyy*cma; Mtalpha = 0; Mq = qs*cbar^2/(Iyy*2*vt)*cmq; Mv = qs*cbar/(Iyy*vt)*(2*cme+cmv); Mtv = 1/Iyy*dtdv*deltate; Mde = qs*cbar/Iyy*cmde; Mdt = 1/Iyy*ze*(tstat+dtdv*vt); Xdt = 1/mass*(tstat+dtdv*vt); cdalpha = 2*cdcls*cle*cla; Xalpha = qs/mass*(cle-cdalpha); Xv = -qs/(mass*vt)*(2*cde+cdv); %% %state space representation E = [vt - Zalphadot, 0, 0, 0; -Malphadot 1 0 0; 0 0 1 0; 0 0 0 1]; A = [Zalpha, vt + Zq, Zv - Xtv*sin(alphae), -gd*sin(gamma); Malpha + ... Mtalpha, Mq, Mv + Mtv, 0; Xalpha, 0, Xv + Xtv*cos(alphae), ... -gd*cos(gamma); 0 1 0 0]; B = [Zde -Xdt*sin(alphae);Mde Mdt;Xde Xdt*cos(alphae);0 0]; C = eye(4)*rtod; C(3,3)=1; g = ss(E^-1*A,E^-1*B,C,zeros(4,2)); %% % Eignevectors, values [v e] = eig(E^-1*A); %% % Periods, damping ratios [omega d] = damp(diag(e)); fprintf('\n\nFrequency\tPeriod\t\tdamping ratio\n');
%% for debug
fprintf('%1.4f\t\t%1.4f\t\t%1.4f\n',[omega 2*pi./omega d]'); %% Part A %% I. Full State Feedback Design %% % Augment system with actuator dynamics % x=[alpha;q;vt;theta;de;dt] Ar = [E^-1*A E^-1*B;zeros(2,4) [-10 0;0 -.2]]; Br = [zeros(4,2);[10 0;0 .2]]; Cr = [rtod*[-1 0 0 1 0 0];0 0 1 0 0 0]; %monitored outputs = [climb angle;vt] Mr = [0 0 0 rtod 0 0;0 0 1 0 0 0]; %measured outputs = [theta, vt] Dr = zeros(size(Cr,1),2); %% controller variables from linearized system in FinalExam2.m %% % Build close-loop system Acr = [Ar Br*F;-H*Mr Af+H*Mf+Bf*F]; %% Evaluatiopn of robustness eRobust = eig(Acr); deltaeEval = deltaee; deltatEval = deltate; alphaEval = alphae; end
Function ModelDiff
function [dx] = modelDiff(t,x) global Ac1 Ac2 Bc1 Bc2 U vte persistent h0 hHit if(isempty(h0)) h0 = x(13,1); hHit = false; end % hHit = false; hHit = hHit || x(13,1) - h0 > 2000; % x = [alpha;q;vt;theta;de;dt; % alphaHat;qHat;vtHat;thetaHat;deHat;dtHat; % altitude;north displacement] if(~hHit) setpoint = 1; dx = zeros(size(x)); dx(1:12,:) = Ac1*x(1:12,:) + Bc1 * ones(1,size(x,2))*setpoint; dx(13,:) = (vte + x(3,:)) * sin(x(4,:)-x(1,:)); dx(14,:) = (vte + x(3,:)) * cos(x(4,:)-x(1,:)); else setpoint = [0;0]; dx = zeros(size(x)); dx(1:12,:) = Ac2*x(1:12,:) + Bc2 * repmat(setpoint,1,size(x,2)); dx(13,:) = (vte + x(3,:)) * sin(x(4,:)-x(1,:)); dx(14,:) = (vte + x(3,:)) * cos(x(4,:)-x(1,:)); end
end
Function MyTrim
function [deltaee, deltate, alphae] = MyTrim(vt,h,gamma) %%Inputs % vt is the equilibrium velocity in ft/sec % h is the elavation in ft % gamma is the climb angle in degrees %%Purpose % Reference Section 3.6 for the reasoning behind the trim function. global x u gamma h u2 % x is the state vector, x = [vt, alpha, theta, q]' % u is the input vector, u = [deltae, deltat]' % u2 is the secondary input vector, u = [cg, land]' % gamma is climb angle % h is elevation %Initial velocity x(1) = vt; %Initial elevation h = h; %Initial climb angle, in radians % gamma = gamma*pi/180; %Represents center of gravity position cg = 0.25; % 0 for clean flight, 1 for gears plus flaps land = 0; %Setup the initial input vector u = [.1 -10*pi/180]; %Setup secondary input vector u2 = [cg, land]; %Initial guess on alpha, in radians x(2) = .1; x(3) = x(2) + gamma; x(4) = 0; %Initial input to the cost function s0 = [u(1) u(2) x(2)]; disp(['Initial cost = ', num2str(cost(s0))]); [s, fval] = fminsearch(@cost, s0); u(1) u(2) x(2) x(3) = = = = s(1); s(2); s(3); s(3) + gamma;
disp(['minimum cost = ', num2str(fval)]); disp(['minimizing vector = ', num2str(s)]); disp(['minimizing throttle = ', num2str(s(1))]); disp(['minimizing elevator = ', num2str(s(2)*180/pi)]); disp(['minimizing alpha = ', num2str(s(3)*180/pi)]); deltate = s(1); deltaee = s(2); alphae = s(3); end
Function transp
function xd = transp(time, x, u, h, u2) %Medium-sized transport aircraft, longitundinal dynamics RTOD = 57.29578; %was used to convert radians to degrees S = 2170; CBAR = 17.5; MASS = 5.0E3; Iyy = 4.1e6; TSTAT = 6E4; DTDV = -38.0; ZE = 2; CDCLS = .042; CLA = .085*RTOD; CMA = -.022*RTOD; CMDE =-.016*RTOD; CMQ = -16.0; CMADOT = -6; CLADOT = 0; GD = 32.17; THTL = u(1); ELEV = u(2); XCG = u2(1); LAND = u2(2); VT = x(1); ALPHA = x(2); THETA = x(3); Q = x(4); H = h; [MACH, QBAR] = adc(VT,H); QS = QBAR*S; GAM = THETA - x(2); if LAND == 0 CL0 = .2; CD0 = .016; CM0 = .05; DCDG = 0; DCMG = 0; elseif LAND == 1 CL0 = 1; CD0 = .8; CM0 = -.2; DCDG = .02; DCMG = -.05; end THR = (TSTAT + VT*DTDV)*max(THTL,0); CL = CL0 + CLA*ALPHA; CM = DCMG + CM0 + CMA*ALPHA + CMDE*ELEV + CL*(XCG-.25); CD = DCDG + CD0 + CDCLS*CL*CL; xd(1) = (THR*cos(x(2))-QS*CD)/MASS - GD*sin(GAM); xd(2) = (-THR*sin(x(2))-QS*CL+MASS*(VT*Q+GD*cos(GAM)))/(MASS*VT+QS*CLADOT); xd(3) = Q; D = .5*CBAR*(CMQ*Q+CMADOT*xd(2))/VT; xd(4) = (QS*CBAR*(CM + D) + THR*ZE)/Iyy; end