martes

Comenzando en NXC


Robot Turista
Autor:Angel Aedo Busto
Competencia: Desarrollo de Software (Nivel 1)
Palabras Clave: Programación, NXC, robótica, Lego, Mindstorm




Jefe Grupo: Angel Aedo Busto
Secretario: Hugo Manriquez Saavedra
Productor Multimedia: Felipe Leal Peña
Apoyo: Jose Luis Palma


Introducción

                  Aplicando lo visto en clases, mediante esa entrada en el blog les muestro el como nuestro grupo enfrentó el problema planteado en clases y de la manera que dimos con  solución. Comenzamos por un pseudocódigo el cual nos permitió plantear una idea del que programar. Posteriormente realizamos los ajustes en el código para que el robot sea capaz de cumplir el objetivo pedido.
                 
                  El planteamiento del problema era sencillo, realizar un circuito con 3 detenciones simulando que eran paradas en las cuales se tomaban fotografías por los turistas, evitando, a modo de obstáculo, 4 cajas y retornar al punto de partida.


Estrategia De Solución


Estrategia de Trabajo:
Ya que el Robot Lo habíamos construido en la clase anterior y estaba operativo, procedimos a analizar el circuito (en conjunto) y luego Designamos los roles de cada integrante para esta actividad; los cuales detallaremos a continuación:

Felipe: fue el encargado de Traspasar la idea del recorrido del robot, al papel, mediante un seudocódigo que debía ser claro, para así hacer más simple y rápida la tarea de programar el robot

Hugo y Angel: Se Preocuparon de Interpretar Correctamente el seudocódigo, para así lograr como resultado final un código que cumpliera con la ruta según lo pedido, pero que se iría modificando a medida que calibráramos el robot.

José Luis: su tarea fue la de posicionar correctamente el robot, e ir registrando de forma escrita los errores que fueran surgiendo durante el recorrido.


Finalmente, cuando conseguimos que el robot recorriera correctamente la ruta establecida, procedimos a depurar el código de forma grupal, instancia en la que dimos a conocer el punto de vista que cada uno tenía, comentando y dando solución a las discrepancias que teníamos respecto al código a utilizar.



Modelo de Solución:

Gran parte del problema en el circuito se genera en la tercera recta, saliendo de la estación 2. En este punto optamos por hacer serpentear al robot, asignando mayor potencia a uno de los motores, de este modo evitar un obstáculo al lado derecho del robot y para evitar el obstáculo izquierdo asignar mayor potencia al motor que anteriormente tenía menor y al que tenía mayor potencia, descenderla. El resto del circuito no requería mucho ajuste pues eran giros sobre el eje y rectas.

PseudoCódigo

Avanzar 250cms
Detener
Avanzar 30cms
Girar 90º
Avanzar 30cms
Detener
Girar 90º
Avanzar 120cms (mayor potencia Motor C)
Avanzar 130cms (mayor potencia Motor A)
Avanzar 15cms
Detener
Girar 90º
Avanzar 30cms
Girar 90º


Código NXC

#define esp_esta 2000
#define pot_gir_a 70
#define pot_gir_c 20

task main();
{
     repeat(2);
     {
      OnFwd(OUT_AC,100);              //recta
      Wait(3800);
      Off(OUT_AC);                
      Wait(esp_esta);                 //estacion1
      OnFwd(OUT_AC,70);               //recta
      Wait(600);
      OnFwd(OUT_A,pot_gir_a);         //inicio curva
      OnFwd(OUT_C,pot_gir_c);         //inicio curva
      Wait(1000);
      OnFwd(OUT_AC,90);               //recta
      Wait(1500);
      Off(OUT_AC);
      Wait(esp_esta);                 //estacion 2
      OnRev(OUT_C,60);                //inicio curva sobre eje
      OnFwd(OUT_A,60);                //inicio curva sobre eje
      Wait(400);
      OnFwd(OUT_A,85);                //avance curvilineo
      OnFwd(OUT_C,91);                //avance curvilineo
      Wait(2500);
      OnFwd(OUT_A,92);                //Avance curvilineo
      OnFwd(OUT_C,85);                //Avance curvilineo
      Wait(2300);
      OnFwd(OUT_AC,70);               //avance recto
      Wait(400);
      Off(OUT_AC);
      Wait(esp_esta);                 //estacion3
      OnFwd(OUT_A,pot_gir_a);         //curva
      OnFwd(OUT_C,pot_gir_c);         //curva
      Wait(1000);
      OnFwd(OUT_AC,80);               //recta final
      Wait(1950);
      OnFwd(OUT_A,60);                //girar a posicion inicial
      OnRev(OUT_C,60);                //girar a posicion inicial
      Wait(400);
      Off(OUT_AC);
      Wait(5000);                     //tiempo acomodar robot
      }
      
}



Video Actividad







Conclusión

El armado del robot al principio fue un poco complicado, por el tema de la rueda timón la que está situada en la parte trasera de nuestro robot NXT, la cual mejoramos integrándole un par de piezas para que quedara más firme a la base del robot con lo que ganamos en estabilidad y dado eso, que el robot fuera donde nosotros quisiéramos. También tuvimos algunos problemas con un pequeño desvío que hacia el robot, lo que nos dio más de un dolor de cabeza, lo que pudimos corregir, cambiando de motor, revisando la estructura del vehículo (que estuviese correctamente armado y equilibrado) y aplicando una pequeña diferencia de potencias en cada servomotor, para contrarrestar este desvío.

Con respecto al código empleamos las sentencias más básicas respecto a la programación de Robot, las cuales fueron OnFwd (es la orden para que el robot avance ) pero antes hay que encender los motores con (OUT_AC,Potencia ), a eso agregábamos los motores y la potencia q queríamos dar respectivamente AC (motores), XX (potencia). Los otros términos que ocupamos fueron OnRev que funciona de la misma forma que que OnFwd pero con la única diferencia que los motores van hacia atrás, dado esto podíamos hacer girar el robot  en el sentido que quisiéramos ya sea haciendo retroceder un motor y avanzar el otro o viceversa.

Lo más complicado de esta actividad fue la última parte del recorrido del autobús donde debía hacer un pequeño desvío, donde tuvimos que poner distintas potencia a cada motor.

En términos generales, fue una actividad bastante simple, porque comprendía acciones básicas de programación NXC que debíamos repetir durante la ruta, pero también este laboratorio requería de Trabajo en equipo (para aprovechar bien el tiempo), de Diversidad de Ideas (para poder atacar los problemas de distintos puntos de vista hasta encontrar el más Optimo) y de sobre todo paciencia, para calibrar una y otra vez el vehículo y también el código hasta obtener el resultado deseado.

1 comentario:

  1. YouTube Player is now supported on the mobile in-app
    If you're interested in the features that YouTube Player has for Android devices, In fact, it is compatible with Android smartphones. You'll youtube to mp3 free also get your first

    ResponderEliminar