#### Event triggered when IR sensors update (10 Hz)
onevent prox
# Braitenberg obstacle avoidance
if speed >0 then
call math.dot(temp_braitenberg, prox.horizontal[0:4],
weights_braitenberg, 4)
call math.dot(temp_braitenberg_turn, prox.horizontal[0:4],
weights_braitenberg_turn, 4)
call math.muldiv(temp_braitenberg_left, speed,
temp_braitenberg + temp_braitenberg_turn, 125)
call math.muldiv(temp_braitenberg_right, speed,
temp_braitenberg - temp_braitenberg_turn, 125)
motor.left.target = speed - temp_braitenberg_left
motor.right.target = speed - temp_braitenberg_right
elseif speed < 0 then
temp_braitenberg = -300 / speed
motor.left.target = speed + prox.horizontal[6] / temp_braitenberg
motor.right.target = speed + prox.horizontal[5] / temp_braitenberg
end
# Saturation of left and right speed
call math.min(motor.left.target, motor.left.target, vmax)
call math.max(motor.left.target, motor.left.target, vmin)
call math.min(motor.right.target, motor.right.target, vmax)
call math.max(motor.right.target, motor.right.target, vmin)
# Table border detection
if prox.ground.reflected[0] < 130 or prox.ground.reflected[1] < 130 then
motor.left.target = 0
motor.right.target = 0
call leds.bottom.left(32, 0, 0)
call leds.bottom.right(32, 0, 0)
else
call leds.bottom.left(0, 0, 0)
call leds.bottom.right(0, 0, 0)
end