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?


async function main(){
    var Robobo = require('./lib/robobo');

    robobo = new Robobo('10.113.36.163');

    await robobo.connect();

    var closeIRValue = 120,
        mediumIRValue = 30,
        farIRValue = 10,
        speed = 20;

    robobo.setLedColorTo('all','off');    
    robobo.moveWheels(speed,speed);   

    while ((robobo.readIRSensor('Front-C') < farIRValue)&&(robobo.readIRSensor('Front-RR') < farIRValue)&&(robobo.readIRSensor('Front-LL') < farIRValue)) {
        await robobo.update();
    }    
    robobo.setLedColorTo('all','green');

    while ((robobo.readIRSensor('Front-C') < mediumIRValue)&&(robobo.readIRSensor('Front-RR') < mediumIRValue)&&(robobo.readIRSensor('Front-LL') < mediumIRValue)) {
        await robobo.update();
    }
    robobo.setLedColorTo('all','magenta');

    while ((robobo.readIRSensor('Front-C') < closeIRValue)&&(robobo.readIRSensor('Front-RR') < closeIRValue)&&(robobo.readIRSensor('Front-LL') < closeIRValue)) {
        await robobo.update();
    }
    robobo.stopMotors();
    robobo.setLedColorTo('all','red');

    await robobo.pause(2);
    robobo.setLedColorTo('all','blue');

}
main()

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.