lunes, 10 de octubre de 2011

Robot Busca Minas (Róbotica)

Autor: Felipe Leal
Competencia: Desarrollo de Software (Nivel 1) 
Palabras Clave: Lego, Programación, NXT.






Robot BuscaMinas

Introducción

                  Primero que todo, en esta tarea aplicamos los nuevos conocimientos adquiridos, ya que en esta actividad debíamos implementarle a nuestro robot un sensor de tacto, para que al momento de hacer contacto con los cubos y paredes, se encendiera; seguido de este acto, el robot tenía que retroceder, dar una vuelta y emitir un sonido con el que indicaría que había destruido el objetivo. Esto se debía repetir 5 veces y al final del trayecto tendría que tocar un  sonido diferente a los anteriores con el que indicaría que se había quedado sin explosivos. Luego comenzamos por desarrollar el pseudocódigo con el que tendríamos una idea de cómo seria nuestro código en NXC.
                 
            
Estrategia De Solución
Estrategia de Trabajo:
Hugo: Se encargó de Traspasar las ideas del recorrido del robot, al papel, mediante el pseudocódigo el cual debería ser lo más claro y legible, para que la creación del código fuera lo más exacta posible.

Ángel y Felipe: Se Preocuparon de Interpretar el pseudocódigo, para así lograr como resultado final un código que cumpliera con el objetivo planteado, pero que se iría modificando a medida que fuéramos comprobando en terreno nuestro código.
José Luis: su tarea fue la de posicionar correctamente el robot, e ir registrando de forma escrita los errores que surgían durante el transcurso del recorrido y dejar un registro visual.



                  Finalmente, cuando conseguimos que el robot cumpliera con el objetivo, procedimos a depurar el código , fue en este momento cuando dimos a conocer lo que pensábamos respecto al código, para que así no se pasara a llevar a nadie del grupo, ni tampoco se descarta alguna idea.

Modelo de Solución:

Uno de los problemas que se nos presento fue el calcular el giro aleatorio, que éste sea de más de 90º y menos de 720º como se pedía en la pauta. La solución a esto fue generar un random con un intervalo. Otra de las complicaciones fue la implementación de un ciclo que se ejecutara la cantidad de veces requerias, pues iniciamos una variable en 0 y al definirse que realice ciclos menores a 6, realizaba 6 acciones. Esto se debió a que nuestro ciclo realizaba la acción antes de sumar el contador. Nuestro ataque al problema fue reducir el ciclo a menores a 5, de este modo se realiza una acción completa y el contador sube a uno. (quedando ciclo1, contador = 0; ciclo 2, contador=1, etc).

Pseudocódigo

Contador (de bombas)=0


                  Avanza el robot
                  Si robot impacta
                                    Retroceder 0,5 segundos
                                    Reproducir sonido de detonación
                                    Detenerse (Esperar 2 segundos)
                                    Giro derecha al azar entre 90° y 720°
                                    Detener Robot
                                    Contador +1
                  Vuelve a entrar al proceso mientras el contador sea <5
                                    Reproduce Sonido Final (Sin Munición)
                  APAGADO TOTAL


Código NXC

int TiempoGiro;
int Contador=0;
task main()
  {
   SetSensorTouch(IN_4);   //asignar sensor a puerto 4
     do     {
      OnFwd(OUT_AC,75);   //avanzar
      if(SENSOR_4 == 1)  //si el sensor se activa
        {
         TiempoGiro=Random(2521)+360; //variable de giro 90 a 720
         OnRev (OUT_AC,75);           //reversa
         Wait(500);  
         Off(OUT_AC);
         PlayFileEx("! 
Attention.rso",4,FALSE); //sonido bomba
         Wait(2000);
         OnRev(OUT_A,75);        //asginacion potencia giro
         OnFwd (OUT_C,75);       //asignacion potencia giro
         Wait(TiempoGiro);       //ejecucion random del tiempo de giro
         Off(OUT_AC);
         Contador++;             //al terminar ciclo contador aumenta
         }
}
  while (Contador<5);    //fin del ciclo si contador es 4
        Wait(2000);
        PlayFileEx("! Startup.rso",4,FALSE);  //sonido sin stock bomba
        Wait(4000);
 }

Video Actividad



Informe de Autoevaluación

Nombre
Responsabilidad
Creatividad e Innovación

Ángel Aedo Busto
7
6
Hugo Manríquez
4
5
Felipe Leal
6
7
José Luis Palma
6
6



Conclusión

                  Bueno en este trabajo tuvimos que utilizar nuevamente los comando básicos para la creación del código, en el que tuvimos que integrarle uno nuevo para poder usar el sensor de tacto que se escribe como: SetSensorTouch (el que es con el que iniciábamos el sensor), en conjunto con los demás comandos logramos que nuestro robot desarrollará sin mayores inconvenientes su recorrido.
                  En sí, el trabajo fue muy didáctico al igual que el anterior lo que hace que la materia sea mucho mas fácil de comprender, además de lograr aprender como optimizar nuestros tiempos y  trabajar como un equipo y asi cumplir a tiempo con la elaboración del proyecto.
                  Hablando a gran escala creo que logramos con gran éxito las competencias ya que nuevamente nos pudimos organizar con gran exito, dando como resultado final un trabajo de gran nivel. Y un factor que es importante en cada trabajo que se realiza es tener paciencia, para repetir los procesos mas de una vez y también el código hasta obtener resultados que nos satisfagan


Esta semana nos encontramos con un nuevo desafio, que incluía tareas y funciones que aprendimos en clases, como el utilizar el Do While, el RANDOM, los sensores de tacto,etc. 
Estas nuevas Funciones eran las herramientas precisas para llevar a cabo el laboratorio 2.
Esos si tuvimos algunas complicaciones, al no manejarnos bien en el tema de los ciclos, nos surgia la duda de usar un Repeat o un While, o un Do While. Pero la solución la encontramos mediante la tecnica del ensayo y error, y tambien aplicando todas nuestras capacidades y distintos puntos de vista.
El resultado: Terminamos el Robot, mas rapido que la clase anterior, con un codigo Corto , preciso y limpio.
En general, quedé personalmente, muy conforme con esta actividad.

No hay comentarios:

Publicar un comentario