2 minute read

Mejoras en piloto experto

Índice



Filtrado de imagen

El primer objetivo fue conseguir eliminar las falsas mediciones. Investigando, se encontraron las siguientes maneras para comprobar la continuidad de la línea:

  1. Operaciones Morfológicas: Utiliza operaciones morfológicas como la erosión y dilatación para eliminar pequeñas discontinuidades o separar regiones conectadas. La técnica utilizada hasta ahora no fue suficiente, por lo que tendremos que complementarla con otro algoritmo.

  2. Algoritmos de Etiquetado de Regiones: Aplica algoritmos de etiquetado de regiones para identificar y etiquetar las regiones conectadas en la imagen. Luego, puedes eliminar o retener las regiones según tu criterio.

  3. Filtros de Conectividad: Utiliza filtros de conectividad para preservar solo las partes de la línea que son conexiones contiguas.
    • Transformada de Hough paramétrica (o circular)
    • Operadores de detección de bordes
    • Algoritmos de seguimiento de contornos
  4. Algoritmo de Búsqueda de Componentes Conectados: Implementa un algoritmo que busque y mantenga solo los componentes conectados en la imagen, descartando aquellas partes no contiguas.

Filtro usado

La primera idea fue aplicar un filtro de Canny para encontrar los bordes de las líneas y distinguir entre regiones. Posteriormente, se seleccionó la región más grande y las que estaban conectadas a la misma. Sin embargo, se encontró la función findCountors, que opera directamente sobre imágenes binarias y es más liviana computacionalmente.

Se ajustó la erosión y la dilatación para reducir las líneas que no están justo en frente del robot o están más lejanas. Esto disminuye la capacidad de previsión, pero lo crucial es que el robot esté centrado sobre la línea en la que se encuentra. Si la dilatación no es suficiente para conectar regiones de la línea, se eliminarán, dejando únicamente el contorno más grande, que será el más cercano al robot y, por lo tanto, la línea que debe seguir.

Visualización contorno


Mejora en puntos de referencia

Se partió de 2 puntos de referencia, uno superior y uno inferior. Se hicieron pruebas aumentando el número de puntos, pero esto provocó inestabilidad en el robot. Después de varios intentos, se decidió dejar el controlador del robot con el punto superior y el inferior. Se consideró añadir el control en velocidad y para alinearse con la línea, pero para simplificar la siguiente fase, la de entrenamiento, se decidió dejar únicamente variable la velocidad angular.



Depuración de velocidades

Se añadió un array que guardara los timestamps de cada iteración para que los guardara en un archivo externo para su posterior graficación, ya que la latencia me dio problemas la semana pasada, dando los resultados esperados.

Muestras


Problema con el timer

En esta ocasión, las iteraciones se realizan por un timer de ROS; sin embargo, surge un problema. Cuando se ejecuta el despegue, este timer solo se ejecuta una vez. Si ejecuto el nodo una vez que el dron está despegado, funcionará correctamente, cosa que no pasaba en el while. No obstante, era una manera bastante “sucia” de resolver el problema, por lo que se siguieron buscando más soluciones.



Resultado

Tuve un problema al grabar los videos, ya que aumentaba bastante la latencia del programa. Por lo tanto, tuve que grabarlo con el móvil, dando una gran diferencia de tiempo de reacción.