Robot Turista
Autor:Angel Aedo BustoCompetencia: 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.
YouTube Player is now supported on the mobile in-app
ResponderEliminarIf 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