1
UNIVERSIDAD DE LOS ANDES
FACULTAD DE INGENIERÍA
Departamento de Ingeniería de Sistemas y Computación
LABBOT: Laboratorio de programación con robots móviles
Proyecto de Grado para obtener el título de:
Ingeniero de Sistemas y Computación
Presentado por:
Felipe Matè Porras, Ing. (c)
Asesor Principal:
Profesor: Mario Fernando de la Rosa Rosero, PhD
Asesor Externo:
Profesor: Pedro Guillermo Feijóo García, M.Sc
Universidad El Bosque
Bogotá D.C., Colombia
Diciembre de 2016
Bogotá D.C., Colombia
2
Tabla de contenido
0. Resumen ... 4
1. Motivación ... 5
2. Descripción general ... 6
2.1. Trabajos relacionados ... 6
2.2. Definición del problema ... 6
2.3. Identificación del problema ... 6
2.4. Objetivo general ... 7
2.5. Objetivos específicos ... 7
3. Requerimientos y Restricciones ... 8
3.1. Especificaciones ... 8
3.2. Restricciones ... 9
4. Diseño del Sistema Propuesto y Definición del Escenario de Pruebas ... 10
4.1. Componentes ROBLOCK ... 11
4.2. Componentes Laboratorio Remoto - Servidor ... 11
4.3. Componentes Laboratorio Remoto – Robot Lego Mindstorm NXT 2.0 ... 11
4.4. Construcción del robot ... 11
4.5. Pruebas ... 13
4.6. Construcción escenario ... 17
4.7. Soluciones a las tareas ... 22
5. Implementación ... 24
5.1. Construcción enlace ROBLOCK y LABBOT ... 24
5.2. Construcción enlace LABBOT y robot ... 25
5.3. Implementación de nuevos ejercicios ... 26
5.4. Construcción del traductor de código JavaScript ... 26
5.5. Ejecutor de comandos en el robot ... 29
5.6. Transmisión del video de la cámara ... 30
5.7. Proceso de Solución de una Tarea en la plataforma de Aprendizaje ROBLOCK-LABBOT ... 30
6. Análisis de resultados ... 35
7. Conclusiones y trabajos futuros ... 37
3
Tabla de Figuras
Figura 1: Diagrama casos de uso. ... 8
Figura 2: Diagrama de contexto. ... 10
Figura 3: Diagrama de componentes. ... 10
Figura 4: Primer prototipo del robot. ... 12
Figura 5: Segundo prototipo del robot... 12
Figura 6: Pruebas de giro a -90°. ... 13
Figura 7: Pruebas de giro a 90°. ... 13
Figura 8: Pruebas de giro a 180°. ... 14
Figura 9: Pruebas de giro a -180°. ... 14
Figura 10: Pruebas de giro 90° -90°. ... 14
Figura 11: Pruebas de giro 90° 180° 90°. ... 15
Figura 12: Pruebas avance celdas. ... 15
Figura 13: Prototipo 1 escenario. ... 17
Figura 14: Prototipo 2 escenario. ... 18
Figura 15: Prototipo 2 escenario (variables). ... 18
Figura 16: Enunciado tarea variables. ... 19
Figura 17: Prototipo 2 escenario (condicionales)... 19
Figura 18: Enunciado tarea condicionales. ... 20
Figura 19: Prototipo 2 escenario (ciclos). ... 20
Figura 20: Enunciado tarea ciclos. ... 21
Figura 21: Prototipo 2 escenario (funciones). ... 21
Figura 22: Enunciado tarea funciones. ... 22
Figura 23: Solución tarea variables. ... 22
Figura 24: Solución tarea condicionales. ... 23
Figura 25: Solución tarea ciclos. ... 23
Figura 26: Solución tarea funciones. ... 23
Figura 27: Diagrama de despliegue. ... 24
Figura 28: Diagrama conexión ROBLOCK – LABBOT. ... 24
Figura 29: Diagrama conexión LABBOT – robot. ... 25
Figura 30: Código JavaScript bloques. ... 26
Figura 31: Código en arreglo. ... 27
Figura 32: Segundo arreglo. ... 28
Figura 33: Diagrame de flujo del proceso anterior. ... 28
Figura 34: Diagrame de flujo del último proceso. ... 29
Figura 35: Página inicio. ... 31
Figura 36: Menú módulos. ... 31
Figura 37: Laboratorios remotos. ... 32
Figura 38: Menú de pruebas uno. ... 32
Figura 39: Interfaz tarea. ... 33
Figura 40: Menú de prueba dos. ... 33
4
0.
Resumen
Se propone una extensión al proyecto ROBLOCK ampliando la forma de aprendizaje del usuario, en donde éste podrá hacer uso de las técnicas de programación en la aplicación Web, para resolver nuevos problemas en un ambiente físico real. El estudiante desde la aplicación podrá conectarse a un escenario físico en un laboratorio remoto, donde estará ubicado un robot LEGO Mindstorm al cual el estudiante podrá darle órdenes para solucionar los problemas presentes dentro de diferentes escenarios. El componente a diseñar será titulado LABBOT y será accesible a través de ROBLOCK y su cliente Web.
5
1.
Motivación
Los estudiantes de colegios al finalizar sus estudios deben tomar la decisión de si seguir estudiando o no, pero la mayoría de ellos no eligen alguna carrera relacionada con la computación, aun cuando el mundo requiere cada vez más personas conocedoras en este campo. Los alumnos deciden evadir estudios en este campo para su formación profesional ya sea por desconocimiento o miedo a los temas que en éste se abordan. Para evitar estas dos causas, se propone el acercamiento de estudiantes hacia conceptos de programación básica, creando así confianza e interés sobre el tema. Para poder generar mayor interés en el estudiante sobre el tema, se proponen escenarios físicos como los que actualmente existen virtualmente en ROBLOCK, que hacen uso de un espacio concreto en el mundo.
¿Por qué recurrir a escenarios que requieren de un espacio físico? Porque un estudiante al aprender algo nuevo lo primero que hace es compararlo o asimilarlo en un contexto real a su cotidianidad. Por lo que el estudiante al observar cómo estos conceptos lógicos tienen repercusiones en el mundo real es capaz de entenderlos más fácil, además de ser mucho más atractivo, generando curiosidad e interés sobre el tema.
6
2.
Descripción general
2.1. Trabajos relacionados
- Impact of Learning Experiences Using LEGO Mindstorms® in Engineering Courses. Este es un estudio donde se muestra el impacto del uso de LEGO Mindstorm para la enseñanza de algorítmica, dentro la programación, la inteligencia artificial y la robótica (Panadero, Roman, & Kloos, 2010). El estudio no desea mostrar cómo el aprendizaje por medio de robots LEGO Mindstorm es mejor que otros, sino se enfoca en cómo un ambiente de laboratorio competitivo y colaborativo puede aumentar la motivación y el interés por parte de los estudiantes en el aprendizaje de la programación, la algorítmica y/o la inteligencia artificial. Este estudio corrobora ese interés que existe actualmente por empezar a atraer estudiantes en estos tres ámbitos científicos, que ya se mencionan anteriormente, además de como el uso de robots LEGO Mindstorm ayuda en la creación de interés y a fomentar aprendizaje de los estudiantes o en la creación de un ambiente adecuado para esto.
- Robotics: Its Effectiveness as a Tool to Teach Engineering Design and Computer Programming. En este proyecto se comparó el nivel de aprendizaje de estudiantes universitarios de primer semestre, frente a tres lenguajes de programación: MATLAB, RobotC y NXT (Ahmed & Alsaleh, 2011). El proyecto se lleva a cabo en diversas etapas, pero todas con el mismo objetivo de mostrar cómo el uso de herramientas como robots ayudan en el aprendizaje de conceptos algorítmicos y de programación. Con este proyecto se puede ver cómo las personas tienen una mayor facilidad de adquirir y retener conocimiento haciendo uso de la experiencia práctica.
- A Mini Experiment of Offering Stem Education to Several Age Groups Through the Use
of Robots. Un Proyecto realizado a 350 estudiantes desde el primer grado de colegio hasta el último, haciendo uso de robots para el aprendizaje de ciencias, tecnología, ingeniería y matemáticas (Wang, 2016). Para la realización del proyecto se decidió dividir el grupo completo en grupos más pequeños dependiendo de la edad y el grado de conocimiento, si tenían experiencia previa o no. Los resultados del proyecto son interesantes, a pesar de ser una muestra pequeña de cómo la experimentación con robots puede ser práctica y efectiva para el aprendizaje de temas relacionados a la programación (Magnenat, Shin, Riedo, Siegwart & Ben-Ari, 2014).
2.2. Definición del problema
Para un buen desarrollo cognitivo del estudiante sobre los conceptos lógicos necesarios para la programación, se requiere enseñar los aspectos abstractos del tema e incorporarlos en un ambiente concreto, real, donde el estudiante pueda observar y vivenciar a través de su propia experiencia el aprendizaje.
2.3. Identificación del problema
El problema radica en el estado actual de ROBLOCK, donde se le está logrando aplicar el pensamiento reversible de Piaget (pasar del todo a las partes y viceversa), pero únicamente y exclusivamente de forma virtual o abstracta. Se requiere implementar una enseñanza concreta
7 de manera que se pueda complementar el modo de aprendizaje actualmente propuesto. Al complementar dicho aprendizaje, el estudiante desarrollará el conocimiento lógico esperado.
2.4. Objetivo general
Diseñar, desarrollar e implementar el módulo LABBOT, haciendo uso de un laboratorio físico y remoto ubicado en la Universidad de los Andes, el cual se comunicará con ROBLOCK para la disposición de escenarios de aprendizaje y enseñanza de algorítmica con robots LEGO Mindstorm NXT 2.0.
2.5. Objetivos específicos
- Diseñar el módulo de LABBOT, respondiendo a necesidades de escalabilidad e interoperabilidad con ROBLOCK.
- Desarrollar el módulo LABBOT, garantizando comunicación efectiva con ROBLOCK para la disposición de escenarios de robótica móvil.
- Implementar el módulo LABBOT con el laboratorio dispuesto en la Universidad de los Andes, garantizando comunicación e interoperabilidad con ROBLOCK.
- Evaluar la conexión y funcionamiento del módulo LABBOT, en conjunto con ROBLOCK como sistema integral.
8
3.
Requerimientos y Restricciones
3.1. Especificaciones
Requerimientos no funcionales
La operatividad del robot debe ser sencilla y consistente, de tal forma que para el estudiante no requiera un proceso más de aprendizaje para manejar el robot.
Los tiempos por tarea deben ser lo suficientemente precisos para que logre el estudiante terminar la tarea y además sus compañeros de clase.
La conexión entre ROBLOCK y LABBOT no debe tardar más de un segundo, para no perder la concentración de los estudiantes.
Debe estar disponible la prueba con el laboratorio para que el estudiante la haga desde cualquier parte mientras esté conectado a internet.
El intercambio de información entre ROBLOCK o LABBOT debe funcionar correctamente sin ningún inconveniente.
La implementación de LABBOT debe poder ser escalable para los futuros cambios y crecimientos del proyecto, debe poderse aplicar en más de un solo laboratorio además del uso de nuevas funciones para el robot.
Requerimientos funcionales
El estudiante debe estar en grado de producir una solución al problema que se le plantea de forma tal que el robot no se estrelle y llegue a la meta una vez salga del punto de partida. Cada vez el robot se choque, este deberá cancelar toda acción que se esté realizando y deberá enviar un mensaje de secuencia de comandos inválidos para el cumplimiento de la tarea. El streaming generado por la cámara en el laboratorio en lo posible deberá contar con nada o muy poco retraso, para que el estudiante no se pierda en ningún momento del movimiento del robot.
El robot debe distinguir entre la gama de colores a utilizar, sin llegar a confundirlos. El robot debe poder distinguir entre tener un obstáculo al frente o no.
Los movimientos físicos deben coincidir con los usados virtualmente en ROBLOCK.
9
3.2. Restricciones
- El espacio físico requerido no debe ser muy grande para obstaculizar en el laboratorio, ni muy pequeño para el escenario de prueba para el estudiante no sea muy simple, sino un reto de aprendizaje.
- El robot sobre el cual se está haciendo las pruebas no pertenece al Departamento de Ingeniería de Sistemas sino del Departamento de Ingeniería Industrial.
- El robot no cuenta con una batería por lo que funciona actualmente con seis pilas doble A.
- Los problemas propuestos deben ser adecuados a las enseñanzas dadas por ROBLOCK y adecuadas para el nivel cognitivo del estudiante.
- LABBOT debe poder realizar gran parte de las tareas que se realizan en ROBLOCK.
10
4.
Diseño del Sistema Propuesto y Definición del Escenario de
Pruebas
En la figura 2 se puede ver la estructura general que se implementó entre LABBOT y ROBLOCK. Diagrama de alto nivel donde se pueden ver la comunicación bidireccional entre LABBOT y ROBLOCK, al igual que la comunicación bidireccional entre LABBOT y el robot. En el diagrama se muestra como el estudiante a través de un navegador Web accede a la plataforma Web ROBLOCK y desde aquí el estudiante puede hacer uso del escenario físico.
Figura 2: Diagrama de contexto.
Existen tres grupos de componentes, uno en ROBLOCK, otro que hace de servidor en el laboratorio remoto y un tercero en el robot. (ver figura 3)
11
4.1. Componentes ROBLOCK
De este conjunto, se explicarán únicamente los componentes Módulo de Conexión Remota y Gestor de Ejercicios. En el Gestor de Ejercicios se agregaron los ejercicios correspondientes a las tareas nuevas de LABBOT, además este componente esta en cargado de todo el funcionamiento de los ejercicios, desde los bloques a usar como las condiciones de finalización de cada uno. El componente de Conexión Remota, se encarga de una vez terminada la simulación virtual, los bloques usados por los estudiantes sean enviados a LABBOT (ver figura 3).
Para la explicación completa y el detallado funcionamiento de ROBLOCK revisar el documento de tesis de maestría de Pedro Guillermo Feijóo. (Feijóo, P. G., 2015)
4.2. Componentes Laboratorio Remoto - Servidor
En el laboratorio remoto hay un componente Controlador que esta se encarga de establecer y recibir la información que le envía ROBLOCK. Este componente envía la información recibida a otro componente, Parseador, quien se encarga de procesarla y transformarla nueva información entendible para el robot. Un último componente es el encargado de establecer la conexión con el robot, por medio del protocolo Bluetooth y este mismo componente en vía la nueva información procesada (ver figura 3).
4.3. Componentes Laboratorio Remoto – Robot Lego Mindstorm NXT
2.0
El robot consta de dos componentes. El primero que recibe y establece la comunicación con el Laboratorio Remoto y un segundo, que se encarga de convertir y ejecutar la información recibida en comandos del robot (ver figura 3).
4.4. Construcción del robot
Primer modelo
El robot debe estar en grado de poder realizar las tareas que se llevan a cabo en ROBLOCK así el estudiante encuentre familiar el uso del robot y no sea una nueva tarea por aprender. El robot debe poder desplazarse hacia adelante y hacia atrás, así como girar sobre su propio eje hasta 360°. Debe poder detectar objetos a una cierta distancia ya sean obstáculos como marcas y debe saber cuándo se estrelló. Para cumplir todas estas condiciones se construyó un primer modelo con cuatro sensores y dos motores. Los dos motores en las ruedas para el desplazamiento delantero y trasero, además de la posibilidad de giro en 360°, sea por la izquierda que por la derecha. Los cuatro sensores son: dos de contacto para identificar las colisiones por delante o detrás, un sensor infra-rojo para identificar marcas en el suelo y un sensor ultrasónico para identificar obstáculos a distancia.
A diferencia de ROBLOCK donde el robot virtual podía detectar obstáculos tanto adelante como atrás, en LABBOT solo será posible detectar los que estén delante del robot. En ROBLOCK es posible detectar marcas ubicadas adelante o atrás del robot, condición que no es posible en LABBOT, donde el robot solo puede detectar las marcas debajo del él.
12
Figura 4: Primer prototipo del robot.
Desde el eje de rotación hacia atrás el robot tiene una extensión aproximada de 18cm. De alto desde el suelo hasta el sensor de ultrasonido son 26cm. Como se quiere hacer mover el robot por cuadros definidos, se estableció la construcción de cuadros de 38x38cm2, para así el robot pudiese avanzar y rotar sin problemas.
Segundo modelo
Del primer modelo surgieron varias problemáticas. Como 38x38cm2 por cuadro era demasiado y el sensor de ultrasonido tenía una leve desviación hacia arriba, se decidió la construcción de un segundo prototipo. En este prototipo se logró reducir el tamaño de un cuadro a 30x30cm2, el sensor de ultrasonido quedo en una posición horizontal, además de integrar los demás sensores del primer modelo sin ningún problema.
13 Se tiene una longitud aproximada de 15cm desde el eje de rotación hasta la retaguardia del robot. Así mismo se, cuenta con una altura aproximada de 11cm. Al igual que en el primer modelo, la parte de atrás es más larga que la del frente, por lo que la construcción de los cuadros se hizo tomando en cuenta la más larga.
4.5. Pruebas
Se establecieron varias pruebas para ver el correcto funcionamiento del robot y sus sensores. Pruebas de giro
En estas pruebas se quiere determinar si existe la posibilidad de una leve desviación al momento de rotar por parte del robot. Las pruebas consisten en hacer girar el robot una cierta cantidad de grados sobre una hoja. Esta hoja tiene marcado la posición original del robot y la posición final en la cual debería quedar. Cada desplazamiento del robot se ve marcado en la hoja.
Se realizaron pruebas para los siguientes ángulos -90°, 90°, 180° y -180°. (ver figuras 6 a 9)
Figura 6: Pruebas de giro a -90°.
14
Figura 8: Pruebas de giro a 180°.
Figura 9: Pruebas de giro a -180°.
Se realizaron por ultimo otras pruebas donde se le programó al robot varios giros distintos, buscando quedar al final en la posición original (ver figuras 10 y 11).
15
Figura 11: Pruebas de giro 90° 180° 90°.
De las pruebas se puede concluir que hay un pequeño desplazamiento erróneo que no permite al robot girar de forma exacta. Se considera que este leve error puede ser debido a la hoja, pues es una superficie en la cual las llantas del robot no tienen su mayor capacidad de agarre.
Pruebas avance/retroceso
En estas pruebas se quiere determinar si existe la posibilidad de una leve desviación al momento de avanzar o de retroceder por parte del robot. Las pruebas consisten en hacer avanzar y retroceder el robot una cierta cantidad de cuadros. Cada cuadro será una hoja con marcas predefinidas, siendo la posición que debería tener el robot en ese momento. En cada iteración de la prueba se marcará dónde queda el robot luego del desplazamiento (ver figura 12).
Figura 12: Pruebas avance celdas.
P1-Avanzar un cuadro: El robot queda posicionado donde se esperaba. P2-Avanzar tres cuadros: El robot queda posicionado donde se esperaba. P3-Avanzar cinco cuadros: El robot queda posicionado donde se esperaba.
En cada una de las pruebas hubo un mínimo margen de error, siendo esto debido al desplazamiento entre las hojas, que le dificultaron la tracción al robot.
16 Pruebas de choque
En esta prueba se quiere ver el comportamiento del robot después de un choque, sea por delante o por detrás. El robot debe detener toda acción que esté realizando a penas se choque. Se pondrá un obstáculo delante del robot y se espera apenas choque con el robot se detenga. P1 - pruebas choque delantero: El robot se detuvo con éxito.
P2 – pruebas choque trasero: El robot se detuvo con éxito.
Pruebas de distancia
En esta prueba se quiere determinar la precisión del sensor ultrasónico al momento de detectar obstáculos distantes. El robot será puesto distante de un obstáculo a diferentes medidas y se comparará la medida exacta con la dada por el sensor.
P1 - pruebas distancia cinco cm: El sensor marcó nueve. P2 - pruebas distancia 15cm: El sensor marcó 16.
P3 - pruebas distancia una casilla: El sensor marcó 33. P4 - pruebas distancia dos casillas: el sensor marcó 65. P5 - pruebas distancia tres casillas: el sensor marcó 99.
P6 - pruebas distancia cuatro casillas: el sensor marcó más de un número.
De las pruebas concluimos que el sensor no es preciso y que, si se va a hacer uso de este sensor, se recomienda no excederse de las tres casillas.
Pruebas de marcas
En esta prueba se quiere ver cuántos colores son detectables por el robot. El robot será ubicado encima de una hoja con un color determinado y deberá reproducir un sonido cada vez que detecte el color.
La franja de números correspondiente a los colores obtenidos fueron los siguientes:
Azul: 27 y 28. Amarillo: 38 y 39 Rojo: 40 y 41 Negro: 20 y 21 Verde: 36 y 37
Se realizó otra prueba, con el robot andando, ubicando un color en mitad del camino. El robot debía detenerse apenas reconociese el color.
17
4.6. Construcción escenario
Se definió que se quiere construir un escenario de 7x7 cuadros, porque es un espacio lo suficientemente amplio para poder adaptarse a varias tareas.
Primer modelo
Para poder implementar un escenario real que pueda utilizar los diferentes sensores y conocimientos de ROBLOCK, se planteó el siguiente modelo de un escenario (ver figura 13).
Figura 13: Prototipo 1 escenario.
Este escenario tiene una subdivisión por la mitad, de arriba hacia abajo, donde el robot al superar esa marca, adquiere la capacidad de un movimiento más libre y no tan limitado como en la otra mitad del escenario. Los problemas que presenta este escenario son: la existencia de muchos obstáculos que limitan los movimientos del robot por parte del estudiante, además de alta ambigüedad sobre los colores generando confusiones al momento de leer el escenario. Este escenario fue rechazado y se propuso un segundo modelo.
Segundo modelo
El nuevo escenario se construyó con la premisa de que el estudiante primero hará el mismo ejercicio de forma virtual y luego si podrá hacerlo en el escenario físico, como un nivel extra por el cumplimiento de las tareas. Este escenario está diseñado para que se puedan desarrollar 4 distintas tareas, en dónde cada tarea es un módulo de ROBLOCK, excluyendo el módulo de sensores que va incluido en cada uno de los módulos anteriores (ver figura 14).
18
Figura 14: Prototipo 2 escenario.
A continua se describe de forma detallada cada tarea y se muestra una imagen del escenario correspondiente a la tarea.
- Tarea uno – Variables
Figura 15: Prototipo 2 escenario (variables).
En esta tarea el estudiante debe hacer que el robot pise, al menos una vez, todas las marcas amarillas. Para lograr esto, deberá hacer uso de los bloques de comandos avanzar, girar a la derecha, girar a la izquierda y retroceder. El enunciado que se propone al estudiante sobre el problema es el que se muestra en la figura 16:
19
Figura 16: Enunciado tarea variables.
- Tarea dos - Condicionales
Figura 17: Prototipo 2 escenario (condicionales).
Desde la posición original del robot se debe descubrir dónde están las marcas azules. Esa es la tarea que deberá el estudiante resolver de forma virtual, para ello deberá recorrer y contar cada casilla y preguntarle si donde está parado el robot hay una marca azul además de contarla. Los bloques disponibles, serán: avanzar, retroceder, girar derecha, girar izquierda, hay obstáculo adelante, contar y hay marca abajo. El enunciado que se propone al estudiante sobre el problema es el ilustrado en la figura 18:
20
Figura 18: Enunciado tarea condicionales.
- Tarea tres – Ciclos
Figura 19: Prototipo 2 escenario (ciclos).
La tarea a resolver por el estudiante, es la de crear ciclos de ejecución que hagan al robot pasar por las 4 marcas grises, haciendo uso de los bloques: repetir mientras, repetir hasta, si, si no, avanzar, retroceder, girar izquierda, girar derecha, hay marca abajo y hay obstáculo adelante. El enunciado que se propone al estudiante sobre el problema es el que se muestra en la figura 20:
21
Figura 20: Enunciado tarea ciclos.
- Tarea cuatro – Funciones
Figura 21: Prototipo 2 escenario (funciones).
El estudiante tendrá la tarea de construir las funciones avanzar hasta marca roja, avanzar hasta obstáculo y así con esas dos funciones lograr hacer pasar el robot por las tres marcas rojas. Para la construcción de las dos funciones, se utilizarán los bloques avanzar, retroceder, hay marca abajo, hay obstáculo adelante, girar izquierda, girar derecha, repetir hasta, repetir mientras, si y si no. El enunciado que se propone al estudiante sobre el problema es el indicado por la figura 22:
22
Figura 22: Enunciado tarea funciones.
4.7. Soluciones a las tareas
- Tarea uno – Variables
Usando los bloques propuestos que son únicamente los de movimiento, se propone la siguiente combinación de bloques como una solución posible (ver imagen 23).
Figura 23: Solución tarea variables.
- Tarea dos – Condicionales
A los bloques del módulo anterior se agregaron los bloques de si, sino para representar las funciones condicionales. Se propone la siguiente secuencia de bloques como una solución posible, donde el robot recorre las tres marcas y cada vez detecta una marca la cuenta (ver imagen 24).
23
Figura 24: Solución tarea condicionales.
- Tarea tres – Ciclos
Para representar los ciclos se incorporaron los bloques de repetir X veces, repetir hasta y repetir mientras. Se propone en la figura 25 una solución a la tarea.
Figura 25: Solución tarea ciclos.
- Tarea cuatro – Funciones
Los bloques de funciones, le permitían al estudiante crear temporalmente sus propios bloques con otros bloques. La solución que se propone a la tarea se puede ver en la figura 26.
24
5.
Implementación
En este capítulo se va a tratar el desarrollo e implementación de los componentes expuestos en el capítulo anterior. La conexión de ROBLOCK y LABBOT, la conexión LABBOT y el robot, Los nuevos ejercicios implementados en ROBLOCK, el traductor de código y el ejecutor de comandos en el robot, además de la sincronización con la cámara.
En la figura 27 se ve un diagrama que muestra la disposición física de ROBLOCK y de LABBOT. En este caso LABBOT se desplegará en el laboratorio y contará con una máquina con sistema operativo Ubuntu.
Figura 27: Diagrama de despliegue.
5.1. Construcción enlace ROBLOCK y LABBOT
Se decidió implementar una arquitectura cliente servidor (ver figura 28), donde LABBOT sería el servidor y ROBLOCK el cliente. LABBOT se despliega de forma local en el laboratorio y queda a la espera de su cliente ROBLOCK, quien le envía los bloques que propone el estudiante para la solución del problema. Esta conexión entre los dos, se hace por medio de la dirección IP en la que se encuentre el servidor al puerto 8081 (puerto modificable). ROBLOK envía en una única cadena de texto el código JavaScript de los bloques usados por el estudiante.
25 LABBOT permite ejecutar tareas que son resueltas en el ambiente gráfico de ROBLOCK en escenarios físicos con un robot Lego Mindstorm NXT. Inicialmente el robot Lego construido para el proyecto permite movimientos de avance de 30cm, de reversa de 30cm, de giro a la derecha de 30°, 45°, 60°, 90° y 180°, de giro a la izquierda de 30°, 45°, 60°, 90° y 180°, pero para el proyecto se limitaron los giros únicamente a 90°, tanto derecha como izquierda. La detección de obstáculos como se indicó en las pruebas, ver unidad 4.5, después de una distancia de más de tres casillas, 90cm, el sensor empieza a desfasarse en grandes medidas, por lo que para el proyecto se estableció la importancia de únicamente detectar objetos a una casilla de distancia del robot, 30cm. Para la detección de colores se usaron colores de cartulinas con colores predefinidos, los valores que observa el sensor infra-rojo varía de material en material y por la tonalidad de los colores.
5.2. Construcción enlace LABBOT y robot
La comunicación entre LABBOT y el robot se lleva a cabo por el protocolo de comunicación Bluetooth. Este canal de comunicación es por el cual los comandos ya traducidos serán enviados al robot, los cuales éste ejecuta para desplazarse por el escenario y así cumplir las órdenes asignadas por el estudiante, para la solución de la tarea correspondiente. No es solo una comunicación de un único sentido, porque el robot comunica a LABBOT cada comando que se realice, para así ver si el comando en cuestión se ejecutó sin ningún error o si hubo alguna anomalía (ver figura 29).
Figura 29: Diagrama conexión LABBOT – robot.
Fue necesario instalar inicialmente el Software NXT, el Firmware NXT y el controlador NXT Fantom para que el computador pudiese reconocer al robot Lego Mindstorm NXT. Todos estos componentes se encuentran disponibles en la página oficial de Lego, http://www.lego.com.
Adicionalmente se instaló el Software LeJOS, el cual sirve para cambiar el Firmware del robot al de LeJOS, permitiendo así que funcione la librería de LeJOS, que se incorpora al computador una vez se instale el Software, el Software y los pasos para actualizar el Firmware se encuentran en la página principal de LeJOS, http://www.lejos.org/nxj.php.
26 Por último, al ambiente de desarrollo que se usó, en este caso Eclipse Neon de 32bits, se le agregó el plugin de LeJOS y la expicación de esto también se encuentra en la página oficial de LeJOS, http://www.lejos.org/nxj.php.
5.3. Implementación de nuevos ejercicios
Se implementó un nuevo módulo en la plataforma Web de conexión entre el laboratorio remoto. En este nuevo módulo se encuentran cada uno de los ejercicios que proponen los laboratorios remotos. Para cada ejercicio fue indispensable establecer cada restricción de bloques a utilizar, como las condiciones necesarias para la terminación exitosa de cada ejercicio, puesto que ciertas tareas o ejercicios requerían de una función de conteo y no solo de recorrido en cada marca.
5.4. Construcción del traductor de código JavaScript
Para poder hacer que el robot se mueva y que realice las acciones que le asigna el estudiante desde la aplicación web, se requiere poder traducir los bloques de ROBLOCK a comandos entendibles por el robot. Para esto se construyó un traductor de JavaScript, lenguaje en el cual están basados los bloques, a los comandos en Java del robot.
Se incorporó en ROBLOCK una nueva función donde se almacenan los índices principales de los bloques, tales como el ID, el nombre y los parámetros asociados. Todos estos valores de los bloques se almacenan en una única cadena de caracteres, con dos caracteres especiales, “#$” entre cada característica (ver figura 30).
Figura 30: Código JavaScript bloques.
Cuando la cadena llega a LABBOT, aquí se separa la cadena por los dos caracteres especiales, y se almacena cada una de las líneas que se crean en un arreglo (ver figura 31).
27
Figura 31: Código en arreglo.
Posterior mente a esto, ya con el arreglo completo, se recorre desde la primera posición en busca de ciertos elementos específicos. Muchas de las posiciones resultan ser innecesarias, por lo que se termina ignorando, como el ID, “highlightBlock”, del bloque porque es un valor que se crea momentáneamente al proyecto y no es fijo ni estático por bloque. Se busca si la palabra en cada posición contiene “move”, “while”, “for” e “if”.
“Move” indica las acciones de movimiento que puede hacer el robot, moverse hacia adelante, moverse hacia atrás, girar a la derecha o girar a la izquierda. Cuando se quiere usar uno de los sensores para determinar si hay una marca abajo o un obstáculo al frente se usan los métodos “while” o “if”, mientras que, si se quiere repetir un número X de veces ciertos comandos, se usa el “for”. Estas son algunas premisas que se tuvieron en cuenta al momento de construir el traductor.
Se determinó que la mejor forma de hacer llegar los comandos al robot, es si él mismo tiene comandos ya programados que éste entienda, por lo que por cada bloque en ROBLOCK, existe un comando correspondiente para el robot. Comandos a los cuales se les asignó un número único e irrepetible.
Cuando se encuentra alguno de los elementos específicos mencionados anteriormente, se asigna un número a un nuevo arreglo; este número corresponde al comando correspondiente en el robot. Si el elemento encontrado es “move”, se agrega únicamente el número y se continua, pero si es uno de los otros tres, se agregan los números correspondientes a todos los comandos dentro de estas funciones. Esto quiere decir que, si hay “if” o “while” se agrega el comando de la condición que se espera se cumpla y los métodos dentro. Para “for” se agregan solo los números correspondientes a los comandos dentro del “for” (ver figura 32).
28
Figura 32: Segundo arreglo.
Para determinar cuáles son los comandos dentro de una función “if”, “for” o “while”, se busca dónde termina la función y todo aquello dentro. Se almacena en un arreglo y de forma recursiva, se hace traducción al arreglo conformado. El resultado, es un arreglo de números que se incorpora a la solución final (ver figura 33).
Figura 33: Diagrame de flujo del proceso anterior.
Como es ilógico construir funciones para métodos como “if”, “for” y “while”, ya que no se pueden predecir todos los casos y condiciones que establecerán los estudiantes, se construyó un proceso que repite las funciones básicas de cada uno. Para “if” se pregunta la condición y se espera la respuesta del robot, si ésta no se cumple, se ignora completamente todo comando dentro. Para “for”, se guarda el número de veces que se va a repetir y se agregan esas n veces
29 los comandos dentro a la función. Para el “while”, al igual que el “if”, se pregunta la condición y solo si ésta se cumple, se ejecutan los comandos dentro. Al final del último de estos comandos, se regresa a la posición de la condición hasta que no se cumpla, y entonces no se ejecutan los comandos dentro (ver figura 34).
Figura 34: Diagrame de flujo del último proceso.
5.5. Ejecutor de comandos en el robot
Hay que incorporar el programa al robot, al menos una sola vez. El programa que tiene el robot son los comandos que puede ejecutar y la conexión al servidor. A continuación, se puede ver una lista con los comandos que se le incorporan al robot.
avanzarUnaCasilla() – Mueve el robot una casilla al frente. retrocederUnaCasilla() – Mueve el robot una casilla atrás. girar30ALaIzquierda() – Gira el robot 30° a la izquierda. girar45ALaIzquierda() – Gira el robot 45° a la izquierda. girar60ALaIzquierda() – Gira el robot 60° a la izquierda. girar90ALaIzquierda() – Gira el robot 90° a la izquierda. girar180ALaIzquierda() – Gira el robot 180° a la izquierda. girar30ALaDerecha() – Gira el robot 30° a la derecha. girar45ALaDerecha() – Gira el robot 45° a la derecha. girar60ALaDerecha() – Gira el robot 60° a la derecha girar90ALaDerecha() – Gira el robot 30° a la derecha girar180ALaDerecha() – Gira el robot 30° a la derecha
hayObstaculoFrente() – Devuelve un valor booleano si detecta o no un obstáculo al frente. hayObstaculoFrenteInt() – Devuelve un valor entero si detecta o no un obstáculo al frente. hayMarcaAbajo() – Devuelve un valor booleano si detecta o no una marca abajo.
hayMarcaAmarilla() – Devuelve un valor booleano si detecta o no una marca amarilla abajo. hayMarcaAzul() – Devuelve un valor booleano si detecta o no una marca azul abajo.
30 hayMarcaRoja() – Devuelve un valor booleano si detecta o no una marca roja abajo.
hayMarcaVerde() – Devuelve un valor booleano si detecta o no una marca verde abajo. hayMarcaNegra() – Devuelve un valor booleano si detecta o no una marca negra abajo. hayMarcaAbajoInt() – Devuelve un valor entero si detecta o no una marca abajo.
hayMarcaAmarillaInt() – Devuelve un valor entero si detecta o no una marca amarilla abajo. hayMarcaAzulInt() – Devuelve un valor entero si detecta o no una marca azul abajo
hayMarcaRojaInt() – Devuelve un valor entero si detecta o no una marca roja abajo hayMarcaVerdeInt() – Devuelve un valor entero si detecta o no una marca verde abajo hayMarcaNegraInt() – Devuelve un valor entero si detecta o no una marca negra abajo contar() – Aumenta de uno un contador.
preguntarContadorMarcas – Retorna el valor del contador. stop() – Detiene todo proceso del robot.
ouch() – Thred especial que se ejecuta al comienzo y durante todo el proceso, para determinar si se choca el robot.
hacerOuch() – Proceso auxiliar para hacer que el robot se detenga.
Cuando el robot recibe el arreglo de números, ver punto 5.4, lo recorre y a según el número que corresponda ejecuta un comando o una orden. De forma paralela al programa se ejecuta el comando especial donde se determina si el robot se chocó o no. Si se llegara a chocar, se cancela la ejecución de todo comando y se deja de ejecutar nuevos comandos, además se responde a LABBOT con el número -1, indicándole que la ejecución no acabo bien, si por el contrario termino el proceso sin chocarse responde a LABBOT con uno o cero para indicar que se ejecutaron de manera efectiva los comandos.
Para la construcción del programa se usó la librería LeJos para NXT versión 0.9.1 beta 3 para Windows de 32bits y el ambiente de desarrollo usado fue Eclipse Neón de 32bits.
5.6. Transmisión del video de la cámara
Para la trasmisión de la cámara, se incorpora la URL, “http://157.253.210:8888/cam_1.cgi”, a la aplicación Web. La URL es la que provee la cámara en el laboratorio apenas se realiza la ejecución.
5.7. Proceso de Solución de una Tarea en la plataforma de Aprendizaje
ROBLOCK-LABBOT
El estudiante para la solución de una tarea debe primero ingresar a la aplicación Web ROBLOCK haciendo uso de un navegador Web. Una vez ingrese a la dirección donde se encuentra la plataforma Web, el estudiante debe ingresar con sus credenciales previamente creadas, las cuales si no tiene aquí mismo se pueden crear (ver figura 35).
31
Figura 35: Página inicio.
Apenas el estudiante ingrese, tiene la posibilidad de elegir entre los seis diversos módulos que presenta ROBLOCK: Variables, Sensores, Condicionales, Ciclos, Funciones y Laboratorio Remoto (ver figura 36).
Figura 36: Menú módulos.
El estudiante selecciona la opción de Laboratorio Remoto, que lo lleva a una interfaz donde podrá elegir de las tareas propuestas una. Estas tareas varían según el propósito sobre el cual se diseñaron, si fueron hechas para evaluar los conceptos de variables, de condicionales, de ciclos o de funciones además de cada una tener un correspondiente escenario físico en algún laboratorio. En este caso se seleccionó ciclos de la Universidad de los Andes.
32
Figura 37: Laboratorios remotos.
Aparecen dos nuevas opciones, originalmente la opción de la derecha se encuentra no habilitada hasta que el estudiante resuelva la tarea de forma virtual y para hacer esto debe seleccionar la opción de la izquierda.
Figura 38: Menú de pruebas uno.
Se le muestra al estudiante la tarea a resolver junto con el enunciado, el tiempo a su disposición y los puntos que puede llegar a obtener.
33
Figura 39: Interfaz tarea.
Una vez solucionado el problema el estudiante al pulsar el botón de terminar, habilitará la opción que anterior mente estaba deshabilitada.
34 Apenas el estudiante seleccione esta opción, se realiza de forma automática la conexión entre ROBLOCK y el servidor dentro al laboratorio en la Universidad de los Andes, en este caso. Es importante resaltar que en el laboratorio remoto debe tenerse ya todo listo, el escenario físico, la cámara debe estar lista para trasmitir las imágenes, el robot en la ubicación adecuada y aún más importante que el robot tenga el programa ya precargado y se encuentre ya conectado al servidor y este en espera de comandos.
En esta opción la solución que propuso el estudiante podrá ser ejecutada por el robot y una cámara estará haciendo streaming de cada uno de los movimientos del robot y se le informará al estudiante si la solución terminó de manera exitosa, fallida o se chocó por medio de un mensaje en la pantalla. Para saber si se chocó, fue un éxito o un fracaso, el robot envía un mensaje al servidor que es nuevamente enviado a la plataforma Web, quien traduce este mensaje en un mensaje en la pantalla.
35
6.
Análisis de resultados
En la prueba se realizó una comunicación por Bluetooth entre LABBOT y el robot de cinco y seis metros para cubrir todo el escenario, lo que le permite al robot moverse por todo el escenario sin problemas, además de que los comandos son enviados sin problemas y la respuesta del robot tampoco tiene problemas.
La comunicación entre ROBLOCK y LABBOT no presenta retraso alguno al momento del envió, a excepción de la cámara que resulta tener pequeños instantes donde la imagen se detiene por un muy corto periodo de tiempo.
En la figura 35 se puede ver el escenario físico montado.
Figura 41: Escenario de pruebas.
La traducción del código JavaScript, no emplea más del tiempo necesario para la conversión de los bloques en comandos.
Se dejó implementado la detección de seis colores distintos para la futura implementación de marcas de distintos colores en ROBLOCK. El valor a detectar fue establecido según una tonalidad del color, si se van a implementar nuevos colores es necesario volver a establecer el valor a detectar por color.
36 El robot presenta un cierto desfase al mover por el escenario debido a la superficie donde se realizaron las pruebas, no era una superficie uniforme además de una propia inclinación causada por el diseño del robot.
A pesar del error que existe en el sensor ultrasónico el robot es capaz de siempre detectar obstáculos que se encuentren una casilla frente a él.
LABBOT está en grado de aceptar una única función momentáneamente.
No se logró llegar a realizar pruebas con usuarios, pero el resultado final de la comunicación entre LABBOT y ROBLOCK fue logrado, por lo que es posible presentar el proyecto en instituciones educativas a futuro y realizar estudios sobre el aprendizaje sin falta alguna.
37
7.
Conclusiones y trabajos futuros
LABBOT permite ejecutar tareas que son resueltas en el ambiente gráfico de ROBLOCK en escenario físico con un robot Lego Mindstorm NXT. Inicialmente el robot Lego construido para el proyecto permite movimientos de avance de 30cm, de reversa de 30cm, de giro a la derecha de 30°, 45°, 60°, 90° y 180°, de giro a la izquierda de 30°, 45°, 60°, 90° y 180°, pero para el proyecto se limitaron los giros únicamente a 90°, tanto derecha como izquierda. La detección de obstáculos como se indicó en las pruebas, ver unidad 4.5, después de una distancia de más de tres casillas, 90cm, el sensor empieza a desfasarse en grandes medidas, por lo que para el proyecto se estableció la importancia de únicamente detectar objetos a una casilla de distancia del robot, 30cm. Para la detección de colores se usaron colores de cartulinas con colores predefinidos, los valores que observa el sensor infra-rojo varía de material en material y por la tonalidad de los colores. Se hicieron pruebas de la ejecución de cuatro tareas básicas definidas: tarea de variables, tarea de condicionales, tarea de ciclos y tarea de funciones. La solución de cada tarea fue definida y simulada por los estudiantes en ROBLOCK y luego se envió a LABBOT. LABBOT interpretó la solución ROBLOCK y la envió a un robot Lego Mindstorm NXT para ser ejecutada en el escenario físico correspondiente.
A partir de los resultados obtenidos y su respectivo análisis, se puede concluir que se debe implementar y construir un escenario uniforme con las marcas ya implementadas, que le permita al robot un fácil y sencillo desplazamiento, donde los únicos obstáculos para el robot sean los estipulados y no el suelo. Los análisis sobre el sensor infra-rojo permitieron concluir que la ubicación del sensor, debajo del robot, permite que no haya casi variaciones en la medición de los colores, pero para la corrección de las distintas tonalidades de los colores, se incorporó un rango de aceptación por color.
Así mismo, del modelo de robot construido hay que resaltar la importancia de ubicar los sensores ultrasónicos al frente del robot, el sensor infra-rojo en la parte de abajo y dos sensores de contacto tanto al frente como atrás del robot. En las pruebas hechas con el modelo que se propuso se pudo ver que la ubicación de estos componentes es crucial para un buen desarrollo de las tareas y que, además la disposición del tamaño de los cuadrados es adecuada para una buena visualización desde la cámara y que no genera un alto consumo de espacio físico.
La implementación del escenario propuesto anteriormente, se determinó como un trabajo futuro, además de ampliar las posibilidades de construcción de problemas para el profesor, permitiéndole en ROBLOCK detectar marcas de distintos colores y en LABBOT se debe incorporar la posibilidad de detectar obstáculos a distancias mayores a una casilla.
Por último, se deben llevar a cabo pruebas de usuario con estudiantes para determinar el grado de interés por parte de ellos, permitiendo escenarios pedagógicos de mejora para futuras versiones e iteraciones de la propuesta en este proyecto desarrollada.
38
8.
Referencias
- Panadero, C. F., Roman, J. V., & Kloos, C. D. (2010). Impact of Learning Experiences
Using LEGO Mindstorms® in Engineering Courses. IEEE EDUCON Education
Engineering 2010 – The Future of Global Learning Engineering Education, pp. 503-512, 2010.
- Ahmed, B., & Alasaleh, K. (2011). Robotics: Its Effectiveness as a Tool to Teach Engeering Design and Computer Programming. In 2011 IEEE Global Engineering Education Conference (EDUCON) – “Learning Enviroments and Ecosystems in Engineering Education”, pp. 1018-1021, 2011.
- Wang, W. (2016). A Mini Experiment of Offering Stem Education to Several Age Groups Through the Use of Robots. In 2016 IEEE Integrated STEM Education Conference (ISEC), pp. 120-127, 2016.