You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
883 B
32 lines
883 B
#!/usr/bin/env python3
|
|
import numpy as np
|
|
import control # pylint: disable=import-error
|
|
|
|
dt = 0.01
|
|
A = np.array([[ 0. , 1. ], [-0.78823806, 1.78060701]])
|
|
B = np.array([[-2.23399437e-05], [ 7.58330763e-08]])
|
|
C = np.array([[1., 0.]])
|
|
|
|
|
|
# Kalman tuning
|
|
Q = np.diag([1, 1])
|
|
R = np.atleast_2d(1e5)
|
|
|
|
(_, _, L) = control.dare(A.T, C.T, Q, R)
|
|
L = L.T
|
|
|
|
# LQR tuning
|
|
Q = np.diag([2e5, 1e-5])
|
|
R = np.atleast_2d(1)
|
|
(_, _, K) = control.dare(A, B, Q, R)
|
|
|
|
A_cl = (A - B.dot(K))
|
|
sys = control.ss(A_cl, B, C, 0, dt)
|
|
dc_gain = control.dcgain(sys)
|
|
|
|
print(("self.A = np." + A.__repr__()).replace('\n', ''))
|
|
print(("self.B = np." + B.__repr__()).replace('\n', ''))
|
|
print(("self.C = np." + C.__repr__()).replace('\n', ''))
|
|
print(("self.K = np." + K.__repr__()).replace('\n', ''))
|
|
print(("self.L = np." + L.__repr__()).replace('\n', ''))
|
|
print("self.dc_gain = " + str(dc_gain))
|
|
|