Full text
Escuela Técnica Superior de Ingeniería Informática Universitat Politècnica de València Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles Proyecto Final de Carrera Ingeniero en informática Autor: Vicent Mayans Roca Director: Ángel Valera Fernández 10 de septiembre de 2012
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 2
3 Resumen En este proyecto se desarrollan diversos algoritmos de control y comunicación para robots móviles de la plataforma LEGO Mindstorms NXT, utilizándose para ello las plataformas software de programación nxtOSEK, en un entorno Windows, y LeJOS, en un entorno Linux. Con el objetivo final de dotar de autonomía al robot en un terreno obstaculizado se estudian distintos tipos de comunicación, haciendo especial hincapié en Bluetooth y USB, y estrategias de generación y resolución de trayectorias por parte de robots móviles, escogiendo el algoritmo de persecución pura. Estos conocimientos son desarrollados en las tres aplicaciones finales: generación y seguimiento de trayectorias fijas, generación y seguimiento de trayectorias dinámicas recibidas por USB y navegación autónoma con visión artificial a través del sensor Kinect de Xbox. Palabras clave: robótica móvil, persecución pura, comunicación USB, Bluetooth, navegación autónoma.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 4
5
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 6 Tabla de contenidos 1.- Introducción ..................................................................................................... 10 1.1. Introducción y justificación ....................................................................... 10 1.2. Objetivos .................................................................................................... 10 2.- Desarrollo teórico ............................................................................................. 12 2.1. Introducción a la robótica ......................................................................... 12 2.2. Tipos de robots .......................................................................................... 16 2.2.1. Robots Industriales ................................................................................ 17 2.2.1.1. Manipuladores ................................................................................. 17 2.2.1.2. Robots de repetición o aprendizaje ................................................. 18 2.2.1.3. Robots con control por computador ................................................ 18 2.2.2. Robots Inteligentes ................................................................................ 19 2.2.3. Micro-robots ......................................................................................... 20 2.3. Robótica Móvil........................................................................................... 21 2.3.1. Clasificación de los robots móviles ........................................................ 21 2.3.1.1. Robots rodantes ............................................................................... 21 2.3.1.2. Robots andantes ............................................................................. 23 2.3.1.3. Robots reptadores ........................................................................... 24 2.3.1.4. Robots nadadores ........................................................................... 25 2.3.1.5. Robots voladores ............................................................................ 26 2.3.2. Componentes de un robot móvil ........................................................... 27 2.3.2.1. Estructura ........................................................................................ 27 2.3.2.2. Sensores .......................................................................................... 28 2.3.2.3. Actuadores ...................................................................................... 30 2.3.2.4. Sistemas de control .......................................................................... 31 2.3.2.5. Alimentación ................................................................................... 32 2.3.2.6. Comunicaciones .............................................................................. 36 2.3.2.6.1. USB ........................................................................................... 36 2.4. Comunicaciones inalámbricas ................................................................... 37 2.4.1. Wifi ......................................................................................................... 37 2.4.2. Bluetooth............................................................................................... 40 2.4.3. Otras alternativas .................................................................................. 42
7 2.4.3.1. Zigbee .............................................................................................. 42 2.4.3.2. Infrarrojos ....................................................................................... 48 2.5. LEGO NXT ................................................................................................ 48 2.5.1. Ladrillo NXT ......................................................................................... 50 2.5.2. Motores .................................................................................................. 51 2.5.3. Sensores ................................................................................................ 52 2.5.3.1. Fabricados por LEGO ..................................................................... 52 2.5.3.2. Fabricados por terceros .................................................................. 53 2.5.3.3. Personalizados ................................................................................ 53 2.5.4. Comunicaciones .................................................................................... 53 2.5.4.1. Capas del sistema de comunicación ............................................... 54 2.5.4.2. Comandos dentro del protocolo de comunicación ......................... 56 2.5.5. Software ................................................................................................. 57 2.5.5.1. nxtOSEK .......................................................................................... 57 2.5.5.2. Embedded Coder Robot NXT ......................................................... 58 2.5.5.3. LeJOS .............................................................................................. 58 2.5.5.4. Otras alternativas ............................................................................ 58 2.6. Entorno de desarrollo de software ............................................................ 61 2.6.1. MATLAB ................................................................................................ 61 2.6.1.1. Simulink .......................................................................................... 63 2.6.2. Eclipse ................................................................................................... 63 3.- Desarrollo práctico .......................................................................................... 65 3.1. Prámbulos y configuraciones ................................................................... 65 3.1.1. Montaje del robot NXT ......................................................................... 65 3.1.2. ECRobot en Windows ........................................................................... 65 3.1.2.1. Instalación del entorno ECRobot ................................................... 65 3.1.2.2. Instalación del driver USB de Lego ................................................ 66 3.1.3. LeJOS en Linux Ubuntu ....................................................................... 66 3.1.3.1. Instalación del Java Development Kit (openJDK) ......................... 66 3.1.3.2. Instalación de libUSB ..................................................................... 66 3.1.3.3. Instalación de LeJOS NXJ ...............................................................67 3.1.3.4. Configuración del entorno de desarrollo (Eclipse) ..........................67 3.1.3.5. Instalación de ROS ......................................................................... 70 3.2. Estrategias del control cinemático ............................................................ 71 3.2.1. Punto descentralizado ........................................................................... 71 3.2.2. Persecución Pura. .................................................................................. 73
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 8 3.3. Desarrollo en ECRobot .............................................................................. 75 3.3.1. Descripción de bloques ..........................................................................76 3.3.2. Estudio de la conexión vía Bluetooth ....................................................76 3.3.2.1. Instalación y configuración del dispositivo Bluetooth ....................76 3.3.3. Ballbot ................................................................................................... 78 3.3.3.1. Descripción de la aplicación ............................................................79 3.3.3.2. Montaje del robot ............................................................................79 3.3.3.3. Desarrollo ....................................................................................... 80 3.3.3.4. Ejecución.......................................................................................... 81 3.3.3.5. Problemas encontrados y soluciones aplicadas .............................. 82 3.3.4. Seguimiento de trayectorias fijas mediante el algoritmo de persecución pura 82 3.3.4.1. Descripción de la aplicación ........................................................... 82 3.3.4.2. Metodología y desarrollo ................................................................ 83 3.3.4.3. Ejecución......................................................................................... 85 3.3.4.4. Problemas encontrados y soluciones aplicadas .............................. 86 3.4. Desarrollo en LeJOS ................................................................................. 86 3.4.1. Estudio de la conexión vía USB ............................................................ 86 3.4.2. Estudio del movimiento del robot NXT ................................................ 87 3.4.2.1. Descripción de funciones de alto nivel ........................................... 87 3.4.2.2. Gestión de la trayectoria a bajo nivel .............................................. 88 3.4.3. Gestión del tiempo de muestreo del bucle de control .......................... 88 3.4.4. Seguimiento de una trayectoria fija ...................................................... 88 3.4.4.1. Descripción de la aplicación ........................................................... 88 3.4.4.2. Metodología y desarrollo ................................................................ 88 3.4.4.3. Ejecución......................................................................................... 89 3.4.4.4. Problemas encontrados y soluciones aplicadas .............................. 90 3.4.5. Navegación a coordenadas enviadas desde el PC ................................. 90 3.4.5.1. Descripción de la aplicación ........................................................... 90 3.4.5.2. Metodología y desarrollo ................................................................ 90 3.4.5.3. Ejecución.......................................................................................... 91 3.4.5.4. Problemas encontrados y soluciones aplicadas .............................. 92 3.4.6. Navegación con visión artificial desde XBox Kinect ............................. 93 3.4.6.1. Descripción de la aplicación ........................................................... 93 3.4.6.2. Montaje del robot ........................................................................... 94 3.4.6.3. Metodología y desarrollo ................................................................ 94
9 3.4.6.4. Ejecución..........................................................................................97 3.4.6.5. Problemas encontrados y soluciones aplicadas .............................. 98 4.- Conclusiones y futuros proyectos .................................................................... 99 5.- Bibliografía..................................................................................................... 100
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 16 Los primeros robots industriales empezaron a producirse a principios de los años 60 y estaban diseñados principalmente para realizar trabajos mecánicos difíciles y peligrosos. Las áreas donde estos robots tuvieron su aplicación fueron trabajos laboriosos y repetitivos, como la carga y descarga de hornos de fundición. En 1961 el inventor norteamericano George Devol patentaba el primer robot programable de la historia, conocido como Unimate, estableciendo las bases de la robótica industrial moderna. Figura 8: Unimate Este robot industrial era un manipulador que formaba parte de una célula de trabajo en la empresa de automóviles Ford Motors Company, diseñado para levantar y apilar grandes piezas de metal caliente, de hasta 225 kg, de una troqueladora de fundición por inyección. Debido a los continuos avances en la informática y la electrónica, a partir de 1970 fueron desarrollados diversos robots programables, siendo de gran importancia en la industria mecánica, tanto en las líneas de ensamblaje como en aplicaciones como la soldadura o pintura. En los últimos años, los robots han tomado posición en todas las áreas productivas industriales. La incorporación del robot al proceso productivo ha representado uno de los avances más espectaculares de la edad moderna. En poco más de cuarenta años, se ha pasado de aquellos primeros modelos, rudos y limitados, a sofisticadas máquinas capaces de sustituir al hombre en todo tipo de tareas repetitivas o peligrosas, y además, hacerlo de forma más rápida, precisa y económica que el ser humano. Hoy en día, se calcula que el número de robots industriales instalados en el mundo es de un millón de unidades, unos 20.000 en España, siendo Japón el país más tecnológicamente avanzado, con una media de 322 robots por cada 10.000 trabajadores. 2.2. Tipos de robots No resulta sencillo hacer una clasificación de tipos de robots, puesto que ningún autor se pone de acuerdo en cuántos y cuáles son los tipos de robots y sus características esenciales.
17 2.2.1. Robots Industriales La creciente utilización de robots industriales en el proceso productivo, ha dado lugar al desarrollo de controladores industriales rápidos y potentes, basados en microprocesadores, así como un empleo de servos en bucle cerrado que permiten establecer con exactitud la posición real de los elementos del robot y su desviación o error. Esta evolución ha dado origen a una serie de tipos de robots, que se citan a continuación: 2.2.1.1. Manipuladores Son sistemas mecánicos multifuncionales, con un sencillo sistema de control, que permite gobernar el movimiento de sus elementos de los siguientes modos: Manual: Cuando el operario controla directamente la tarea del manipulador. De secuencia fija: cuando se repite, de forma invariable, el proceso de trabajo preparado previamente. De secuencia variable: Se pueden alterar algunas características de los ciclos de trabajo Existen muchas operaciones básicas que pueden ser realizadas de forma óptima mediante manipuladores. Por ello, estos dispositivos son utilizados generalmente cuando las funciones de trabajo son sencillas y repetitivas. Figura 9: Robot manipulador
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 18 2.2.1.2. Robots de repetición o aprendizaje Son manipuladores que se limitan a repetir una secuencia de movimientos, previamente ejecutada por un operador humano, haciendo uso de un controlador manual o un dispositivo auxiliar. En este tipo de robots, el operario durante la fase de enseñanza se vale de una pistola de programación con diversos pulsadores o teclas, o bien de joysticks, o bien utiliza un maniquí, o desplaza directamente la mano del robot. Actualmente, los robots de aprendizaje son los más conocidos en algunos sectores de la industria, y el tipo de programación que incorporan recibe el nombre de "gestual". Figura 10: Robot Pingüino de aprendizaje 2.2.1.3. Robots con control por computador Son manipuladores o sistemas mecánicos multifuncionales, controlados por un computador, que habitualmente suele ser un microordenador. El control por computador dispone de un lenguaje específico de programación, compuesto por varias instrucciones adaptadas al hardware del robot, con las que se puede diseñar un programa de aplicación utilizando solo el ordenador. A esta programación se le denomina “textual” y se crea sin la intervención del manipulador. Las grandes ventajas que ofrece este tipo de robots, hacen que se vayan imponiendo en el mercado rápidamente, lo que exige la preparación urgente de personal cualificado, capaz de desarrollar programas de control que permitan el manejo del robot.
19 Figura 11: Robot FANUC 2.2.2. Robots Inteligentes Son similares a los del grupo anterior, pero tienen la capacidad de poder relacionarse con el mundo que les rodea a través de sensores y de tomar decisiones en función de la información obtenida en tiempo real. De momento, son muy poco conocidos en el mercado y se encuentran en fase experimental, donde grupos de investigadores se esfuerzan por hacerlos más efectivos, al mismo tiempo que más económicamente asequibles. El reconocimiento de imágenes y algunas técnicas de inteligencia artificial son los campos que más se están estudiando para su posible aplicación en estos robots. Figura 12: Robot ASIMO de Honda
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 20 2.2.3. Micro-robots Con fines educacionales, de entretenimiento o investigación, existen numerosos robots de formación o micro-robots a un precio muy asequible, cuya estructura y funcionamiento son similares a los de aplicación industrial. Figura 13: Robot Smoovy Estos robots que un día se hicieron un hueco en universidades y centros de investigación, puesto que eran una forma económica de experimentar con múltiples tareas robóticas, hoy en día se pueden encontrar en centros docentes de todo tipo, incluidas escuelas de primaria e institutos. El personal de dichos centros ha apostado por este tipo de robots para estimular el interés de sus alumnos por la ciencia y la tecnología y los resultados son como se ha podido observar altamente satisfactorios. Figura 14: Robot LEGO
21 2.3. Robótica Móvil En el apartado anterior se ha realizado un desglose de los diferentes tipos de robots existentes atendiendo a su aplicación, pero más allá de este aspecto práctico hay otro hecho característico de los robots modernos que les confiere un mayor grado de libertad y utilidad. Esta característica es el movimiento en el espacio físico, es decir, la posibilidad de desplazarse por el entorno para observarlo e interactuar con él, y de esta forma emular con mayor fidelidad las funciones y capacidades de los seres vivos. 2.3.1. Clasificación de los robots móviles De la misma forma que se ha descrito en el apartado anterior en base a diferentes criterios se puede establecer una taxonomía dentro del colectivo de los robots móviles. Si por ejemplo se atiende a sus características estructurales y funcionales se puede establecer la siguiente clasificación: 2.3.1.1. Robots rodantes Son aquellos que, como su nombre indica, se desplazan haciendo uso de ruedas, generalmente montadas por pares en una configuración 2+2 como las de un vehículo por mera simplicidad. Habitualmente solo dos de sus ruedas presentan tracción y otras dos dirección, de forma que sea posible maniobrar el robot con un solo servomotor. Figura 15: Robot rodante dotado de 4 ruedas en configuración 2+2 También es frecuente encontrar distribuciones de ruedas montadas en modo triciclo, donde una rueda sirve para la dirección y las otras dos aportan la tracción. Otra opción es que la tercera rueda simplemente sea una rueda „loca‟ y las otras dos aporten tanto la tracción como la dirección, mediante el método de las orugas tratado más adelante.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 22 Figura 16: Robot rodante con las ruedas en configuración triciclo Existen algunos casos especiales en los que se usan otras configuraciones que dotan al robot de mejor adaptación a terrenos difíciles. En estos casos los algoritmos de control de movimiento adquieren una mayor complejidad, proporcional al número de elementos direccionables de forma independiente. Figura 17: Robot rodante de 6 ruedas con dirección independiente frontal y trasera Por último cabría considerar a los robots con orugas como un tipo de robot rodante en el que se substituyen las ruedas por un mecanismo de oruga para la tracción. La dirección se consigue parando una de las orugas o haciéndolas girar en sentido contrario.
23 Figura 18: Robot rodante dotado de orugas 2.3.1.2. Robots andantes Respecto a los robots construidos a imagen y semejanza humana, con dos piernas, las técnicas de control necesarias son varias, pero todas ellas hacen uso de compLeJOS algoritmos para poder mantener el equilibrio y caminar correctamente. Todos ellos son capaces de caminar bien sobre suelos planos y subir escaleras en algunos casos, pero no están preparados para caminar en suelos irregulares. Algunos incluso pueden realizar tareas como bailar, luchar o practicar deportes, pero esto requiere una programación sumamente compleja que no siempre está a la altura del hardware del robot y de su capacidad de procesamiento.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 24 Figura 19: Robot humanoide Robonova. 2.3.1.3. Robots reptadores Una clase curiosa de robots, creados basándose en animales como las serpientes, su forma de desplazarse es también una imitación de la usada por estos animales. Están formados por un número elevado de secciones que pueden cambiar de tamaño o posición de forma independiente de las demás pero coordinada, de forma que en conjunto provoquen el desplazamiento del robot. Figura 20: Robot reptador
25 2.3.1.4. Robots nadadores Estos robots son capaces de desenvolverse en el medio acuático, generalmente enfocados a tareas de exploración submarina en zonas donde no es posible llegar pos ser de difícil acceso o estar a profundidades que el cuerpo humano no tolera. Figura 21: Robot pez Figura 22: Robot ballena Aparte de lo puramente anecdótico, se ha demostrado que la estructura corporal de los peces así como el movimiento que realizan durante su desplazamiento en el agua, es uno de los métodos más óptimos de movimiento submarino dado que aprovecha la energía de forma muy eficiente y permite mayor control en la navegación, produciendo mucho menos ruido y turbulencias. Es por todo esto que se está tendiendo a estudiar y emular en lo posible el comportamiento de estos animales a la hora de crear nuevos robots subacuáticos.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 32 Sistemas discretos: son aquellos que realizan el control cada cierto tiempo. En la actualidad se utilizan sistemas digitales para el control, siendo el ordenador el más utilizado, por su fácil programación y versatilidad. Generalmente, el control en los robots se realiza mediante sistemas discretos en lazo cerrado, realizados por computador. El ordenador procesa la información captada por los sensores y activa los actuadores en intervalos lo más cortos posibles, del orden de milisegundos. 2.3.2.5. Alimentación Parte fundamental para garantizar la autonomía del robot, dado que al ser móvil generalmente no va a poder tener energía externa, sólo contará con las reservas internas que pueda transportar, salvo en el caso de que se usen placas solares. Son muchas y muy diversas las formas en que el robot puede almacenar y transportar energía, por lo que veremos las principales: Baterías: sin duda la forma más comúnmente utilizada como fuente de alimentación en todo tipo de robots. Son baratas, fiables y se pueden encontrar en cientos de formatos, voltajes y dimensiones. Figura 38: Diferentes tipos de baterías de uso doméstico Desde la pila de botón más pequeña y ligera para alimentar un micro robot podemos ir a pesadas pero potentes baterías de plomo usadas en vehículos pesados que necesitan un aporte importante de energía. Otro aspecto importante a tener en cuenta es el formato y el conexionado de las pilas. Habitualmente encontramos las baterías recargables tanto sueltas como en packs preparados para soldar o para conectar directamente a un PCB. La elección de un formato u otro es más relevante de lo que parece. Por ejemplo, un robot móvil todo terreno que lleve las baterías de forma individual en un porta-pilas no sería nada extraño que con el movimiento alguna pila dejase de hacer contacto o incluso se saliera de su sitio. Y en el otro extremo, si las pilas estuvieran soldadas habría serios problemas para reemplazarlas con facilidad, por no
33 hablar de la dependencia a la hora de cargarlas que deberá ser realizado exclusivamente en el robot, teniendo que añadir los mecanismos necesarios para ello. Parece por tanto que lo más adecuado es usar pilas en packs con conectores, que son las que mayor flexibilidad aportan. Figura 39: Diferentes tipos de baterías Si el presupuesto no es un problema se pueden usar tecnologías más avanzadas como las baterías de ion de litio que últimamente están sufriendo una gran expansión gracias a tecnologías móviles de otra índoles como ordenadores portátiles y teléfonos móviles. Figura 40: Amplio surtido de baterías de Ion de Litio La diferencia de rendimiento de unos tipos de pilas respecto a otros es notable, así como su tamaño y precio, por lo tanto es importante tener claros los requerimientos del robot respecto a estos aspectos antes de decidir qué tipo de batería se va a utilizar para alimentarlo.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 34 Figura 41: Gráfico comparativo del rendimiento de diferentes tipos de baterías Bombonas de aire: usadas tanto para el movimiento de actuadores neumáticos como para la propulsión de motores de aire. Este tipo de motores tiene una larga historia, pese a que su difusión es reducida. Su principio es equivalente al de los motores de explosión, con la salvedad que en lugar de producir la combustión de gasolina y oxígeno para generar los gases que impulsan los pistones, se usa directamente aire almacenado en un depósito a alta presión. Figura 42: Diferentes tipos de bombonas de aire comprimido Baterías inerciales: este curioso mecanismo tampoco tiene una difusión amplia en el terreno de los robots móviles, pero si tiene aplicación e entornos donde la alimentación es crítica, como centros de proceso de datos. Fue probada en vehículos durante sus albores, concretamente en autobuses urbanos de Zúrich durante los años 50 y algunas locomotoras de tren durante los 70, pero no se ha extendido su uso de forma masiva.
35 El principio de funcionamiento es sencillo: se acelera un rotor (habitualmente mediante electricidad) confiriéndole así una elevada energía rotacional, típicamente de varias decenas de miles de rpm. Posteriormente se decelera poco a poco, recuperando así la energía eléctrica de nuevo. Figura 43: Sección de una batería inercial La clave del aprovechamiento energético, que oscila entre el 90% y el 98%, consiste en reducir al máximo el rozamiento. Esto se consigue mediante usando un rotor de carbono (que presenta menos resistencia que el acero) estabilizado magnéticamente en un entorno controlado, generalmente un contenedor sellado tras realizarle el vacío. Células de hidrogeno: Otra tecnología emergente que poco a poco está demostrando su validez son las baterías formadas a base de células que usan el hidrógeno como combustible para producir electricidad. Su funcionamiento se basa en una reacción química al igual que en las baterías tradicionales pero a diferencia de ellas, aquí no se producen cambios de estado en los electrodos o en los reactantes. Simplemente se consumen los reactantes y la reacción se produce prácticamente de forma indefinida mientras haya suficiente combustible para sustentar el proceso. Figura 44: Célula de hidrógeno Las principales ventajas son su elevado rendimiento así como su larga vida, que va asociada a la práctica ausencia de mantenimiento que necesitan. En contraposición el
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 36 combustible a día de hoy todavía es relativamente caro y difícil de conseguir aunque esta situación mejorará cuando haya una mayor demanda de estas células. Biomasa: Una fuente de energía muy interesante y que aun se encuentra por explotar. Pequeñas cantidades de basura orgánica permitirían alimentar durante horas un dispositivo dotado de esta tecnología. A parte del ahorro económico que supone, tiene especial interés en zonas sin acceso directo a fuentes de energía o en momentos de conflicto militar donde frecuentemente escasean los suministros energéticos. Figura 45: Caldera de biomasa. Células nucleares: Se basan en las emisiones de un isótopo radioactivo para obtener energía. Hay diversas técnicas para realizar la conversión de las radiaciones en energía eléctrica aprovechable, pero el resultado es el mismo. Poseen una larga vida útil pero su peligrosidad desaconseja su uso. Motor de combustión: El más conocido entre los sistemas de propulsión. Se usan motores muy similares a los de los vehículos, sobre todo los que llevan las motocicletas. Como combustible una mezcla de aceite y gasolina u otros elementos volátiles como el etanol. Se pueden utilizar tanto para obtener energía mecánica como energía eléctrica si añadimos un generador. 2.3.2.6. Comunicaciones Dado que este es uno de los aspectos sobre los que versan las experiencias realizadas en este proyecto, se le dedicara el apartado siguiente a este tema, de forma que se traten en profundidad las características más relevantes: 2.3.2.6.1. USB El Universal Serial Bus (bus universal en serie) o Conductor Universal en Serie (CUS), abreviado comúnmente USB, es un puerto de comunicación de periféricos a un computador. Fue creado en 1996 con la finalidad de eliminar la necesidad de adquirir tarjetas separadas para poner en los puertos de bus ISA o PCI y mejorar las capacidades plug-and-play permitiendo a esos dispositivos ser conectados o desconectados sin necesidad de reiniciar el sistema. Sin embargo, en aplicaciones donde se necesita ancho de banda para grandes transferencias de datos los buses PCI o PCIe salen ganando e igual sucede si la aplicación requiere robustez industrial.
37 Se pueden clasificar en cuatro tipos según su velocidad de transferencia de datos: - Baja velocidad (1.0): Tasa de transferencia de hasta 1,5 Mbps (192KB/s). Utilizado en su mayor parte por dispositivos de interfaz humana como los teclados, ratones e incluso artículos del hogar. - Velocidad completa (1.1): Tasa de transferencia de hasta 12Mbps (1,5MB/s), según el estándar, pero se dice en fuentes independientes que habría que realizar nuevamente las mediciones. - Alta velocidad (2.0): Tasa de transferencia de hasta 480 Mbps (60MB/s) pero por lo general de hasta 125Mbps (16MB/s). Está presente casi en el 99% de los ordenadores actuales. El cable USB 2.0 dispone de cuatro líneas, una para datos, una para corriente y otra de toma de tierra. - Super alta velocidad (3.0): Actualmente se encuentra en fase experimental y tiene una tasa de transferencia de hasta 4.8 Gbps (600MB/s). Esta especificación será diez veces más veloz que la anterior 2.0 y prevé su lanzamiento a corto plazo. Se han incluido cinco conectores extra, desechando el conector de fibra óptica propuesto inicialmente y será compatible con los estándares anteriores. Figura 46: Prototipo de USB 3.0 2.4. Comunicaciones inalámbricas 2.4.1. Wifi WLAN (Wireless Local Area Network, en inglés) es un sistema de comunicación de datos inalámbrico flexible, muy utilizado como alternativa a las redes LAN cableadas o como extensión de éstas. Utiliza tecnología de radiofrecuencia que permite mayor movilidad a los usuarios al minimizar las conexiones cableadas. Las WLAN van adquiriendo importancia en muchos campos, como almacenes o para manufactura, en los que se transmite la información en tiempo real a una terminal central. También son muy populares en los hogares para compartir el acceso a Internet entre varias computadoras.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 38 Características Movilidad: permite transmitir información en tiempo real en cualquier lugar de la organización o empresa a cualquier usuario. Esto supone mayor productividad y posibilidades de servicio. Facilidad de instalación: al no usar cables, se evitan obras para tirar cable por muros y techos, mejorando así el aspecto y la habitabilidad de los locales, y reduciendo el tiempo de instalación. También permite el acceso instantáneo a usuarios temporales de la red. Flexibilidad: puede llegar donde el cable no puede, superando mayor número de obstáculos, llegando a atravesar paredes. Así, es útil en zonas donde el cableado no es posible o es muy costoso: parques naturales, reservas o zonas escarpadas. Inicios Los pioneros en el uso de redes inalámbricas han sido los radioaficionados mediante sus emisoras, que ofrecen una velocidad de 9600 bps. Pero si hablamos propiamente de redes inalámbricas debemos remontarnos al año 1997, en el que el organismo regulador IEEE (Institute of Electronics and Electrical Engineer) publicó el estándar 802.11 (802 hace referencia al grupo de documentos que describen las características de las LAN) dedicado a redes LAN inalámbricas. Dentro de este mismo campo y anteriormente, en el año 1995, tenemos la aparición de Bluetooth, una tecnología de Ericsson con el objetivo de conectar mediante ondas de radio los teléfonos móviles con diversos accesorios. Al poco tiempo se generó un grupo de estudio formado por fabricantes que estaban interesados en esta tecnología para aplicarla a otros dispositivos, como PDAs, terminales móviles o incluso electrodomésticos. Pero el verdadero desarrollo de este tipo de redes surgió a partir de que la FCC, el organismo americano encargado de regular las emisiones radioeléctricas, aprobó el uso civil de la tecnología de transmisiones de espectro disperso (SS o spread spectrum, en inglés), pese a que en un principio lo prohibió por el uso ampliado del espectro. Dicha tecnología ya se usaba en ámbitos militares desde la Segunda Guerra Mundial debido a sus extraordinarias características en cuanto a la dificultad de su detección y su tolerancia a interferencias externas. A pesar, de que como hemos visto, esta tecnología ya tiene una antigüedad de más de diez años, no ha sido hasta ahora cuando este tipo de redes se ha desarrollado eficazmente debido a la disminución de precios de los dispositivos que la integran. En la actualidad cada vez más se encuentran equipos que pueden competir en precios con los modelos para redes cableadas. Cómo trabajan las redes WLAN Se utilizan ondas de radio para llevar la información de un punto a otro sin necesidad de un medio físico guiado. Al hablar de ondas de radio nos referimos
39 normalmente a portadoras de radio, sobre las que va la información, ya que realizan la función de llevar la energía a un receptor remoto. Los datos a transmitir se superponen a la portadora de radio y de este modo pueden ser extraídos exactamente en el receptor final. A este proceso se le llama modulación de la portadora por la información que está siendo transmitida. Si las ondas son transmitidas a distintas frecuencias de radio, varias portadoras pueden existir en igual tiempo y espacio sin interferir entre ellas. Para extraer los datos el receptor se sitúa en una determinada frecuencia, frecuencia portadora, ignorando el resto. En una configuración típica de LAN sin cable los puntos de acceso (transceiver) conectan la red cableada de un lugar fijo mediante cableado normalizado. El punto de acceso recibe la información, la almacena y la transmite entre la WLAN y la LAN cableada. Un único punto de acceso puede soportar un pequeño grupo de usuarios y puede funcionar en un rango de al menos treinta metros y hasta varios cientos. El punto de acceso (o la antena conectada al punto de acceso) es normalmente colocado en alto pero podría colocarse en cualquier lugar en que se obtenga la cobertura de radio deseada. El usuario final accede a la red WLAN a través de adaptadores. Estos proporcionan una interfaz entre el sistema de operación de red del cliente y las ondas, mediante una antena. La naturaleza de la conexión sin cable es transparente a la capa del cliente. Configuraciones de red para radiofrecuencia Pueden ser de muy diversos tipos y tan simples o complejas como sea necesario. La más básica se da entre dos ordenadores equipados con tarjetas adaptadoras para WLAN, de modo que pueden poner en funcionamiento una red independiente siempre que estén dentro del área que cubre cada uno. Esto es llamado red de igual a igual (peer to peer). Cada cliente tendría únicamente acceso a los recursos del otro cliente pero no a un servidor central. Este tipo de redes no requiere administración o preconfiguración. Instalando un Punto de Acceso se puede doblar la distancia a la cual los dispositivos pueden comunicarse, ya que estos actúan como repetidores. Desde que el punto de acceso se conecta a la red cableada cualquier cliente tiene acceso a los recursos del servidor y además gestionan el tráfico de la red entre los terminales más próximos. Cada punto de acceso puede servir a varias máquinas, según el tipo y el número de transmisiones que tienen lugar. Existen muchas aplicaciones en el mundo real con un rango de 15 a 50 dispositivos cliente con un solo punto de acceso. Los puntos de acceso tienen un alcance finito, del orden de 150 m en lugares u zonas abiertas. En zonas grandes como por ejemplo un campus universitario o un edificio es probablemente necesario más de un punto de acceso. La meta es cubrir el área con células que solapen sus áreas de modo que los clientes puedan moverse sin cortes entre un grupo de puntos de acceso. Esto es llamado roaming, mediante el cual el diseñador de la red puede elegir usar un Punto de Extensión (EPs) para aumentar el número de puntos de acceso a la red, de modo que funcionan como tales pero no están enganchados a la red cableada como los puntos de acceso.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 40 Los puntos de extensión funcionan como su nombre indica: extienden el alcance de la red retransmitiendo las señales de un cliente a un punto de acceso o a otro punto de extensión. Los puntos de extensión pueden encadenarse para pasar mensajes entre un punto de acceso y clientes lejanos de modo que se construye un puente entre ambos. Uno de los últimos componentes a considerar en el equipo de una WLAN es la antena direccional. Por ejemplo: si se quiere una LAN sin cable a otro edificio a 1 km de distancia. Una solución puede ser instalar una antena en cada edificio con línea de visión directa. La antena del primer edificio está conectada a la red cableada mediante un punto de acceso. Igualmente en el segundo edificio se conecta un punto de acceso, lo cual permite una conexión sin cable en esta aplicación. Asignación de Canales Los estándares 802.11b y 802.11g utilizan la banda de 2.4 – 2.5 Ghz. En esta banda, se definieron 11 canales utilizables por equipos WIFI, los que pueden configurarse de acuerdo a necesidades particulares. Sin embargo, los 11 canales no son completamente independientes (canales contiguos se superponen y se producen interferencias) y en la práctica sólo se pueden utilizar 3 canales en forma simultánea (1, 6 y 11). Esto es correcto para USA y muchos países de América Latina, pues en Europa, el ETSI ha definido 13 canales. En este caso, por ejemplo en España, se pueden utilizar 4 canales no-adyacentes (1, 5, 9 y 13). Esta asignación de canales usualmente se hace sólo en el Access Point, pues los “clientes” automáticamente detectan el canal, salvo en los casos en que se forma una red “Ad-Hoc” o punto a punto cuando no existe Access Point. Seguridad Uno de los problemas de este tipo de redes es precisamente la seguridad ya que cualquier persona con una terminal inalámbrica podría comunicarse con un punto de acceso privado si no se disponen de las medidas de seguridad adecuadas. Dichas medidas van encaminadas en dos sentidos: por una parte está el cifrado de los datos que se transmiten y en otro plano, pero igualmente importante, se considera la autenticación entre los diversos usuarios de la red. En el caso del cifrado se están realizando diversas investigaciones ya que los sistemas considerados inicialmente se han conseguido descifrar. Para la autenticación se ha tomado como base el protocolo de verificación EAP (Extesible Authentication Protocol), que es bastante flexible y permite el uso de diferentes algoritmos. 2.4.2. Bluetooth Bluetooth proviene de la palabra escandinava “Blåtand” que significa “hombre de tez oscura” pero en los tiempos que corren el significado original se ha perdido y ahora se asocia a las comunicaciones inalámbricas, un estándar global que posibilita la transmisión de voz, imágenes y en general datos entre diferentes dispositivos en un radio de corto alcance y lo que le hace más atractivo, muy bajo coste. Los principales objetivos que este estándar quiere lograr son: Facilitar las comunicaciones entre equipos.
41 Eliminar cables y conectores entre aquéllos. Facilitar el intercambio de datos entre los equipos. Bluetooth funciona bajo radio frecuencias pudiendo atravesar diferentes obstáculos para llegar a los dispositivos que tenga a su alcance. Opera bajo la franja de frecuencias 2.4 – 2.48 GHz o como también es conocida como “Banda ISM” que significa “Industrial, Scientific and Medical” que es una banda libre para usada para investigar por los tres organismos anteriores. Pero esto tiene sus consecuencias, ya que al ser libre puede ser utilizada por cualquiera y para ello, para evitar las múltiples interferencias que se pudieran introducir (microondas, WLANs, mandos, etc.) Bluetooth utiliza una técnica denominada salto de frecuencias. El funcionamiento es ir cambiando de frecuencia y mantenerse en cada una un “slot” de tiempo para después volver a saltar a otra diferente. Es conocido que entre salto y salto el tiempo que transcurre es muy pequeño, concretamente unos 625 microsegundos con lo que al cabo de un segundo se puede haber cambiado 1600 veces de frecuencia. Cuando coinciden más de un dispositivo bluetooth en un mismo canal de transmisión se forma lo que se llaman “piconets” que son redes donde hay un maestro que es el que gestiona la comunicación de la red y establece su reloj y unos esclavos que escuchan al maestro y sincronizan su reloj con el del maestro. Dicho alcance puede variar según la potencia a la que se transmite (a mayor potencia mayor consumo y menor autonomía para el dispositivo) y el número de repetidores que haya por el medio. Así el alcance puede estar entre los 10 y 100 metros de distancia (los repetidores provocan la introducción de distorsión que puede perjudicar los datos transmitidos). Bluetooth puede conectar muchos tipos de aparatos sin necesidad de un solo cable, aportando una mayor libertad de movimiento. Por esta razón ya se ha convertido en una norma común mundial para la conexión inalámbrica. En el futuro, es probable que sea una norma utilizada en millones de teléfonos móviles, PC, ordenadores portátiles y varios tipos de aparatos electrónicos, como por ejemplo: Domótica (activación de alarmas, subida de persianas, etc.). Sector automovilístico (comunicación con otros vehículos). Medios de pago. En una comunicación Bluetooth se pueden alcanzar tasas de transmisión de datos de 720 kbps (1 Mbps de capacidad bruta) con un rango óptimo de 10 metros (como se ha comentado antes 100 metros con repetidores).
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 48 Futuro Se espera que los módulos ZigBee sean los transmisores inalámbricos más baratos de la historia, y además producidos de forma masiva. Tendrán un coste aproximado de alrededor de los 6 euros, y dispondrán de una antena integrada, control de frecuencia y una pequeña batería. Ofrecerán una solución tan económica porque la radio se puede fabricar con muchos menos circuitos analógicos de los que se necesitan habitualmente. 2.4.3.2. Infrarrojos Muy extendido y popular en aparatos electrónicos de pequeño alcance como mandos a distancia o periféricos inalámbricos de ordenador. Se basa en un principio sencillo, modular los datos que transmite en trenes de pulsos de diferente longitud y duración. Es el mismo principio que se usa en el código morse para transmitir letras del alfabeto. Utiliza generalmente para la emisión diodos LED que emiten en el espectro infrarrojo que resulta invisible para el ojo humano. Para la recepción se usaron en primer lugar fotodiodos u otro tipo de componentes pasivos que fueran capaces de reaccionar ante la luz recibida y que han sido cambiados recientemente por circuitos integrados que incorporan algún componente sensible a la luz como fototransistores o los mismo fotodiodos pero que además incluyen toda la electrónica necesaria para procesar las señales recibidas, simplificando en gran medida los componentes adicionales necesarios para montar un circuito receptor de este tipo de señal. Su ventaja como hemos visto, es su sencillez y amplia difusión, añadida al hecho de que los componentes necesarios para su uso son realmente económicos. Su principal desventaja es su alcance, que sin complejos juegos de lentes difícilmente llega a la decena de metros y más importante aún, la necesidad de tener una línea visual directa y despejada de objetos opacos entre emisor y receptor. Esta problemática hace este método de comunicaciones poco adecuado para su uso con robots móviles, que con mucha facilidad pueden dejar de cumplir los requisitos de visibilidad emisor-receptor comentado. Pese a esto, ha sido utilizado en algunos robots comerciales, como es el caso del predecesor del LEGO Minstorms NXT, el modelo RCX. 2.5. LEGO NXT De todos es sabido el largo camino que lleva recorrido la firma Lego en lo que se conoce como „construcciones‟, es decir, juguetes dirigidos a un público generalmente infantil o adolescente. Esta andadura empezó en el año 1934 en Dinamarca y con el tiempo fue cobrando popularidad entre padres, hijos y sobretodo educadores que veían en estos juguetes una forma muy interesante de divertir y a la vez potenciar la creatividad de sus hijos y alumnos.
49 La oferta de juguetes va desde los pocos meses de edad hasta la adolescencia e incluso un poco más allá, contando con temáticas urbanas, submarinas e incluso espaciales. Entre todas estas líneas cabe destacar una que desde el principio ha contado ha despertado la curiosidad de determinado sector de público, en el que podían englobarse ingenieros y apasionados de la técnica. Hablamos de la denominada línea Technic. La principal característica de esta gama de juguetes y la que sin duda la ha hecho tan famosa, es el peculiar enfoque de construcción que ha concebido Lego con ella. Este enfoque se aparta del juguete tradicional y experimenta con elementos propios de la tecnología actual, tanto en mecánica como en electrónica. Así, entre las piezas de estos „kits‟ se encuentran engranajes, ejes, motores eléctricos, cables y hasta elementos tan concretos como levas y pistones, juntas cardan y amortiguadores. Figura 47: De izquierda a derecha, engranaje, junta cardan, motor y cable de LEGO Con estos elementos se emula a la perfección la realidad y se permite construir representaciones a escala de vehículos y sistemas con mecanismos a imagen y semejanza de sus modelos reales, teniendo incluso un funcionamiento análogo o lo más aproximado posible, a como lo hacen dichos dispositivos en la realidad. Figura 48: Diferentes modelos de la línea LEGO Technic Sin embargo, los tiempos en que los juguetes tradicionales, y en especial las construcciones, reinaban entre sus potenciales consumidores están tocando a su fin de la mano de la revolución tecnológica. De esta forma han sido prácticamente desbancados por dispositivos con silicio en sus entrañas, como consolas, ordenadores y
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 50 demás parafernalia electrónica. LEGO por lo tanto, siguiendo el ejemplo de sus clientes, no se ha conformado con ésta aproximación a la tecnología moderna de finales de siglo, en su día revolucionaria, sino que como mandan los tiempos ha decidido ir más allá. 2.5.1. Ladrillo NXT Tradicionalmente la línea Technic de LEGO ha hecho sus incursiones en el campo de la tecnología electrónica, añadiendo a su oferta de luces, motores, baterías y mandos con hilos que pese al atractivo que ofrecían en si día, han quedado atrás frente a los elementos de última tecnología que a día de hoy copan el mercado de la electrónica de consumo. Por ello, LEGO ha tomado el testigo tecnológico incorporando lo que ha venido a llamarse como „bricks‟ o „ladrillos‟ inteligentes a varias de sus líneas de productos. Figura 49: De izquierda a derecha versiones RCX y NXT del ladrillo de control Estos „ladrillos‟, proveen de una unidad de control para robots o sistemas electrónicos avanzados que permite implementar escenarios hasta el momento impensables en un juego de construcciones, incluso los de la línea Technic de la propia marca. Su corazón está formado por un microcontrolador o procesador, que en sus últimas versiones ha alcanzado grados de potencia sorprendentes si pensamos en ellos como en un juguete. Por ello, cada vez más personas se han interesado en estos sistemas, no sólo para la docencia o el ocio, sino incluso para la investigación. Prácticamente todas las universidades a nivel mundial poseen ya kits de LEGO con estos bricks inteligentes y se usan en las ramas de la enseñanza y investigación como las relacionadas con la robótica o la mecatrónica. El modelo usado en la realización de las experiencias que comprende este trabajo es el último disponible en el mercado, el Mindstorms NXT. Este está formado por un kit que incluye: el brick NXT, múltiples sensores (luz/color, ultrasonidos, contacto, sonido) motores y cableado eléctrico, y el set de construcción habitual de la línea Technic, formado por miles de piezas de construcción, engranajes, ejes correas y poleas. A continuación una lista de las características electrónicas del brick NXT, extraídas del manual de LEGO:
51 Procesador principal: Atmel® 32-bit ARM® processor, AT91SAM7S256 - 256 KB FLASH - 64 KB RAM - 48 MHz Co-procesador: Atmel® 8-bit AVR processor, ATmega48 - 4 KB FLASH - 512 Byte RAM - 8 MHz Unidad de comunicaciones Bluetooth CSR BlueCoreTM 4 v2.0 + EDR System - Soporte de Serial Port Profile (SPP) - 47 KByte RAM Internos - 8 MBit FLASH Externos - 26 MHz Comunicación vía USB 2.0 (12 Mbit/s) 4 puertos de entrada con interfaz de 6 hilos y soporte para conexiones AD y DA - 1 puerto de alta velocidad, IEC 61158 Tipo 4/EN 50170 compatible - todos los puertos de entrada cuentan con soporte del bus I²C 3 puertos de salida con interfaz de 6 hilos y soporte para lectura desde encoders Conectores de 6 hilos estándar industrial, RJ12 con ajuste a derechas Display grafico LCD de 100 x 64 píxel (blanco y negro) - Área de visión de 26 x 40.6 mm Altavoz de salida con resolución de 8-bit - Soporta tasas de muestreo de 2 a 16 KHz 4 botones de goma para interacción con el usuario Alimentación: 6 pilas de tipo AA - Se recomienda usar pilas alcalinas - También se encuentra disponible una batería de Ion de Litio de 1400 mAH - Cargador opcional disponible para la batería anterior 2.5.2. Motores La gama de motores de que consta la línea LEGO Technic es bastante elevada, contando entre sus filas con aproximadamente 13 modelos diferentes. Estos motores van desde los pequeños micromotores hasta la joya de la corona de esta familia que no es otro que el motor incluido en el set del NXT. Este motor posee unas características muy buenas en cuanto a respuesta y rendimiento y cuenta asimismo con un juego de engranajes reductores y un encoder rotacional en su interior.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 52 Figura 50: Motor de LEGO incluido en el set NXT El juego de engranajes reductores garantiza un par de fuerza elevado para el motor, lo que se traduce en la capacidad de realizar un esfuerzo mayor sin la necesidad de elementos externos como era necesario en modelos anteriores, y más importante aún, impidiendo el sobreesfuerzo del motor y la consecuente reducción de su vida útil. EL encoder o tacómetro, por su parte, permite conocer el número de vueltas que ha dado el eje del motor con una precisión de 1 grado. Es decir, si el motor realiza un giro completo el encoder verá incrementada su cuenta en 360 unidades. Esto es cierto sea cual sea el sentido de movimiento del motor, incrementándose en un sentido y decrementándose al girar en sentido contrario. 2.5.3. Sensores En este apartado se realiza un repaso por el conjunto de sensores disponibles para el LEGO Mindstorms NXT, tanto los de marca propia de LEGO como aquellos ensamblados y distribuidos por terceros pero que son plenamente compatibles con la plataforma NXT. 2.5.3.1. Fabricados por LEGO Son cuatro los sensores incluidos en el kit de LEGO Mindstorms NXT: Bumper: detecta la presión realizada sobre la punta del sensor. Útil para detectar colisiones, presencia de objetos o como mecanismo final de carrera. Sonido: consta de un pequeño micrófono capaz de captar sonidos. Luz/Color: este sensor cumple una doble función, es capaz de detectar la presencia de luz en un entorno y a su vez es capaz de identificar un pequeño rango de colores de los objetos que „ve‟. Ultrasonidos: permite detectar la presencia de objetos a una cierta distancia. Útil en las mismas situaciones que el bumper pero sin llegar al contacto.
53 Figura 51: Ladrillo NXT con todos sus sensores y motores conectados 2.5.3.2. Fabricados por terceros Fabricantes como Hi-Technic comercializan sensores compatibles con el NXT, de entre los cuales destacamos los siguientes: Brújula: permite conocer la orientación del robot respecto al norte magnético. Acelerómetro: detecta aceleración en tres ejes y giro en uno. Seguidor de infrarrojos: es capaz de detectar el haz de un emisor en un ángulo de 135º, indicando así mismo la dirección desde la que proviene el haz de luz. Figura 52: (De derecha a izquierda) Brújula, acelerómetro y seguidor de infrarrojos. 2.5.3.3. Personalizados Es posible crear sensores propios y personalizados compatibles con el bus I2C. 2.5.4. Comunicaciones El LEGO MINDSTORMS NXT ha supuesto una mejora muy importante respecto a su predecesor RCX en el apartado de comunicaciones. Este cambio se debe a que se ha
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 54 desechado el rudimentario interfaz de comunicaciones infrarrojo y se ha adoptado el nuevo estándar Bluetooth que abre un nuevo mundo de posibilidades. Los aspectos más relevantes de sistema adoptado se tratan a continuación. 2.5.4.1. Capas del sistema de comunicación La siguiente figura muestra las principales capas de la pila de comunicación entre el dispositivo empotrado y el software que se encuentra en el PC. Como se puede comprobar, se puede establecer una comunicación full dúplex entre el PC y el NXT usando o no comunicaciones cableadas. Destaca la capacidad del NXT de usar el protocolo SPP que permite comunicarse vía Bluetooth como si de un puerto serie se tratase. Figura 53: Diagrama de bloques de la comunicación PC-NXT El firmware que lleva el NXT permite acceder al protocolo de comunicación con el NXT escribiendo o leyendo información en “crudo” o utilizando el protocolo establecido que posteriormente se explicará. La desventaja que se tiene si no se utiliza el protocolo es que es imposible comprobar la información enviada o recibida en el buffer, por lo que se requiere un cierto control a bajo nivel de las tramas enviadas. Estudios realizados durante el desarrollo han demostrado que dicha comunicación tiene ciertas desventajas cuando se comienza a transmitir ráfagas de información, ya sea porque son demasiado largas y el tiempo entre la recepción de un paquete a otro es demasiado pequeño o por el retardo que se genera cuando se cambia de modo recepción de información a modo de transmisión de información. Para evitar en la medida de lo posible de la longitud de los paquetes a enviar una solución que se ha implementado es añadir al paquete que se envía el tamaño que ocupa el paquete a enviar al comienzo del paquete.
55 Para mejorar el retardo que es causado por el cambio de modo de comunicación se ha añadido la posibilidad de enviar comandos directos sin necesitad de reconocimiento, es decir, no se asegura que lo que se envíe al NXT sea procesado correctamente a causa de cualquier tipo de error. Con eso se evita el cambio de modo de transmisión y los 30 ms que antes afectaban, ahora no se producen. El formato de los paquetes que se envían en ambas direcciones tiene la forma que muestra la figura. Figura 54: Formato de trama en NXT Se pueden distinguir, como se observa en la figura, cuatro partes que proporcionan información cuando una trama llega a su destino: Bytes 0 y 1: Indican el tamaño que tiene el paquete enviado, en dicho tamaño no se contemplan esos dos bytes de información. Byte3: Tipo de comando. Existen dos tipos de comandos, los comandos directos y los comandos de sistema. Estos a su vez pueden ser con contestación de estado o sin contestación 0x00 Comando directo con respuesta. 0x80 Comando directo sin respuesta. 0x01 Comando de sistema con respuesta. 0x81 Comando de sistema sin respuesta. 0x02 Indica que el paquete recibido es la respuesta a otro paquete. Byte 4: Comando específico. Dentro de los dos tipos posibles hay comandos que tienen un código específico para realizar diferentes funciones dentro del ladrillo NXT. Bytes 5 a N: Se utiliza para información adicional del comando específico, cada comando tiene un formato que difiere del resto. En lo que concierne a los paquetes de respuesta el formato que siguen es el que se muestra a continuación: Byte 2 Siempre vale lo mismo y es 0x02 para indicar respuesta. Byte 3 Estado de la respuesta. Este valor puede variar según estos valores. 0x00 Éxito 0x81 Sin manejadores 0x82 Sin espacio 0x83 No hay más ficheros 0x84 Se esperaba final de fichero 0x85 Final de fichero 0x86 No es un fichero lineal 0x87 Fichero no encontrado
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 56 0x88 Todos los manejadores están cerrados 0x89 Sin espacio lineal 0x8A Error desconocido 0x8B El fichero está ocupado 0x8C No hay buffers de escritura 0x8D No se puede añadir 0x8E El fichero está lleno 0x8F El fichero existe 0x90 Módulo no encontrado 0x91 Fuera del límite 0x92 Nombre incorrecto de fichero 0x93 Manejador ilegal 2.5.4.2. Comandos dentro del protocolo de comunicación En el siguiente apartado se describirá la arquitectura del protocolo de comunicación del NXT. Esta capa está situada debajo de los puertos de comunicación tanto del de USB como del de Bluetooth ya que será la que maneje la información que será intermediada dentro de las capas de comunicación USB y Bluetooth. En cada una de las capas que forman la pila del protocolo se comprueban los errores y la configuración de los paquetes a enviar tanto para USB como para Bluetooth. Dejando a un lado las características físicas del protocolo se va a abordar los posibles ficheros que la nueva comunicación del NXT es capaz de manejar. Se pueden agrupar los tipos de ficheros en: Descargas o De firmware. o De programas definidos por el usuario. o De programas generados por una aplicación externa (pe. RobotC) o Programas de prueba (ficheros pre-programados). o Sonidos y gráficos. Subidas o De programas. o De gráficos y sonidos. o De información de las salidas de los programas (logs). Borrados de información en el brick o Sonidos, gráficos.
57 o De programas definidos por el usuario. o Programas de prueba (ficheros pre-programados). o De programas generados por una aplicación externa (pe. RobotC). o Ficheros de salida de los programas (logs). Comandos de comunicación con el NXT o Obtener la lista de ficheros dentro del NXT. o Comandos dirigidos a la máquina virtual (VM). o Mensajes de comunicación con los buzones (buffers donde se almacena la información de salida y entrada de NXT). o Datos directos desde el puerto de alta velocidad. 2.5.5. Software El éxito de la programación de los bricks del NXT ha dado lugar a la implementación de diferentes lenguajes para desarrollar aplicaciones que controlen los sensores, los motores, las comunicaciones… en definitiva, a un gran abanico de posibilidades según sea el lenguaje preferido para el programador. Tanto es así que al poder acceder al código del firmware al ser de libre distribución se puede adaptar a diferentes Sistemas Operativos. De hecho, existe una versión para Linux que posibilita la programación de estos robots móviles sin tener que abandonar su querido entorno de trabajo habitual. En los siguientes puntos se van a citar una serie de lenguajes para compararlos entre sí y ver para qué funciones un lenguaje ofrece más facilidades y rapidez que otros. 2.5.5.1. nxtOSEK nxtOSEK es un sistema operativo en tiempo real y de código abierto para NXT. Esta plataforma ofrece: Entorno de programación ANSI C / C++, usando el conjunto de herramientas GCC; con API (Interfaz de Programación de Aplicaciones) en C y C++ para los sensores de NXT oficiales y fabricados por terceros, así como para los servomotores. TOPPERS/ATK: kernel que ofrece características multitarea y en tiempo real. Ejecución rápida y menos consumo de memoria. nxtOSEK se ejecuta de manera nativa en el ARM7 y por sí sólo consume únicamente 10Kbytes
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 64 Un punto muy importante a notar son los diversos lenguajes de programación utilizados en el desarrollo del proyecto, de acuerdo al análisis realizado usando SLOCCount, el lenguaje más utilizado es Java, seguido de ANSI C. Lenguajes de programación utilizados en Eclipse 3.2.1 Lenguaje Líneas de código % Java 1,911,693 92.66 % ANSI C 133,263 6.46% C++ 10,082 0.49% JSP 3,613 0.18% sh 2,066 0.10% perl 1,468 0.07% php 896 0.04% sed 2 0.00% Figura 59: Lenguajes utilizados con Eclipse. Actualmente Eclipse continúa en desarrollo y su última versión es Juno, la número 4.2, que salió en junio de 2012.
65 3.- Desarrollo práctico Una vez expuestas las bases teóricas necesarias para el desarrollo de nuestros objetivos, se continúa con la descripción de la parte práctica del proyecto. Esta parte está dividida en dos. En la primera utilizaremos el entorno ECRobot en Windows con el firmware nxtOSEK y en la segunda utilizaremos LeJOS en Linux Ubuntu. 3.1. Prámbulos y configuraciones 3.1.1. Montaje del robot NXT Siguiendo el guión de las finalidades de este proyecto, el montaje del robot NXT no puede ser de cualquier manera. Se necesita que cumpla unas necesidades de movilidad, de tracción y de dirección. De las opciones planteadas en la parte teórica, se opta por la forma de triciclo: dos ruedas motrices que controlan tracción y dirección al mismo tiempo con un mecanismo diferencial y una rueda trasera más pequeña y libre. 3.1.2. ECRobot en Windows Como ya se ha comentado en el apartado teórico, la librería ECRobot se utiliza en el entorno Simulink de MATLAB. MATLAB es un software de pago, por lo que tendremos que adquirir una licencia individual o de estudiante en la web del propietario http://www.mathworks.es/products/matlab, donde también se puede conseguir una versión de prueba por 30 días. Se requiere una versión de 32 bits a partir de la R2007.a. En este caso se ha usado la versión R2009.b del producto. Una vez conseguido e instalado podemos pasar a la configuración del entorno. 3.1.2.1. Instalación del entorno ECRobot Para que este proceso no se nos haga engorroso y tengamos que ir paso a paso, existe el proyecto ECRobotInstaller que se puede descargar desde http://www.mathworks.com/matlabcentral/fileexchange/25207. Es básicamente una recopilación de scripts para MATLAB que nos descargar e instalan automáticamente tanto las dependencias como el entorno y el firmware del NXT. En el mismo archivo descargado tenemos las instrucciones para realizarlo correctamente.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 66 3.1.2.2. Instalación del driver USB de Lego El propio ECRobotInstaller nos descarga e instala el driver Lego para Windows, pero, además, también es interesante descargar e instalar desde http://mindstorms.lego.com/en-us/support/files/default.aspx#Driver el driver Fantom de Lego Mindstorms NXT, gracias al que podremos comunicarnos con el robot desde nuestros propios programas escritos en C. 3.1.3. LeJOS en Linux Ubuntu Antes de empezar hay que señalar que en todo momento, tanto para el desarrollo como la ejecución de las aplicaciones, se ha trabajado en una distribución Ubuntu 11.04 (Natty). En cuanto a LeJOS, en su página oficial tenemos varios tutoriales en http://lejos.sourceforge.net/nxt/nxj/tutorial/index.htm para familiarizarnos y conocer más a fondo la librería. Además, en la sección “Getting Started > Linux” del mismo tenemos explicado perfectamente como instalar y preparar nuestro entorno, aunque a continuación se van a destacar los puntos esenciales y más importantes. 3.1.3.1. Instalación del Java Development Kit (openJDK) Puesto que se va a trabajar con el lenguaje Java se necesita instalar la Máquina Virtual Java, con sus entornos de desarrollo y ejecución. En este proyecto se ha utilizado la versión 6 de openJDK, que es fácilmente instalable desde consola mediante el comando “sudo apt-get install openjdk-6-jdk”. 3.1.3.2. Instalación de libUSB También se necesita tener instaladas las librerías apropiadas para la comunicación NXT-PC. En este caso ha de ser la versión 0.1 de libUSB junto con su paquete de desarrollo. El comando para instalarlo todo es “sudo apt-get install libusb-0.1-4 libusbdev”. Una vez instalado hay que dotar al usuario de permisos de lectura y escritura sobre la conexión USB, para lo que hay que crear una regla udev creando el fichero /etc/udev/rules.d/70-lego.rules con el siguiente contenido: # Lego NXT brick in normal mode SUBSYSTEM=="usb", DRIVER=="usb", ATTRS{idVendor}=="0694", ATTRS{idProduct}=="0002", GROUP="lego", MODE="0660" # Lego NXT brick in firmware update mode (Atmel SAM-BA mode) SUBSYSTEM=="usb", DRIVER=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", GROUP="lego", MODE="0660"
67 Posteriormente con las llamadas desde consola “sudo groupadd lego” y “sudo gpasswd -a <usuario> lego” se crea el grupo con los permisos y se añade al usuario al mismo. 3.1.3.3. Instalación de LeJOS NXJ A continuación se pasa ya a instalar tanto el software de LeJOS como el firmware en el NXT. Para ello se debe descargar el archivo comprimido desde http://lejos.sourceforge.net/nxj-downloads.php (se recomienda la versión 0.9.0 utilizada en este proyecto). El software incluye una biblioteca de clases de Java (Classes.jar) que implementan la LEJOS NXJ Application Programming Interface (API), herramientas de PC para actualizar el firmware del robot, cargar los programas, depurarlos, un API de PC para escribir programas de PC que se comunican con los programas de LEJOS NXJ a través de Bluetooth o USB y otras muchas funciones y programas de ejemplo. Una vez descargado el archivo se descomprime en la ubicación deseada y posteriormente se edita el archivo ~/.bashrc para añadir la variable NXJ_HOME con la ubicación de la instalación (e.g. “~/lejos_nxj”) y agregar $NXJ_HOME/bin a la variable PATH. Hecho esto, se accede desde consola a la carpeta $NXJ_HOME/build y se ejecuta el comando “ant”, con lo que tendremos la instalación completada. Para instalar el firmware al NXT, se conecta el robot al ordenador por USB y se llama desde consola al comando nxjflash. Para realizar las aplicaciones y pruebas se ha utilizado el entorno de trabajo de Eclipse, por su popularidad entre programadores en Java y por la familiaridad personal con la que se contaba anteriormente. 3.1.3.4. Configuración del entorno de desarrollo (Eclipse) Desde http://www.eclipse.org/downloads/ se descarga la última versión de ECLIPSE IDE para desarrolladores Java y se descomprime en el directorio deseado del disco duro. Aunque en la página de leJOS también existe un tutorial en esta dirección http://lejos.sourceforge.net/nxt/nxj/tutorial/Preliminaries/UsingEclipse.htm para la configuración de la librería en Eclipse y con la explicación extensa de todo lo que podemos aprovechar en este entorno, se destacan los puntos esenciales para la instalación del plug-in de leJOS: Se hace clic en “Help > Install New Software…”
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 68 Figura 60: Configuración de Eclipse 1 En la nueva ventana se introduce en el campo “Work with:” la dirección http://lejos.sourceforge.net/tools/eclipse/plugin/nxj/ y se pulsa enter.
69 Figura 61: Configuración de Eclipse 2 Con la casilla del plug-in seleccionada se pulsa Next y se empieza la instalación. Una vez finalizada se procede a reiniciar Eclipse, que ya tendrá instalado el plug-in deseado. A continuación se puede revisar y modificar las preferencias del mismo en “Window > Preferences > LeJOS NXJ”.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 70 Figura 62: Configuración de Eclipse 3 Hay que asegurarse de que en el campo NXJ_HOME esté indicada la ruta donde se instaló el software de LeJOS. Con todo instalado y configurado ya se puede proceder a crear proyectos LeJOS tanto para PC como NXT, seleccionando la opción deseada en el menú “File > New > Project…” así como ejecutarlos (teniendo conectado el robot vía USB en el caso de los proyectos para NXT) desde la opción Run As…. 3.1.3.5. Instalación de ROS Para la ejecución de la última aplicación del proyecto es necesaria la instalación de ROS y algunos paquetes y pilas que se señalan a continuación. En la página oficial de ROS http://www.ros.org/wiki/diamondback/Installation/Ubuntu se encuentra un tutorial para la instalación completa de ROS. Se ha de añadir el repositorio a la lista con el comando “sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu natty main" > /etc/apt/sources.list.d/ros-latest.list'”, se instalan las llaves “wget http://packages.ros.org/ros.key -O - | sudo apt-key add -” y se actualiza la lista de repositorios “sudo apt-get update”. Se necesita una instalación completa que se
71 consigue con el comando “sudo apt-get install ros-diamondback-desktop-full” y se finaliza añadiendo las variables globales al entorno del sistema con la orden “echo "source /opt/ros/diamondback/setup.bash" >> ~/.bashrc”. Con la base de ROS instalada es el momento de instalar el paquete que se utilizará, rgbdslam. En la página http://www.ros.org/wiki/rgbdslam se encuentra el tutorial de instalación y uso del mismo. En primer lugar hay que crear un directorio personal para los paquetes con las llamadas “mkdir -p ~/ros”, “echo 'export ROS_PACKAGE_PATH=~/ros:$ROS_PACKAGE_PATH' >> ~/.bashrc” y “source ~/.bashrc”. Entonces en este directorio se descargan los dos paquetes necesarios con las órdenes “svn co http://alufr-rospkg.googlecode.com/svn/trunk/rgbdslam_freiburg/rgbdslam” y “svn co https://code.ros.org/svn/ros-pkg/stacks/vslam/trunk/g2o ~/ros/g2o”, se instalan las dependencias “sudo apt-get install libglew1.5-dev libdevil-dev libsuitesparse-dev” y se construyen los paquetes “rosmake --rosdep-install rgbdslam”. Antes de poder ejecutar rgbdslam se necesita el paquete openni_camera, que se instala mediante la llamada “sudo apt-get install ros-diamondback-openni-kinect” seguida de “rosmake openni_camera”. En este momento ya se tiene todo el entorno preparado para el desarrollo y la ejecución de las aplicaciones. 3.2. Estrategias del control cinemático Para el control de trayectorias existen dos métodos geométricos diferentes que resultan interesantes para el trabajo a realizar: el control o seguimiento de trayectorias mediante la estrategia del punto descentralizado y el algoritmo de persecución pura. 3.2.1. Punto descentralizado El control de posición por punto descentralizado se establece a partir de la posición y velocidad de un punto que está separado una distancia e del eje de tracción del robot.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 72 Figura 63: Punto descentralizado De este modo las coordenadas del punto descentralizado vienen definidas por: Se calcula la derivada (velocidad) de ese punto: Para conocer la posición del robot en todo momento se parte de la ecuación cinemática directa diferencial: Donde sustituyendo queda:
73 Las velocidades de las ruedas se pueden obtener despejando de la ecuación anterior: Para el desarrollo del control cinemático de los NXT se ha utilizado la siguiente ecuación: Entre las ventajas de la estrategia del punto descentralizado cabe destacar que no es necesario conocer la trayectoria completa para aplicarla sino que al mismo tiempo que se calcula la velocidad necesaria para que el robot alcance la siguiente posición, se calcula el siguiente punto en función de la posición actual donde se encuentra el robot en ese momento. Lo cual ofrece precisión y una continuidad uniforme en el movimiento. 3.2.2. Persecución Pura. A diferencia de la estrategia del punto descentralizado, para aplicar el algoritmo de persecución pura es necesario conocer la trayectoria previamente. Dada una posición (XR,YR) y un punto objetivo (Xob,Yob) se puede analizar el recorrido como sigue:
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 80 Figura 71: Montaje Ballbot 3.3.3.3. Desarrollo Para el desarrollo de la aplicación Ballbot se han utilizado, además de los motores ya detallados anteriormente, varios bloques específicos de la librería ECRobot. Figura 72: Bloque del giróscopo en ECRobot El giróscopo mide la velocidad de rotación del eje en el que se encuentre, devolviendo su bloque de ECRobot un valor crudo entre 0 y 1023. Figura 73: Bloque del sensor ultrasónico en ECRobot
81 El sensor ultrasónico mide la distancia hasta un obstáculo detectado, devolviendo su bloque el valor de la distancia en centímetros entre 0 y 255 (-1 en caso de error). El proyecto consta de varios modelos y aplicaciones, la mayoría orientados a la simulación del Ballbot en el PC, pero la aplicación que nos interesa y que funcionará en nuestro robot es nxt_ballbot_controller.mdl. Ésta está dividida en 4 tareas: Figura 74: Ventana de la estructura de la aplicación La primera es la tarea de inicialización que solo se lleva a cabo al principio de la ejecución. En ésta se inicializan las variables globales. La segunda es la tarea que lleva el grueso de la aplicación, la de control y equilibrado del robot, así como la calibración de los giróscopos al inicio de la ejecución. Al ser esta la más importante tendrá una frecuencia de ejecución de 4ms. La tercera tarea se encarga de detectar obstáculos con el sensor ultrasónico. En caso de detección se avisa a la tarea principal a través de una variable global para que ésta actúe sobre los motores de manera apropiada. Es ejecutada cada 20ms. La cuarta y última tarea comprueba el estado de la batería para controlar el voltaje a aplicar a los motores, así como si el robot está fuera de control para parar la ejecución. También avisa al usuario mediante un pitido del fin del calibrado de los giróscopos, suponiendo esto el inicio del bucle de control. Esta tarea se ejecuta cada 100ms. 3.3.3.4. Ejecución El primer paso, una vez construido el modelo y antes de poderlo ejecutar en el robot, es el de la generación del código y el correspondiente ejecutable y su posterior descarga en el NXT. Para ello contamos en la ventana principal del modelo con los botones mostrados
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 82 Figura 75: Ventana de generación del ejecutable Primero se pulsa “Generate code and build the generated code”. Una vez construido (se indicará en la ventana principal de MATLAB) se conecta mediante USB al PC el NXT encendido y se pulsa “Download (NXT enhanced firmware)”. Entonces se ejecuta la aplicación en el robot, aguantando el robot en posición vertical sobre la pelota hasta que emite un pitido avisando del inicio del movimiento. Desde este momento el robot realiza su tarea de autobalanceado sin necesidad de interacción del usuario. 3.3.3.5. Problemas encontrados y soluciones aplicadas Durante la utilización de esta aplicación se encontró un problema a destacar. Desde un principio no se contaba con las ruedas especificadas en el manual de construcción. El robot fue construido con unas ruedas con un diámetro ligeramente mayor, por lo que la fricción de las mismas con la pelota no era la deseada, consiguiendo así muy poca estabilidad, incluso sin poder iniciar la ejecución en algunas ocasiones. Una vez conseguidas las ruedas correctas se mejoró el funcionamiento hasta hacerlo ideal. Por esto se recomienda encarecidamente la utilización de las ruedas LEGO con referencia 44309. 3.3.4. Seguimiento de trayectorias fijas mediante el algoritmo de persecución pura 3.3.4.1. Descripción de la aplicación Habiéndose familiarizado con el entorno ECRobot, sus bloques propios y los más básicos de Simulink, se pasa a desarrollar desde cero una aplicación en este entorno, en concreto, una aplicación de seguimiento de trayectorias fijas mediante el algoritmo de persecución pura. Esta aplicación es capaz de generar una trayectoria (circular, cuadrada, espiral cuadrada, ocho cuadrado o flor) para posteriormente seguirla mediante el algoritmo de
83 persecución pura en bucle, ya que éste sigue la trayectoria estrictamente y se pueden conseguir resultados bastante satisfactorios. Además, en cada iteración del algoritmo se envía mediante Bluetooth a un PC la referencia de la trayectoria generada y la coordenada real que sigue el robot para comprobar el resultado. 3.3.4.2. Metodología y desarrollo La aplicación está formada por dos tareas. Figura 75: Ventana principal PurePursuit La primera de ellas es la de inicialización, que solo será ejecutada al iniciar la aplicación. Aquí se inicializarán las variables y, además, se generará la trayectoria escogida. En este entorno de programación esta trayectoria no puede ser escogida en tiempo de ejecución, así que se deben de tener varias versiones de la aplicación, cada una con una trayectoria distinta, o se debe de cambiar la trayectoria y recompilar cada vez la aplicación. La segunda tarea, con una frecuencia de ejecución de 50ms, es la principal, en la que se sigue la trayectoria anteriormente inicializada mediante el algoritmo de persecución pura.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 84 Figura 76: Tarea principal de PurePursuit Esta tarea calcula, a partir de los valores actuales y anteriores de los encoders de los motores, la velocidad que lleva el robot y, por tanto, la posición (x,y) y rotación (theta) en la que se encuentra. Con esta coordenada calculada se pasa a buscar el siguiente punto en la trayectoria a seguir más cercano a ella y respetando una distancia mínima o lookahead. Esta búsqueda se hace en una ventana de puntos entre el actual (último punto al que se ha viajado) y un número variable a elección según las necesidades de la trayectoria en cuestión. Una vez encontrado el punto de referencia al que se viajará entra en juego el algoritmo de persecución pura, el cual, como se ha comentado en el apartado 3.2.2, calcula las velocidades que han de llevar las ruedas y, con ello, las potencias a aplicarles. Por último, se envían las referencias y coordenadas reales recorridas mediante Bluetooth al PC. Para ello se utiliza el bloque correspondiente de ECRobot. Figura 77: Bloque de envío por Bluetooth Este bloque envía un vector de 32 enteros positivos entre 0 y 255. Por esto hay que destripar los datos a enviar. Cada coordenada será dividida en signo (1 = positivo, 2 = negativo), valor dividido entre 255 y resto del valor entre 255. La trama resultante sería la siguiente.
85 X Y Ref X Ref Y 0 3 enteros 3 enteros 3 enteros 3 enteros 20 enteros Figura 78: Trama de envío Bluetooth Siendo cada coordenada al detalle: Valor / 255 Valor % 255 Signo 1 entero 1 entero 1 entero Figura 79: Coordenada al detalle Para recibir vía Bluetooth en el PC se tiene en ejecución la aplicación en lenguaje M de MATLAB que crea una conexión con el puerto COM concreto con el que se ha establecido conexión con el NXT. Lee los paquetes que recibe iteración a iteración reconstruyendo los valores según el método contando anteriormente y acaba mostrando por pantalla los gráficos resultantes. 3.3.4.3. Ejecución Antes de nada, en cualquier ventana del modelo se ha de acceder a “Simulation > Configuration Parameters… > Real-Time Workshop > Interface” y marcar la opción floating point number para activar el uso de números en coma flotante. De la misma manera que la anterior aplicación, ésta ofrece en la ventana principal del modelo dos botones para compilar y descargar el ejecutable al NXT. Figura 80: Ventana compilación y descarga PurePursuit Primero se pulsa nxtbuild(„PP‟, „build‟) para generar el código y el ejecutable. Una vez hecho, se conecta el NXT encendido al PC mediante USB y se pulsa en nxtbuild(„PP‟, „rxeflash‟) para descargar el ejecutable. Antes de ejecutarlo hay que
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 86 seguir los pasos del apartado 3.3.2 para establecer la conexión vía Bluetooth y ejecutar el programa de recepción en el PC (RecibePP.m) que se mantendrá a la espera de los envíos del robot. Para empezar la ejecución de la aplicación hay que tener el NXT en el suelo libre y con espacio. Se muestra un ejemplo de ejecución de la trayectoria cuadrada (referencia marcada con cruces, trayectoria seguida con una línea recta). Figura 81: Resultado de la ejecución 3.3.4.4. Problemas encontrados y soluciones aplicadas Durante el desarrollo de esta aplicación se encontró básicamente un problema relacionado con el tamaño de la ventana en la búsqueda del siguiente punto al que viajar, que impedía que el robot realizara la trayectoria deseada al completo. Si la trayectoria tiene puntos donde confluye varias veces (por ejemplo, el centro de una trayectoria tipo flor, por donde la misma pasa 8 veces distintas) y se utiliza un ventana demasiado grande (la mitad del número de puntos de la trayectoria en un principio) el robot entra en conflicto al llegar a esta zona, entrando en un bucle infinito. Para solucionarlo se optó por una ventana de tamaño 1/8 el número de puntos de la trayectoria, con el que se consiguió un resultado óptimo en todas las pruebas de todos los tipos de trayectoria. 3.4. Desarrollo en LeJOS 3.4.1. Estudio de la conexión vía USB Como objetivo final del proyecto se propone alcanzar incrementalmente una solución que comunique un PC con el NXT vía USB para que el robot reciba los
87 movimientos a realizar gracias al mapeado del terreno y la evitación de obstáculos realizadas a partir del sensor Kinect de Xbox. Se escoge este tipo de conexión por delante de Bluetooth por la fiabilidad que da durante la comunicación. Para el trabajo y desarrollo con la Kinect se necesita además un entorno Linux. Tras varios intentos resulta imposible trabajar en este sistema operativo con los lenguajes ECRobot y nxtOSEK, principalmente por la incompatibilidad con el sistema operativo del driver Fantom necesario para establecer una comunicación USB con este lenguaje. Por ello se decide continuar el trabajo en LeJOS, el cual en su API facilita mucho este tipo de comunicación, la que además es totalmente compatible con la librería libUSB de Linux Como único prerrequisito para que funcione la comunicación hay que haber seguido los pasos del apartado 3.1.3.2. A partir de aquí la conexión y reconocimiento del NXT por parte del PC es son automáticos conectándolos con el cable USB proporcionado por LEGO. Figura 82: Cable USB de Lego 3.4.2. Estudio del movimiento del robot NXT En las aplicaciones que se van a realizar sobre el robot NXT se necesita un control total sobre el mismo, con una respuesta rápida ante cambios de cualquier tipo, por lo que es muy importante conseguir un movimiento preciso y manejable en tiempo real. LeJOS ofrece una extensa API con la que trabajar directamente sobre los motores. 3.4.2.1. Descripción de funciones de alto nivel Algunas de estas funciones existentes en las librerías de LeJOS son: void forward() para mover el motor hacia adelante, void backward() para mover el motor hacia detrás y void stop() para parar el motor. Además, existen otras clases como DifferentialPilot o Navigator, con sus correspondientes métodos para actuar sobre los motores, que permiten tratar al robot como un objeto y moverlo a puntos concretos o seguir trayectorias. Pero la precisión de estas clases no se acerca en nada a la deseada, por lo que se decide tratar los motores a bajo nivel para desarrollar un control más exhaustivo sobre el NXT.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 88 3.4.2.2. Gestión de la trayectoria a bajo nivel Para gestionar las trayectorias que seguirá el robot hay que actuar directamente sobre cada motor, aplicándole la acción de control deseada, así como conocer el valor de su encoder para controlar la posición y la velocidad. Para ello se ofrece en la clase NXTMotor funciones void resetTachoCount(), para poner a 0 el valor del encoder, void getTachoCount(), para obtener el valor del encoder en grados y void setPower(), para dotar al motor de la acción de control entre 0 y 100. Esta última función ha de ir seguida de las anteriormente comentadas forward() o backward() para indicarle el sentido. 3.4.3. Gestión del tiempo de muestreo del bucle de control Para que el cálculo de la velocidad y posición del robot a partir de la lectura de los encoders de los motores y posterior cálculo de la acción de control a aplicarles sea exacta, consiguiendo así el movimiento contínuo deseado, se necesita un tiempo de muestreo que se cumpla con máxima precisión en el bucle de control. En el entorno ECRobot y nxtOSEK esto no suponía un problema, ya que al tratarse éste último de un sistema en tiempo real la frecuencia de ejecución de la tarea en cuestión, que ha sido indicada en el desarrollo de la aplicación, es controlada por él mismo. Pero no es el caso de LeJOS, por lo que se ha de desarrollar un método para conseguirlo. Para ello se utiliza la clase Stopwatch contenida en la librería de LeJOS. Ésta posee un método reset() que inicializará el reloj cada vez que el bucle vuelva a empezar y otro elapsed() que medirá el tiempo transcurrido al final del mismo. Si aún no se ha llegado al tiempo de muestreo utilizado se para el hilo principal de la aplicación mediante la llamada Thread.sleep(milisegundos) durante el tiempo que falta. 3.4.4. Seguimiento de una trayectoria fija 3.4.4.1. Descripción de la aplicación Esta primera aplicación no es más que una traducción al entorno LeJOS de la desarrollada en ECRobot explicada en el apartado 3.3.4. Ésta generará y seguirá trayectorias de tipo cuadrado, circular o flor mediante el algoritmo de persecución pura. En este caso se suprime el envío de datos por Bluetooth por considerarlo irrelevante, ya que en este entorno se va a tratar más adelante las conexiones vía USB. 3.4.4.2. Metodología y desarrollo Este proyecto está formado por dos clases: PurePursuit y Trajectory.
89 Figura 83: Sistema de archivos del proyecto La clase Trajectory contiene los métodos para la generación de las trayectorias estáticas comentadas en el apartado anterior que puede seguir el robot en cada ejecución de la aplicación. Esta trayectoria se guarda en un array de WayPoints, un tipo de datos ofrecido la librería de LeJOS para tratar coordenadas. La clase PurePursuit es la principal. Además de la función principal en la que se desarrolla el grueso de la aplicación, contiene la función void displayTrajectory(), mediante la que se muestra por pantalla al inicio de la ejecución un menú para seleccionar la trayectoria a resolver. Posteriormente se genera dicha trayectoria a través de la clase Trajectory y se resuelve el movimiento del robot siguiendo el mismo exacto desarrollo comentado en el apartado 3.3.4.2. 3.4.4.3. Ejecución Para subir y ejecutar la aplicación al NXT hay que, estando encendido, conectarlo al PC vía USB y seleccionar la opción “Run As... > LeJOS NXT Program” que aparece al pulsar con el botón derecho sobre la carpeta del proyecto. Hecho esto aparecerá en pantalla del robot el menú de selección de la trayectoria que se desea trazar. Figura 84: Pantalla de selección de trayectoria Con los botones grises del NXT se cambian las opciones y, con el robot en el suelo, se selecciona la trayectoria con el botón central. Por pantalla se mostrará un mensaje que indica que el robot ya está en marcha.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 96 La parte del NXT consta una vez más de dos clases: PPUSBKinect y Trajectory. Figura 93: Sistema de archivos de PPUSBKinect La clase Trajectory es la misma que en el proyecto anterior, que genera trayectorias en línea recta entre dos puntos. La clase PPUSBKinect se encarga de recibir estas tramas, reconstruir las coordenadas que se le envían y transformar las órdenes en las acciones correspondientes, según la orden enviada, que le llevarán a su objetivo. La función principal consta de un bucle, al inicio del cual se lee la posible orden que haya enviado la parte del PC, momento en el que se descodifica y se actúa debidamente. Se pasa a detallar como actúa el robot ante cada uno de los 6 tipos de orden: -Posición: Esta orden solo se envía en el inicio de la ejecución. Indica al robot la posición inicial en la que se encuentra para que no haya problemas con los posteriores desplazamientos. Esto se hace porque puede existir el caso en que el NXT no empieza en la casilla (0,0) del mapa. Además, las coordenadas se presentan siempre en valores absolutos, por lo que el robot siempre tiene que estar debidamente localizado. -Rotación del sensor: Esta acción puede ocurrir al inicio del bucle, cuando el robot está detenido, para posicionar el sensor hacia donde tenga que detectar posibles obstáculos para encontrar el camino libre. Se recibe la rotación actual y la objetivo para poder iniciar la rotación en el sentido correcto con el método rotate() de la clase NXTRegulatedMotor. En este momento el control es devuelto a la aplicación del PC, que es la que mide constantemente la orientación de la Kinect gracias al método SLAM. -Frenado del sensor: Esta orden sólo se enviará en el momento en que la parte del PC detecte que sensor ha alcanzado la rotación deseada. Entonces el motor se detendrá con el método stop() y se esperará la llegada de una nueva orden. -Desplazamiento: Esta acción es muy similar a la anterior aplicación del apartado 3.4.5. El robot recibe las coordenadas objetivo y construye de igual manera la trayectoria en línea recta entre éste y el punto en que se encuentra el robot con el método generateTrajectory(). Entonces se entra en el bucle de persecución pura que sigue el mismo desarrollo que el explicado en el apartado 3.4.5.2, con la salvedad de que, como en la versión no bloqueante de la anterior aplicación, no lee una posible nueva coordenada a la que viajar, sino que siempre se asegura la llegada al punto objetivo. La parte del PC espera a recibir la confirmación de la llegada. -Rotación del robot: Antes de desplazarse, y si el robot necesita hacerlo hacia un lateral, se recibe esta orden acompañada del valor de rotación al que se quiere llegar. Para realizar este movimiento se ha creado el método rotation(), en el que se ha implementado un sencillo control proporcional de la velocidad de rotación, que finaliza cuando es alcanzada la rotación deseada.
97 -Fin de programa: Esta es la última orden que recibiría el robot en una ejecución y que indica que se ha llegado al objetivo final o que se ha podido producir algún tipo de error en la parte del PC. Esta orden finalizará la aplicación del robot. 3.4.6.4. Ejecución Antes de empezar la ejecución se ha de construir el terreno con sus obstáculos y establecer el punto inicial y destino que tienen que ser indicados en la aplicación de PC. Figura 94: Aspecto inicial del entorno Con todo colocado en su sitio se conectan el sensor y el robot al PC mediante USB. Entonces se ejecuta el paquete rgbdslam para que esté preparado para el desarrollo del algoritmo de SLAM. Para ello se ejecuta con la llamada “roslaunch rgbdslam kinect+rgbdslam.launch” y, cuando se visualiza en la pantalla del PC la imagen que transmite la cámara, se arranca el SLAM pulsando la tecla espacio. Figura 95: Ventana del rgbdslam con el algoritmo en marcha En este momento se arranca la aplicación del robot que se pone a la espera de recibir órdenes por parte del PC.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 98 Cuando el robot ya ha establecido conexión y está a la espera es el momento de ejecutar la aplicación del PC desde Eclipse. Entonces el robot ya empezará a moverse autónomamente actuando ante las órdenes enviadas por la aplicación del PC, la cual resuelve el camino que ha de seguir hasta el punto objetivo gracias a la información recibida por el sensor Kinect. 3.4.6.5. Problemas encontrados y soluciones aplicadas Esta aplicación ha planteado problemas durante su desarrollo, causados principalmente por el peso que ejercen la Kinect y la estructura que lo sostiene sobre el robot. El primer problema encontrado fue el poco soporte que ofrecía la rueda trasera diferencial con la consecuente deformación del robot por su parte central y excesiva presión sobre sus dos ruedas motoras que dificultan el movimiento. Para solucionarlo se sustituye la pequeña rueda por una pieza especial omnidireccional que aporta mayor fuerza y robustez a la estructura, con lo que también se consigue una mejor distribución del peso. Figura 96: Pieza trasera omnidireccional A pesar de este cambio el peso sigue siendo muy grande y esto es algo irreparable a nivel físico. Los movimientos resultan muy lentos a causa de esto, por lo que se decide reducir el factor de reducción de acción de control utilizado para mejorar la precisión, con lo que se consigue mayor fuerza en los motores para arrastrar la estructura sin perder precisión. En un principio tanto los movimientos frontales como los laterales se realizaban siguiendo directamente la trayectoria creada. Pero debido también al peso de la estructura y a la distancia no muy grande entre casillas los movimientos laterales perdían mucha precisión. Para solucionar esto se decide tratarlos de la manera comentada en el apartado 3.4.6.3, primero rotando el robot mediante un control proporcional y posteriormente realizando el trayecto frontal resultante. Por última cabe señalar que durante la ejecución y en caso de que se realice un trayecto largo se pueden encontrar problemas con rgbdslam. Al acumular mucha información de la recibida a través de la Kinect se producen problemas de memoria que detienen el programa, haciendo imposible el funcionamiento perfecto de la aplicación. Este es un problema de diseño del programa rgbdslam imposible de solucionar por parte del usuario. Se propone para futuros trabajos la solución de este aspecto.
99 4.- Conclusiones y futuros proyectos Llegado el final del proyecto se concluye que se han alcanzado satisfactoriamente los objetivos marcados al inicio. Se ha alcanzado una gran familiaridad con los robots NXT y sus firmwares nxtOSEK, con la librería de bloques ECRobot para Simulink, y LeJOS, con su propia librería para Java. Se han ampliado los conocimientos de los entornos de programación Simulink y Eclipse y de sus herramientas de depuración. Se ha estudiado la gestión de la comunicación Bluetooth y USB que se crea del NXT al PC y viceversa, profundizando en la utilización de las correspondientes librerías y la compatibilidad entre ellas, sus limitaciones, los tipos de datos que permiten enviar y cómo enviar a través de ellos otros tipos de datos de mayor interés. Se han ampliado conocimientos sobre la programación en Java (programación orientada a objetos, creación de clases y sus métodos, gestión del tiempo de ejecución...), en C y en Simulink (utilización de bloques avanzados, gestión de la prioridad y el orden de ejecución...). Se ha trabajado en la gestión y generación de trayectorias, tanto estática como dinámicamente, de objetos móviles y analizado varias estrategias de seguimiento, haciendo gran hincapié en el algoritmo de persecución pura. En resumen, la tarea de investigación y estudio de los diferentes campos propuestos se ha visto recompensada y reflejada en aplicaciones que cubren con altas expectativas lo estudiado. Las aplicaciones implementadas en ECRobot utilizan comunicación Bluetooth y generan y resuelven trayectorias estáticas, mientras que las desarrolladas para LeJOS utilizan comunicación USB para la generación de trayectorias de manera dinámica. Los problemas surgidos durante el desarrollo del proyecto han motivado a un estudio más exhaustivo de los temas de interés para encontrar las soluciones aplicadas y han aumentado el interés en el ámbito de la robótica móvil para realizar nuevos proyectos en un futuro. Como ampliación del proyecto realizado se propone el desarrollo de una detección en tiempo real, lo que supondría trabajar con varios hilos de ejecución a la vez. Con esto se conseguiría resolver no sólo un mapa estático previamente creado, sino uno dinámico con la detección de objetos móviles. También se podría trabajar con varios robots a la vez conectados vía Bluetooth entre ellos. El primero de ellos, el maestro, mapearía el terreno y encontraría el camino más rápido para llegar al objetivo. Esta información la enviaría a los demás robots que podrían llegar directamente con esta información, sin necesidad de sensores ni observación del terreno. Por último, para futuras investigaciones se propone, por ejemplo, trabajar con otros sensores para realizar el mapeo y detección de obstáculos cuyo uso supusiera menor carga computacional y tuviera mayor rango de detección, como por ejemplo un sensor de infrarrojos. Esto también podría ir unido a la instalación de un dispositivo GPS para la localización del robot. Todo esto permitiría trabajar en espacios mayores al aire libre con mayor precisión.
Desarrollo multiplataforma de aplicaciones de control y comunicación para robots móviles 100 5.- Bibliografía [1] Wikipedia. http://es.wikipedia.org/wiki/Wikipedia:Portada [2] MATLAB Central http://www.mathworks.com/matlabcentral [3] nxtOSEK & ECRobot http://lejos-osek.sourceforge.net/ [4] NXT Ballbot: Blog de Tomás Arribas http://nxtballbot.blogspot.com.es/ [5] Oracle Java http://www.oracle.com/technetwork/java/index.html [6] LeJOS: Java for Lego Mindstorms http://lejos.sourceforge.net/ [7] LEGO Mindstorms http://mindstorms.lego.com [8] NXT Wiki http://nxt-wiki.rjmcnamara.com [9] Proyectos prácticos de electrónica y robótica. Blog de Jorge Flores Vergaray http://jorgefloresvergaray.blogspot.com/2009/01/sensores-para-robotica.html [10] Asociación de robótica educativa Complubot http://complubot.educa.madrid.org/pruebas/lego_nxt_version_educativa/lego_nxt_v ersion_educativa_index.php [11] Blog de Electribricks http://blog.electricbricks.com [12] Aula robótica: Blog dedicado a la difusión de la robótica educativa http://aularobotica.blogspot.com.es [13] leJOS Forums, Java for LEGO Mindstorms http://lejos.sourceforge.net/forum/ [14] Herramienta Interactiva para Robótica Móvil. J.L. Guzmán, M. Berenguel, F. Rodríguez, S. Dormido http://www.cinhtia.com.mx/uady/sesionesRM/Articulos/JA2003aHerramientaInteractivaRoboticaMovil.pdf [15] Implementation of the Pure Pursuit Path Tracking Algorithm. R. Craig Coulter http://www.ri.cmu.edu/pub_files/pub3/coulter_r_craig_1992_1/coulter_r_craig_199 2_1.pdf [16] libUSB http://www.libusb.org/ [17] ROS Wiki http://www.ros.org/wiki/