AerospaceNU / AerospaceNU/stm32-avionics

Calculate kalman gain at runtime using curve fit

Abierto
#109 0 comentarios 0 reacciones 0 asignados Ver en GitHub
has attachment
Lenguaje dominante
C
Estrellas
5
Forks
0
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

![image](https://github.com/AerospaceNU/stm32-avionics/assets/29715865/92756099-65ed-4265-9b89-589acd92851a)

For a linear system, kalman gain varies linearly with discretization timestep (loop speed). Proof is left as an exercise for the reader.

```
import control as ct
import frccontrol as fct
import numpy as np
import matplotlib.pyplot as plt

sysc = ct.ss(np.array([[0, 1], [0, 0]]), np.array(
[[0], [1]]), np.array([1, 0]), np.array([0]))

# units of m and m/s
state_std_devs = [0.5, 3]
# units of m
measurement_std_devs = [80]

dt_list = []
gain_list = []

for dt in np.arange(0.001, 0.011, 0.001):
observer = fct.KalmanFilter(sysc, state_std_devs, measurement_std_devs, dt)

print(f"{dt}, {observer.K[0]}, {observer.K[1]}")

gain_list.append(observer.K)
dt_list.append(dt * 1000)

gain_list = np.array(gain_list)

plt.figure()
plt.scatter(dt_list, gain_list[:,0], label="K[0,0]")
plt.scatter(dt_list, gain_list[:,1], label="K[1,0]")

plt.title("Kalman gain vs discretization timestep")
plt.xlabel("dt, ms")
plt.ylabel("gain, output per error")

plt.legend()

plt.show()
```

requirements.txt
```
frccontrol
control
numpy
matplotlib
```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.