La primera práctica consiste en programar el comportamiento de un robot, en este caso un fórmula1, para que siga la línea del suelo de un circuito lo más rápido posible. A pesar de que el robot incorpora diversos sensores, solo se podrá utilizar la cámara izquierda para esta tarea. Antes de comenzar voy a definir la línea de trabajo que seguiré y que estrategía emplearé para programar el comportamiento.
En este caso la línea a seguir tiene un color rojo que se distingue muy bien del resto del asfalto, por lo que un filtro de color, en HSV, parece la mejor idea para segmentar la línea. Elijo HSV porque es un campo de color más invariante a cambios de iluminación, haciendo más robusta la segmentación. Con el fin de ahorrar computo realizaré la segmentación solo en la mitad inferior de la imagen, que abarca todo el asfalto.
La idea es extraer una serie de puntos de control en cada iteración a diferentes alturas de la línea y compararlos con su mismo valor en una situación ideal, donde el robot está centrado. La diferencia entre estos dos valores dará una medida del error de la posición del robot. Para comenzar utilizaré solo un punto de control situado a media altura, ya que así el robot podrá anticiparse en cierto modo a los cambios de dirección, mientras que también corrige su situación actual.
Para obtener una imagen referencia donde el robot esté centrado voy a desplazarlo manualmente al arrancar el mundo de Gazebo, para estar seguro de que es la posición idónea. Como la línea tiene una cierta anchura, tomaré el punto medio como medida. De este modo puedo extraer un único valor para X dada una altura Y de la línea. En cada iteración se calculará el valor actual de la línea a la misma altura Y y se comparará con el X de referencia.
La señal que se envíe a los actuadores dependerá del error actual que se esté cometiendo en una proporción que se obtendrá mediante prueba y error.
En este caso la línea a seguir tiene un color rojo que se distingue muy bien del resto del asfalto, por lo que un filtro de color, en HSV, parece la mejor idea para segmentar la línea. Elijo HSV porque es un campo de color más invariante a cambios de iluminación, haciendo más robusta la segmentación. Con el fin de ahorrar computo realizaré la segmentación solo en la mitad inferior de la imagen, que abarca todo el asfalto.
La idea es extraer una serie de puntos de control en cada iteración a diferentes alturas de la línea y compararlos con su mismo valor en una situación ideal, donde el robot está centrado. La diferencia entre estos dos valores dará una medida del error de la posición del robot. Para comenzar utilizaré solo un punto de control situado a media altura, ya que así el robot podrá anticiparse en cierto modo a los cambios de dirección, mientras que también corrige su situación actual.
Para obtener una imagen referencia donde el robot esté centrado voy a desplazarlo manualmente al arrancar el mundo de Gazebo, para estar seguro de que es la posición idónea. Como la línea tiene una cierta anchura, tomaré el punto medio como medida. De este modo puedo extraer un único valor para X dada una altura Y de la línea. En cada iteración se calculará el valor actual de la línea a la misma altura Y y se comparará con el X de referencia.
La señal que se envíe a los actuadores dependerá del error actual que se esté cometiendo en una proporción que se obtendrá mediante prueba y error.
Comentarios
Publicar un comentario