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.