lunes, 21 de febrero de 2011

Práctica 2 { parte 3: Bump & Go! usando sensores de contacto}

El objetivo de esta parte será que el robot deambule por el entorno y cuando choque con un obstáculo retroceda y cambie de dirección.


El montaje será el utilizado hasta ahora con los dos motores a las ruedas, pero en la parte frontal se le añadirá un sensor de contacto al puerto 4. A este sensor de contacto, ha habido que ponerle unas piezas que detecten mejor cuando choca porque sino con sólo el sensor, a veces falla.

Aquí vemos una foto del montaje:




Para programar este comportamiento lo primero que debemos hacer es definir rueda izquierda y rueda derecha, y crear un objeto del tipo TouchSensor. Las instrucciones serán forward a ambas ruedas para que empieze a moverse hacia delante, y luego en un for la condición de que si toca algo el sensor (método touch.isPressed()) vuelva para atrás durante 3 segundos, gire la rueda izquierda un ángulo aleatorio, y vuelva hacia delante. Volver atrás lo haremos con backward, los 3 segundos lo pondremos con Thread.sleep(3000), y el ángulo aleatorio con Rizda.rotate((int) Math.random());
Aquí vemos un vídeo de ejemplo:



Aquí podemos ver el código:

import lejos.nxt.Motor;
import lejos.nxt.SensorPort;
import lejos.nxt.TouchSensor;


public class BumpAndGo {

    public static void main(String[] args) throws InterruptedException {
      Motor Rizda = Motor.B;
      Motor Rdcha = Motor.C;

      TouchSensor touch = new TouchSensor(SensorPort.S4);

      Rizda.forward();
      Rdcha.forward();
      for(;;){
        if (touch.isPressed()){
          Rizda.stop();
          Rdcha.stop();
          Rizda.backward();
          Rdcha.backward();
          Thread.sleep(3000);
          Rizda.rotate((int) Math.random());
          Rizda.forward();
          Rdcha.forward();
        }
      }
    }
}

No hay comentarios:

Publicar un comentario