Diferencia entre revisiones de «Butialo: Ejemplo 1 - Seguidor de líneas con un sensor sin eventos»

De Proyecto Butiá
Saltar a: navegación, buscar
m
(Agrego un poco de código)
Línea 19: Línea 19:
  
 
* '''programa principal'''
 
* '''programa principal'''
 +
Consiste en avanzar el robot hasta tanto el color de la línea sea negro, en caso contrario deberá buscar dicho color realizando un movimiento en forma de abanico. Luego de que se busca el color negro, y se encuentra, se utiliza la función invertir_sentido() para que la siguiente vez que se busque el color negro, se haga en el sentido más probable de que esté.
 +
 +
<syntaxhighlight lang="lua">
 +
while true do
 +
    avanzar()
 +
    while (es_negro()) do
 +
        util.wait(0.1)
 +
    end
 +
    buscar_negro()
 +
    util.wait(TIEMPO_CENTRADO)
 +
    invertir_sentido()
 +
end
 +
</syntaxhighlight>

Revisión del 23:59 1 oct 2012

Descripción

Se desea Implementar un seguidor de líneas básico que permite al robot Butiá seguir el rastro de una línea de color negro sobre el suelo, utilizando un sensor de grises.

El robot deberá avanzar mientras se encuentre en una zona oscura y en caso de salirse de la misma, girar para poder encontrar nuevamente una zona oscura.

Solución

Descripción

Antes de describir cómo es la solución, es menester decir que el sensor de escala de grises debe ser calibrado previamente a la ejecución del programa a desarrollar para poder obtener los respectivos valores límites de color negro y color blanco.

Para tomar estos valores, colocamos el sensor sobre una zona negra y utilizamos la función Grey_1.getValue() que nos brinda el entorno Butialo (en este caso, se conectó el sensor al puerto 1, por eso su nombre es “Grey_1”). Nos arrojará un valor que tendremos identificado como “valor sobre zona oscura”. Posteriormente, se hizo lo mismo sobre una zona de color blanco, mediante lo cual obtuvimos un “valor sobre zona clara”.

Con dichos valores, sabemos en forma aproximada cuál es el entorno de valores en los cuales el sensor de grises detectará el color blanco o el color negro. A partir de esto, calculamos el valor medio y así es que obtuvimos el valor de la variable COLOR_NEGRO (35000 para las pruebas realizadas). Es decir, si el valor arrojado por el sensor es mayor o igual a 35000, sabemos que nos encontramos sobre una zona oscura o negra; y si es menor a 35000 asumimos que se trata del color blanco.

Una vez calibrado el sensor, se organiza la estructura de la solución en diferentes funciones de forma de modularizar y distinguir fácilmente las acciones. El programa principal quedaría de la siguiente forma:

  • programa principal

Consiste en avanzar el robot hasta tanto el color de la línea sea negro, en caso contrario deberá buscar dicho color realizando un movimiento en forma de abanico. Luego de que se busca el color negro, y se encuentra, se utiliza la función invertir_sentido() para que la siguiente vez que se busque el color negro, se haga en el sentido más probable de que esté.

while true do
    avanzar()
    while (es_negro()) do
        util.wait(0.1)
    end
    buscar_negro()
    util.wait(TIEMPO_CENTRADO)
    invertir_sentido()
end