lunes, 16 de mayo de 2011

Proyecto final videos






Video con sensor ultrasonic 

Codigo: wumpus proyecto final

CODIGO:


import lejos.nxt.*;
import lejos.robotics.subsumption.*;
import lejos.robotics.navigation.*;

/**
 * Demonstration of use of the Behavior and Pilot classes to
 * implement a simple line following robot.
 *
 * Requires a wheeled vehicle with two independently controlled
 * wheels with motors connected to motor ports A and C, and a light
 * sensor mounted forwards and pointing down, connected to sensor port 1.
 *
 *
 */
public class otro {
               
                public static void main (String[] aArg)
                throws Exception
                {
               
                               final Pilot pilot = new TachoPilot(5.6f,16.0f,Motor.A, Motor.Cfalse);
                               final LightSensor light = new LightSensor(SensorPort.S1);
                               final LightSensor light2 = new LightSensor(SensorPort.S3);
                               final UltrasonicSensor ul = new UltrasonicSensor(SensorPort.S2);
        pilot.setTurnSpeed(180);
        /**
         * this behavior wants to take control when the light sensor sees the line
       
                               Behavior DriveForward = new Behavior()
                               {

                                               public boolean takeControl() {return light.readValue() <= 40 ;
                                               }
                              
                                               public void suppress() {
                                                               //pilot.stop();
                                               } //suppress
                                              
                                               public void action() {
                                                              
                                                              
                                                              
                                                               pilot.forward();
                                                              
                                                               Motor.A.setSpeed(1200);
                Motor.C.setSpeed(1200);
               
                               
                while(light.readValue()  <=40) Thread.yield(); //action complete when not on line
                                                               }//action
                                                                                                             
                               }; //drive forward
                              
                               Behavior OffLine = new Behavior()
                               {
                                               private boolean suppress = false;
                                              
                                               public boolean takeControl() {return light.readValue() > 40;
                               }//take control

                                               public void suppress() {
                                                               suppress = true;
                                               }//suppress
                                              
                                               public void action() {
                                                               int sweep = 9; //9
                                                               while (!suppress) {
                                                                             
                                                                              pilot.rotate(sweep,true);
                                                                              while (!suppress && pilot.isMoving()) Thread.yield();
                                                                              sweep *= -2; //-2
                                                               } //while
                                                               pilot.stop();
                                                               suppress = false;
                                               } //action
                               }; //behaviour
                                              
                              
                               Behavior[] bArray = {OffLine, DriveForward};
        LCD.drawString("WUMPUSSSSSS GRRRRRRRR...!!! ", 0, 1);
        Button.waitForPress();
       
        int c;
        for(;;)
        {
            c =ul.getDistance();
            LCD.drawString("La distancia es" + c, 0,0);
       
            if(c<100)
            {
                    (new Arbitrator(bArray)).start();
                   
            } //end if
            else
            {
                                               Motor.B.rotateTo(150);
                                               Motor.B.rotateTo(-150);
            } //end else
               
        }// end for
               
}//en main
                } // end class


PRÁCTICA FINAL: Comunicación entre agentes

En un planeta lejano y hostil hay varios agentes terrícolas trabajando para abastecer a la Tierra de ciertos recursos muy valiosos. En este planeta se han establecido dos bases terrícolas para almacenar los recursos y darle abrigo y refugio a los agentes. En un campo que se encuentra más o menos a la misma distancia de ambas bases hay un yacimiento importante de los recursos, la mala noticia es que este yacimiento es el hogar de un extraterrestre poco amigable conocido como Wumpus.

WUMPUS

El Wumpus es un ente gordo y feo, con un mal temperamento y una fuerza extremas y cada vez que ve a uno de los agentes terrícolas lo ataca y lo destroza. La buena noticia es que el

Wumpus es tan enojón como tonto, y solamente se mueve alrededor de su madriguera sin salirse nunca de una línea que sus propias feromonas han marcado.

La tarea del Wumpus es proteger la madriguera y no permitir que los robots saquen los recursos de ella.
Por lo que se programó al wumpus de la siguiente manera para realizar esta tarea:


El algoritmo que utilizamos fue repetitivo pues el wumpus va detectando la línea negra, mientras esta cuidando la madriguera y los objetos valiosos que se encuentran adentro. En el momento que va a realizar un giro es su punto débil pues tarda un poco en girar. Ya que vuelve a detectar la línea va más rápido  para alcanzar a destruir a los robots.
El wumpus maneja dos sensores que lo hace todavía aun más poderoso para tener mejor control de su base y pueda ser más veloz para la destrucción de los robots.


Con estos dos sensores se lleva un mejor control el Wumpus.
Así mismo se le añadió un sensor UltraSonico para que el Wumpus no gaste sus energías y solamente 
avance cuando detecte que un objeto extraño se acerca a su base y de esta manera pueda atacar.





Restricciones:
·         Solamente un agente puede estar dentro de cada base en un momento dado (de lo
               contrario las bases explotan ya que consideran al segundo agente una violación de
               seguridad)
·         Solamente puede estar un agente dentro de la madriguera del Wumpus.
·         El wumpus solamente se mueve en círculo sobre una línea alrededor de su
              Madriguera, pero puede moverse en cualquier sentido.
·         Si el wumpus toca a alguno de los agentes, el agente es destruido.
·         Si los dos agentes están al mismo tiempo dentro de una base, ambos agentes son
               destruidos.
·         Si los dos agentes están al mismo tiempo dentro de la madriguera del wumpus,
              ambos agente son destruidos