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)
Línea 4: Línea 4:
 
Se desea implementar un programa que permita al robot Butiá poder desplazarse en una mesa sin caerse de la misma.  
 
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 distinto al de la mesa. En tal caso, procederá a retroceder por un tiempo aleatorio para luego cambiar de sentido (izquierda o derecha), y así poder avanzar nuevamente.
+
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==
 
==Solución==

Revisión del 20:34 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


  • 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