martes, 11 de octubre de 2011

Actividad 3: Robot Ninja


  • Autor: Patricio Bello Villalobos
  • Competencia : DESARROLLO DE SOFTWARENivel: Desarrolla soluciones de software aplicando procesos de análisis, diseño y prueba a problemas simples; centrados en la programación, los datos y las Interfaces Humano/Computador (IHM).

  • Descripción de la actividad:
  • A continuación se detalla la tercera actividad de programación  de robot, en esta ocasión nuestro robot debió realizar complejas tareas utilizando la información obtenida por sus dos sensores incorporados, el sensor de tacto y el de luz, nuestro robot debía localizar cinco puntos distintos en una pared y colocar explosivos en cada uno de ellos avisando por medio de una alarma su detonación  y mostrar en la pantalla la cantidad restante de explosivos, a lo anteriormente mencionado también se le sumaba la dificultad de tener que esquivar círculos negros en el área de desplazamiento utilizando el sensor de luz, cada circulo simbolizaba un puesto de vigilancia del enemigo que el robot debía esquivar, luego de las 5 detonaciones, nuestro robot debía encontrar un puesto de vigilancia y quedarse en la posición para atraer la atención del enemigo.


  • Solución: Al realizar este tercer trabajo, nos vimos enfrentados a una serie de problemas que fueron los siguientes:
    Lo primero que se nos presento fue que teníamos que colocar el sensor de luz, pero el problema era que no había espacio suficiente enfrente del robot producto que el sensor touch estaba puesto, la  solución que le dimos al presente problema fue desarmar el robot para así darle una nueva configuración para que los sensores estuviesen puestos enfrente del robot.
    Y nuestro segundo y recurrente problema fue la programación del robot ya que se agregaron nuevos elementos, por lo cual tuvimos muchos problemas con ellos y la solución que le dimos fue leer el tutorial de NXC  que nos dio el profesor y de este modo nos quedó más claro y además de leer consultamos con nuestros compañeros quienes nos brindaron su ayuda.
    Y de este modo logramos darle una solución a cada uno de los problemas que se nos presentaron en el transcurso del desarrollo de nuestro trabajo y así logramos terminar nuestro trabajo de manera satisfactoria.
    Pseudocódigo:

    Avanzar
    Mostrar explosivos restantes en la pantalla
        Si choca con una pared debe
                Reproducir un sonido de alarma
                Mostrar la nueva cantidad de explosivos
                Retroceder medio segundo
                Esperar un segundo más
                Girar aleatoriamente a la derecha con un ángulo entre 90º y 270º
                Avanzar para detectar más puntos de la pared
         Si encuentra un punto negro debe
                Esquivar el punto utilizando alguna estrategia
    Y al detectar el 4º punto débil en la pared debe
                Alejarse de la última explosión por dos segundos
                Tocar una melodía
                Buscar un punto negro y quedarse ahí
                Detener todas las acciones y apagar el programa.

     Codigo:


    // Este programa hace que el robot ande en una base como infiltrado,
    // esquivando los puntos negros ( guardias) en la pista, en busca de detonar
    // las paredes, al detonar tiene un sonido (indica la detonación de la bomba
    // y un mensaje en la pantalla que indica la cantidad de bombas restantes,
    // al detonar las 5 bombas(con la ayuda del contador)que son las requeridas
    // ocurre un tono final de las explosiones y tiene que ir en busca del
    // punto negro (guardia) para llamar la atención  de él,  esto último
    // marca el final del programa.


    #define Color_Negro 40 // Rango de luz para considerar que es el negro
    int esquivar=400;   // Variable usada saltar los puntos negros
    int contador=0;                // indica el valor inicial del Contador
                   
    int bombas= 5;                 // Marca la cantidad de bombas a detonar

    task main()
    {
    SetSensorLight (IN_3);//Encender sensor de luz que hace desbliar la parte negra
    SetSensorTouch (IN_1);// Enceder sensor de tacto para detectar las paredes.
    OnFwd (OUT_AC,75); // Instruccion que valla hacia adelante
    while (contador < 5)
                    {
                    if(SENSOR_1 == 1)
                    {
                    esquivar = Random (1300) + 300 ; // Esto le da el valor cuando va a
                                                   // a darse vuelta al tocar una pared
                    OnRev (OUT_AC,75); // Retroceda por medio segundo
                    Wait (500);
                    Off (OUT_AC);// Apagar motores por 2 segundos.
                    Wait (2000);
                    PlayTone (3000, 800); // Tono que marca la detonación de una bomba.
                    Wait(1000);
                    bombas --;
                    NumOut (50,50, bombas); //  Es para colocar en la pantalla la cantidad
                                   // bombas restantes
                    Off (OUT_AC); // Apagar motor
                    Wait (1000);  // Espera de 1 segundo.
                    OnFwd(OUT_AC,75);
                    OnRev(OUT_A,75);  // Estas 2 instrucciones indica que se de una media
                                   // vuelta para retomar camino.
                    Wait (esquivar);
                    OnFwd (OUT_AC,75); // Esta indica que valla hacia adelante
                    contador ++;
                    }
                    if (Sensor (IN_3) < Color_Negro)             // Sensor de luz
                    {
                    OnRev (OUT_AC, 75); // Al encontrar un  punto negro va hacia atras
                    Wait (500);
                    OnFwd (OUT_AC, 75);//  Con la Segunda instruccion indica que se
                    OnRev (OUT_C, 75);//   doble un poco.
                   
                    Wait (esquivar);  //
                    OnFwd (OUT_AC, 75);// Hace que el robot valla hacia adelante
                    }
                    }
                    while (Sensor(IN_3) > Color_Negro)
                    {
                    if(SENSOR_1 == 1)
                    {
                    esquivar = Random (1300) + 500 ;  // Valor del giro RANDOM
                    OnRev (OUT_AC,75);  //  Retroce al chocar
                    Wait (500);
                    OnFwd (OUT_AC,75);// Con la segunda instruccion hace que se de
                    OnRev (OUT_A,75);// una vuelta en RANDOM en busca de otra pared.
                    Wait(esquivar);
                    }
                    Off(OUT_AC); // Apagar motor
                    PlayTone (2000,5000); // Sonido que marca el final de la actividad
                    Wait (2000); // Duracion del tono
                    StopAllTasks (); // Marca el final de todas las instrucciones.

                    }

      }

    Video:


  • Reflexión: En esta actividad, pude realizar realizar la creación de un programa que realiza todas las funciones del robot en cuestión, esto me permitió ampliar mis conocimientos enormemente en la materia, con los cuales pude desarrollar un análisis mas completo de los futuros problemas propuestos, dando soluciones efectivas y rápidas.

No hay comentarios:

Publicar un comentario