Reconocimiento de ambientes desconocidos en robótica móvil
149
0
0
Texto completo
(2) RECONOCIMIENTO DE AMBIENTES DESCONOCIDOS EN ROBÓTICA MÓVIL: CASO DE ESTUDIO. GERMÁN ROJAS GÓNGORA. Tesis para optar al título de Ingeniero de Sistemas y Computación. Profesor Asesor FERNANDO DE LA ROSA R.. UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERIA DEPARTAMENTO DE SISTEMAS Y COMPUTACIÓN GRUPO DE INFORMÁTICA GRÁFICA BOGOTÁ DC. MAYO DE 2003.
(3) Este proyecto fue desarrollado para optar por el título como ingeniero de sistemas y computación en la Universidad de los Andes, e n t r e l o s m e s e s d e agosto de 2002 y junio de 2003. Quiero agradecer a las personas que de una u otra manera colaboraron durante el desarrollo de este proyecto. Para preguntas y comentarios favor contactarme por correo electrónico. Dedicado a mis padres, mis hermanos, a mi abuelita Rosa y a Patricia.. Germán Rojas Góngora [email protected].
(4) ISC-2003-1-47. TABLA DE CONTENIDO. TABLA DE CONTENIDO TABLA DE FIGURAS. i iii. INTRODUCCION. 1. 1. OBJETIVOS. 3. 1.1 General 1.2 Específicos. 3 3. 2. METODOLOGÍA. 5. 3. MARCO TEORICO. 6. 3.1 Conceptos Básicos 3.2 Descripción Del Hardware 3.2.1 El R CX 3.2.1.1 Puertos De Entrada: 3.2.1.2 Sensores: 3.2.1.3 Puertos De Salida: 3.2.1.4 Motores 3.2.1.5 Pantalla De Cristal Líquido (LCD): 3.2.1.6 Parlante: 3.2.1.7 Puerto Serial De Comunicaciones Infrarrojo 3.3 Programación Del RCX 3.3.1 Programación Con El Firmware Estándar 3.3.1.1 NQC 3.3.2 Programación Con Versiones No Estándar Del Firmware 3.3.2.1 LeJOS 3.3.2.2 LegOS 3.4 Aplicaciones: 3.5 Trabajos Relacionados. 6 9 10 13 13 20 22 22 23 23 26 28 29 37 39 54 67 69. 4. PROBLEMA A RESOLVER Y PROPUESTA DE SOLUCION. 75. 4.1 Descripción General 4.2 Propuesta General De Solución 4.2.1 Diseño Del Robot Móvil 4.2.1.1 Descripción De La Odometría Del Robot 4.2.2 Calibración Y Estimación De Errores 4.2.2.1 Medición De Los Errores De Odometría. 75 75 77 79 81 82. i.
(5) ISC-2003-1-47. 4.2.2.2 Calibración Odometría Del Robot 4.2.2.3 Calibración Del Sensor De Ultrasonido 4.2.3 Software 4.2.4 Pruebas Experimentales. 86 97 113 117. 5. CONCLUSIONES Y TRABAJOS FUTUROS. 124. 5.1 Conclusiones 5.2 Trabajos Futuros. 124 125. BIBLIOGRAFIA. 127. ANEXO 1. RESUMEN API ’S DE PROGRAMACIÓN. 129. ANEXO 2. EJEMPLO PROGRAMA COMUNICACIÓN N QC Y JAV A. 130. ANEXO 3. DIAGRAMA DE CLASES DEL SOFTWARE RCX. 133. ANEXO 4. DIAGRAMA DE CLASES DEL SOFTWARE HOST. 134. ANEXO 5. DISEÑO DEL ROBOT MÓVIL. 141. ANEXO 6. AMBIENTE DE PRUEBA. 142. ii.
(6) ISC-2003-1-47. TABLA DE FIGURAS F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA. 1. ESTRUCTURA LÓGICA DEL RCX _____________________________ 12 2. L OCALIZACIÓN DE LOS PUERTOS DEL R C X _____________________ 13 3. S ENSOR DE C ONTACTO ____________________________________ 14 4. S ENSOR DE LUZ _________________________________________ 16 5. S ENSOR DE ROTACIÓN ____________________________________ 16 6. U SO DEL SENSOR DE ROT A C I Ó N _____________________________ 17 7. S ENSOR DE U LTRASONIDO CONECTADO AL RCX ________________ 18 8. L OCALIZACIÓN DE LOS PUERTOS DE SALIDA EN EL RCX __________ 21 9. ESTADOS DE POTENCIA Q UE ALIMENTAN LOS MOT ORES ___________ 21 10. MOTOR DE 9 VOLTIOS ___________________________________ 22 11. P ANTALLA DE CRISTAL LIQUIDO ____________________________ 23 12. U BICACIÓN DEL PUERTO INFRARROJO _______________________ 23 13. INTERCAMBIO DE DATOS PC- R C X _________________________ 26 14. A RQUITECTURA DEL RCX CON EL FIRMWARE ESTÁNDAR _________ 30 15. MODOS DE CONFIGURACIÓ N DE LOS SENSORES EN NQC _________ 31 16. D ISTRIBUCIÓN DE LA MEMORIA EN LE J O S ____________________ 39 17. D IAGRAMA DEL COMPORTAMIENTO EN UNA COLISIÓ N ___________ 45 18. J ERARQUÍA DEL COMPORTAMIENTO EN UNA COLIS IÓN ___________ 46 19. A RQUITECTURA DE CREAC IÓN DE SOFTWARE EN LE G O S _________ 55 20. T IPOS Y TAMAÑOS DE NUMERACIÓN SOPORTADO PO R L E GO S _____ 61 21. C APAS IMPLEMENTADAS EN LNP ___________________________ 62 22. P ROBLEMAS A RESOLVER _________________________________ 77 23. D ISEÑO DE LA CONFIGURACIÓN DEL ROBOT MÓVIL _____________ 78 25. ELIPSES DE ACUMULAMIENTO DE ERROR _____________________ 81 26. U BICACIÓN DEL PARÁMET R O b nominal EN EL ROBOT ______________ 83 27. V ISUALIZACIÓN DEL ERROR DE ODOMETRÍA ___________________ 84 28. G RILLA UTILIZADA PARA HACER LAS MEDICIONES . _____________ 85 29. E RRORES TIPO A Y TIPO B, EN DIRECCIÓN CC W Y C W _________ 88 30. ERRORES EN LAS POSICIONES ABSOLUTAS EN EL SENTIDO CCW ___ 91 31. ERRORES EN LAS POSICIONES ABSOLUTAS EN EL S ENTIDO CW ____ 92 32. C ORRECCIÓN DE E RROR EN POSICIONES ABSOLUTAS CCW _______ 95 33. C ORRECCIÓN DE E RROR EN POSICIONES ABSOLUTAS CW ________ 96 34. FRENTE DE ONDA EMITIDO POR UN SENSOR DE ULTRASONIDO ____ 98 35. P RECISIÓN EN MEDIDAS HECHAS POR EL SENSOR DE ULTRAS ONIDO 99 36. N O HAY REFLEJO DE LA ONDA EN EL SENSOR __________________ 99 37. R EFLEJO DE LA ONDA EN UNA SUPERFICIE CÓNC AVA ___________ 100 38. G RILLA PARA LA CALIBR ACIÓN DEL SENSOR DE ULTRASONIDO ____ 101 39. MEDIDAS OBTENIDAS POR EL SENSOR DE ULTRAS ONIDO ________ 103 40. G RÁFICA DE LAS MEDIDA S HECHAS A OBJETOS PLANOS _________ 104 41. MEDIDAS OBTENIDAS POR EL SENSOR DE ULTRAS ONIDO ________ 106 42. G RAFICA DE LAS MEDIDA S HECHAS A OBJETOS C ILÍNDRICOS _____ 107. iii.
(7) ISC-2003-1-47. F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGURA F IGUR A. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.. MEDIDAS OBTENIDAS POR EL SENSOR DE ULTRAS ONIDO ________ 108 G RÁFICA DE LAS MEDIDA S HECHAS A OBJETOS CONVEXOS _______ 108 MEDIDAS OBTENIDAS POR EL SENSOR DE ULTRAS ONIDO ________ 110 G RAFICA DE LAS MEDIDA S HECHAS A OBJETOS CÓNCAVOS _______ 111 F LUJO DE DATOS ENTRE LOS DOS COMPONENTES DE SOFTWARE __ 113 INTERFAZ GRÁFICA DE LA APLICACIÓN IMPLEME NTADA _________ 116 A MBIENTE DE PRUEBA __________________________________ 118 MAPA CALCULADO POR EL SISTEMA EN LA PRIMERA PRUEBA _____ 119 MAPA CALCULADO POR EL SISTEMA EN LA SEGUNDA PRUEBA _____ 120 MAPA CALCULADO POR EL SISTEMA EN LA TERCERA PRUEBA _____ 121 MAPA CALCULADO POR EL SISTEMA EN LA CUARTA PRUEBA ______ 122 MAPA CALCULADO POR EL SISTEMA EN LA QUINT A PRUEBA ______ 123. iv.
(8) ISC-2003-1-47. INTRODUCCION. Debido a la curiosidad innata del ser humano en conocer el medio ambiente que lo rodea, lo ha llevado a idear tecnologías que le ayuden en este proceso. Una de estas tecnologías es la robótica y en especial la robótica móvil, la cual le ayuda al ser humano a tener acceso. a. áreas. de. difícil. acceso. ó. que. pueden. afectar. nuestra. integridad física. Por otro lado este tipo de tecnologías han tenido un gran auge, a tal punto que se están llevando a los hogares en diferentes formas. Esto me despertó curiosidad y. por ello adquirí un kit de robótica, de ahí. surgió la idea de hacer un proyecto relacionado con robótica móvil. En la Universidad de los Andes son muy pocos los trabajos que se han hecho. sobre. reconocimiento. de. ambientes. desconocidos.. Hasta. el. momento dichos trabajos han sido realizados por el Departamento de Ingeniería Eléctrica. En el departamento de Ingeniería de Sistemas no se han realizado trabajos referentes a este tema, por ello seria interesante abordar este problema desde otras disciplinas, ya que como bien sabemos el campo de la robótica es de un alto grado interdisciplinario.. Los. pocos. estudios. acerca. de. este. tema. en. la. universidad y la poca bibliografía existente en nuestro medio hacen que este tema no sea muy fácil de abordar. En este documento se presenta una propuesta para el reconocimiento de ambientes desconocidos utilizando un robot LEGO de la línea Mindstorms, equipado con un sensor de ultrasonido y sensores de. 1.
(9) ISC-2003-1-47. rotación. La idea de esta propuesta es que sea aplicable a robots móviles en general. El documento está organizado en 5 capítulos. En el primer capítulo se dan a conocer los objetivos que se lograron con este trabajo. En el segundo capítulo se describe brevemente la metodología empleada en la realización de este proyecto. En el tercer capitulo se hace una investigación teórica acerca de los conceptos tratados además de los trabajos relevantes hechos en la universidad de los andes. En el cuarto capitulo se describe el problema a resolver y una propuesta de solución. En el quinto capitulo se exponen las conclusiones obtenidas con este proyecto y se proponen temáticas acerca de la continuación del mismo.. 2.
(10) ISC-2003-1-47. 1. OBJETIVOS. 1.1 General Investigar y aplicar los aspectos básicos que se deben tener en cuenta, en el desarrollo de una aplicación informática/computacional de reconocimiento de ambientes con un robot móvil.. 1.2 Específicos •. Diseñar. e. implementar. un. modelo. de. software. como. solución. general al problema de reconocimiento de ambientes con un robot real. •. Evaluar el kit de robótica LEGO Mindstorms para su aplicación académica en el campo de la programación en robótica móvil.. •. Evaluar los mas importantes API’s de programación que podrían ser de mayor utilidad en el desarrollo de software para este tipo de robot.. •. Aplicar el Lenguaje Java en el campo de la robótica móvil, y aprovechar sus características como lenguaje orientado a objetos.. •. Diseñar e implementar un modelo de software bajo el paradigma orientado a objetos en el que se puedan implementar diferentes estrategias de navegación en el problema de reconocimiento de ambientes. 3.
(11) ISC-2003-1-47. •. Investigar. y. evaluar. una. metodología. para. la. calibración. por. software de la odometría del robot. •. Evaluar una metodología con el fin de evaluar el comportamiento de un sensor de ultrasonido.. •. Implementar una aplicación informática/computacional gráfica que me permita visualizar los datos capturados por el robot.. •. Validar diferentes estrategias de navegación con un robot móvil real.. •. Obtener una cuantificación del nivel de precisión de los mapas construidos.. 4.
(12) ISC-2003-1-47. 2. METODOLOGÍA. La. primera. parte. de. la. investigación. consiste. en. conocer. las. diferentes plataformas de programación soportadas por el robot y su relación con los diferentes dispositivos de hardware disponibles en el mismo. A continuación se hizo una evaluación de estos API’s con el fin escoger el más indicado, de acuerdo al problema que se quiere resolver. Posteriormente se hizo la investigación sobre las variables cinemáticas del robot, que se consideraron como las más importantes, con el fin de aumentar el grado de precisión a sus movimientos. Además se hizo un análisis estadístico con el fin de conocer el comportamiento del sensor de ultrasonido, con lo cual se estima el grado de precisión de los datos provenientes del robot. Posteriormente se implementó una aplicación gráfica en lenguaje Java sobre plataforma Windows en la cual se aborda una aproximación inicial. a. la. solución. del. problema.. Esta. aplicación. interactúa. estrechamente con otra aplicación Java a ejecutarse en el robot. En este trabajo se pretendió entender los principios básicos a tener en cuenta cuando se trabaja en el desarrollo de software con un robot real con bastantes limitaciones, en un ambiente todavía muy ideal. De esta manera se espera que este estudio sirva como punto de inicio a estudios posteriores más específicos sobre las generalidades expuestas.. 5.
(13) ISC-2003-1-47. 3. MARCO TEORICO. 3.1 Conceptos Básicos Algunas de las siguientes definiciones fueron tomadas de [7]. •. Robot: Manipulador multifuncional y programable, diseñado para mover. materiales,. especiales,. piezas,. mediante. herramientas. movimientos. o. variables. dispositivos. programados. que. permiten llevar a cabo diversas tareas. •. Morfología:. Un. robot. está. formado. principalmente. por. una. estructura mecánica, transmisiones, sistema de accionamiento, sistema sensorial, sistema de control y elementos terminales. •. Estructura. mecánica:. Mecánicamente. un. robot. móvil. está. formado por una serie de elementos que unidos entre si hacen que. el. robot. mediante. el. pueda. uso. de. cambiar piñones. su se. posición. transmite. Principalmente la. cantidad. de. movimiento deseada entre los motores y las ruedas o efectores. •. Transmisiones. o. reductores:. Las. transmisiones. son. los. elementos encargados de transmitir el movimiento desde los actuadores. hasta. las. articulaciones.. Los. reductores. son. los. encargados de adaptar la velocidad de salida del actuador a los valores adecuados para el movimiento de los elementos del robot, por ejemplo los piñones.. 6.
(14) ISC-2003-1-47. •. Actuadores:. Los. actuadores. tienen. por. misión. generar. el. movimiento de los elementos del robot según las ordenes dadas por la unidad de control. Los actuadores utilizados en robótica pueden emplear energía neumática, hidráulica o eléctrica. Un ejemplo de actuador es un motor. •. Sensores: Los robots usan sensores para así tener información sobre. su. general,. estado un. interno. sensor. mide. y. su. una. estado. en. un. característica. del. ambiente.. En. ambiente. o. espacio en el que está y proporciona señales eléctricas. El robot va a. percibir campos magnéticos o corrientes ultrasónicas, que. proveen información. Para conseguir que un robot realice una tarea. con. adecuada. precisión,. velocidad. e. inteligencia. seria. preciso que tenga conocimiento tanto de su propio estado co mo del estado de su entorno. La información relacionada con su estado. (fundamentalmente. el. estado. de. sus. posición/orientación) la consigue con los denominados sensores internos, mientras que la que se refiere al estado de su entorno se adquiere con los sensores externos. Sensores internos: o Sensores de posición/orientación. o Sensores de velocidad. o Sensores de presencia. Sensores externos: o Sensores de luz: Los sensores de luz para la robótica vienen en diferentes formas. Estos se pueden usar para navegación.. Por. ejemplo,. un. robot. puede. usarlo. para. 7.
(15) ISC-2003-1-47. seguir en una línea recta blanca. Otros pueden usar visión infrarroja. o Sensores de ultrasonido: La “visión” robótica es uno de los grandes retos para los ingenieros. Es difícil programar un robot para que sepa que ignorar y que no. Un robot tiene problemas. de. interpretar. sombras,. cambio. de. luces. o. brillo. Algunos robots pueden "ver" mediante el uso de sonidos ultrasónicos, muy parecido al sistema que usa los murciélagos. Estos robots emiten 40 kilo hertz de ondas sonoras, y luego detectan los ecos. Midiendo la demora del. tiempo. de. las. ondas. en. devolverse,. el. tiempo. transcurrido da una distancia hacia un objeto (o sea en donde reboto el sonido). o Sensores de temperatura: Dispositivo electrónico diseñado para permitir la lectura digital de la temperatura. o Sensores. de. tacto:. Dispositivo. diseñado. para. detectar. colisiones, y de esta manera tomar decisiones acerca de la trayectoria que debe seguir el robot. o Sensores Láser: Estos sensores sirven para obtener la localización de obstáculos, al igual que los sensores de ultrasonido con un grado de precisión superior pero a un costo mucho mas elevado. •. Elementos. terminales:. Los. elementos. terminales,. también. llamados efectores finales son los encargados de interactuar directamente. con. el. entorno. del. robot,. como. por. ejemplo. pinzas, herramientas, o ruedas en el caso de los robots móviles, etc.. 8.
(16) ISC-2003-1-47. •. Odometría:. Es. un. método. que. usa. encoders. (sensores. de. rotación en este caso) para medir la posición relativa de un robot, basado en el número de rotaciones que dan las ruedas. Presenta la ventaja de que la información esta auto contenida, es decir que en cualquier momento el robot puede estimar su posición/orientación.. La. desventaja. radica. en. que. el. error. aumenta sin límite a menos de que se use periódicamente una referencia independiente con el fin de reducir el error [9]. •. Errores a tener en cuenta: En robótica he encontrado que se habla de dos tipos de errores: sistemáticos y no sistemáticos [9]. Los sistemáticos provienen del diseño del robot. y sus. componentes como por ejemplo: la resolución del sensor de rotación, que dos ruedas no tengan el mismo diámetro o que éstas estén desalineadas, o también pueden provenir de las imprecisiones errores. no. de. parámetros. utilizados. en. el. software.. Los. sistemáticos son introducidos a causa del medio. ambiente en donde se encuentra el robot, como ejemplos de estos podemos tener: el deslizamiento de una rueda en el piso debido a suelo resbaloso o a que no hay contacto entre todos los puntos de la rueda y el piso o a que se encontró un objeto inesperado durante el movimiento, etc. Estos errores necesitan de un manejo muy cuidadoso ya que tienen una gran influencia en el desempeño de los robots.. 3.2 Descripción Del Hardware Lego® Mindstorms [1] es el nombre de una línea de productos desarrollados por. Lego Group y “The Epistemology and Learning 9.
(17) ISC-2003-1-47. Group” en el Media Lab del MIT, en un principio con fin recreativo, el cual posteriormente se extendió a nivel educativo bajo la línea Lego® Dacta. El producto que fué utilizado en este trabajo es el RIS 1.5 (Robotics Invention System , por sus siglas en inglés) de la línea Lego Mindstorms, el cual está dirigido a un público de 12 años en adelante. Este kit hace posible al usuario convencional acercarse al mundo de la. robótica. a. versatilidad. un. bajo. debido. a. costo,. además. que. se. de. presentar. pueden. una. construir. gran. diversas. configuraciones de robots, limitadas a la imaginación del usuario y por supuesto a los recursos de hardware Lego disponibles. Este kit viene con 727 piezas, entre ladrillos, ruedas, piñones, etc. (si se necesita información mas específica recomiendo ver [1]). Las piezas más importantes y que vale la pena hacer una descripción detallada para efectos de programación son: el RCX1, el cual es un pequeño computador que. actúa como el “cerebro” del robot; los. diferentes tipos de sensores (rotación y ultrasonido) y los actuadores (motores).. Es. de. anotar. que. el. funcionamiento. de. estas. partes. depende en algunos casos del tipo o versión de firmware2 que se tenga instalado en el RCX, el cual está directamente relacionado al lenguaje y/o ambiente de programación que se utilice.. 3.2.1 El RCX El. RCX. tiene. dimensiones. 6. cm.. X. 10. cm.. X. 4. cm.,. pesa. aproximadamente 280 gramos incluyendo las seis pilas AA. Cabe anotar que en la versión 1.0 el RCX posee una entrada de corriente 1. Robotics Command Explorer, de acuerdo al sitio oficial de Lego® [1]. 2. Se llama así a una memoria programada permanentemente e imborrable usada para almacenar monitores y controladores de E/S.. 10.
(18) ISC-2003-1-47. A C-DC, lo cual puede ser útil para el ahorro de baterías en una configuración de robot estático. El RCX tiene un microcontrolador Hitachi H8/3292, el cual posee un reloj que oscila entre 10 MHz y 16 MHz, el RCX utiliza los 16 MHz. El tamaño de palabra de este procesador es de 8 bits, lo cual quiere decir que el procesador solicita 8 bits de memoria en cada acceso a memoria [4]. Si se necesita información más específica acerca de la arquitectura del procesador es posible obtener los manuales técnicos en el sitio Web de Hitachi (http://semiconductor.hitachi.com/products/pdf/h33th014d2.pdf). El microcontrolador contiene 16 KB de mem oria de lectura (ROM) y 512 bytes de memoria de acceso aleatorio (RAM). La memoria ROM contiene las rutinas (ó controladores) necesarias para interactuar con los dispositivos que conforman el RCX, por ejemplo para cambiar el firmware, para desplegar información en la pantalla de cristal liquido (LCD), comunicarse con motores y sensores, además comunicarse con el puerto infrarrojo (IR). Hay que aclarar que Lego llama Firmware a la capa de software que interactúa entre las rutinas escritas por el usuario y las que se encuentran en la memoria ROM. Desde este punto de vista el firmware se puede ver como una extensión de las rutinas que hay en la memoria ROM; dicho firmware se puede cambiar o actualizar, dependiendo el lenguaje o ambiente de programación que se desee utilizar, lo cual le da mas versatilidad. El sistema tiene un reloj interno el cual lleva la cuenta del número de minutos desde que se encendió el RCX, este tiempo puede ser accesado desde un programa. El RCX además posee 4 temporizadores los cuales miden el tiempo en incrementos de 100 ms (1/10 de segundo); éstos empiezan desde que el RCX es encendido. Los programas pueden re-inicializar cualquier. temporizador. independientemente. del. tiempo.. El. RCX. contiene 32 kb de memoria RAM, la cual esta en un chip externo al microprocesador. debido. a. que. la. memoria. RAM. que. posee. el 11.
(19) ISC-2003-1-47. procesador resulta muy poca para el programador, ya que en esta se almacena tanto el firmware como el software escrito por el usuario. En un principio pensé que 32 KB de memoria no representaban mucho espacio para el programador, pero en [3] encontré dos anécdotas importantes que me hicieron reflexionar al respecto: El RCX contiene mas memoria que la usada por el lunar landing module en las misiones a la luna, y la otra, que el Sojourner Mars rover tenia 160 kb de memoria RAM disponibles, pero su software solo utilizaba 16 kb de memoria. En la figura 1 se muestra la estructura lógica del RCX. Si se requiere información mas detallada acerca del RCX sugiero visitar http://graphics.standford.edu/~kekoa/rcx/, donde el autor de está página hizo los trabajos de ingeniería inversa para descifrar el funcionamiento al detalle del RCX, ya que estos no son divulgados oficialmente por el Lego® Group y sin los cuales no seria posible tener los desarrollos para la gran gama de plataformas soportadas actualmente por el RCX.. Programas de Usuario. Firmware. ROM. Procesador H8/3292. Figura 1. Estructura lógica del RCX.. 12.
(20) ISC-2003-1-47. 3.2.1.1 Puertos De Entrada: C o m o s e puede observar en la Figura 2 el RCX tiene tres puertos de entrada en los cuales se conectan los sensores. Estos puertos están diseñados para que puedan ser conectados de cualquier manera y sin embargo funcionen correctamente. Lego tiene varios tipos de sensores: contacto, luz, temperatura y rotación (figuras 3, 4, 5 y 6), los cuales usan el mismo tipo de cable que utilizan los motores para ser conectados al RCX. Cada tipo de sensor tiene sus propios requerimientos para leer e interpretar la información, lo cual quiere decir que hay que configurar cada puerto de entrada antes de ser usado. Además el RCX no tiene implementada la manera de saber que tipo de sensor esta conectado en determinado puerto. Entrada 2. Entrada 1. Entrada 3. Figura 2. Localización de los puertos del RCX.. 3.2.1.2 Sensores: Los sensores son utilizados por el robot tanto para conocer el estado del ambiente que lo rodea, como para conocer su propio estado. Desde este punto de vista los sensores se pueden clasificar como 13.
(21) ISC-2003-1-47. internos y externos. Los internos para saber de su estado interno, como por ejemplo el reloj de la CPU, y los externos para conocer variantes del medio ambiente como un sensor de luz. Hay. dos. clases. de. sensores. desde. el. punto. de. vista. de. su. funcionamiento: pasivos y activos. Los pasivos operan como simples resistencias y no requieren de flujo eléctrico para funcionar, como por ejemplo el sensor de contacto y el sensor de temperatura. Los sensores activos por el contrario si necesitan del flujo de corriente que les provee el RCX, entre estos tenemos el sensor de rotación y el sensor de luz.. 3.2.1.2.1. Sensor De Contacto:. Este sensor es el sensor básico (figura 3), es utilizado generalmente para detectar cuando el robot hace contacto con un objeto. También puede ser usado como un botón dándole la funcionalidad respectiva. Este sensor da un valor booleano, 0 en su posición normal y 1 cuando el. interruptor. esta. oprimido.. Este. sensor. se. puede. conectar. de. cualquier manera, siempre y cuando se abarquen los 4 contactos metálicos. Contactos Metálicos. Interruptor. Figura 3. Sensor de Contacto.. 14.
(22) ISC-2003-1-47. 3.2.1.2.2. Sensor De Luz:. El sensor de luz consiste de un diodo emisor de luz (LED por sus siglas en ingles) y de un fototransistor, el cual capta la luz del medio en que se encuentre. El LED como su nombre lo indica emite luz visible para nosotros, el cual sirve para iluminar cualquier superficie que esté al frente, esto con el fin de que el fototransistor capture luz sin depender de la luz del medioambiente. Cuando el medioambiente está muy oscuro, éste capta la luz reflejada por la superficie que se encuentre al frente y a muy poca distancia (más o menos 3 o 4 cms). Cuando el medio tiene bastante luz este puede influenciar la lectura del fototransistor (figura 4). Este sensor se puede utilizar por ejemplo para distinguir algún color a corta distancia (para minimizar la luz externa), ó para medir la luz de su ambiente si se habla de una distancia. mayor.. Las. lecturas. pueden. variar. entre. dos. sensores. diferentes ó en un mismo sensor bajo diferentes condiciones. Este sensor. posee. una. característica. importante. y. es. que. percibe. la. frecuencia emitida por la luz infrarroja, con lo cual junto con el puerto infrarrojo se puede utilizar como sensor de proximidad, es decir. detectar. obstáculos. sin. hacer. contacto. con. ellos.. El. inconveniente consiste en que el rayo infrarrojo solo es captado por el sensor de luz si este es refractado de frente, lo cual quiere decir que. la. superficie. perpendicularmente. a. a. detectar. la. trayectoria. debe del. estar robot. ubicada para. casi. poder. ser. detectada. Si se requiere conocer detalles del funcionamiento interno de este sensor. se. puede. visitar:. http://www.plazaearth.com/usr/gasperi/light.htm .. 15.
(23) ISC-2003-1-47. LED. Fototransistor. Figura 4. Sensor de luz.. 3.2.1.2.3. Sensor De Rotación:. Este es un sensor que a diferencia de los otros, mide valores no solo en una escala absoluta sino también en una escala relativa, de acuerdo a las necesidades del programador. Por defecto el valor mostrado es 0 cuando empieza a ejecutar un programa, pero una instrucción específica a cada lenguaje de programación puede ser usada como valor de referencia a la medida relativa. El sensor sirve únicamente para medir el número de rotaciones que da el eje al interior de la cavidad del sensor (figura 5). Si el eje introducido en el sensor rota en una dirección éste aumenta su valor y si por el contrario se gira en la dirección opuesta este disminuye su valor.. Eje de rotación.. Figura 5. Sensor de rotación.. Este sensor mide en incrementos de 22.5 grados, lo cual quiere decir que una rotación de 360 grados es representada por un valor del sensor de 16. Se puede pensar que la resolución del sensor no es muy buena, ¿que pasaría si se quiere medir una rotación menor a 16.
(24) ISC-2003-1-47. 22.5. grados?. solución. , para poder hacer esto se puede pensar en una. mecánica.. Por. ejemplo. una. reducción. de. engranajes. aumentaría la precisión de las medidas (figura 6):. Engranaje sin fin. Sensor de Rotación. Piñón de 24 dientes Figura 6. Uso del sensor de rotación.. En este caso si queremos medir el número de revoluciones del piñón de 24 dientes, éste está en contacto con un engranaje sin fin, lo cual nos da una reducción en escala de 24:1, es decir que el engranaje sin fin rota 24 veces por cada vuelta completa del piñón de 24 dientes. Desde el punto de vista del sensor de rotación este marcará un valor de 16x24 = 384 por cada vuelta completa del piñón de 24 dientes, lo cual nos indica que la precisión es de más de 1 grado, ya que sabemos que la circunferencia tiene 360 grados. Así para calcular la distancia recorrida nos faltaría por conocer el diámetro de la rueda, el cual está impreso en el borde de cada una de las ruedas. Por ejemplo suponiendo que en cualquiera de los extremos del eje que esta dentro del sensor de rotación hay un motor conectado, y en cualquiera de los extremos del eje respecto al cual gira el piñón de 24 dientes hay una rueda (esto es utilizado en odometría3), ésta tiene un perímetro. C = D×Π (donde D es el diámetro de la rueda y Π = 3,14 ) luego para obtener la distancia. 3. recorrida T =. S ×C , I. donde. S. es. la. lectura. del. sensor,. Odometría es un método utilizado para medir la rotación de una rueda y/o su orientación, la cual necesita periódicamente una corrección de error.. 17.
(25) ISC-2003-1-47. I = G × 16 siendo G el factor de reducción de escala entre el sensor y el eje en donde esta conectada la rueda. G=24, para nuestro ejemplo entonces I = 16 × 24 = 384 . La distancia T resulta medida con las mismas unidades con que se midió el diámetro de la rueda, las ruedas Lego están medidas en centímetros. Es. importante. rotaciones. a. mencionar muy. baja. que o. el. RCX. tiene. problemas. al. contar. muy alta velocidad, más precisamente. menores a 12 rpm ó mayores a 1400 rpm, casos en los cuales el RCX puede ignorar algunas rotaciones. Para conocer detalles específicos acerca del funcionamiento interno de. este. sensor. sugiero. visitar:. http://philohome.free.fr/sensors/legorot.htm .. 3.2.1.2.4. Sensor De Ultrasonido:. Este sensor no hace parte del hardware oficial producido por el LEGO Group. Si se requiere información adicional recomiendo visitar el sitio: http://www.hitechnicstuff.com/URpage.htm .. Figura 7. Sensor de Ultrasonido conectado al RCX.. 18.
(26) ISC-2003-1-47. Este sensor emite ondas de sonido a una frecuencia de 40 Khz., las cuales no son percibidas por el oído humano. Estas ondas después de ser emitidas por un transductor 4 y al entrar en contacto con un objeto hacen que parte de su energía sea reflejada y retorne de nuevo al sensor. Dicha energía es captada en el sensor por otro transductor. Dicho transductor receptor amplifica estas señales o “ecos” y las envía a un microcontrolador el cual calcula que tan lejos se encuentra el objeto causante de la reflexión de la onda. Esto lo hace utilizando la velocidad del sonido en el aire que es de 330m/s y el tiempo de vuelo (TOF por sus siglas en inglés) que se demora en llegar las ondas reflejadas de nuevo al sensor. Para ello se utiliza la siguiente ecuación cinemática para movimiento con velocidad constante:. 2 ⋅X = V ⋅t Donde X es el rango ó distancia del objeto que se quiere medir, V es la velocidad del sonido y t el tiempo que se demora en captar la onda reflejada. El valor de X luego de ser calculado es convertido por una señal y enviado al RCX. Para utilizar correctamente este sensor en el RCX éste se configura como si fuera un sensor de luz (según la especificación. del. fabricante). y. la. escala. de. valores. en. modo. porcentaje. De esta manera el RCX recibe un valor en el intervalo [0,100]. Dicho valor recibido y que lo vamos a llamar “Lectura”, hay que aprender a interpretarlo. Para ello hay que convertirlo a una escala. de. valores. que. tenga. mas. significado. para. nosotros.. Originalmente este valor se convierte a pulgadas con la siguiente ecuación: lectura Rango en pulgadas = +6 2 4. Transductor: Aparato electromecánico vibratorio, capaz de transformar la potencia de una corriente alterna en potencia mecánica o acústica, o bien, a la inversa, la presión de una onda sonora o de una vibración en señal eléctrica.. 19.
(27) ISC-2003-1-47. Pero para nosotros es más natural el sistema métrico decimal, así que necesitamos. convertir. dicho. valor. a. centímetros. con. la. siguiente. ecuación: Rango en cms = Rango en pulgadas × 2.54 cms. Debido a que el valor “Lectura” esta en un rango entre 0 y 100 entonces podemos determinar que las distancias que puede captar con cierta precisión el sensor se encuentra en el rango [15.24cms ,142.24cms].. Las. distancias. fuera. de. este. rango. no. pueden. ser. medidas con este sensor, lo cual produce limitaciones al realizar experimentación con él.. 3.2.1.3 Pue rtos De Salida: El RCX tiene tres puertos de salida (A, B y C) como se puede observar en la figura 8, cada una de las cuales tiene tres estados posibles: encendido (on), apagado (off) y suspendido (floating). El estado de encendido hace que el motor conectado empiece a rotar, el estado de apagado actúa como un freno y hace que el motor deje de rotar, el estado de suspendido hace que el RCX suspenda el flujo de corriente, puede entenderse como el estado “neutro” en un automóvil en donde las ruedas siguen girando con un impulso.. 20.
(28) ISC-2003-1-47. Salida A. Salida C. Salida B Figura 8. Localización de los puertos de salida en el RCX.. Cada puerto tiene asociada una dirección, la cual hace rotar el motor hacia delante o hacia atrás. Esta dirección es efectiva únicamente en el modo de encendido, pero también puede ser cambiada desde el modo apagado o suspendido ya que dicha dirección es recordada siempre por el RCX. La dirección de giro del motor depende de cómo se conecte este con el RCX. Además cada puerto de salida tiene asociado un nivel de potencia, de los 8 posibles (entre 0 y 7); éste puede ser modificado únicamente cuando el estado de la salida es apagado.. Debido. a. que. el. RCX. es. un. dispositivo. digital. los. 8. diferentes estados de potencia difieren únicamente en modulación de los pulsos generados ya que los pulsos en el RCX son enviados cada 8 ms, es decir que el pulso con menos potencia tiene una longitud de 1 ms, y el pulso con mas potencia tiene una duración de 8 ms el cual es continuo. Nivel de potencia 2 (20%). Nivel de potencia 6 (90%) Figura 9. Estados de potencia que alimentan los motores.. 21.
(29) ISC-2003-1-47. 3.2.1.4 Motores El RCX le suministra al motor un máximo de 9 voltios, y su consumo de corriente es de 10 mA si está libre, y 259 mA si tiene interacción con un mecanismo. Este motor no presenta ningún problema si se conecta directamente a un sensor de rotación ya que su máxima velocidad es de 350 rpm, y de 200 rpm si interactúa con algún mecanismo por lo tanto el sensor de rotación es capaz de captar todas las vueltas. Al conectar un moto r con el RCX hay que tener en cuenta la dirección de conector del cable ya sea en el RCX o en el motor, ya que este determina si el motor se mueve o no en dirección de. las. manecillas. del. reloj,. aunque. esta. dirección. también. es. determinada por ciertas instrucciones cuando se programa.. Figura 10. Motor de 9 voltios.. 3.2.1.5 Pantalla De Cristal Líquido (LCD): Esta. pantalla. accionados. contiene. 43. individualmente. segmentos, únicamente. los con. cuales las. pueden. herramientas. ser de. programación que no interactúen con el firmware provisto por Lego, ya que estos segmentos fueron diseñados para dicho firmware y tienen un significado especial. Esta pantalla puede utilizarse para mostrar algún tipo de información importante o como marca para hacer depuración de código.. 22.
(30) ISC-2003-1-47. Figura 11. Pantalla de cristal liquido.. 3.2.1.6 Parlante: El RCX incluye un parlante en su interior, el cual está localizado en una. de. las. esquinas,. éste. tiene. un. diámetro. de. 15mm. y. una. profundidad de 4mm. Con éste se pueden generar sonidos simples de frecuencia variable y duración. Este también puede ser utilizado para probar y depurar software.. 3.2.1.7 Puerto Serial De Comunicaciones Infrarrojo: El principal propósito de este dispositivo es bajar programas al RCX. Este puerto además de recibir datos, también es capaz de enviarlos ya sea con la torre infrarroja conectada a un PC ó a otro RCX (figura 12). Este puerto tiene dos tipos de emisiones de luz infrarroja: a corta distancia, es decir un alcance hasta. 2.5 metros y menor. consumo de energía, y a larga distancia hasta aproximadamente 8 metros y mayor consumo de energía.. Puerto infrarrojo. Figura 12. Ubicación del puerto infrarrojo.. La capa de software que se encuentra en la memoria ROM y que llamaré ej ecutivo (también llamado supervisor o monitor debido a que 23.
(31) ISC-2003-1-47. no es un sistema operacional porque está en la memoria ROM) se comunica. con. un. computador. externo. mediante. un. protocolo. solicitud/respuesta: donde el computador envía una solicitud y el ejecutivo. se. encarga. de. ejecutar. dicha. solicitud. y. envía. una. respuesta. Esta respuesta puede contener datos solicitados, además posee información de control que indica si se ejecutó bien la solicitud (la siguiente descripción esta basada en [8]).. Las siguientes tipos de solicitudes pueden ser enviadas al ejecutivo: •. Alive: Mira si el ejecutivo esta corriendo y si se tiene una buena conexión con el RCX.. •. GetVersions: Este sirve para obtener la versión del ejecutivo y de. la. aplicación. que. está. corriendo. sobre. el. ejecuti vo. (firmware). •. EnterDownloadMode: Si alguna aplicación esta corriendo sobre el ejecutivo ésta es detenida. En ese momento el ejecutivo queda listo en un modo para bajar un programa.. •. BeginDownload: Prepara el ejecutivo para bajar un programa.. •. DownloadBlock: Este baja un bloque de bytes a la memoria del RCX.. •. RunProgram: Empieza la ejecución de un programa previamente bajado al RCX.. Cada solicitud/respuesta es enviada como un paquete de bytes. Cada paquete contiene un encabezado, seguido por la solicitud/respuesta actual junto con una cola adicionada al final del paquete. Paquete = encabezado + solicitud/respuesta + cola Donde: Encabezado = 0x55 0xff 24.
(32) ISC-2003-1-47. Solicitud/respuesta = secuencia de bytes Cola = suma de verificación (checksum 5) Este checksum se obtiene en este caso sumando el valor binario de los bytes que forman solicitud/respuesta y tomando el byte menos significativo que resulte de esta suma. La solicitud también es representada por una secuencia de bytes. El primer byte es el código de la solicitud, seguido por los bytes que contienen los datos solicitados. La respuesta tiene una estructura muy. similar. donde. el. primer byte empieza con el código de la. respuesta seguido por los datos de respuesta. Estos códigos de solicitud y respuesta están detalladamente explicados en [8], en caso de que se necesite conocerlos. Cada solicitud/respuesta es enviada como paquetes de bytes en una línea de comunicación serial entre el computador y el RCX ó entre dos RCX, lo que en definitiva es representado por dos pares emisor/transmisor infrarrojos, si uno de los dos está conectado al computador este lo hace mediante la torre infrarroja conectada a un puerto serial con interfase RS232 en un puerto. de. convertidor).. 9. o Esta. de. 25. pines. (para. este. último. se. necesita. un. transmisión se hace a una velocidad de 2400. baudios (bits por segundo). Para marcar el comienzo y el final de cada byte, este es enviado entre un bit de arranque y un bit de finalización. También un bit de paridad es adicionado a cada byte. Entonces concluimos que cada byte es enviado como 11 bits. Además cada byte enviado (excepto el encabezado 0x55) es enviado como dos bytes: el byte a enviar y el complemento bit a bit del byte a enviar que forma otro byte, luego el paquete entonces es enviado con un numero igual de bits en cero y de bits en uno, esto con el fin de compensar la interferencia de la luz del medio ambiente. En resumen. 5. Valor utilizado para garantizar que los datos se transmiten sin error.. 25.
(33) ISC-2003-1-47. cada. valor. exceptuando. de el. 8. bits. en. un. encabezado,. paquete a. una. es. enviado. velocidad. de. como 2400. 22. bits. bits. por. segundo lo que es equivalente a 9 milisegundos para transmitir cada byte aproximadamente. Vale la pena mencionar que actualmente la torre infrarroja que se conecta al PC tiene una interfase USB6 la cual presenta algunas ventajas ya que no requiere baterías, usa tecnología mas reciente y para un usuario final es fácil de configurar, pero también presenta algunas desventajas ya que no esta soportada por muchos sistemas operativos actualmente y por equipos que no tengan este tipo de puerto. A diferencia de la torre que se comunica por puerto serial y que es soportado por la mayoría de sistemas operativos, además de encontrarse en la mayoría de modelos de computadores.. Figura 13. Intercambio de datos PC- RCX.. 3.3 Programación Del RCX Un robot se puede programar para que sea autónomo ó controlado a distancia, esto lo determina el tipo de problema a resolver, por lo tanto sería muy interesante poder programar el RCX para que pueda ejecutar estos dos tipos de control. Además si tenemos en cuenta las limitaciones de memoria del RCX (tan solo 32 kb) nos veríamos obligados a hacer que el mayor flujo de información sea procesado. 6. Universal Serial Bus.. 26.
(34) ISC-2003-1-47. por un PC. (host), el cual solo le enviaría al RCX información ya. procesada para que el ejecute una pequeña tarea. En resumen la escogencia del tipo de control para el robot depende de la cantidad de información involucrada en la resolución del problema, por ello seria necesario contar con API’s no solo para programar el RCX sino también para hacer que el host se pueda comunicar con el robot. El RCX se puede programar bajo diferentes lenguajes, los cuales necesitan de un firmware especial para cada uno de ellos. El firmware es el encargado de hacer la interfaz entre las primitivas contenidas en la memoria ROM y los programas hechos por el usuario. Para construir un nuevo firmware se necesitan conocimientos en software embebido, los detalles técnicos a bajo nivel del RCX y compilación cruzada, este ultimo consiste en configurar un compilador para que produzca código que se ejecutará en una arquitectura de hardware diferente, por ejemplo el firmware hecho para programar en legOS (nombre del API para programar el RCX en lenguaje C) fue hecho en un PC Intel el cual mediante compilación cruzada produce el código para el procesador Hitachi H8/3292 que es el que posee el RCX. LEGO hasta el momento ha sacado al público dos versiones de firmware (las cuales se conocen como versiones de firmware oficiales o. estándar),. gráficos. de. el. las. cuales. programación,. fueron los. diseñadas. cuales. poseen. para. sus. varias. ambientes limitaciones. funcionales, además de ser comerciales y de arquitectura cerrada. Por ello algunos entusiastas vieron la necesidad de crear sus propias versiones para poder explotar el potencial del RCX.. 27.
(35) ISC-2003-1-47. 3.3.1 Programación Con El Firmware Estándar Existen dos versiones del firmware oficial: la primera es la versión cuyo nombre de archivo es FIRM0309.LGO y viene con los kits RIS 1.0 y 1.5, y el nombre de archivo de la versión más reciente es llamada FIRM0328.LGO. y. viene. con. el. RIS. 2.0.. Dichas. versiones. son. compatibles con cualquiera de las versiones de RCX conocidas. La primera versión tiene varias limitaciones como por ejemplo que no existe la posibilidad de declarar arreglos, y solo se pueden declarar 32 variab les, etc. Por ello me centraré en la segunda versión que es un poco mas poderosa ya que los diferentes API’s de programación para comunicar el PC con el RCX son compatibles con cualquier versión de firmware. El software de programación gráfica que provee LEGO está diseñado para público sin conocimientos en programación lo cual hace que el ambiente de programación se torne un poco incomodo a la hora de hacer programas extensos. Además no es tan fácil darse cuenta como funciona. el. flujo. de. los. programas. ya que hace transparente al. usuario muchas características como por ejemplo el hacer programas multitarea. Bajo la línea Dacta existe otro ambiente gráfico mucho mas poderoso dirigido a un público que tiene conocimientos en programación y permite trabajar con problemas más complejos. Dicho producto se llama Robolab (programado con LabView de Nacional Instruments) el cual es de carácter comercial lo que lo hace algo restringido al público. Sin embargo existe un lenguaje llamado NQC (Not quite C) cuyo compilador fue inventado para producir bytecodes que. son. además. interpretados es. de. libre. por. el. firmware estándar. Este compilador. distribución,. http://www.baumfamily.com/nqc. en. su donde. página se. Web puede. oficial. es:. obtener. un 28.
(36) ISC-2003-1-47. manual. Vale la pena mencionar que este lenguaje fue diseñado para utilizarlo por consola, sin embargo programadores han construido IDE(s) (Interface Development Environment). para facilitar su uso. En. este proyecto se usó Bricx Command Center el cual es desarrollado para ejecutarse en Windows cuya página Web oficial es: http://members.aol.com/johnbinder/bricxcc.htm .. Las. versiones. del. compilador cruzado NQC también están disponibles para macOS y Linux.. 3.3.1.1 NQC Para la evaluación de este lenguaje voy a explicar las características que me parecieron mas importantes para programar el RCX (con algunas funciones de este lenguaje también se puede programar el scout). ó. que. no. son. muy. habituales. en. los. lenguajes. de. programación. Si se necesita saber mas detalles de este lenguaje se puede referir al manual publicado en la página Web de NQC y a [6] de donde me he basado para entender la funcionalidad de dicho lenguaje. Además en la página Web http://mindstorms.lego.com/sdk se encuentra el RIS 2.0 SDK el cual contiene un documento con todos los comandos y bytecodes soportados por el firmware, ya que éste es quien determina la funcionalidad de este lenguaje.. 29.
(37) ISC-2003-1-47. RCX. Máquina Host NQC. Puerto Serial ó USB. Firmware Estándar. R A M. Rutinas en ROM. ROM. Programas de usuario. Torre Infrarroja. Hardware. Figura 14. Arquitectura del RCX con el firmware estándar.. Como su nombre lo indica su sintaxis es parecida a la del lenguaje C, lo cual. facilita su aprendizaje desde el punto de vista de un. conocedor de dicho lenguaje. Con éste se pueden declarar. hasta 32. variables globales, y 16 variables locales a cada tarea; esto significa que. para. cada. simultáneamente. una. de. las. 10. en. un. programa. tareas NQC. que se. se. pueden. pueden. ejecutar. declarar. 16. variables locales a ésta, lo que nos da 32 + (16X10) = 192 variables en total, que son únicamente de tipo entero. En este lenguaje se pueden declarar arreglos, los cuales tienen una longitud fija según como se declaren, dicha longitud tiene como longitud máxima 32 posiciones, sin embargo se pueden aumentar, utilizando el espacio de las 32 variables globales. Es muy importante aclarar que NQC no soporta variables de punto flotante, lo cual puede ser restrictivo para la. solución. de. determinado. tipo. de. problemas. en. NQC.. Otra. característica importante de este lenguaje es que no hay manera de declarar estructuras de datos por parte del usuario. Sin embargo existe la capacidad de data logging que consiste en reservar un. 30.
(38) ISC-2003-1-47. espacio de memoria (llamado datalog) cuya longitud es determinada por el usuario en el cual se van almacenando datos en forma de pila, dichos datos pueden ser lecturas de los sensores, variables, valores de tiempo, etc. La estructura de datos se podría simular de acuerdo al orden en que se vayan ingresando los datos, para de esa misma manera interpretarlos cuando se soliciten en la máquina host, esto debido a que el RCX no tiene acceso al datalog. El manejo de las configuraciones de los sensores es interesante en este lenguaje debido a que se hace una distinción entre los tipos de sensores y los modos de los sensores. Como ya sabemos los tipos de los sensores son de contacto, temperatura, luz y rotación, pero además en NQC existe el sensor nulo, esto porque dependiendo del tipo de sensor éstos quedan configurados en un modo por defecto como lo observamos en la siguiente tabla: Tipo de Sensor Nulo Contacto Temperatura Luz Rotación. Código. Clase. 0 1 2 3 4. Pasivo Pasivo Pasivo Activo Active. Modo por defecto Raw Boolean Celsius Percentage Rotation. Nombre en NQC SENSOR_TYPE_NONE SENSOR_TYPE_TOUCH SENSOR_TYPE_TEMPERATURE SENSOR_TYPE_LIGHT SENSOR_TYPE_ROTATION. Figura 15. Modos de configuración de los sensores en NQC.. El modo raw, es el más simple de todos y representa el valor del nivel de voltaje leído en el sensor y convertido en un número entero entre 0 y 1023. El modo rotación marca un valor de 16 por cada revolución de su eje. El modo porcentaje no es más que el valor raw convertido a un valor entre 0 y 100 en donde un valor raw alto corresponde un bajo valor en porcentaje. Adicionalmente existen otros modos como el Edge Count el cual sirve para contar los cambios del valor booleano. 31.
(39) ISC-2003-1-47. de 0 a 1 o viceversa; el modo Pulse count mode es muy parecido al edge count excepto porque únicamente cuenta los valores que van de 1. a. 0. y. el. modo. Fahrenheit que nos muestra el valor de la. temperatura en grados Fahrenheit. Estos modos se pueden utilizar con. cualquier. combinación. sensor. dependiendo. de. que. tipo. de. información necesitemos conocer por parte del sensor. Las tareas son la unidad mínima de ejecución, cada programa debe tener al menos una tarea la cual es llamada task main, sin embargo puede haber mas tareas, las cuales se ejecutaran concurrentemente, lo cual representa una ventaja ya que se ejecutaran. al. “mismo. tiempo”7. Desde el punto de vista de la ejecución de una tarea esta puede verse como una secuencia de bytecodes los cuales son una serie de instrucciones interpretadas por el firmware. Estas tareas tienen dos estados principales: activas o inactivas, lo cual hace que estas se puedan ejecutar concurrentemente como ya se había dicho anteriormente,. lo. cual. tiene. la. ventaja. de. que. se. ejecutan. independientemente y así hacer un código mas claro. Sin embargo en la primera versión del firmware toca aprender a sincronizar las tareas debido a que ellas pueden tener acceso al mismo recurso y causar errores que son difíciles de encontrar debido a que son semánticos. Este problema del control de acceso a recursos fue tratado en la segunda versión del firmware. En términos generales el control de acceso deja a una tarea hacer solicitudes al dueño del recurso, si el recurso no es de alguna tarea en ese momento la solicitud es exitosa. Si el recurso es de una tarea con mayor prioridad que la tarea que hace la solicitud entonces la solicitud falla. En contraste si el recurso es de una tarea con igual o menor prioridad que la tarea que realiza. 7. En realidad sabemos que esto no es cierto, pero la velocidad del procesador lo hace ver así.. 32.
(40) ISC-2003-1-47. la solicitud, entonces la solicitud es exitosa lo cual nos indica que el recurso cambia de dueño. Además es importante dejar libre cada recurso una vez se utilice. Como recursos en el RCX tenemos: motor A, motor B, motor C y el Sonido, los cuales en la sintaxis de NQC son representados. por. ACQUIRE_OUT_A , ACQUIRE_SOUND.. las. siguientes. constantes. ACQUIRE_OUT_B, También. existen. los. respectivamente:. ACQUIRE_OUT_C recursos. definidos. y por. el. usuario: ACQUIRE_USER_1, ACQUIRE_USER_2, ACQUIRE_USER_3 y ACQUIRE_USER_4. La única diferencia entre los recursos físicos y los definidos por el usuario es que cuando la tarea dueña de un recurso físico se pierde entre los cambios de tareas el firmware ejecuta una acción por defecto la cual en los motores es apagarlos (OFF) y en el sonido consiste en detener los sonidos que se estén ejecutando en dicho momento y eliminar los sonidos pendientes en la solicitud del recurso. Además se ejecuta una acción de reestablecimiento definida por la tarea que pierde el recurso. Cada tarea tiene una prioridad entre 0 y 255, siendo 0 la prioridad más alta, es importante definirla para. evitar. comportamiento s. no. deseados.. Un. ejemplo. de. su. estructura es la siguiente: acquire(ACQUIRE_OUT_A+ ACQUIRE_OUT_C) //se solicita acceso a los motores A y C { wait(1000) //espera 10 segundos si se tiene el control de los motores } catch //si la solicitud hacia los recursos falla es llamado Playsound { Playsound(SONIDO) } ClearTimer(0) //esta instrucción siempre es llamada. Esta segunda versión del firmware provee un mecanismo nuevo para reaccionar frente a estímulos: los eventos. Estos surgieron debido a las limitaciones de los condicionales como if, while ó until para. 33.
(41) ISC-2003-1-47. observar la información provista por los sensores. Por ejemplo si se requiere. el. estado. inmediato. de. un. sensor:. ¿el. sensor. esta. presionado?, o responder a estímulos mas complicados: ¿el sensor estuvo detenido menos de un segundo? ó ¿el sensor fue presionado dos. veces?. Entonces. se. necesitaría. escribir. código. para. manejar. dichos requerimientos con condicionales, pero para ello escribieron las rutinas para el manejo de eventos. El. firmware. puede. monitorear. hasta. 16. eventos. independientes,. numerados entre 0 y 15 además cada uno está representado por un bit en la lista de eventos la cual es llamada Event Mask. Cada evento tiene un número de parámetros que determinan como y cuando éstos van a ser disparados. El primer parámetro es el event source el cual determina la fuente del estímulo que el evento va a monitorear, éste puede ser un sensor, un temporizador, un contador ó el buffer de mensajes. El segundo parámetro. es el event type el cual define la. condición a monitorear en la fuente del estímulo. La siguiente es la estructura de los eventos:. monitor(MI_NUMERO_DE_EVENTO) //se define el numero de evento a monitorear { //código a ejecutar si no ocurre el evento } catch() { //código que se ejecuta si se dispara el evento }. Tipos de Eventos: Los eventos pueden ser clasificados en eventos booleanos: presionar (pressed ), soltar (released ), pulso (pulse) y caída (edge) los cuales 34.
(42) ISC-2003-1-47. son utilizados para monitorear el sensor de contacto, el cual presenta dos estados: encendido y apagado. La clasificación continúa con los eventos sobre algún rango de valores, para lo cual toca definir los parámetros de límite inferior (lower limit) y el límite superior (upper limit). Nos interesa en este caso que se dispare una acción si el valor de el sensor monitoreado esta dentro del rango previamente definido. Hay. otros. eventos. llamados. Click. Events los cuales consisten en. capturar si hubo un cambio abrupto en el valor de un sensor: de alto a bajo ó de bajo a alto, como por ejemplo cuando el sensor de contacto es oprimido y soltado o viceversa (si solo se oprime, el evento no es disparado, para que ello ocurra toca soltarlo). Las palabras reservadas para este tipo de eventos son Event_Type_Click y Event_Type_DoubleClick, También es importante saber que el tiempo que se demoró el clic puede ser leído y modificado con las funciones ClickTime(evento) y SetClickTime(evento, valor). Otro evento ocurre cuando. un. mensaje. llega. al. RCX,. este. es. del. tipo. EVENT_TYPE_MESSAGE. Gran parte de la funcionalidad del RCX está implementada en el firmware,. gracias. instrucciones. a. que. (opcodes). éste. que. son. puede. interpretar. ejecutados. una. serie. de. simultáneamente. sin. necesidad de escribir software adicional en el RCX. Esta serie de instrucciones pueden ser enviadas al RCX desde otro RCX o bien desde un PC que hace las veces de host. Para programar el envío de estas. instrucciones. hacia. el. RCX. se. pueden. utilizar. varias. API’s. alternativas, las oficiales son una serie de librerías que se encuentran disponibles al público en http://mindstorms.lego.com/sdk en donde hay dos versiones de sdk: la versión mas antigua solo soporta la torre infrarroja por puerto serial, mientras que la mas reciente soporta también la to rre USB, la cual además tiene mas funcionalidad debido 35.
(43) ISC-2003-1-47. a que está diseñada para interactuar con la versión mas reciente de firmware. Aunque son compatibles con los dos tipos de firmware que existen, estas pueden ser utilizadas desde ambientes de programaci ón Win32 como Visual Basic, Visual C++ ó Delphi debido a que vienen como librerías DLL, OCX u objetos COM. Existen otras API alternativas para la comunicación desde el host con el RCX (funcionan con los dos tipos de firmware oficial) las cuales están desar rolladas en Java. Una es. llamada. RCXPort. www.slewis.com/rcxport. la la. cual. cual. puede. tiene. ciertas. encontrarse. en. posibilidades. de. comunicación con el RCX muy similares a las que tienen los sdk oficiales. La otra alternativa con mas funcionalidades la constituye RCXJava que puede ser adquirida junto con su licencia. LGPL. en. el. código fuente bajo siguiente. http://www.escape.com/~dario/Java/rcx/rcxJava2.1.zip,. la. URL: cual. tiene. una característica interesante y es la posibilidad de comunicarse con un RCX a través de una red bajo protocolo TCP-IP si se programa un servidor PROXY utilizando algunas de sus clases. Además según su autor. se. puede. utilizar. bajo. ambientes. MacOS,. Linux. y. Win32. utilizando puertos seriales y USB. En conclusión desde el punto de vista de robots autónomos, NQC puede ser útil para resolver tareas que no necesiten un uso extensivo de memoria ya que se tiene limitaciones de espacio. Como ejemplo de estas aplicaciones podrían considerarse como navegación con marcas en el suelo o navegación buscando fuentes de luz ó resolución de laberintos. muy. simples. bajo. estrategias. poco. complejas. como. siguiendo paredes, etc. La contraparte radica en que tiene mucha funcionalidad implementada en el Firmware para ejecutar ordenes enviadas desde un host lo cual hace que esta sea su principal característica, esta la hace ideal para aplicaciones de tele-operación con control manual [10] ya que la utilización del API seria basada en 36.
(44) ISC-2003-1-47. el envío de ordenes desde el host, además también se podría utilizar en tareas de tele-operación con control Supervisor sencillo [10] es decir en donde el control es compartido entre un operador humano y el mismo robot, aunque este último con una autonomía muy limitada a la hora de realizar la tarea asignada. En el anexo 2 en la parte final de este documento se encuentra un ejemplo de un programa en NQC, el cual hace que el robot siga una línea negra hasta cuando recibe un mensaje enviado desde el PC cuyo contenido sea el número 3, esto hace que el robot se detenga y envié un mensaje hacia el PC el cual contiene el numero 5. El programa que se ejecuta desde el computador fue hecho en Java utilizando el API RCXPort.. 3.3.2 Programación Con Versiones No Estándar Del Firmware Hay varias versiones de firmware no oficiales, las cuales surgieron debido. a. la. necesidad. de. programar. el. RCX. en. lenguajes. de. programación reconocidos, ya que no es posible hacer esto con la versión oficial del firmware. Por ello surgieron diferentes versiones que. soportan. los. diferentes. lenguajes. de. programación.. Estas. herramientas no han sido revisadas pero a continuación se enumeran debido a que pueden ser interesantes, pero sin mucha difusión en la comunidad de desarrolladores de software. •. FORTH. http://www.hempeldesigngroup.com/lego/pbforth. 37.
(45) ISC-2003-1-47. •. LISP. http://www.csc.villanova.edu/~klassner/csc4500/resources.html •. Lenguajes sincrónicos: Lustre, Esterel. http://www.emn.fr/x-info/lego/ •. TCL. http://www.linux.org/docs/ldp/howto/mini/Lego/tcl.html •. ADA. http://www.usafa.af.mil/dfcs/adamindstorms.htm •. Brick Command. http://www.geocities.com/Area51/Nebula/8488/lego.html •. QC. http://digilander.libero.it/ferrarafrancesco/lego/qc/index.html •. Preprocesador en ADA para NQC. http://www.faginfamily.net/barry/Papers/AdaLetters.htm •. Bot Kit (Dolphin Smalltalk). http://www.objectarts.com/Bower/Bot-Kit/Bot-Kit.htm •. Gordon Brick Programmer. http://www.umbra.demon.co.uk/gbp.html En esta evaluación se estudian las herramientas para lenguajes mas ampliamente conocidos. Gracias a Internet se han difundido API’s que hacen posible programar el RCX con lenguajes como Java (lejOS) y C ó C++ (legOS). Cada una de estas librerías cuenta también con su 38.
(46) ISC-2003-1-47. respectiva versión de firmware, además de las herramientas para compilar código escrito en estas sintaxis para que corra en el CPU del RCX y sus respectivas librerías para el desarrollo de aplicaciones. 3.3.2.1 LeJOS LejOS (LEGO Java Operating System ) es el nombre que su autor le dio a la máquina virtual de Java (JVM) para el RCX, la cual es el pequeño interpretador que lee los Byte-code y ejecuta las instrucciones en la CPU, ésta se conoce también como Firmware para Java. El API para LejOS se puede encontrar en versiones para Windows y Linux, con su código fuente disponible, además de la documentación (Java docs) en su sitio oficial: http://lejos.sourceforge.net, aunque en este momento los voluntarios encargados de este proyecto están migrando el sitio a un dominio propio cuya URL es www.lejos.org. La versión evaluada es la. 2.0.0,. la. herramientas. cual de. necesita. del. compilación. Java. por. 2. SDK. debajo. debido. corren. el. a. que. sus. compilador. estándar de Java. Su autor explica que fue necesario hacer una nueva máquina virtual de Java debido a que la versión J2ME (Java 2 micro edición) fue diseñada para ser ejecutada en teléfonos celulares y computadores de mano con mas de 128 kb en memoria RAM. Además el propósito del RCX es completamente diferente al de un celular.. Clases básicas De leJOS. LeJOS JVM. Libre (4 kb). RAM (32 kb). Programas De Usuario. (16 kb). ROM. ROM. (16 kb). (16 kb). Figura 16. Distribución de la memoria en leJOS.. 39.
(47) ISC-2003-1-47. Como se mencionó anteriormente el RCX tiene 32 kb de RAM (Figura 2.2), de estos cerca de 4kb hay que dejarlos siempre libres debido a que son utilizados por las rutinas del ROM, lo que deja cerca de 28 kb, de los cuales 16 kb son utilizados por la versión actual de JVM para el RCX, lo cual significa que solo quedan 12 kb de memoria libre para los programas de usuario. Sin embargo hay que tener en cuenta que las clases básicas del API que son utilizadas en los programas de usuar io. (import). también. son. almacenadas. debido. a. que. son. encadenadas cuando se genera el archivo .class el cual es el que se va a almacenar y posteriormente a ejecutar en el RCX. Teniendo en cuenta lo anterior nos damos cuenta que no hay mucha memoria disponible. para. un. programa,. sin. embargo. esto. depende. de. la. cantidad de memoria que necesite el programa para que se pueda ejecutar. Por esta razón es crítico tratar de escribir código muy eficiente.. Si. necesitamos. ampliar. la. memoria. disponible. para. el. usuario se podría pensar en disminuir el tamaño del firmware (JVM) y/ó en disminuir el tamaño de las clases que se importan en nuestros programas, sin embargo la tarea de construir o recompilar para modificar ó crear un nuevo firmware es una tarea difícil debido a que se necesitan conocimientos muy específicos acerca del hardware. En especial del compilador en lenguaje de máquina para el procesador (estas. herramientas. solo. están. disponibles. para. ambientes. Unix,. Linux, Irix, etc.). Además de conocimientos sobre como co nstruir una máquina virtual de Java y conocimientos sobre compilación cruzada. Por ello es más fácil aumentar la memoria de usuario si se compila el API de nuevo debido a que estas clases están escritas en Java, eliminando aquellos métodos ó atributos que no utilicemos en las clases que importemos en nuestro programa. Otra alternativa posible es utilizar otra versión del firmware que se conoce como TinyVM la cual. es. mucho. mas. pequeña,. su. API. tiene. menos. funcionalidad 40.
(48) ISC-2003-1-47. implementada y solo funciona en Linux o en Windows bajo Cygwin, su dirección. electrónica. es:. http://tinyvm.sourceforge.net/,. lamentablemente este proyecto actualmente está inactivo. A continuación hago un recuento de algunos de los paquetes que componen. el. API. y. sus. clases. que. en. mi. concepto. lo. hacen. interesante. •. Java.lang.Math: En esta clase se encuentran implementadas funciones. trigonométricas,. raíz. cuadrada,. potenciación,. números aleatorios, entre otras. Estas funciones son útiles para. la. navegación,. además. hacen. que. el. RCX. soporte. números con punto flotante y así darle cierta precisión a los cálculos. •. Java.lang.String:. Esta. clase. implementa. el. soporte. de. caracteres y cadenas en el RCX, estas pueden ser útiles para desplegar. información. en. la. pantalla LCD, ó para hacer. debug, sin embargo en robótica no tienen un uso práctico, además de consumir recursos del RCX. •. Java.lang.StringBuffer : Tiene implementado funciones para el manejo de cadenas, tales como append.. •. Java.lang.System : Esta clase se usa para interactuar con la máquina virtual de Java y tiene métodos para tener acceso a los temporizadores, tener acceso a Runtime para calcular el espacio de memoria libre.. •. Java.lang.thread :. Esta. clase. tiene. implementados. métodos. para manejar hilos de ejecución.. 41.
(49) ISC-2003-1-47. •. Java.util.Bitset: Esta es utilizada para representar series de bits, las cuales son creadas con una longitud específica, además hay métodos para cambiar el estado de cada bit, sin embargo no existe un método para obtener la representación de esta ser ie de bits en forma de cadena.. •. Java.util.random: aleatorios,. sin. Esta. es. embargo. utilizada es. mas. para fácil. generar utilizar. números. el. método. math.random(). •. Java.Util.Vector: Esta es muy útil si se quiere hacer un arreglo de objetos con el fin de hacer una estructura de datos, trae métodos para adicionar elementos al arreglo, etc.. •. Java.io: Este paquete contiene la interfase de serialización, además. contiene. los. métodos InputStream ,. OutputStream,. DataInputStream y DataOutputStream que son utilizados para la comunicación del RCX a través del puerto infrarrojo. •. Josx.Robotics: Este es uno de los paquetes más interesantes, debido a que se encuentran clases genéricas (patrones) para aplicar con diferentes configuraciones de robots. Existe una interfase llamada Behavior, la cual como su nombre lo indica se. encarga. del. comportamiento. del. robot.. Esta. interfase. posee 3 métodos a implementar: §. boolean takeControl(): Este método indica si determinado comportamiento empieza a ser activo, por ejemplo si un sensor. de. contacto. ha. tropezado. con. un. obstáculo,. entonces este método retorna verdadero.. 42.
(50) ISC-2003-1-47. §. void action(): Este método inicializa la acción programada cuando determinado comportamiento empieza a ser activo, por ejemplo si takeControl() detecta una colisión con un objeto, entonces el código contenido en el método action es. ejecutado.. En. este. caso. podría. ser. que. el. robot. cambiara la dirección de desplazamiento (hacia atrás) y cambiara su orientación para así evitar el obstáculo. §. void. supress():. Este. método. puede. ser. usado. para. terminar el código que se ejecuta en action o bien para actualizar algún dato antes de que el comportamiento termine. Por ejemplo si en action se le cambió el sentido de giro de los motores, en supress se podría cambiar de nuevo para que siga hacia adelante. Estos tres métodos de la interface Behavior hace que sea más simple pensar en el comportamiento del robot, ya que si por ejemplo se necesitan entonces. implementar se. necesitan. 3. comportamientos. implementar. estos. diferentes,. tres. métodos. para cad a clase de comportamiento. En el caso en que se tengan implementados varios comportamientos, se necesitaría adicionalmente un mecanismo para coordinarlos, esto se puede hacer con la clase Arbitrador, su constructor tiene el siguiente prototipo: public A rbitrador (Behavior [] comportamientos) El cual recibe un arreglo de comportamientos para decidir entre ellos cual está activo en determinado momento. Las prioridades entre estos son establecidas de acuerdo al índice en el arreglo, entre mas alto. 43.
(51) ISC-2003-1-47. sea el índice en el arreglo, dicho comportamiento tiene la prioridad mayor. El otro método que tiene dicha clase es start() el cual activa el sistema de manejo de comportamiento (Arbitrator). Este sistema de control de comportamiento esta basado en el trabajo hecho. por. Rodney. subsumption. Brooks. architecture. [12],. el. cual. (actualmente. originalmente. es. mas. se. llamó. conocido. como. behavior control). El se basó principalmente del comportamiento de los insectos, representándolo en un modelo computacional que mas tarde se convirtió en un patrón muy utilizado en robótica. El observó que los insectos se desenvuelven exitosamente en el mundo real a pesar de que poseen un muy pequeño cerebro. Al comparar un insecto con un computador él concluyó que el insecto tiene una muy pequeña capacidad de memoria ya que no recuerda cosas del pasado, además. no. tiene. capacidad. de. aprendizaje.. Él. concluyo. que. la. estrategia de comportamiento de los insectos consiste en dividir su comportamiento general en varios comportamientos muy simples los cuales en conjunto pueden reaccionar rápidamente a los cambios. Para la descripción de cada comportamiento existen dos estructuras básicas: sensores (entradas) y actuadores (salidas). Esto no solo es cierto para los robots sino para ciertos organismos, como por ejemplo un. mosquito,. el. cual. todo. el. tiempo. está. monitoreando. sus. condiciones actuales a través de diferentes “sensores”, si alguno de éstos es estimulado éste hace que el mosquito reaccione de alguna manera, dependiendo del “sensor” él va a reacci onar de una manera diferente.. De. esta. manera. se. puede. entender. el. comportamiento. como un par condición-acción, esto se ilustra en la figura 17 donde se hace un ejemplo de comportamiento. En este caso se muestra una posible acción cuando se detecta una colisión. 44.
Documento similar