Butialo: Ejemplo 3 - Robot que no se caiga de la mesa sin eventos, utilizando un sensor de grises - Código

De Proyecto Butiá
Revisión del 16:34 13 oct 2012 de Lcairelli (Discusión | contribuciones) (Página creada con '<syntaxhighlight lang="lua"> local COLOR_MESA = 43000 local INTERVALO_CHEQUEO = 0.05 local TIEMPO_RETROCESO = 0.1 local VELOCIDAD_RETROCESO = 500 local VELOCIDAD_GIRO = 500 loca...')

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar
local COLOR_MESA = 43000
local INTERVALO_CHEQUEO = 0.05
local TIEMPO_RETROCESO = 0.1
local VELOCIDAD_RETROCESO = 500
local VELOCIDAD_GIRO = 500
local MOTOR_VEL = 500
local MIN_TIEMPO_GIRO = 0.5
local MAX_TIEMPO_GIRO = 2
local MIN_TIEMPO_RETROCESO = 1.5
local MAX_TIEMPO_RETROCESO = 2.5

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

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

local function chequear_giro_izquierda()
	-- Para girar random izq o der, uso un entero del 0-1
	-- Si valor random > 0.5 es izq, sino der
	-- DERECHA = false, IZQUIERDA = true
	local sentido = math.random (0, 1)
	return sentido > 0.5
end

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

local function retroceder_aleatorio()
	local tiempo_retroceso = math.random(MIN_TIEMPO_RETROCESO, MAX_TIEMPO_RETROCESO)
	Motors.setvel2mtr(1, VELOCIDAD_RETROCESO, 1, VELOCIDAD_RETROCESO)
	util.wait(tiempo_retroceso)
end

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