miércoles, 9 de marzo de 2011

Prácitica 3 - Rodeando obstáculos usando sensores de contacto

Este ejercicio consiste en utilizar el sensor de contacto, para que este nos indique cuando hemos dado con un obstáculo. Hemos utilizado dos sensores de contacto, uno lo situamos en el frontal izquierdo y otro en el derecho, así si se activa el sensor frontal izquierdo, evitaremos el obstáculo por el lado derecho y al contrario para el sensor derecho.

Hemos uilizado la definición de comportamientos que nos han facilitado en la práctica. A continuación vamos a describir las tres clases que hemos utilizado y los métodos que estas contienen:


> DriveForward: La finalidad de esta clase es que el robot ande hacia delante mientras no se encuentre un obstáculo
 -takecontrol: Devolverá siempre verdadero, es decir siempre que no haya un obstáculo, tomará el control.
 -action: Cuando este método sea llamado, indicará a los dos motores que avancen.
 -supress: Parará los motores cuando llegue la clase "pierda" el control.

> HitObstacle: Esta clase evitará el obstáculo rodeándolo
 -takecontrol: Comprueba si se ha activado alguno de los dos sensores, para tomar el control.
 -action: Cuando tome el control, retrocederá una distancia, y rodeará el obstáculo por la izquierda o por la derecha dependiendo de cuál de los dos sensores se haya activado.
 -supress: Las variables booleanas que nos ayudan a saber si se ha detectado un obstáculo pasarán a tener el valor falso.


> BumperCar: En esta clase tendremos el programa principal. Consta de la siguiente declaración
Behavior b1 = new DriveForward();
Behavior b2 = new HitObstacle();
Behavior [] bArray = {b1, b2};
Arbitrator arby = new Arbitrator(bArray);
arby.start(); 
Instanciamos nuestras clases DriveForward y HitObstacle e indicamos que HitObstacle tendrá preferencia sobre DriveForward, dandole el índice más alto en el array bArray.

La forma de evitar el obstáculo ha sido bastante sencilla, hemos retrocedido una distancia, girado 60º y utilizando la función steer, hemos hecho una curva al rededor del objeto. Cuando ha sido ya superado, hemos vuelto a girar 60º para dejarle en la misma orientación antes de encontrarse el obstáculo:




No hay comentarios:

Publicar un comentario