Diferencia entre revisiones de «Butialo: Ejemplo 3 - Butiá que no se cae de la mesa con un sensor sin eventos»

De Proyecto Butiá
Saltar a: navegación, buscar
(Descripción)
(Solución)
Línea 10: Línea 10:
 
'''Descripción'''
 
'''Descripción'''
  
 +
Como fue explicado en ejemplos anteriores, el sensor de escala de grises (en este caso, se conectó el sensor al puerto 2, por eso su nombre es “Grey_2”) debe ser calibrado previamente a la ejecución del programa a desarrollar para poder obtener los respectivos valores límites a partir del cual definimos que el robot se encuentra sobre la mesa.
  
 +
Calculando el valor medio, obtuvimos el valor de la variable COLOR_MESA (43000 para las pruebas realizadas).
 +
Determinamos entonces que si el valor arrojado por el sensor es menor a 43000, el robot puede continuar avanzando sin peligro de caer de la mesa, en caso contrario se deberá evitar la caída.
 +
 +
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'''
 
* '''programa principal'''

Revisión del 20:52 9 oct 2012

Descripción

Se desea implementar un programa que permita al robot Butiá poder desplazarse en una mesa sin caerse de la misma.

El robot deberá avanzar mientras detecte un color semejante al de la mesa. En caso de detectar un color distinto al de la mesa, procederá a retroceder por un tiempo aleatorio para luego cambiar de sentido (izquierda o derecha), y así poder avanzar nuevamente.

Solución

Descripción

Como fue explicado en ejemplos anteriores, el sensor de escala de grises (en este caso, se conectó el sensor al puerto 2, por eso su nombre es “Grey_2”) debe ser calibrado previamente a la ejecución del programa a desarrollar para poder obtener los respectivos valores límites a partir del cual definimos que el robot se encuentra sobre la mesa.

Calculando el valor medio, obtuvimos el valor de la variable COLOR_MESA (43000 para las pruebas realizadas). Determinamos entonces que si el valor arrojado por el sensor es menor a 43000, el robot puede continuar avanzando sin peligro de caer de la mesa, en caso contrario se deberá evitar la caída.

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


while true do
    avanzar()
    while (puedo_avanzar()) do
	util.wait(INTERVALO_CHEQUEO)
    end
    retroceder_aleatorio()
    girar_aleatorio()
end
  • avanzar

Activa los motores haciendo que los mismos giren a una velocidad prefijada en la constante MOTOR_VEL.

local function avanzar()
    Motors.setvel2mtr(0, MOTOR_VEL, 0, MOTOR_VEL)
end
  • puedo_avanzar

Retorna un valor booleano que indica si el robot está a punto de caerse, según el valor obtenido por el sensor de grises y su comparación con la constante COLOR_MESA.

local function puedo_avanzar()
    return (Grey_2.getValue() < COLOR_MESA)
end
  • girar

Gira el robot en el sentido correspondiente, el cual estará definido por la variable sentido

local function chequear_giro_izquierda()
    local sentido = math.random (0, 1)
    return sentido > 0.5
end
  • girar_aleatorio


local function girar_aleatorio()
    local tiempo_giro = math.random(MIN_TIEMPO_GIRO, MAX_TIEMPO_GIRO)
    local izquierda = chequear_giro_izquierda()
    if (izquierda) then
	Motors.setvel2mtr(0, VELOCIDAD_GIRO, 1, VELOCIDAD_GIRO)
    else
	Motors.setvel2mtr(1, VELOCIDAD_GIRO, 0, VELOCIDAD_GIRO)
    end
    util.wait(tiempo_giro)
end

Configuración

Se debe colocar un sensor de escala de grises lo más cercano al piso posible, pero siempre sin tocarlo, en la parte de adelante del Butiá.

En nuestro caso encastramos piezas de forma de generar el soporte para adherir el sensor al Butiá, quedando dicho sensor a ras del piso.

Se muestra a continuación una imagen ilustrativa de la configuración del robot vista desde arriba.


Video

Código

Butialo: Ejemplo 3 - Butiá que no se cae de la mesa con un sensor sin eventos - Código