martes, 11 de octubre de 2011

Laboratorio 4 (programación 2)

Autor: Felipe Leal
Competencia: Desarrollo de Software (Nivel 2) 
Palabras Clave: BlueJ, Java, Integrales, area.



Trabajar en BlueJ una solución que permita encontrar el área bajo una curva, haciendo las máximas pero optimas particiones posibles.


para esta actividad primero debíamos tener claro, como funciona el método del trapecio.



Regla del trapecio

La función f(x) (en azul) es aproximada por la función lineal (en rojo).
En matemática la regla del trapecio es un método de integración numérica, es decir, un método para calcular aproximadamente el valor de la integral definida
 \int_{a}^{b} f(x)\,dx.
La regla se basa en aproximar el valor de la integral de f(x) por el de la función lineal que pasa a través de los puntos (af(a)) y (bf(b)). La integral de ésta es igual al área del trapecio bajo la gráfica de la función lineal. Se sigue que
 \int_{a}^{b} f(x)\, dx \approx (b-a)\frac{f(a) + f(b)}{2}.
y donde el término error corresponde a:
-\frac{(b-a)^3}{12}\,f^{(2)}(\xi)
Siendo ξ un número perteneciente al intervalo [a,b].

nuestro programa tenia la misión de repetirse tantas veces como fuese necesario hasta encontrar un epsilon mínimo, 
lo cual nos diría que las particiones son suficientes.

CÓDIGO:



Ejecución del programa:




Este trabajo nos mostró, que muchas veces no es necesario tener un conocimiento profundo de un área,
a veces distinta a la que estamos acostumbrados a trabajar, pero si importa tener claro cual es el objetivo al que se apunta y a que problema se quiere encontrar solución.
vimos también que un programa recursivo, nos ahorra muchísimo tiempo en cálculos muchas veces simples pero tediosos, y hacerlo con un exactitud total. 

lunes, 10 de octubre de 2011

Robot Turista (Robótica)

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


Robot Turista
   
Introducción

                  Aplicando lo visto en clases, daremos a conocer mediante este informe 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



Informe de Autoevaluación

Nombre
Responsabilidad
Creatividad e Innovación

Angel Aedo Busto
6,5
7
Hugo Manriquez
5,5
6
Felipe Leal
7
6,5
Jose Luis Palma
5,5
6



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.


Mi Rol en el Grupo era el de Productor Multimedia. pero en el trabajo mismo, Fui quien hizo el Seucódigo.
La idea era hacerlo lo mas claro posible, de manera que la programacion fuera integrar cada etapa y luego calibrar y recalibrar.
Comenzamos por Estudiar la pista y hacer el seucodigo, luego lo llevamos al computador para programar la ruta en NXC, por ultimo llego el momento de probarlo en la pista.
En esta actividad aprendi que muchas veces las cosas no resultan como uno quiere y que los imprevistos ocurren cuando uno menos lo espera y que no hay que frustarse frente a estos problemas de paso. En lo propio del ramo aprendi lo simple que puede ser programr en NXC, cuando se tiene el objetivo claro y el seucodigo ha preparado el camino para que todo sea mas facil.
Lo mas dificil del grupo fue en un principio coordinarnos, porque fuimos un grupo resagado en nuestra formacio y ademas tuvimos que ir en otra fecha a armar nuestro robot, tampoco nos vasto la clase regular para terminarlo y nos tuvimos que volver a juntar para poder terminarlo.