#### 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