Introducción

Los robots exploran su entorno, pero deben hacerlo con cuidado. Pueden encontrar obstáculos en su camino o llegar al borde de un precipicio. Aprender a detectar estos peligros y parar a tiempo evitará que se hagan daño.

En este tutorial aprenderás a detectar obstáculos y harás que Robobo pare a tiempo. También aprenderás a encender/apagar los leds y cambiar su color a modo de señal luminosa.

¡El reto es la creación de un Robobo Anti-Choque!

 

pre-requisitos

Antes de empezar este reto, te recomendamos leer los siguientes apartados del manual de programación de Robobo:

RETO: ROBOBO ANTICHOQUE 

Crea un programa que haga que Robobo avance hacia delante hasta que detecte un obstáculo.

A través de los sensores de infrarrojos delanteros, Robobo detectará el obstáculo y, a medida que avanza, cambiará el color de los leds para indicar la distancia al obstáculo (verde si está lejos, amarillo a distancia media y rojo cuando esté cerca). Además, cuando está muy cerca del obstáculo, se detendrá para evitar la colisión. 

SOLUCIÓN

Una posible solución a este reto es la siguiente, aunque hay muchas otras. ¿Cuál es la tuya?


from Robobo import Robobo
from utils.LED import LED
from utils.Color import Color
from utils.IR import IR

robobo = Robobo('10.113.36.163')
robobo.connect()

closeIRValue = 120
mediumIRValue = 30
farIRValue = 10
speed = 20

robobo.setLedColorTo(LED.All, Color.OFF)
robobo.moveWheels(speed, speed)

while (robobo.readIRSensor(IR.FrontC) < farIRValue)and(robobo.readIRSensor(IR.FrontRR) < farIRValue)and(robobo.readIRSensor(IR.FrontLL) < farIRValue):
    robobo.wait(0.01)

robobo.setLedColorTo(LED.All, Color.GREEN)

while (robobo.readIRSensor(IR.FrontC) < mediumIRValue)and(robobo.readIRSensor(IR.FrontRR) < mediumIRValue)and(robobo.readIRSensor(IR.FrontLL) < mediumIRValue):
    robobo.wait(0.01)

robobo.setLedColorTo(LED.All, Color.MAGENTA)

while (robobo.readIRSensor(IR.FrontC) < closeIRValue)and(robobo.readIRSensor(IR.FrontRR) < closeIRValue)and(robobo.readIRSensor(IR.FrontLL) < closeIRValue):
    robobo.wait(0.01)

robobo.stopMotors()
robobo.setLedColorTo(LED.All, Color.RED)

robobo.wait(2)
robobo.setLedColorTo(LED.All, Color.BLUE)

RETO ADICIONAL

Cuando hayas completado el reto de “ROBOBO ANTI-CHOQUE” te proponemos este otro reto que utiliza los mismos sensores, pero de una forma un poco distinta, ¿te atreves?

Pon a caminar a Robobo sobre una mesa y evita que se caiga. Realiza este reto con cuidado, si Robobo se cae se puede romper. Utiliza una velocidad lenta para las pruebas de tu programa y mantente atento por si tienes que cogerlo para evita que se caiga mientras depuras tu programa.

Ten en cuenta que los sensores infrarrojos Front-L, Front-R, Back-R y Back-L están inclinados hacia el suelo, por lo que son estos los que deberás utilizar en este nuevo reto.