Proyecto 1: Dribbler
Competencia: Desarrollo de Software (Nivel 2)
Palabras Clave: Programación, NXC, robótica, Lego, Mindstorm, Multitask.
A continuación les relato mi experiencia realizando el primer proyecto en la asignatura de Proyecto de Robotica. Aca implementamos multitareas.
Estrategia de Trabajo
.  Una vez dada la actividad se presenta la inquietud del como abordar el  problema. Es evidente la división de tareas entre los integrantes del  grupo, pero esta vez solo hicimios división en las tareas secundarias,  tales como la obtención de videos, armado del robot, entre otras. La  principal tarea, la construcción de un algoritmo que nos permita la  construcción de un código limpio y eficiente, la realizamos en conjunto,  pues la implementación de instrucciones nuevas dificulta la creación de  éste código. Está el uso de arreglos (array) que permite el  almacenamiento de múltiples datos en una variable. La aplicación de  arreglos nos dio la posibilidad de almacenar el puntaje obtenido por el  robot sin la necesidad de usar una variable por cada vez que requiera  almacenar puntaje.
. En  la descripción del proyecto se pide que cuente puntos negros asignando  un puntaje en función del tiempo que se demora en encontrar un punto,  además evitar colisionar siguiendo instrucciones dadas en un nivel de  ruido. ¿Qué ocurre si el robot recibe una instrucción de evitar una  colisión y durante pasa sobre un circulo negro?. La lógica de lo usado  anteriormente podría llevar a perder ese circulo negro junto al puntaje  que éste arroja. Para esto están las instrucciones Multitask, las cuales  permiten ejecutarse al unísono. Ahora es posible ejecutar una tarea que  le otorgue “oídos” al robot y otra tarea que le de “ojos” al robot,  pero con la gran funcionalidad de ser usados al mismo tiempo.
. Con  el conocimiento de los descrito pudimos en conjunto construir un código  que faculta al robot de la posibilidad de contar puntos, esquivar  obstáculos y además emitir un sonido durante la actividad, pero se  generó un nuevo conflicto. ¿Que hará el robot si sus motores están en  una instrucción de giro y una de las tareas entrega una instrucción de  retroceso?. Para esta inquietud abordamos el uso de Mutex, instrucción  que da la facultad de crear colas de trabajo. Así cuando se entrega una  instrucción que da conflicto con otra, se realizará la primera que fue  dada y solo una vez terminada esta, se realizará la siguiente.
. De  este modo, como grupo abordamos el proyecto, cada uno de nosotros se  convirtió en una tarea secundaria,obtención de material multimedia,  armado, etc. Mientras realizábamos como grupo la tarea primaria,  creación de código.
Pseudocódigo
tarea Avanza()
{
. . . tiempo_inicial = 0;
. . . Mientras sea Verdad
. . . {
. . . . . . Avanzar
. . . . . . Si SensorSonido > Sonido
. . . . . . {
. . . . . . . . . Girar sobre eje 90 grados
. . . . . . }
. . . }
}
tarea Circulo()
{
. . . Mientras sea Verdad
. . . {
. . . . . . SI SensorLuz . . . . . . {
. . . . . . . . . Reproducir Sonido de encuentro
. . . . . . . . . Calcular variable t
. . . . . . . . . Si variable t es menor o igual a 10
. . . . . . . . . {
. . . . . . . . . . . . Almacenar valor en un Arreglo
. . . . . . . . . }
. . . . . . . . . Si variable t es mayor a 10
. . . . . . . . . {
. . . . . . . . . . . . Almacenar 0 en el Arreglo
. . . . . . . . . }
. . . . . . . . . Aumentar potencia en 10
. . . . . . . . . Si potencia es igual o mayor a 100
. . . . . . . . . {
. . . . . . . . . . . . potencia es igual a 100
. . . . . . . . . }
. . . . . . . . . Girar sobre eje random grados
. . . . . . . . . tiempo_inicial = tiempo_actual
. . . . . . }
. . . }
}
tarea Sonido()
{
. . . MIentras Verdad
. . . {
. . . . . . . Reproducir Cancion
.. . }
}
tarea Final()
{
. . . Apagar Motores
. . . Mostrar datos almacenados en Arreglo
. . . Mostrar total sumado de datos del arreglo
. . . Finalizar Todas las Tareas()
}
tarea Choque()
{
. . . Mientras Verdad
. . . {
. . . . . . Si SensorTacto = 1
. . . . . . {
. . . . . . . . . Salir a FInal();
. . . . . . }
. . . }
}
tarea Main
{
. . . Ejecutar tareas (Avanza, Circulo, Choque, Sonido)
}
Conclusión
. La  creación de una aplicación que ejecute labores simultáneas, permite, en  este caso el poder mirar y escuchar a la vez. Sin esta implementación  jamás se hubiese podido mirar un punto mientras se está girando por  ejemplo. El uso de multirareas podrá facilitarnos el uso de  multiples sensores que podrás ser usados al mismo tiempo. Sin embargo  debemos ser precavidos y hacer uso de "Mutex", que nos permitirá armar  colas de instrucciones, para que éstas no entren en conflicto. Un claro  ejemplo de esta situación es en el uso de motores. Usando Mutex podremos  crear tareas que hagan uso de los motores, sin que estos obtengan 2  instrucciones al mismo tiempo.
. . Además implementamos el uso de Arreglos, que permite el almacenamiento de datos en una sola variable. Bastante útil cuando se requiere almacenar muchos valores, que al no ser usado en arreglo forzaría a la creación de demasiadas variables, que dependiendo del caso, puede que no sean suficientes o bien sean demasiadas.
. . Además implementamos el uso de Arreglos, que permite el almacenamiento de datos en una sola variable. Bastante útil cuando se requiere almacenar muchos valores, que al no ser usado en arreglo forzaría a la creación de demasiadas variables, que dependiendo del caso, puede que no sean suficientes o bien sean demasiadas.
Código Fuente
http://www.megaupload.com/?d=7H5K3O2T
http://pascal.inf.uct.cl/~anaed394/Archivos/codigo.nxc
 
No hay comentarios:
Publicar un comentario