Semana 18 - Últimos análisis
Índice
Frecuencia
Para un análisis más profundo de las frecuencias, añadimos timestamps en el bucle principal de la siguiente manera:
while rclpy.ok():
drone.follow_line()
if time.time() - initTime >= SAVE_FREQ:
drone.save_data()
initTime = time.time()
drone.generalTimestamps.append(time.time())
# Process a single iteration of the ROS event loop
rclpy.spin_once(drone, timeout_sec=VEL_PUBLISH_FREQ)
Dando los siguientes resultados:
Velocidades
Se modificó el script de plotPath para que además mostrara un gráfico de las velocidades, dejando en este caso el script abierto para poder hacer zoom cómodamente.
Velocidad angular
En el caso de la velocidad angular, podemos ver que aunque oscile, sus cambios son mínimos y, para no perder reactividad, si nos interesa mantener la salida sin ningún filtro, aunque bien ajustado podría mejorar su estabilidad.
Velocidad lineal
Para la velocidad lineal se empleó un filtro de paso bajo para suavizar la reactividad en la velocidad lineal, ya que si esta tenía cambios bruscos, la cámara del dron se elevaría y desestabilizaría bastante al mismo. A la función que grafica el circuito se le añadió una opción para graficar también velocidades. El resultado de las velocidades lineales sin filtro vs con filtro fue el siguiente:
Como podemos apreciar, la media añade un pequeño offset y reduce el tiempo de reacción, pero en ejecución, sus resultados son bastante notables y merece la pena. No obstante, se realizaron cálculos de cuánto tiempo medio podemos tratar de hacer un cambio brusco de una velocidad a otra.w
Sabiendo que tenemos una frecuencia de 233.17 Hz, esto implica que ejecutamos una iteración cada 4 ms. Suponiendo que nuestro buffer de medidas sea de 150 medidas, un cambio total de velocidad se producirá en 643 milisegundos. Lo que es un tiempo bastante aceptable para que el dron no frene en seco y la cámara ascienda hacia arriba.
Pruebas en otros circuitos
Además, se realizaron pruebas en otros circuitos dando los siguientes resultados:
En los resultados encontramos que en uno increíblemente daba mejores resultados incluso que el piloto experto y en otro podemos encontrar un pequeño error respecto al mismo.
Enlace al video en ejecución
Este es el resultado en simulación del piloto neuronal: