lunes, 21 de febrero de 2011

Práctica 2 { parte 4: Bump & Go! usando sensores de ultrasonido}

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 ultrasonidos al puerto 1.

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 UltrasonicSensor. 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 el sensor detecta un obstáculo a 20cm vuelva para atrás durante 2 segundos, gire la rueda izquierda un ángulo aleatorio, y vuelva hacia delante. Para calcular si hay un objeto a 20 cm se hace con el if (sonar.getDistance()<=25. El 25 es porque el sensor está a 5 cm por detrás de la rueda. Volver atrás lo haremos con backward, los 2 segundos lo pondremos con Thread.sleep(2000), 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;

      UltrasonicSensor sonar = new UltrasonicSensor(SensorPort.S1);

      Rizda.forward();
      Rdcha.forward();
      for(;;){
        if (sonar.getDistance()<=25){
          Rizda.stop();
          Rdcha.stop();
          Rizda.backward();
          Rdcha.backward();
          Thread.sleep(2000);
          Rizda.rotate((int) Math.random());
          Rizda.forward();
          Rdcha.forward();
        }
      }
    }
}

No hay comentarios:

Publicar un comentario