martes

Primer Proyecto, avanzando en NXC

Proyecto 1: Dribbler

Autor:Angel Aedo Busto
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.





No hay comentarios:

Publicar un comentario