@@ -74,33 +74,33 @@ using LinearAlgebra
7474using Plots
7575
7676# Create system - same as LQR example
77- Ts = 0.1
78- A = [1 Ts; 0 1]
79- B = [0; 1]
80- C = I(2)
81- P = ss(A,B,C,0,Ts)
77+ Ts = 0.1
78+ A = [1 Ts; 0 1]
79+ B = [0; 1]
80+ C = I(2)
81+ P = ss(A,B,C,0,Ts)
8282
8383# Design controller using pole placement
8484# Choose desired closed-loop poles (well-damped, faster than original system)
85- desired_poles_cont = [-2+0.5im, -2-0.5im] # Continuous-time poles
86- desired_poles = exp.(Ts .* desired_poles_cont) # Discrete-time poles inside unit circle
85+ desired_poles_cont = [-2+0.5im, -2-0.5im] # Continuous-time poles
86+ desired_poles = exp.(Ts .* desired_poles_cont) # Discrete-time poles
8787
8888# Design state feedback gain using pole placement
89- L = place(P, desired_poles) |> real
89+ L = place(P, desired_poles)
9090
91- # Design observer with poles 5x faster (closer to origin for discrete time)
91+ # Design observer with poles 5x faster
9292observer_poles = exp.(Ts*5 .* desired_poles_cont)
93- K = place(P, observer_poles, :o) |> real # Note the :o for observer design
93+ K = place(P, observer_poles, :o) # Note the :o for observer design
9494
95- # Create observer- controller using the observer_controller function
95+ # Create controller system
9696controller = observer_controller(P, L, K)
9797
9898# Form closed-loop system and analyze
9999T_cl = feedback(P * controller)
100100
101101r(x,t) = [1.5(t>=2.5); 0] # Form control law (r is a function of t and x), change reference to 1.5 at t≧2.5
102- t = 0:Ts:5 # Time vector
103- x0 = [1, 0, 0, 0] # Initial condition
102+ t = 0:Ts:5 # Time vector
103+ x0 = [1.0 , 0, 0, 0] # Initial condition (plant state followed by controller state)
104104res = lsim(T_cl, r, t; x0)
105105plot(res, lab=["Position" "Velocity"], layout=1, sp=1)
106106```
0 commit comments