Phoenix
Nicolas Yáñez
Camilo Rivas
Fabian Vega
Camilo Rivas
Fabian Vega
Dembers
Gonzalo Cartez
Cristian Alvarez
Ninoska Ulloa
Alamiro Solis
Introducción:
Gonzalo Cartez
Cristian Alvarez
Ninoska Ulloa
Alamiro Solis
Introducción:
En este momento ya hemos desarrollado comportamientos de robot medianamente complejos, utilizando tareas paralelas y detección inteligente de sensores para ejecutar acciones reguladas por un semáforo, por lo que el desafió para esta oportunidad es comunicar vía bluetooth dos robots implementando un comportamiento colaborativo.
Para utilizar todas estas herramientas ya mencionadas decidimos desarrollar un modelo de colaboración que simule un director de orquesta y un intérprete que se describe en el siguiente enunciado.
“En la ciudad de Temuco se esta creando una orquesta de músicos robots para tocar una pieza de música contemporánea, el equipo inicial consta de un director y de un percusionista, el director es el encargado de recibir las partituras y dirigir al percusionista para que las interprete.
El robot director (maestro) por medio del sensor de sonido, detecta el tiempo y la frecuencia de los sonidos que se le entregan (partituras), esta información se almacena en forma de un arreglo bidimensional para enviarla vía Bluetooth al robot percusionista (esclavo), quien almacena esta información en un archivo para poder disponer de ella en cualquier minuto y reproduce los sonidos recorriendo el arreglo.”
“En la ciudad de Temuco se esta creando una orquesta de músicos robots para tocar una pieza de música contemporánea, el equipo inicial consta de un director y de un percusionista, el director es el encargado de recibir las partituras y dirigir al percusionista para que las interprete.
El robot director (maestro) por medio del sensor de sonido, detecta el tiempo y la frecuencia de los sonidos que se le entregan (partituras), esta información se almacena en forma de un arreglo bidimensional para enviarla vía Bluetooth al robot percusionista (esclavo), quien almacena esta información en un archivo para poder disponer de ella en cualquier minuto y reproduce los sonidos recorriendo el arreglo.”
Algunos puntos que aclarar
Cuando el robot director detecte una pausa de un tiempo determinado, enviará los datos al robot músico y dejara de escuchar hasta que el músico termine de ejecutar la pieza.
El robot músico solo almacenará la última partitura tocada.
Cuando el robot director detecto una pausa de un minuto sin recibir partituras se retirara del escenario.
Cuando el robot director detecto una pausa de un minuto sin recibir partituras se retirara del escenario.
Estrategia de solución:
Estrategia de trabajo :
La estrategia de trabajo utilizada consistio en dividir el equipo, un integrante investigaba acerca de la conexion bluetooth, otro integrante implementaba el programa de prueba que daba el inicio a la implementación del programa definitivo, y el resto del equipo ideaba un modelo para el robot.
Diagrama de flujo de la solución: Aquí se presenta una pequeña descripción de la solución y un diagrama de flujo que muestre la solución propuesta para el problema.
Código del programa:
Codigo Robot Maestro:
//maestro
//se definen los indices de las conecciones de entrada y salida
#define BT_CONN 1
#define INBOX 1
#define OUTBOX 5
//se utiliza una subtarea que comprueba el estado de la conexion
sub BTCheck(int conn){
if (!BluetoothStatus(conn)==NO_ERR){
TextOut(5,LCD_LINE2,"Error");
Wait(1000);
Stop(true);
}
}
Codigo Robot Maestro:
//maestro
//se definen los indices de las conecciones de entrada y salida
#define BT_CONN 1
#define INBOX 1
#define OUTBOX 5
//se utiliza una subtarea que comprueba el estado de la conexion
sub BTCheck(int conn){
if (!BluetoothStatus(conn)==NO_ERR){
TextOut(5,LCD_LINE2,"Error");
Wait(1000);
Stop(true);
}
}
task main(){
//se definen los sencores que se utilizaran
SetSensorSound(IN_3);
SetSensorType(IN_3, SENSOR_TYPE_SOUND_DBA);
//se definen variables para almacenar la entrada y salida de datos bt
string in, out, iStr;
//se comprueba la coneion BT
BTCheck(BT_CONN);
while(true){
//se transforma a String la lectura del sensor de sonido
out=NumToStr(SENSOR_3);
//se envia la lectura del sensor al esclavo
SendRemoteString(BT_CONN,OUTBOX,out);
Wait(5);
}
}
}
Codigo Robot Esclavo:
//esclavo
//se definen los indices de las conecciones de entrada y salida
#define BT_CONN 1
#define INBOX 5
#define OUTBOX 1
//se utiliza una subtarea que comprueba el estado de la conexión
sub BTCheck(int conn){
if (!BluetoothStatus(conn)==NO_ERR){
TextOut(5,LCD_LINE2,"Error");
Wait(1000);
Stop(true);
}
}
task main(){
//se definen variables para almacenar la entrada y salida de datos btstring in, out, iStr;
//se definen los sencores que se utilizaran
SetSensorSound(IN_3);
SetSensorType(IN_3, SENSOR_TYPE_SOUND_DBA);
//se definen variables para almacenar la entrada y salida de datos bt
string in, out, iStr;
//se comprueba la coneion BT
BTCheck(BT_CONN);
while(true){
//se transforma a String la lectura del sensor de sonido
out=NumToStr(SENSOR_3);
//se envia la lectura del sensor al esclavo
SendRemoteString(BT_CONN,OUTBOX,out);
Wait(5);
}
}
}
Codigo Robot Esclavo:
//esclavo
//se definen los indices de las conecciones de entrada y salida
#define BT_CONN 1
#define INBOX 5
#define OUTBOX 1
//se utiliza una subtarea que comprueba el estado de la conexión
sub BTCheck(int conn){
if (!BluetoothStatus(conn)==NO_ERR){
TextOut(5,LCD_LINE2,"Error");
Wait(1000);
Stop(true);
}
}
task main(){
//se definen variables para almacenar la entrada y salida de datos btstring in, out, iStr;
while(true){
//se comprueba la conexión
BTCheck(0);
//se recibe un String por conexión bt
BTCheck(0);
//se recibe un String por conexión bt
ReceiveRemoteString(INBOX, true, in);
//se responde "ok"
SendResponseString(OUTBOX,"ok");
//se muestra por pantalla lo que se recibe
TextOut(10,LCD_LINE3,in);
//se toca el tono correspondiente a lo recibido por BT
PlayTone(7*StrToNum(in),10);
Wait(1);
}
}
Diseño del Robot:
Informe de auto-evaluación de los integrantes:
Autoevaluaciones:
SendResponseString(OUTBOX,"ok");
//se muestra por pantalla lo que se recibe
TextOut(10,LCD_LINE3,in);
//se toca el tono correspondiente a lo recibido por BT
PlayTone(7*StrToNum(in),10);
Wait(1);
}
}
Diseño del Robot:
Informe de auto-evaluación de los integrantes:
Autoevaluaciones:
Nicolas Yañez: 7.0 como jefe de grupo me encargué de pensar la estrategia de trabajo y distribuir roles para algunos integrantes del grupo conociendo sus cualidades para cada área previamente y además de crear el código del robot.
Gonzalo Cartez: 6.7 tuvo un rol de secretario el cual iba tomando nota de los problemas que se nos fueron presentando y tomar nota además de la participación de c/u de los integrantes en la actividad y tratar de redistribuir roles cuando no les acomodasen.
Gonzalo Cartez: 6.7 tuvo un rol de secretario el cual iba tomando nota de los problemas que se nos fueron presentando y tomar nota además de la participación de c/u de los integrantes en la actividad y tratar de redistribuir roles cuando no les acomodasen.
Fabian vega :6.5 se encargo principalmente en el armado del robot con el modelo previamente planificado y de reordenar el kit lego para un avance más rápido sin demora en el aspecto de encontrar las piezas.
Cristian Alvarez: 6.4 este integrante se encargo de ir haciendo el trabajo de análisis al código de robot en lo que respecta diagramas de flujo redactar las soluciones de trabajo y inspeccionar que cada uno cumpliera con el roll que se le asigno previamente.
Alamiro Solis : 6.8 junto con Fabián vega fue el encargado de la construcción adecuada del robot ya que mientras los demás cumplían sus respectivos roles de programación e secretaria este integrante debía tener el robot armado y en optimas condiciones para ir probando y modificando el código.
Ninoska Ulloa: 6.7 Esta participante del proyecto se encargo junto a nicolas principalmente en el armado del código NXC del robot ya que este requirió de bastante esfuerzo para poder dar con su objetivo final.
Pablo Lincoqueo 6.5 como jefe de grupo también tuve que ayudar a hacer las autoevaluaciones revisando y evaluando a c/u de los integrantes del grupo según su desempeño y la información recaudada de sus avances durante el proyecto en el puesto que se le fue asignado y además comprobé y me encargué de los ultimo retoques del código NXC del robot.
Cristian Alvarez: 6.4 este integrante se encargo de ir haciendo el trabajo de análisis al código de robot en lo que respecta diagramas de flujo redactar las soluciones de trabajo y inspeccionar que cada uno cumpliera con el roll que se le asigno previamente.
Alamiro Solis : 6.8 junto con Fabián vega fue el encargado de la construcción adecuada del robot ya que mientras los demás cumplían sus respectivos roles de programación e secretaria este integrante debía tener el robot armado y en optimas condiciones para ir probando y modificando el código.
Ninoska Ulloa: 6.7 Esta participante del proyecto se encargo junto a nicolas principalmente en el armado del código NXC del robot ya que este requirió de bastante esfuerzo para poder dar con su objetivo final.
Pablo Lincoqueo 6.5 como jefe de grupo también tuve que ayudar a hacer las autoevaluaciones revisando y evaluando a c/u de los integrantes del grupo según su desempeño y la información recaudada de sus avances durante el proyecto en el puesto que se le fue asignado y además comprobé y me encargué de los ultimo retoques del código NXC del robot.
Camilo Rivas: 6.6 encargado de lo relacionado a la planificación del modelo del robot y supervisión de sus respectivas armas de ambos robots y cerciorarse de que todo marche bien con lo planificado en cuanto al modelo.
Conclusión:
La utilidad de la comunicacion entre robots no es discutible, siempre existira una complejidad en la implementacion de la conexión, que concuerda con la funcionalidad que se obtiene, personalmente nuestro grupo de trabajo se encontró con varios inconvenientes al ser la primera vez que trabajabamos con conexiones bluetooth, una de ellas fue el periodo de latencia entre el envió de información y el procesamiento de esta misma, que es rapida pero no al nivel de llegar a ser fluida como para detectar un sonido y en 2 o 3 milisegudos reproducirlo en el otro robot.
También se nos dificulto diferenciar que “NXT” era el que queriamos conectar via Bluetooth ya que todos se llamaban “NXT”. pero así como dificultades tambien tubimos aprendizajes, entendimos como realizar un enlace entre dos robots para compartir información lo que abre muchas posibilidades de desarrollo, también nos dimos cuenta de las limitaciones de esta conexión, ya que comprobamos que el enlace resistia hasta 8 o 9 metros en linea visual.
No hay comentarios:
Publicar un comentario