Butialo: Ejemplo 3 - Butiá que no se cae de la mesa con un sensor sin eventos
Contenido
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 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.
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