Proyecto
Proyecto
Benito Jos Cuesta Viera [email protected] Juan Lucio Cruz Mndez [email protected]
Tutor:
Leopoldo Acosta Snchez [email protected]
ndice
Prlogo ___________________________________________________________ 6 Organizacin del proyecto __________________________________________ 6 Agradecimientos __________________________________________________ 7 Captulo 1: Introduccin _____________________________________________ 8 Objetivos del proyecto_____________________________________________ 9 Evolucin del proyecto ____________________________________________ 9 Caractersticas generales __________________________________________ 10 VRML o Java (API 3D) __________________________________________ VRML ________________________________________________________ Historia de VRML_______________________________________________ Caractersticas Generales de VRML _________________________________ Visualizadores VRML____________________________________________ Java __________________________________________________________ Un poco de historia ______________________________________________ Aplicacin Java, Java Applet, JavaScript _____________________________ Caractersticas Generales de Java ___________________________________ APIs de Java ___________________________________________________ Arquitecturas Distribuidas _______________________________________ Diseo aplicaciones Distribuidas ___________________________________ Aplicaciones Distribuidas en Internet ________________________________ Applet en Internet _______________________________________________ Solucin Java___________________________________________________ 13 13 14 15 16 17 18 18 19 21 24 24 25 26 27
Monitorizacin del Puma Real ____________________________________ 29 Conclusiones____________________________________________________ 30 Capitulo 2: Java 3D ________________________________________________ 31 Caractersticas Bsicas del Lenguaje________________________________ Java y Java 3D__________________________________________________ Bases de la P.O.O. _______________________________________________ El API Java 3D _________________________________________________ Objetivos del API Java 3D ________________________________________ El Concepto de Escena ___________________________________________ Jerarqua de clases del API Java 3D _________________________________ Modelado Virtual del Robot _______________________________________ Construccin de un programa en Java 3D_____________________________ Alguna terminologa del Java 3D ___________________________________ Construccin de una escena simple__________________________________ Partes fundamentales del modelado del robot__________________________ Base del Robot__________________________________________________ Brazo #1 del Robot ______________________________________________ Brazo #2 del Robot ______________________________________________ 32 32 33 34 34 35 39 42 42 44 45 47 48 50 52 2
Simulacin Virtual de Robots Articulados Mueca del Robot _______________________________________________ 54 Movimiento Virtual del Robot _____________________________________ Animaciones y objetos Behavior____________________________________ La clase Alpha y las articulaciones de revolucin ______________________ Implementacin de las articulaciones de revolucin_____________________ Colisiones ______________________________________________________ Interacciones y Animaciones_______________________________________ Implementacin de una clase Behavior_______________________________ Condiciones de comienzo (Wakeup Conditions) _______________________ Configuracin de Behaviors para las colisiones ________________________ 56 56 57 60 62 62 63 64 65
Conclusiones____________________________________________________ 68 Captulo 3: Teora sobre la Cinemtica del Robot ________________________ 69 Caractersticas Geomtricas del Robot ______________________________ Introduccin y Caractersticas Tcnicas ______________________________ Geometra del Robot Mentor_______________________________________ Generalizacin y Modelo Matemtico _______________________________ Clculo Matemtico de la Cinemtica Directa ________________________ El problema de la Cinemtica Directa________________________________ Modelos de los Movimientos de las Cadenas Articuladas ________________ Matrices Homogneas Compuestas__________________________________ Procedimiento de Denavit-Hartenberg _______________________________ Clculo de la Direccin de Acercamiento y Cierre______________________ Clculo Matemtico de la Cinemtica Inversa ________________________ El problema de la Cinemtica Inversa________________________________ Clculo de la Cinemtica Inversa para las tres primeras articulaciones ______ Clculo de las dos ltimas articulaciones _____________________________ Clculo del resto de soluciones _____________________________________ Errores Cometidos en los Clculos Matemticos ______________________ Errores de Precisin______________________________________________ Errores de Redondeo y Clculos Recursivos __________________________ Errores de Conversin ____________________________________________ 70 70 73 75 77 77 79 81 82 85 88 88 89 93 95 98 98 98 99
Conclusiones___________________________________________________ 101 Captulo 4: Mdulo de Simulacin (GUI) ______________________________ 102 Conocimientos Generales ________________________________________ Funcionalidad _________________________________________________ Caractersticas Generales ________________________________________ Requerimientos y Recomendaciones________________________________ Clculo de la Cinemtica Directa__________________________________ Objetivo ______________________________________________________ Control de la C. Directa__________________________________________ Resultados Tericos ____________________________________________ 103 103 104 105 106 106 106 107
Simulacin Virtual de Robots Articulados Resultados Virtuales ____________________________________________ 108 Clculo de la Cinemtica Inversa__________________________________ Objetivo ______________________________________________________ Control C.Inversa ______________________________________________ Resultados Tericos ____________________________________________ Resultados Virtuales y Soluciones _________________________________ Obtencin de las Configuraciones Binarias __________________________ Control del Simulador Virtual ____________________________________ Vistas de la Escena _____________________________________________ Navegando por la Escena 3D _____________________________________ Control del Objeto Virtual________________________________________ Moviendo el Robot Virtual PUMA _________________________________ Luces ________________________________________________________ 109 109 109 110 110 111 112 112 113 114 114 115
Conclusiones___________________________________________________ 116 Captulo 5: Acceso Remoto y Monitorizacin ___________________________ 117 Funcionamiento del PUMA real___________________________________ 118 Conceptos Generales: Actuadores y Sensores del robot PUMA___________ 118 Proceso de calibracin___________________________________________ 120 Mdulo de Acceso Remoto (Fase I) ________________________________ Acceso Local al Puma ___________________________________________ Creacin de una clase para los mtodos nativos _______________________ Uso de Javah __________________________________________________ Implementacin de los Mtodos Nativos ____________________________ Mdulo de Acceso Remoto (Fase II) _______________________________ Acceso Remoto al Puma _________________________________________ Crear la Interfaz Remota _________________________________________ Implementacin de la Interfaz Remota ______________________________ Fragmentos Adaptadores y Esqueletos ______________________________ Ficheros del Host Cliente ________________________________________ Iniciar el Registro Remoto _______________________________________ Crear y registrar el Objeto Remoto _________________________________ Implementacin del applet cliente RMI _____________________________ 123 124 124 125 126 130 130 133 133 135 135 136 136 136
Mdulo de Monitorizacin _______________________________________ 139 Requerimientos en el Servidor ____________________________________ 139 Visualizacin en los Clientes _____________________________________ 140 Conclusiones___________________________________________________ 142 Captulo 6: Balance del Proyecto_____________________________________ 143 Conclusiones Finales ____________________________________________ 144 Sugerencias____________________________________________________ 145 Apndices _______________________________________________________ 148
Simulacin Virtual de Robots Articulados Apndice A: Configuracin del Java en los Clientes __________________ 149 Apndice B: Configuracin del WEBSITE + Simulador Virtual ________ 150 Apndice C: Configuracin del Servidor de Acceso Remoto ___________ 151 Apndice D: Configuralcin del Servidor de Monitorizacin ___________ 153 Bibliografa____________________________________________________ Web sites_______________________________________________________ Artculos _______________________________________________________ Libros Especficos de Java _________________________________________ Libros Generales _________________________________________________ 154 154 154 154 155
Prlogo
Organizacin del proyecto Agradecimientos
Imagen del Robot PUMA obtenida apartir del Mdulo de Simulacin Virtual El estudio de los modelos estndar (PUMA, SCARA y STANFORD) es la base ideal para la iniciacin y comprensin de los fundamentos de la robtica. Desgraciadamente, es difcil para un usuario acceder a estos robots debido a su precio y suelen estudiarse en la mayora de los casos slo de forma terica. Por esta razn, se ha decidido realizar un simulador del robot PUMA y para lograr que sea accesible al mayor nmero de personas se ha elegido Internet como medio de difusin. El proyecto adems de este mdulo de simulacin virtual del robot PUMA se ha completado con la creacin de una interfaz para acceder remotamente a un puma real y un modulo de monitorizacin en tiempo real que permite observar las evoluciones del robot.
Simulacin Virtual de Robots Articulados diferentes opciones que hemos estudiado para su desarrollo. Simultneamente, comenta las diferentes soluciones elegidas para cada uno de los mdulos del sistema. El captulo segundo hace una introduccin sobre Java 3D y se comienza a modelar el puma virtual, recalcando las diferencias entre el modelo terico y virtual. El captulo tres hace un repaso sobre el modelo terico del robot PUMA, se estudia la cinemtica directa e inversa para el mismo y se comentan algunos aspectos relacionados con errores de redondeo en los clculos. El funcionamiento del Mdulo de simulacin se analiza en el captulo cuatro. En l se explica como sacar el mximo rendimiento a este mdulo. El captulo cinco describe como se realiza el acceso remoto y monitorizacin del puma real. Las cinco secciones anteriores se completan con un apndice en el que encontramos informacin sobre las herramientas utilizadas, como compilar el proyecto, nuestras clases, requerimientos del sistema, cdigo fuente, bibliografa, enlaces de inters, etc.
Agradecimientos
Captulo 1: Introduccin
Simulacin Virtual de Robots Articulados empezar a trabajar en el sistema el usuario senta el deseo de ver que estaba pasando realmente en el PUMA real. Por esta razn nace un tercer y ultimo mdulo en el proyecto encargado de realizar una labor de monitorizacin de robot. Este mdulo, que curiosamente tambin es una Applet Java, muestra una imagen del PUMA real aproximadamente cada segundo. En sucesivos captulos se abordar este mdulo con ms detalle y se propondrn otras posibles soluciones para conseguir un mdulo de monitorizacin ms eficiente, que permita transmitir imagen y sonido en tiempo real, etc.
Caractersticas generales
10
Simulacin Virtual de Robots Articulados http://www.java.sun.com adems existen diferentes versiones segn el sistema operativo que utilice el usuario. Este proyecto esta relacionado con la simulacin aplicada al rea de la robtica. Hay que mencionar que no se trata de simple animacin donde lo que prima es lograr unos buenos efectos especiales que se vean lo mejor posible. En la simulacin se busca siempre otros objetivos. Por ejemplo, en un simulador de vuelo se busca que un piloto aprenda a pilotar aviones. Nosotros hemos realizado este proyecto con fines didcticos y est dirigido a tres tipos de usuario; el usuario ingenuo sin conocimientos de robtica, el usuario amateur con ciertos conocimientos y finalmente el usuario avanzado que tiene experiencia y domina estos temas. Cada uno de ellos puede encontrar algn aspecto del proyecto que le fascine y despierte su curiosidad e inters. El usuario ingenuo puede iniciarse en el mundo de la robtica teniendo una primera experiencia visual de lo que es un robot real. Esto lo consigue gracias a un el mdulo de monitorizacin implementado en Java que forma parte de este proyecto y que permite visualizar el estado del robot PUMA en tiempo real. Un usuario desde cualquier parte del mundo utilizando nicamente una conexin a Internet y un navegador WEB que soporte Java, puede observar el estado del PUMA ubicado en el Laboratorio de Computadoras y Control de la Universidad de La Laguna. Adems, utilizando el mdulo de simulacin virtual del robot podemos experimentar con un modelo virtual que caracteriza muy bien al modelo real sin necesidad de tener un robot en casa. El usuario puede controlar el robot virtual utilizando una interfaz muy amigable que le introduce poco a poco en el mundo de la robtica. El usuario sin darse cuenta empieza a plantearse problemas relacionados con la cinemtica directa, inversa y toda la teora que subyace detrs de la robtica, aunque no sea consciente de ello. Finalmente la informacin disponible en el WEB SITE puede ayudar a los usuarios a conocer ms a fondo este proyecto e iniciarse en el mundo de la robtica. Para aquellos usuarios que ya dispongan de ciertos conocimientos sobre robtica puede utilizar el mdulo de simulacin para estudiar la cinemtica directa e inversa de robot PUMA y comprobar sus conocimientos tericos. Si usted es un buen observador puede descubrir cosas que normalmente pasan inadvertidas porque parecen lo ms natural del mundo, pero recordar que aqu todo es virtual. Al experimentar con el rea de trabajo del robot se concluye que ha sido acotada para que los movimientos del PUMA virtual sean exactamente los que permite el PUMA real. Podemos descubrir las cuatro soluciones que existen para llegar a un punto utilizando el robot y ver como algunas soluciones no sern alcanzables debido a las limitaciones que ofrece el modelo real; limitaciones que tambin se recogen en el modelo virtual. Mediante una vista ms cercana podemos descubrir donde estn los sensores del robot y los actuadores y como deberan funcionar fsicamente. Cuando la estructura del robot se mueve podemos apreciar cierta inercia producida por las caractersticas fsicas de la estructura. Los usuarios escpticos estn de enhorabuena ya que tienen la posibilidad de mover un robot real, este robot real nos ha servido de modelo para crear nuestro robot virtual. El acceso se realiza a travs de Internet y utilizando un browser. Entre las opciones que permite este mdulo de acceso remoto se encuentra la de permitir que el usuario compruebe el estado actual del robot realizando una lectura de los sensores que el PUMA dispone en cada una de sus articulaciones. Tambin ofrece la posibilidad de mandar instrucciones al robot y que este reaccione en consecuencia. De esta forma, se entra en una dinmica en la que el usuario primero trabaja con el simulador y cuando tiene los resultados que buscaba, realiza una prueba con el robot real que debera
11
Simulacin Virtual de Robots Articulados confirmar los resultados obtenidos mediante simulacin. Finalmente, el usuario puede comprobar la reaccin del puma real utilizando el mdulo de monitorizacin. Un usuario experto, lo que debe buscar en este proyecto en bsicamente ideas que le ayuden en su trabajo. Se ha diseado un esquema de arquitectura distribuida que permite a un usuario acceder a un dispositivo hardware (el robot PUMA en este caso) a travs de Internet. Este esquema es vlido en general para cualquier hardware, el nico requisito es que sea capaz de programarse como mnimo en C o Ensamblador. La tecnologa RMI de Java permite el acceso a mtodos remotos, podra permitirnos hacer cosas como gestionar remotamente una cadena de montaje de formada coordinada y utilizando la red. Tambin Java 3D ofrece muchas posibilidades, podemos crear prototipos de robots y realizar simulaciones, trabajar sobre modelos de robots que cuestan mucho dinero y su adquisicin no es viable.
12
VRML
13
Simulacin Virtual de Robots Articulados proporciona una interfaz a los usuarios para navegar e interaccionar con el mundo virtual.
Un ejemplo en el que sera adecuado aplicar VRML podra ser para recrear el futuro C. S. Informtica de la Universidad de La Laguna, utilizando imgenes digitalizadas para reproducir sus materiales. De este modo, el centro puede convertirse en un fichero VRML y cualquier persona podra deambular por sus jardines y pasillos. Se podra tambin incluir informacin adicional en forma de sonido o texto sobre determinados aspectos del centro.
Historia de VRML
14
Simulacin Virtual de Robots Articulados una larga discusin y diversos estudios en la que se analiz todo tipo de opciones, se lleg a la conclusin de que VRML estara basado en el formato de ficheros ASCII Open Inventor de Silicon Graphics Inc. Este formato de ficheros soporta la descripcin completa de escenas tridimensionales con objetos poligonales renderizados, luces, materiales, propiedades ambientales y diversos efectos. Los diseadores decidieron que VRML no deba ser una extensin del lenguaje HTML, que est diseado para manipular texto, no grficos. Adems, VRML necesita una optimizacin de las redes an mayor que HTML. Se esperaba que una escena VRML tpica estara compuesta de muchos ms objetos en lnea y en ella intervendran mucho ms servidores que en un documento HTML. Para no estorbar el proceso de desarrollo de HTML con problemas referentes al VRML ni limitar el proceso de diseo de VRML por cuestiones de compatibilidad con HTML, algo perjudicial para ambos lenguajes, se decidi que VRML tendra xito o fracasara con independencia de HTML. La primera versin de este lenguaje fue creada por la compaa Silicon Graphics Inc, y estaba basada en el formato de ficheros Open Inventor. La versin 2.0 de VRML aade muchas capacidades interactivas y ha sido diseada por Silicon Graphics con contribuciones de las compaas Sony Research y Mitra.
Los usuarios entran en estos mundos a travs de la pantalla del ordenador y se desplazan por ellos como si se desplazaran por el mundo real. Cada persona puede seguir su propia ruta. Esta caracterstica es til y tambin est soportada por Java 3D. En nuestro proyecto no vamos a controlar el PUMA desde dentro de la escena 3D como si nosotros formramos parte del mundo, se trata ms bien de hacer que el protagonista sea el PUMA que estar inmerso en el universo virtual en una posicin concreta. Todas las caractersticas que permite VRML al usuario como navegar por el mundo virtual ha su voluntad y cambiar el punto de vista de la escena, se han incluido tambin en nuestro modelo en Java 3D. Son interactivos
Los objetos del mundo pueden responder entre ellos y a eventos externos creados por los usuarios, mientras que stos manipulan los objetos de las escenas. En VRML, la inmensa mayora de los eventos estn producidos por la accin del ratn, cuando el usuario selecciona un objeto, lo arrastra, etc. El resto de eventos los produce el abatar (representacin conceptual del usuario en el mundo virtual) y se disparan cuando este se mueve por el mundo. Por ejemplo, VRML permite controlar colisiones que se produzcan cuando el abatar colisiona con un objeto, pero no controla que dos objetos colisionen entre s. Estas peculiaridades de VRML obligan a que la interaccin de los usuarios con el mundo virtual sea travs del abatar. En nuestra simulacin del robot PUMA se requiere un gran trasiego de datos que hay que facilitar al simulador por parte del usuario y viceversa. En este caso, una interfaz 2D se ajusta mejor de cara a facilitar el manejo del simulador al usuario. En Java 3D se pueden crear interfaces 2D gracias a que Java provee al programador de clases especficas para el desarrollo GUI 15
Simulacin Virtual de Robots Articulados (Interfaz Grfica de Usuario). En VRML, se podra hacer algo similar utilizando lo que se conoce como EAI (External Authory Interface), muy de moda ahora en la actualidad. Esta solucin dejara lo que no pueda hacer VRML a otro lenguaje o tecnologa. Es decir, implementar un EAI, pasa por crear un Applet Java que se comunique con un archivo VRML de forma que puedas modificar la escena en tiempo real. EAI proporciona los mecanismos necesarios para comunicar VRML con Java, JavaScript, etc. En nuestra opinin es preferible realizar el simulador en su totalidad en Java porque de esta forma se obtiene un producto ms compacto. Otra opcin vlida sera sustituir el Applet Java por JavaScript, pero cuando se habla de JavaScript hay que pensar primero que visualizador vas a utilizar y segundo si vas a trabajar sobre Netscape o Internet Explorer. De todos es sabido Netscape utiliza JavaScript y Microsoft se ha venido desmarcando de Netscape y ha creado su propia variante llamada Jscript. El usuario es el que controla la experiencia
Los distintos visualizadores permiten a los usuarios desplazarse a voluntad a travs de los mundos virtuales. El ordenador no proporciona rutas fijas sino que es el usuario el que va seleccionando cada una de ellas y decidiendo la ruta que quiere seguir. Los programadores de los mundos tambin pueden indicar cules son las rutas recomendadas para aprovechar la visita al mximo. EL uso de diferentes plug-in es el mayor problema que presenta VRML, existe gran variedad de plug-in VRML y cada uno de ellos tiene sus propias particularidades, ya no slo en el mbito de apariencia exterior sino en las caractersticas internas del propio lenguaje. En Java 3D se puede utilizar cualquiera de los navegadores WEB ms comunes (Netscape, Internet Explorer, HotJava), es Sun MicroSystem quien se encarga de proporcionar un nico plug-in que depender del Sistema Operativo y tarjeta de vdeo (si trabaja con libreras Open-GL o bien DirectX, etc) que utilice el usuario.
Visualizadores VRML
Capacidad de deteccin de colisiones Caracterstica de gravedad, hace que los pies del usuario permanezcan pegados al suelo cuando se utiliza el modo "caminar", facilitando la navegacin. A los
16
Simulacin Virtual de Robots Articulados objetos se pueden aplicar caractersticas fsicas como elasticidad y peso.
La posibilidad de definir y seleccionar posiciones predefinidas dentro del mundo permite marcar posiciones para volver a ellas posteriormente. La simulacin de comportamientos permite la creacin e interaccin de animaciones en una escena, dando a los usuarios la posibilidad de controlar esos comportamientos. Soporte integrado de audio y vdeo.
Superscape Viscape.- Este visualizador VRML funciona exactamente con los navegadores de Netscape y Microsoft bajo plataformas Intel. Viscape no requiere ningn hardware especial como cascos de Realidad Virtual o dispositivos de navegacin especficos, aunque el programa incluye soporte para ellos. Viscape incorpora la tecnologa SuperVRML que permite generar mundos virtuales ms completos y realistas incluyendo la posibilidad de interaccin con los elementos inteligentes del mundo. El inconveniente es que esta tecnologa no sigue el estndar VRML. Funciona bajo Windows 3.1, Windows 95 y Windows NT. Viscape se puede utilizar como una extensin para Netscape y Explorer, o bien como una aplicacin independiente. Cosmo Player.- Este navegador de Silicon Graphics est disponible para plataformas Intel bajo Windows 95, NT y para el sistema operativo Irix. Cosmo Player permite experimentar todas las caractersticas de los mundos VRML 2.0, incluyendo guiones, sensores y sonido. Incluye una caracterstica que mantiene constante la velocidad de reproduccin cuando nos desplazamos por los mundos, sonido tridimensional que aumenta la sensacin de inmersin en los mundos, soporte de lenguaje Java en los nodos de guin, seguimiento del terreno y deteccin de colisiones, modelo de iluminacin mejorada y soporte para el formato de imagen PNG. Cosmo Player tiene tres modos de visualizacin, Walk, Fly y Examiner. El modo Walk y el modo Fly son similares, ya que ambos permiten recorrer la escena tridimensional. La diferencia entre ambos est en que mientras el modo Walk mantiene un nivel de visualizacin constante, con el modo Fly tenemos una total libertad de movimientos y podemos "volar" a travs de las escenas. Hay variedad para todos los gustos y cada cual es libre de elegir la opcin que desee, nosotros personalmente recomendamos Java 3D. Si usted an no est convencido puede leer el siguiente apartado. Por supuesto, VRML es una alternativa para desarrollar la parte de simulacin, la parte de acceso remoto no es viable realizarla utilizando VRML.
Java
17
Simulacin Virtual de Robots Articulados Java es un lenguaje de propsito general orientado a objetos como bien dicen sus creadores, palabras que resumen muy bien la esencia del lenguaje. Desde sus orgenes fue concebido para abordar cualquier tipo de tarea: desde dar vida a una pgina WEB hasta crear un programa de gestin pasando por juegos o aplicaciones como pueda ser un procesador de texto. Netscape ha escrito en Java su servidor WEB, Sun su browser de Internet HotJava, adems ya estn empezando aparecer aplicaciones cliente/servidor para redes como este proyecto, el programa WordPerfect ha sido reescrito en Java y en cuanto a juegos creemos que en los prximos aos asistiremos al boom de los juegos de realidad virtual a travs de la red.
DUKE mascota de Java La ventaja que tiene Java frente a lenguajes tpicos como Visual Basic o C++ es que desde un principio fue concebido para que su integracin con Internet fuese completa, esta caracterstica se aprecia al trabajar con Java porque no se tiene la sensacin de estar utilizando aadidos cuando lo aplicamos a tales fines. Todo esto es posible gracias a que Java fue adems concebido para que el propio lenguaje pudiese ser ampliado segn fuesen apareciendo nuevas necesidades.
Un poco de historia
EN
18
Simulacin Virtual de Robots Articulados Java es un lenguaje de programacin de propsito general. El cdigo fuente de este lenguaje no se compila directamente a cdigo nativo sino a p-code y necesita de una mquina virtual para que el cdigo compilado pueda ejecutarse. Para ejecutar una aplicacin Java, se invoca la aplicacin que fabrica la JVM (Java Virtual Machine) pasndole como parmetro el mdulo Java compilado. Para el usuario no hay diferencias aparentes entre una aplicacin desarrollada con otro lenguaje y la misma aplicacin realizada con Java. La aplicacin Java adopta la apariencia que utilizan las aplicaciones que corren en una determinada plataforma. Java Applet Desde el punto de vista del programador, no hay diferencias entre realizar una aplicacin Java o un Applet, es ms, si se disea apropiadamente el mismo cdigo fuente puede correr como aplicacin en solitario o como Applet. En nuestro caso, el simulador de PUMA es una Applet que hereda esa funcionalidad porque est utilizando la clase Japplet que posee Java, bastara con cambiar esa clase por Jframe y poco ms para obtener una aplicacin Java en vez un Applet. Para un usuario la diferencia es notoria, ya que un Applet se ejecuta desde una pgina WEB y una aplicacin se ejecuta en solitario desde la JVM. Para poder ejecutar un Applet, el browser tiene que tener una mquina virtual para ejecutar cdigo Java compilado (p-code). El usuario empieza escribiendo una pgina HTML en la que se incluye un comando especial que es interpretado por el navegador WEB y que le indica que debe ejecutar un Applet Java. JavaScript En principio, no tiene nada que ver con Java, es un conjunto de instrucciones simples que permiten dotar las pginas WEB de mucha mayor funcionalidad. La idea de los creadores de JavaScript es bien simple: si un navegador WEB tiene la capacidad de manejar funciones, controles (ComboBox, ListBox, etc) utilizando Applet, por qu no crear una serie de comandos simples pero potentes para poder meterlos dentro del cdigo HTML de las pginas WEB que nos faciliten caractersticas similares?. De esta forma se consigue que aplicaciones sencillas dispongan de un mecanismo fcil para realizar una interfaz de usuario sin tener que recurrir a utilizar cdigo Java. Actualmente JavaScript casi slo se utiliza para crear formularios y realizar tareas de validacin de campos en estos formularios. Estos comandos son interpretados por el navegador al descargar la pgina, de la misma forma que interpreta el resto de comandos HTML de la pgina WEB.
19
Simulacin Virtual de Robots Articulados Java ofrece la funcionalidad de un lenguaje potente, pero sin las caractersticas menos usadas y confusas de estos. Java se diseo para que fuese parecido C y C++ (los lenguajes ms extendidos en la actualidad) y as facilitar un rpido aprendizaje. La gran desventaja de C++ esta en que no es un lenguaje seguro debido principalmente al uso de los punteros. En Java se han eliminado los punteros junto con otras caractersticas de C++, para mantener reducidas las especificaciones del lenguaje y se han aadido caractersticas como el Garbage Collector (recolector de memoria dinmica). Gracias a este recolector el programador no tienen que preocuparse de liberar memoria ya que automticamente se ejecuta una tarea con baja prioridad que elimina la memoria asignada aquellos objetos que han dejado de ser referenciados, consiguiendo as liberar bloques de memoria grandes y limitar la fragmentacin de memoria. Orientado a Objetos
Con objeto de mantener la simplicidad del lenguaje se reduce parte de las caractersticas de POO (Programacin Orientada a Objetos) pero tambin se introducen algunas mejoras. Soporta las tres caractersticas propias del paradigma de la orientacin o objetos: encapsulacin, herencia y polimorfismo. En Java se trabaja con objetos y con interfaces a esos objetos. Java obliga a utilizar POO. Distribuido
Java posee extensas capacidades de interconexin sobre TCP/IP. Existen clases que te permiten acceder e interactuar con protocolos de red. Para que los programas puedan ser distribuidos y ejecutarse en varias maquinas interactuando tambin prev mecanismos como RMI, Servlets, etc. Al final de este captulo vamos a analizar en detalle la arquitectura distribuida en Java. Robusto
Java obliga a la declaracin explcita de mtodos, reduciendo as las posibilidades de error. Maneja la memoria acupndose de realizar las tareas de liberacin, evitando la corrupcin en memoria, etc. Para asegurar el funcionamiento de la aplicacin, realiza una verificacin de los ByteCodes (resultado de compilar un programa Java). Adems realiza una comprobacin de tipos para detectar errores, etc. Podemos concluir que Java busca problemas tanto en tiempo de compilacin como de ejecucin. Arquitectura Neutral
Java compila su cdigo en un fichero objeto con independencia de la arquitectura de la mquina en que se ejecutar. Cualquier mquina que tenga el sistema de ejecucin (Java Runtime) puede ejecutar ese cdigo objeto, independientemente de la mquina para la cual ha sido generado. En la actualidad existen RunTime (mquina virtual Java) para Solaris 2.x, Windows 9x, Windows NT, SunOs 4.1.x, Linux, HP-UX, Irix, Aix, MacOs, Apple y se sigue trabajando en el desarrollo de RunTime para otras plataformas. Seguro
Caractersticas como los punteros se han eliminado para evitar el acceso ilegal a memoria. El cdigo Java pasa por muchas comprobaciones antes de ejecutarse en una
20
Simulacin Virtual de Robots Articulados mquina. Al cdigo se le pasa un verificador de ByteCodes que comprueba el formato de los fragmentos de cdigo con objeto de detectar fragmentos de cdigo ilegal que violan los derechos de acceso sobre objetos o intentan cambiar las clases de un objeto. En Java existe tambin un cargador de clases que ayuda a Java a mantener su seguridad ya que separa el espacio de nombres del sistema de ficheros local de los recursos procedentes de la red. Primero se buscan las clases en el sistema local antes de recurrir a las clases procedentes del exterior que se almacenan en un espacio de nombres privado, asociado con el origen. Este mecanismo evita ataques del tipo Caballo de Troya, es decir imposibilita que una clase exterior suplante a una predefinida de Java. Por ltimo comentar que Java imposibilita abrir ficheros en una mquina local y normalmente las operaciones se realizan sobre los ficheros de la mquina remota de donde parti el Applet. Portable
En Java se construyen las interfaces de usuario a travs de un sistema abstracto de ventanas de forma que estas puedan ser implantadas en entornos Unix, Pc o Mac. Es decir las ventanas Java pueden adoptar la apariencia del entorno donde se ejecuta la aplicacin. Interpretado
El interprete Java puede ejecutar directamente el cdigo objeto formado por ByteCodes. Linkar un programa normalmente consume menos tiempo que compilar un programa. Sin embargo, Java es ms lento que otros lenguajes de programacin compilados ya que debe ser interpretado y no ejecutado como sucede en cualquier programa tradicional. En la actualidad se estn desarrollando compiladores para Java aunque eso implicara una perdida arquitectura neutral. Multitarea
La ventaja de ser multitarea consiste en un mejor rendimiento interactivo y mejor comportamiento en tiempo real. Aunque el comportamiento en tiempo real est limitado a las capacidades del sistema operativo subyacente (Unix, Windows, etc). Respecto a la facilidad de uso, al ser la multitarea una caracterstica propia del lenguaje Java, es ms fcil de utilizar y ms robusta que su homloga en C o C++. Dinmico
Java no intenta conectar todos los mdulos que componen la aplicacin hasta el mismo instante de ejecucin, esto permite que libreras nuevas o actualizadas no paralicen la ejecucin de las aplicaciones siempre que mantengan la compatibilidad con el API anterior.
APIs de Java
Java Enterprise.- Especificaciones para desarrollos en entornos corporativos.
21
Simulacin Virtual de Robots Articulados JDBC Java.- Java Database Connectivity, permite a aplicaciones o applets acceder a bases de datos de forma homognea va consultas SQL. Java RMI.- Remote Method Invocation, invocacin remota de mtodos para aplicaciones distribuidas. En el siguiente apartados se profundizar sobre los distintos enfoques que tenemos actualmente para abordar las aplicaciones distribuidas. Java IDL.- Puente de compatibilidad con el modelo estndar de objetos CORBA. JNDI.- Java Naming and Directory Interface, proporciona servicios de directorio y localizacin de recursos en un entorno corporativo. JavaBeans.- Especificacin de componentes basados en Java. JAF.- JavaBeans Activation Framework, entorno para determinar el tipo de datos, encapsular el acceso a ellos, descubrir las acciones que se les pueden aplicar e instanciar el componente JavaBean adecuado. Java Security API.- API para componentes que necesitan encriptacin, certificacin, firmas digitales y autenticacin. JFC.- Java Fundation Classes, jerarqua de clases para el desarrollo de aplicaciones grficas e interfaces de usuario. Swing Set.- Conjunto de pequeos componentes grficos para aplicaciones: botones, pestaas, etc. Java 2D.- Extensin del AWT para el tratamiento de informacin grfica bidimensional Java Servlet API.- Especificacin que permite crear Applets que se ejecutan en el servidor, permite conseguir resultados mejores que utilizando CGI. Java Server API.- API para el intercambio de informacin entre un servidor WEB y aplicaciones que se ejecutan en su entorno. Java Commerce API.- API para transacciones comerciales en Internet Java Media API.- Conjunto de especificaciones para el acceso y utilizacin de informacin interactiva. JMF.- Java Media Framework, conjunto de especificaciones para la arquitectura, protocolos e interfaces de programacin para reproductores multimedia, captura y videoconferencia. Java Collaboration.- Especificacin para la comunicacin interactiva bidireccional. Java Telephony.- Especificacin para aplicaciones de telefona. Java Speech.- Especificacin para el reconocimiento y sntesis de voz. Java Animation.- Especificacin para la manipulacin y movimiento de objetos bidimensionales Java 3D.- Especificacin para la manipulacin de objetos tridimensionales. Esta extensin del API de Java es la que hemos utilizado para modelar el Robot Puma, en
22
Simulacin Virtual de Robots Articulados sucesivos captulos abordaremos con ms detalle el API Java 3D descubriendo su filosofa y funcionamiento. Java Management API.- Especificacin para la gestin remota de redes. JavaMail API.- Especificacin para proporcionar un conjunto de clases abstractas que modelice un sistema de correo. Personal Java.- Espeficaciones para aparatos electrnicos de consumo conectables a redes, incluyendo televisores, telfonos inteligentes, videoconsolas, etc. Java Smart Card Embedded Java.- Especificaciones para dispositivos electrnicos industriales con software embebido ejecutndose sobre sistemas operativos en tiempo real, incluyendo dispositivos de instrumentacin, electrnica de control de procesos, etc. Despus de esta breve exposicin de todas las ventajas y posibilidades que ofrece Java y VRML, el lector comprender ms fcilmente porque la mayora de los programadores de VRML se estn pasando a Java 3D. Sin embargo VRML no va a desaparecer porque en la red sigue habiendo usuarios que lo prefieren por su simplicidad y porque las caractersticas de sus aplicaciones no necesitan grandes prestaciones. Adems hoy en da se utiliza VRML tambin como estndar para que programas de diseo grfico como 3D-Studio o LightWave puedan intercambiar objetos tridimensionales entre s.
23
Arquitecturas Distribuidas
Diseo aplicaciones Distribuidas Aplicaciones Distribuidas en Internet Applet en Internet Solucin Java
se plante el problema de acceder remotamente al puma se estudiaron varias de soluciones posibles. La restriccin ms fuerte era que el acceso al PUMA debera de poderse realizar a travs de Internet utilizando un navegador WEB. Aparece entonces la figura del cliente con su navegador WEB y el equipo servidor que debera permitir el acceso al PUMA real, en definitiva una arquitectura tpica distribuida. A pesar de las muchas posibilidades existentes para realizar esta parte del proyecto se decidi optar siempre en igualdad de condiciones por una solucin Java antes que por cualquier otra. Este apartado, trata de presentar sin entrar en detalle la panormica de posibilidades de programacin distribuida en la actualidad. Veremos los distintos enfoques que se pueden dar al diseo de aplicaciones distribuidas comparndolos con el modelo de objetos distribuidos de Java. Al finalizar este apartado se tendrn los conocimientos suficientes para comprender porque hemos elegido RMI para realizar nuestro proyecto y se dispondr de la informacin necesaria para conocer el funcionamiento de RMI. Ms adelante en el captulo V explicaremos cmo usar RMI para desarrollar aplicaciones distribuidas.
CUANDO
UNA
24
25
Applet en Internet
26
Solucin Java
Simulacin Virtual de Robots Articulados mejor al modelo de objetos de Java. DCOM (Modelo de Objeto Componente Distribuido).- Utiliza las llamadas a procedimientos remotos para permitir que los objetos que se estn ejecutando en un sistema invoquen a los mtodos de los objetos que se ejecutan en otros sistemas. Ofrece posibilidades de programacin orientadas a objetos a travs de objetos, interfaces y mtodos del COM. Adems, el DCOM proporciona servicios de seguridad amplios. No obstante, esta posibilidad constituye ms bien un puente a las tecnologas de herencia que una extensin distribuida del modelo de objetos Java. Microsoft ha incluido el uso de DCOM en sus herramientas de desarrollo Java, rompiendo la compatibilidad con el Java de JavaSoft. Esta tecnologa no funciona tan bien fuera Microsoft. CORBA (Arquitectura de Intermediacin de Solicitud de Objetos Comunes).Proporciona un enfoque excelente a la construccin de aplicaciones distribuidas orientadas a objetos. Java admite desarrollos con CORBA, sin embargo, CORBA est diseada para admitir un modelo de objetos independiente del lenguaje. La RMI de Java posee todas las ventajas de CORBA, pero est especialmente adaptada al modelo de objetos Java. Esto hace que la RMI de Java sea mucho ms eficaz y fcil de usar que CORBA en lo que respecta a aplicaciones de Java puro. En principio nos planteamos utilizar RMI de forma combinada con cdigo nativo para resolver el problema del acceso remoto, pero sin perder de vista CORBA. RMI (Remote Method Invocation).- El modelo de objeto distribuido que utiliza Java llamado RMI, permite que los objetos que se ejecutan en una JVM (Mquina Virtual Java) invoquen a los mtodos de objetos que se ejecutan en otras JVM diferentes. Estas JVM pueden ejecutarse como procesos separados en la misma computadora o en otras computadoras distintas conectadas a travs de una red TCP/IP. Como Internet es en ltimo trmino una red TCP/IP, lo anterior se puede traducir en que una mquina cliente en cualquier rincn del mundo es capaz de invocar mtodos de un objeto que se encuentre corriendo sobre un servidor en cualquier otro rincn del mundo.
Esquema Bsico RMI El objeto que realiza la invocacin del mtodo se denomina objeto cliente. El objeto cuyos mtodos se estn invocando se denomina objeto servidor. El objeto cliente tambin recibe el nombre de objeto local y se dice que se ejecuta de forma local. El objeto servidor tambin se denomina objeto remoto y se dice que se ejecuta de forma remota. En el captulo V, volveremos con ms detalle sobre el mdulo de acceso remoto y sobre RMI. Describiremos el modelo de objetos distribuidos de Java y explicaremos por qu constituye una extensin natural del modelo de objetos Java que se emplea dentro de una Java Virtual Machine.
28
29
Conclusiones
30
Capitulo 2: Java 3D
31
Java y Java 3D
Simulacin Virtual de Robots Articulados Estos programas no pueden acceder a la red local, no pueden acceder a ficheros en el sistema local y tampoco pueden ejecutar programas en dicho sistema.
Bases de la P.O.O.
es un lenguaje de programacin que tiene caractersticas bastante interesantes para el desarrollo de aplicaciones Web y la industria del software. La mayora de los lenguajes de programacin actuales son compilados o interpretados. Java es de los dos tipos, lo que le proporciona una enorme versatilidad. Para comprender el funcionamiento de Java, y por extensin de Java 3D, hay que recordar las bases de los diferentes tipos de lenguajes. Los lenguajes interpretados son muy fciles de aprender y usar. Por ejemplo, BASIC es un lenguaje de programacin interpretado, donde se suceden una serie de instrucciones de alto nivel, y una vez acabado el programa est listo para su ejecucin. El intrprete se encarga de transformar el conjunto de lneas de cdigo en un conjunto de instrucciones en cdigo mquina. Al contrario, los lenguajes compilados son generalmente ms difciles de aprender y usar. El programa se crea usando instrucciones de alto nivel, luego se compila creando un ejecutable y luego se ejecuta el programa de manera que el ordenador lo interpreta de forma directa. Como las lneas de cdigo no tienen que ser traducidas en tiempo de ejecucin, los programas compilados son mucho ms rpidos que los interpretados. Como habamos adelantado Java es un lenguaje mixto, esto es, se crea el programa usando un lenguaje estructurado de alto nivel y luego se compila el cdigo fuente a un nivel intermedio llamado bytecode. Entonces se ejecuta el cdigo bytecode, el cual es interpretado por el JRE (Java Runtime Environment). El bytecode es muy diferente al cdigo mquina. El cdigo mquina es una serie de 0's y 1's, mientras que el bytecode es un conjunto de instrucciones parecidas al ensamblador. El porqu del uso de este doble paso es porque el cdigo mquina se crea compilando un programa fuente sobre una determinada plataforma, por lo que el programa slo puede usarse en el mismo tipo de mquinas para la cual se haya compilado. Sin embargo, el bytecode puede ejecutarse en cualquier plataforma capaz de usar el JRE. Esta capacidad es la que hace que Java sea independiente de la arquitectura. El secreto est en que el cdigo fuente en Java es compilado para una mquina que no existe. Esta mquina es llamada Mquina Virtual Java y slo existe en la memoria del ordenador. El que el compilador de Java cree un bytecode para una mquina inexistente es slo la mitad del proceso que hace a la arquitectura Java neutral. Adems el intrprete de Java debe de servir como intermediario entre la Mquina Virtual y la mquina real. La ilustracin muestra como Java trabaja normalmente sobre un ordenador. La Mquina Virtual se sita entre el Sistema Operativo y la capa de objetos Java. Sobre esta capa de objetos se encuentran las aplicaciones de usuario escritas en Java.
JAVA
33
El API Java 3D
EL API Java 3D es una interfaz para escribir programas que sirven para visualizar
e interactuar con grficos en tres dimensiones. Java 3D es una extensin estndar del Java 2 JDK (Java Development Kit). El API provee de una coleccin de constructores en alto nivel para la creacin y manipulacin de objetos geomtricos en 3D y estructuras para renderizar dichos objetos. Posee adems funciones para la creacin de animaciones, visualizaciones y aplicaciones interactivas con grficos en 3D. No es ms que una jerarqua de clases Java que sirven como interfaz para grficos tridimensionales complejos y sistemas de renderizado tanto de sonidos como de grficos. El programador trabaja con constructores de alto nivel para la creacin y manipulacin de objetos en 3D. Los objetos geomtricos residen en un "universo virtual" que luego se renderiza. El API est diseado con la flexibilidad para crear universos virtuales bastante precisos con una amplia variedad de tamaos. Cogiendo como ventaja los threads de Java, la renderizacin de Java 3D puede realizarse en paralelo. Por tanto, el renderizador se optimiza de forma automtica para realizar su trabajo. Un programa en Java 3D crea instancias de objetos Java 3D y los aloja dentro de una estructura de datos llamada "escena" de la que hablaremos posteriormente. Como preludio diremos que una escena es un conjunto de objetos 3D agrupados en una estructura de rbol que especifica completamente el contenido de un universo virtual y cmo es renderizado. Las aplicaciones en Java 3D pueden ser hechas para ser ejecutadas como aplicaciones simples, como applets en exploradores de Internet (los cuales deben actualizarse para que soporten Java 3D) o ambos.
34
Simulacin Virtual de Robots Articulados Hay cientos de campos y mtodos en las clases de Java 3D. Un universo virtual simple que incluya alguna animacin puede ser construido con pocas clases. Sin embargo, escenas ms complicadas requieren una mayor cantidad de clases y un conocimiento exhaustivo de cada una de ellas. Adems de las clases ncleo, los programas en Java 3D suelen utilizar el paquete "com.sun.j3d.utils", normalmente llamado paquete de utilidades. El uso de estas clases reduce significativamente el nmero de lneas de cdigo en los programas. Adems de los paquetes nombrados, todos los programas en Java 3D utilizan clases del paquete "java.awt" y "javax.vecmath". Las clases AWT (Abstract Window Toolkit) crean una ventana para mostrar el resultado de la renderizacin, mientras que las clases del paquete vecmath definen vectores matemticos para puntos, matrices y otros objetos matemticos. En definitiva, los objetivos principales del API Java 3D son:
Permitir desarrollar aplicaciones Java para diseo y control de universos virtuales en tres dimensiones utilizando clases en alto nivel. Obtencin de un alto rendimiento en la generacin de escenas y en la renderizacin de las mismas mediante threads. Utilizacin de las aplicaciones independientes de la plataforma, ya que el programa est hecho en Java y corre sobre una mquina virtual que es independiente de la plataforma en la que se ejecute. Obtencin de muy altas prestaciones con un conjunto mnimo de clases.
El Concepto de Escena
Simulacin Virtual de Robots Articulados (GDA). Los grafos dirigidos son grafos cuyos arcos poseen una direccin. Los GDA, por tanto, son grafos dirigidos que no tienen ciclos; es decir, comenzando desde cualquier nodo del grafo, no se puede encontrar un camino que regrese a dicho nodo siguiendo las direcciones de los arcos. Para nuestros propsitos, las referencias no formarn parte de la escena. Por tanto, slo existe un camino desde la raz del GDA, es decir, de la escena, hasta cada una de las hojas. El camino desde la raz de la escena hasta un nodo hoja determinado se denomina Scene Graph Path Camino de Escena. Segn la definicin habra un nico camino de escena para cada nodo hoja de la escena. Para hacernos una idea conceptual de lo que es una escena podemos fijarnos en el siguiente dibujo.
Cada "camino de escena" en una escena de Java 3D especifica de manera completa el estado de esa hoja. La informacin de estado incluye la localizacin, orientacin y tamao de los objetos visuales. Por lo tanto, los atributos de cada objeto visual dependen slo de su camino de escena. El renderizador de Java 3D se aprovecha de esta caracterstica y renderiza las hojas en el orden que considere ms eficiente. Normalmente el programador no tiene control sobre el orden de renderizacin de los objetos. La representacin grfica de una escena puede servir de diseo para los programas en Java 3D. Las escenas se dibujan usando smbolos standard como se muestran en la siguiente figura.
36
Cada uno de los smbolos de la izquierda representa a un objeto individual de la escena. Los dos primeros representan objetos de clases especficas: Universo Virtual y Locale. Los siguientes tres smbolos representan los objetos Grupo, Hoja y NodeComponent respectivamente, y se utilizan para indicar las subclases de los objetos especficos. La flecha normal representa una relacin padre-hijo entre dos objetos. La flecha punteada es una referencia a otro objeto. A continuacin se presenta el diagrama de una escena simple.
37
Es posible crear una escena ilegal. Un ejemplo de una escena ilegal se muestra en la Figura 2-1. Es ilegal porque viola las propiedades del GDA. El problema yace en dos objetos TransformGroup que tienen el mismo Shape3D como nodo hijo. Hay que recordar que un nodo hoja slo puede tener un padre. En otras palabras, solo puede haber un camino desde el objeto Locale al nodo hoja.
Figura 2-1 Puede parecer que la Figura2-1 define tres objetos visuales. Los objetos TransformGroup permiten localizar la imagen del objeto visual en diferentes posiciones. Un programa Java 3D que define una escena ilegal puede ser compilado, pero no
38
Simulacin Virtual de Robots Articulados renderizado. Cuando un programa de este tipo se ejecuta, el sistema devuelve una excepcin. El programa permanecer ejecutndose pero necesitar ser parado. Como consecuencia ninguna imagen ser renderizada. Una posible arreglo a la escena de la Figura 1 se observa en la Figura 2-2.
Figura 2-2
EN la Figura 2-3 aparece una visin de los tres primeros niveles de la jerarqua de
clases del API Java 3D. Las clases Universo Virtual, Locale, Grupo y Hoja aparecen en estos primeros niveles. A parte de los objetos Universo Virtual y Locale, el resto de la escena est compuesta por los denominados objetos de escena. Todos los objetos de escena tienen dos subclases: Nodo y NodeComponent. Las subclases de la clase Nodo proveen de ms objetos a la escena. Un objeto Nodo es en realidad un nodo Grupo u Hoja. A continuacin pasamos a especificar con un poco ms de detalle estas clases de suma importancia.
Clase Nodo
La clase nodo es una superclase abstracta de las clases Grupo y Hoja. Define algunos mtodos comunes para estas subclases que forman parte de cualquier escena.
Clase Grupo
La clase Grupo es la superclase usada para especificar la localizacin y orientacin de objetos visuales en el universo virtual. Dos de las subclases de Grupo son BranchGroup y TransformGroup. En la representacin grfica de la escena, los grupos son representados con crculos y anotados con "BG" o "TG" en el caso de ser BranchGroups o TransformGroups respectivamente. La Figura 2-2 muestra un ejemplo.
Clase Hoja La clase hoja es la superclase usada para especificar la figura (shape), sonido y
39
Simulacin Virtual de Robots Articulados conducta (behavior) de los objetos visuales en el universo virtual. Algunas de las subclases de la clase Hoja son Shape3D, Light, Behavior and Sound. Estos objetos no pueden tener hijos, pero pueden referenciar a clases NodeComponent.
Clase NodeComponent
La clase NodeComponent es la superclase usada para especificar las propiedades de geometra, apariencia, textura y material de un nodo Shape3D. Los NodeComponent no son parte de la escena, pero son referenciados por ella. Un mismo NodeComponent puede ser referenciado por ms de un objeto Shape3D.
40
Figura 2-3
41
42
Simulacin Virtual de Robots Articulados Se puede construir una escena de una manera bastante ms sencilla y que conlleve menos programacin. Los programas que son escritos usando este mtodo bsico tienen View Branch Graphs con idntica estructura. La regularidad de la estructura de los View Branch Graphs se encuentra en la clase SimpleUniverse. Las instancias de SimpleUniverse ejecutan los pasos 2, 3 y 4 del mtodo bsico. El uso de la clase SimpleUniverse reduce significativamente el tiempo y esfuerzo necesitado para crear el View Branch Graph. Por lo tanto, el programador no tiene ms que concentrarse en el contenido de la escena. El SimpleUniverse es un buen punto de partida para programar en Java 3D porque permite ignorar los View Branch Graph. Sin embargo, su uso no permite tener varias vistas del universo virtual. La Figura 2-4 muestra el uso del objeto SimpleUniverse.
Clase SimpleUniverse
El constructor del objeto SimpleUniverse construye una escena incluyendo objetos Universo Virtual, Locale y un View Branch Graph completo. El View Branch Graph creado usa instancias de ViewingPlatform y Viewer en lugar de usar las clases ncleo.
Figura 2-4 El uso de SimpleUniverse hace que el mtodo bsico sea ms sencillo. El mtodo de generacin de un programa en Java 3D ahora queda como sigue: 1. Crear un objeto Canvas3D 2. Crear un objeto SimpleUniverse con referencias al objeto Canvas3D ms cercano. a. Configurar el objeto SimpleUniverse 3. Construir el contenido de la escena (content branch graph) 4. Compilar el contenido de la escena 5. Insertar el contenido de la escena en el objeto Locale del SimpleUniverse
43
Simulacin Virtual de Robots Articulados El objeto SimpleUniverse crea un View Branch Graph completo para un universo virtual. El View Branch Graph incluye un Image Plate. Un image plate es el rectngulo conceptual en el que la escena es proyectada para formar la imagen renderizada. El objeto Canvas3D, el cual provee una imagen en una ventana del monitor del ordenador, puede servir como image plate La Figura 2-5 muestra la relacin entre el image plate, el ojo del observador y el universo virtual. La posicin del observador est detrs del image plate. Los objetos visuales enfrente del image plate son renderizados sobre el image plate. La renderizacin puede verse como la proyeccin de los objetos visuales sobre el mismo.
Figura 2-5 Por defecto, el image plate est centrado en el origen del SimpleUniverse y su orientacin hacia el lado negativo del eje Z. Desde esta posicin, el eje X es una lnea horizontal que atraviesa el image plate con valores positivos hacia la derecha. El eje Y es una lnea vertical que atraviesa el centro del image plate con valores positivos hacia arriba. Por lo tanto, el punto (0, 0, 0) es el centro del image plate.
44
Simulacin Virtual de Robots Articulados convertimos a una forma ms eficiente para ser renderizado. Se recomienda que se realice una compilacin como ltimo paso antes de que el Branch Group se convierta en vivo. Los conceptos de compilado y vivo son implementados en la clase de Objetos de Escena. Ntese que el comienzo de la renderizacin no forma parte de los pasos bsicos en la creacin de un programa en Java 3D que se discuti en el apartado anterior. El renderizador de Java 3D se ejecuta en un bucle infinito cuando un Branch Graph que contiene una instancia de View llega a estar vivo en un universo virtual. Una vez ejecutado, el renderizador de Java 3D conceptualmente ejecuta las siguientes operaciones: While (true) { Procesa la entrada If (Peticin de salida) break Ejecuta Behaviors Estudia la escena y renderiza los objetos visuales }
UN programa en Java 3D tpico comienza definiendo una nueva clase para extender
la clase Applet. Ya habamos dicho que los programas Java 3D pueden ser escritos como aplicaciones, pero usando la clase Applet se consigue en camino fcil para generar aplicaciones en ventanas. La clase principal de un programa en Java 3D define un mtodo para construir el contenido de la escena. Todos los pasos del mtodo de construccin simple de programas en Java 3D son implementados en el siguiente ejemplo.
public class HelloJava3Da extends Applet { public HelloJava3Da() { setLayout(new BorderLayout()); Canvas3D canvas3D = new Canvas3D(null); add("Center", canvas3D); BranchGroup scene = createSceneGraph(); // SimpleUniverse is a Convenience Utility class SimpleUniverse simpleU = new SimpleUniverse(canvas3D); // This will move the ViewPlatform back a bit so the // objects in the scene can be viewed. simpleU.getViewingPlatform().setNominalViewingTransform(); simpleU.addBranchGraph(scene); } // end of HelloJava3Da (constructor) public BranchGroup createSceneGraph() { // Create the root of the branch graph BranchGroup objRoot = new BranchGroup();
45
Primero creamos un objeto Canvas 3D, luego creamos un objeto SimpleUniverse. A continuacin configuramos el objeto SimpleUniverse moviendo el ViewPlatform un poco hacia atrs para poder ver los objetos de la escena. El contenido de la escena se crea invocando al mtodo createSceneGraph y posteriormente es compilado. Finalmente se inserta el contenido de la escena en el Locale del Simple Universe. La clase HelloJava3Da se deriva de un Applet pero el programa es ejecutable como una aplicacin debido al uso de la clase MainFrame. La clase Applet se usa como base para hacer ms fcil la escritura de un programa Java 3D que arranca en una ventana. Mainframe provee una ventana (frame) AWT para un applet permitiendo al applet ejecutarse como una aplicacin. El tamao de la ventana de la aplicacin resultante se especifica en la construccin de la clase MainFrame. La escena resultante de este ejemplo es la mostrada en la Figura 2_6.
Figura 2-6
Finalmente vamos a dar unas pequeas definiciones de las clases utilizadas en este 46
Simulacin Virtual de Robots Articulados ejemplo y que se utilizan tambin en el diseo del Puma Virtual.
Clase BranchGroup
Los objetos de este tipo se usan para formar escenas. Las instancias de BranchGroup son la raz de los subgrafos. Este tipo de objetos slo pueden ser hijos de objetos Locale. Sin embargo, pueden tener muchos hijos que pueden ser otros Grupos u Hojas.
Clase Canvas 3D
Esta clase se deriva de la clase Canvas de AWT. Un objeto Canvas3D puede ser referenciado en el View Branch Graph de la escena.
Clase Transform3D
Representan transformaciones geomtricas en tres dimensiones tales como traslaciones y rotaciones. Estos objetos normalmente se usan para la creacin de objetos TransformGroup. Primero se construye el objeto Transform3D, posiblemente como combinacin de otros objetos del mismo tipo, y luego se construye el objeto TransformGroup usando el objeto Transform3D. Un objeto Transform3D puede representar traslaciones, rotaciones, escalas o combinaciones de estos. Cuando se especifica una rotacin, el ngulo se expresa en radianes.
Clase TransformGroup
Se trata de una subclase de la clase Group. Se usan para la creacin de escenas y tienen una coleccin de hijos que son objetos Nodo. Llevan a cabo transformaciones geomtricas, tpicamente creadas con objetos Transform3D, los cuales no son objetos de la escena.
PARA llegar a lograr una escena en Java 3D que represente de manera fiel el robot en
cuestin se tuvo que dividir el mismo en piezas de manera que tanto el modelado como el movimiento del mismo se pudiera hacer de manera ms fcil y cmoda. Atendiendo simplemente a las articulaciones que posee el robot podran distinguirse tres partes principales, mas la mueca como elemento mvil complementario. Estas tres partes bien diferenciadas son la base del robot, el primer brazo y el segundo brazo. Para lograr la mxima similitud entre el robot real (comentado en otra seccin) y el modelado virtual del mismo se tuvo que proceder a medir el robot real y usar nociones fundamentales de geometra para realizar un modelado correcto. Con motivos de proporcionar al modelo una mayor portabilidad, cada una de las piezas anteriormente mencionadas se construy como una clase Java 3D. De esta manera un brazo del robot puede usarse para formar parte de un robot diferente. Hay que tener en cuenta la relacin existente entre los ejes cartesianos del mundo virtual. Como las distintas partes que constituyen el robot se han construido de forma independiente, para conectarlas hay que desplazarlas respecto a las dems, rotndolas si se considera necesario. Estas rotaciones hacen que los ejes de coordenadas del origen de cada 47
Simulacin Virtual de Robots Articulados pieza roten con ellas, por lo que no tienen porque coincidir los ejes cartesianos matemticos colocados al comienzo de cada articulacin con los ejes virtuales de cada pieza. Para hacer referencia a un determinado punto en el espacio tridimensional proporcionado por la escena en Java 3D se utilizarn posiciones relativas a los ejes cartesianos de la base del robot. An a este nivel, los ejes cartesianos matemticos de la primera articulacin no coinciden con los ejes situados en la base del puma del mundo virtual. La diferencia es que estn intercambiados los ejes Y y Z y el nuevo eje Y tiene sentido opuesto.
A continuacin se pasar a comentar con detalle la estructura de cada una de las clases creadas sin entrar en demasiado detalle en los objetos que permiten el movimiento de los brazos, ya que sern comentados en secciones posteriores.
UNA vez que hemos visto como se construye una escena en Java 3D y para que
sirven las principales clases que se suministran vamos a ver como se realiza el modelado del robot, comenzando con la primera de las piezas: la base. La Figura 2-7 muestra la base del robot real.
Figura 2-7 La figura de la base es la que se engancha a la raz de la escena que representa el Universo Virtual en Java 3D. Tambin proporciona un enganche para que el primer brazo del
48
Simulacin Virtual de Robots Articulados robot virtual pueda aadirse a ella de manera que cuando la primera articulacin gire se mueva toda la estructura del robot. La escena en Java 3D que representa la base del Puma es la siguiente:
Escena asociada a la base del robot La clase Java 3D que define la base del robot virtual se extiende de la clase TransformGroup y se representa con el nombre this. Este objeto es el que sirve de enganche al siguiente objeto que forma parte del brazo robot, en este caso el primer brazo. El shape2 es el objeto geomtrico bsico de Java 3D que representa un cilindro, y va a servir como primer link del robot. La primera articulacin viene reflejada en el objeto RotatorInterpolator (RI) ya que es el que permite que este link gire respecto al eje que se desee. Este objeto as como el resto de objetos necesarios para producir el movimiento del robot virtual vienen explicados con ms detalle en posteriores secciones. Los objetos TransformGroup llamados objTransCil y objRotateCil sirven para desplazar y rotar el cilindro anterior, de manera que quede en la posicin correcta respecto a la caja que sirve como base del puma. Esta caja viene determinada por el objeto shape1. Este objeto no es un objeto bsico de Java 3D, sino que se construye determinando los puntos extremos de un ortoedro y utilizando funciones de construccin de figuras. El objeto objBase sirve para unir la caja de la base con el cilindro de la primera articulacin. Por ltimo el objeto TransformGroup llamado objTransBase desplaza hacia arriba el conjunto de la base para situarla al nivel del suelo. Este se debe a que cuando se crean todos los objetos, el centro de los mismos es el centro geomtrico. Es decir, el centro del ortoedro de la base del puma est en el centro mismo del objeto tal y como se muestra en la siguiente figura.
49
Primer Brazo del Robot La escena asociada con el primer brazo del robot virtual es la siguiente:
50
Escena del primer brazo del robot Los objetos shape Cilindro y CajaBrazo1 representan el primer cilindro y la figura geomtrica que sirve como caja del primer brazo respectivamente. A estos objetos se les asocian sendas apariencias mediante relaciones de referencia (mostradas con trazo discontinuo). El TransformGroup objCil hace que el cilindro se posicione correctamente respecto al centro de la caja del primer brazo. A su vez, el TransformGroup objBrazo1 sirve para unir el cilindro con la caja, aadiendo un tercer objeto ColorCube que es invisible y cuya nica misin es el de permitir leer las coordenadas virtuales del primer Brazo para comprobacin de los clculos de la cinemtica directa. El objeto objRotaBrazo1 rota el brazo completo para acomodarlo a la nueva localizacin (enganchado al cilindro de la base). Es de este objeto de donde cuelga el objeto RotatorInterpolator que permite el giro del primer brazo. Finalmente, el TransformGroup llamado desp define el desplazamiento del primer brazo respecto a la base y se engancha con la clase que define a sta. La figura virtual obtenida es la siguiente.
51
Simulacin Virtual de Robots Articulados Brazo virtual enganchado a la base del puma
Segundo Brazo del Robot Puma Como habamos dicho, la escena asociada con la clase creada para el segundo brazo es muy similar a la primera. Esta escena se observa en la siguiente figura.
52
Escena del Segundo Brazo del Puma Al igual que en el primer brazo se observan dos objetos shapes principales; el shape1 identifica la figura de la caja metlica del segundo brazo, mientras que el shape2 identifica el cilindro de giro asociado con la tercera articulacin terica. El objeto TransformGroup llamado objCil desplaza el cilindro a la posicin correcta en relacin a la estructura metlica. El objeto objBrazo2 sirve para unir el objeto Interpolador que realiza el movimiento, la propia clase del segundo brazo y el objeto ColorCube que es invisible y, al igual que el todas las articulaciones, sirve para obtener la posicin geomtrica del punto asociado con la tercera articulacin. Por ltimo los objetos TransformGroup llamados desp2 y objRotaBrazo2 desplazan y rotan respectivamente al segundo brazo para colocarlo en la posicin correcta respecto del primero. La figura virtual obtenida se muestra en la siguiente figura.
DEBIDO al complejo movimiento de la mueca del brazo robot, sta ha sido la figura
ms difcil de modelar, lo que se traduce en una mayor cantidad de cdigo. A las dos articulaciones de revolucin, una para elevar la mueca y otra para rotarla se le unen los ejes que hacen que la pinza de la mueca se abra y cierre.
Mueca del Robot La escena asociada a la mueca es algo ms compleja que las escenas de los objetos anteriores, debido a que se trata de una pieza compuesta por otras figuras que giran, las pinzas. La escena resultante se muestra en la siguiente figura.
Para simplificar un poco la escena no se han incluido los objetos que proporcionan la apariencia a las figuras mediante relaciones de referencia. Simplemente decir que hay una relacin de referencia desde cada objeto shape, excepto los objetos ColorCube y shapeExtremo, a un objeto de tipo Appearance. El objeto shape llamado caja identifica la figura del ortoedro que sirve como base a la
54
Simulacin Virtual de Robots Articulados mueca. A una distancia igual a la longitud de las pinzas se coloca, utilizando el objeto TransformGroup llamado objExtremo, un objeto invisible llamado shapeExtremo, que es dnde se va a colgar el objeto virtual que se encuentra en el universo cuando la mueca del robot lo recoja. El cilindro asociado a la mueca que permite su elevacin y rotacin se crea mediante el objeto shape llamado shape2, y se coloca mediante un TransformGroup en la posicin adecuada respecto a la base de la mueca previamente comentada. Los dos subrboles de la derecha identifican las dos pinzas de la mueca. Se utilizan dos objetos TransformGroup para desplazar y rotar la pinza respecto a la base de la mueca, y un tercero permite unir las figura de la pinza con el objeto CollisionDetector (CD). Este objeto es el que permite que se disparen los eventos necesarios cuando la pinza entra en contacto con algn objeto. El objeto RotateInterpolator (RI) permite que la pinza se abra o cierre. Como las dos pinzas de la mueca son idnticas, los subrboles tambin lo son. Lo nico que vara es el desplazamiento y rotacin de cada una de las pinzas respecto a la base de la mueca. Todos estos elementos cuelgan de la clase principal (this), la cual debe ser desplazada para colocar la mueca en la posicin adecuada respecto al segundo brazo. Esto se consigue utilizando el TransformGroup llamado despMuneca. Los TransformGroup intermedios llamados objRotaMuneca1 y objRotaMuneca2 se usan para colocar los objetos RotateInterpolator que permiten el giro y elevacin de la mueca. Finalmente, el objeto invisible ColorCube permite leer la posicin virtual de la base de la mueca como comprobacin de los clculos de la cinemtica directa.
55
56
Simulacin Virtual de Robots Articulados apartado de esta seccin. Un elemento importante en las animaciones y que no se ha comentado son las Capacidades. En secciones anteriores habamos dicho que cuando una escena se compila, se convierte en una representacin ms eficiente para su renderizacin. Aparte de esto, tiene el efecto de fijar el valor de los parmetros y posiciones de los objetos de la escena. A menos que se especifique de manera explcita, los atributos de los objetos de una escena no pueden ser cambiados en tiempo de ejecucin. Hay momentos en los que se necesita cambiar las propiedades de determinados objetos. Por ejemplo, cambiando los valores de un TransformGroup se pueden crear animaciones. Para que esto ocurra se debe habilitar la capacidad de cambio de las propiedades del TransformGroup. La lista de parmetros que pueden ser accedidos se llama capacidades del objeto. Cada objeto de la escena tiene un conjunto de bits de capacidades que indican que clase de parmetros pueden cambiarse cuando ese objeto est vivo. Existen funciones para habilitar, deshabilitar y obtener el valor de una determinada capacidad de un objeto. En definitiva, para especificar una animacin se deben realizar los siguientes pasos: 1. Crear un objeto TransformGroup y darle la capacidad de permitir el cambio de sus propiedades. 2. Crear un objeto Alpha (se comentar en el siguiente apartado) 3. Crear el behavior adecuado, por ejemplo, un RotationInterpolator. 4. Especificar la regin de scheduling. 5. Colocar el behavior como hijo del TransformGroup.
57
Simulacin Virtual de Robots Articulados cambia el valor del objeto Alpha. Es posible especificar el eje de rotacin, el ngulo de comienzo y el ngulo final. La velocidad de giro vendr determinada por las especificaciones temporales asociadas al objeto Alpha. Los objetos Alpha se utilizan para especificar acciones a lo largo del tiempo. La configuracin de estos objetos puede ser tan compleja como uno desee, pero para especificar movimientos simples slo hay que cambiar algunos parmetros. La clase Alpha produce valores entre cero y uno, ambos inclusive. Los valores que se producen son dependientes del tiempo y de los propios parmetros de este objeto. Los Interpoladores son behaviors configurados que usan un objeto Alpha para proveer de animaciones a los objetos visuales. Se garantiza que en un instante determinado el objeto Alpha devuelve un nico valor. Si dibujamos los valores del objeto Alpha respecto al tiempo se observar una grfica identificativa en forma de onda de dicho objeto Alpha. La forma de onda tiene cuatro fases: incremento, alpha en uno, decremento y alpha en cero. El conjunto de las cuatro fases es un ciclo de la onda alpha. Estas cuatro fases se corresponden con cuatro parmetros del objeto Alpha. La duracin de las cuatro fases se especifica por un valor entero que significa el nmero de milisegundos de dicha fase. La siguiente figura identifica las cuatro fases del objeto Alpha:
Todos los tiempos de los objetos Alpha son relativos al tiempo de inicio de dicho objeto. El tiempo de inicio de cualquier objeto Alpha es recogido de la hora del sistema. En consecuencia, los objetos Alpha creados en diferentes momentos tendrn el mismo tiempo de inicio. Como resultado, todos los objetos interpoladores, aun encontrndose basados en diferentes objetos Alpha, estn sincronizados. Los objetos alpha pueden tener la forma de onda comenzando desde cualquier instante de tiempo, es decir, puede ser retardado. Esto se consigue mediante dos parmetros: el triggerTime y el PhaseDelayDuration. El parmetro TriggerTime especifica un tiempo despus del tiempo de inicio para comenzar la operacin del objeto Alpha. El PhaseDelayDuration especifica el tiempo despus del TriggerTime y
58
Simulacin Virtual de Robots Articulados antes de que comience el primer ciclo. La forma de onda del objeto puede repetirse tantas veces como uno quiera o incluso repetirse de manera indefinida. Esto viene especificado por el parmetro LoopCount. Si este parmetro es -1 indica que el ciclo se repite indefinidamente. Un objeto Alpha no tiene porque pasar siempre por las cuatro fases. La siguiente figura muestra diferentes formas de onda usando una, dos, tres o las cuatro fases de los objetos Alpha.
Adems de la duracin de las cuatro fases, el programador puede especificar una duracin de rampa para las fases de incremento y decremento. Mientras dure la duracin de la rampa, el valor alpha cambia gradualmente. En el caso de interpoladores que causan desplazamiento, se producir una aceleracin o deceleracin del objeto visual, de manera que el efecto sea mucho ms real. El valor de la duracin de rampa se usa en las porciones de comienzo y final de las fases y est limitado a la mitad de la duracin de la fase. La siguiente figura muestra la forma de onda de un objeto Alpha con duraciones de rampa tanto de incremento como de decremento (IncreasingAlphaRampDuration y DecreasingAlphaRampDuration). Los valores alpha cambian linealmente entre los dos periodos rampa.
LoopCount: Nmero de repeticiones Mode: Indica qu parmetros Alpha estarn activos, si los de incremento (INCREASING_ENABLE) , los de decremento (DECREASING_ENABLE) o ambos. TriggerTime: tiempo de inactividad inicial
59
PhaseDelayDuration: tiempo a transcurrir antes del primer ciclo IncreasingAlphaDuration: duracin de la fase de incremento lineal IncreasingAlphaRampDuration: duracin de la rampa de incremento AlphaAtOneDuration: tiempo de permanencia en 1 DecreasingAlphaDuration: duracin de la fase de decremento lineal DecreasingAlphaRampDuration: duracin de la rampa de decremento AlphaAtZeroDuration: tiempo de permanencia en 0
Simulacin Virtual de Robots Articulados fija (para simular una aceleracin en el movimiento). El resto de parmetros son nulos. 5. Asociar el tiempo de inicio del objeto Alpha creado al momento actual, ya que por defecto, el momento de inicio es el de comienzo de la escena. Si no se hace este paso, la principal consecuencia es que todos los interpoladores estaran sincronizados, por lo que todos los movimientos duraran lo mismo, es decir, todas las articulaciones se moveran a la par. Es ms, una vez se haya realizado el primer movimiento, no se podra realizar ningn otro, ya que las formas de onda no son contnuas, por lo que se produciran saltos en los movimientos. 6. Establecer como ngulo mnimo del interpolador, el ngulo actual de la articulacin; y como ngulo final, el ngulo de destino al que se pretende llegar. 7. Asociar al interpolador, el objeto Alpha creado. 8. Habilitar de nuevo el Interpolador. Estos pasos que se han indicado se deben hacer cada vez que se quiere mover una determinada articulacin, independientemente de la articulacin que se quiera mover. La nica diferencia est en el movimiento de la mueca y las pinzas. En estos casos la forma de onda se ha programado totalmente lineal, es decir, no se producen aceleraciones en los movimientos. El motivo de esto es que la mueca y las pinzas pesan poco y la inercia no hace demasiado efecto en estos componentes del robot real. Si este documento se est viendo sobre un explorador de Internet que soporte GIFs animados, a continuacin se presenta una animacin de ejemplo que contiene cuatro frames del giro de la primera articulacin en un ngulo de 90 grados.
61
Colisiones
Interacciones y Animaciones Implementacin de una clase Behavior Condiciones de comienzo (Wakeup Conditions) Configuracin de Behaviors para las colisiones
Interacciones y Animaciones
62
Simulacin Virtual de Robots Articulados especificar el trigger del behavior. A ste mtodo se le pasa como parmetro un objeto WakeupCondition. Como cualquier otro objeto, los behavior tienen un rea de scheduling. Esta rea identifica el rea de accin del behavior. Un objeto behavior esta activo nicamente cuando su rea de scheduling intersecta el volumen de activacin de un objeto View. Como es posible tener mltiples vistas en un mismo universo virtual, un mismo behavior puede activarse por ms de un View. El mtodo getView devuelve una referencia al objeto View que est actualmente asociado con el behavior. En nuestro caso solo tenemos un objeto View (vista) por lo que ste mtodo no nos preocupa. Tambin existe el mtodo setEnable, que permite activar o desactivar el behavior en un instante determinado. Las funciones ms comunes de la clase abstracta Behavior son: -View getView() -Void processStimulus(java.util.Enumeration criterios) -Void setEnable(boolean estado) -Void setSchedulingBounds(Bounds region) -Void wakeupOn(WakeupCondition criterios)
64
Jerarqua de clases para las condiciones de comienzo de los behavior Como puede verse en la figura existen subclases de la clase WakeupCriterion que identifican diferentes motivos por el que el behavior debe activarse y, por tanto, ejecutarse el procedimiento processStimulus. Algunas de ellas son:
WakeupOnActivation, especifica el comienzo del behavior cuando el volumen de activacin del ViewPatform intersecta con la regin de scheduling del objeto. WakeupOnAWTEvent, especifica el comienzo del behavior cuando ocurre un evento AWT. Esta clase tiene dos constructores y un mtodo. Los constructores permiten la especificacin de eventos AWT usando constantes de la clase AWT. El mtodo devuelve el vector de eventos AWT consecutivos que causaron el trigger. WakeupOnElapsedTime, especifica el comienzo del behavior cuando pasan un cierto nmero de milisegundos.
Hay muchas ms clases, pero no tienen mayor inters para los objetivos que nosotros perseguimos. Las clases que se han usado para detectar las colisiones estn comentadas en el siguiente apartado.
65
Simulacin Virtual de Robots Articulados Java 3D puede solo manipular una colisin a la vez. Cuando se detecta una colisin con un objeto, el resto de colisiones con otros objetos no son detectados hasta que no haya acabado la primera colisin. Por tanto, es posible que no se detecten colisiones pequeas o que se produzcan en cortos espacios de tiempo. Tanto la clase wakeupCollisionEntry como la wakeupCollisionExit tienen varios constructores. Nos interesa especialmente el siguiente: WakeupCollisionEntry(SceneGraphPath armingPath, int speedHint) El argumento armingPath especifica el objeto al que se le va a asociar el behavior, es decir, el objeto que se va a usar como detector de colisiones. Cuando algn otro objeto choque con ste se activar el bahavior. El argumento speedHint admite dos valores: USE_BOUNDS o USE_GEOMETRY. El primero hace que el behavior se active por colisin de las reas de scheduling de los objetos. El segundo hace que el behavior se active cuando se intersectan los objetos geomtricamente. Esta ltima opcin hace que las colisiones sean mucho ms perfectas, pero que el tiempo de procesador usado para detectar las colisiones sea mucho mayor, ya que hay que comprobar si figuras relativamente complejas estn colisionando con otras. Usando regiones de scheduling, cualquier objeto se ve envuelto como por una "burbuja" y son stas las que colisionan, por lo que el tiempo de procesador empleado en la deteccin de colisiones es mucho menor. En el proyecto se ha optado por usar las colisiones geomtricas, ya que el contacto de los objetos con la pinza requiere gran precisin. El procedimiento initialize() creado para la clase que detecta las colisiones en el robot virtual define estos criterios tal y como se muestra en el siguiente fragmento de cdigo. public void initialize() { wEnter = new WakeupOnCollisionEntry(shape, WakeupOnCollisionEntry.USE_GEOMETRY); wExit = new WakeupOnCollisionExit(shape, WakeupOnCollisionEntry.USE_GEOMETRY); wakeupOn(wEnter); } La ltima lnea especifica que el trigger que despertar el behavior ser el de comienzo de colisin. El procedimiento processStimulus tiene que chequear si se ejecuta debido a un comienzo o a un fin de colisin. Para ello usa una variable booleana que la va cambiando de valor. public void processStimulus(Enumeration criteria) { inCollision = ! inCollision; if (inCollision) { // COGEMOS EL OBJETO wakeupOn(wExit); }
66
Simulacin Virtual de Robots Articulados else { // SOLTAMOS EL OBJETO wakeupOn(wEnter); } } El cdigo mostrado arriba muestra a "grosso modo" como funciona el mtodo processStimulus. Por supuesto, no es tan simple como parece a simple vista, pues recordemos que se coloca un behavior (detector de colisin) en cada pinza, por lo que se tiene que chequear el estado de la otra pinza para saber si debemos soltar o no el objeto. Simplemente mostrar que cada vez que se ejecuta este mtodo hay que reiniciar el trigger para que el behavior pueda activarse de nuevo. Cuando se coge un objeto, el behavior se activar cuando se salga de la colisin (se suelte) y cuando se suelta un objeto, el behavior se activar cuando se produzca una colisin nueva. Simplemente resta aadir una instancia de la nueva clase creada, que se extiende del Behavior, a los TransformGroup de donde cuelgan las pinzas, tal y como se muestra en el esquema de la escena mostrado en la seccin que habla de la mueca del robot.
67
Conclusiones
68
69
70
Robot Mentor de Alecop Los ejes y la pinza son accionados electrnicamente por seis motores de corriente contnua y servocontrolados en posicin, mediante la utilizacin de captadores potenciomtricos en cada unidad de movimiento. La transmisin del movimiento desde el motor al eje se realiza a travs de engranajes planos para los cinco ejes principales, y engranajes cnicos para la pinza. En el armario de control no se ha incorporado la unidad de procesamiento de comandos, lo que hace que el robot pueda ser gobernado por cualquier sistema capaz de generar cdigos compatibles con su interface de comunicacin. Adems de los reguladores para los motores de accionamiento incorpora los siguientes dispositivos:
Convertidores A/D y D/A de 8 bits que sirven como interface entre el control y el sistema de gobierno del robot. Circuito de parada de emergencia en caso de bloqueo en cualquiera de los ejes. Interface de entradas y salidas que permiten al robot trabajar en configuracin de "clula de trabajo". Esta interface dispone de cinco salidas digitales, dos entradas digitales y cuatro entradas analgicas. Fuente de alimentacin interna con conexin a tensin de red 220V / 50-60 Hz.
71
Interface del Robot Mentor Las caractersticas tcnicas del robot se muestran en la siguiente tabla.
72
73
74
Perfil del Robot Mentor En base a estas mediciones se cre la figura virtual del robot Mentor dentro del mundo en Java 3D. A la escena resultante se le aplic un factor divisor de escala para reducir las dimensiones de todo el conjunto a efectos de obtener una mayor rapidez en el renderizado. Por ltimo decir que pequeos errores de medida pueden llevar consigo discrepancias entre los resultados matemticos tericos y las posiciones resultantes en el mundo virtual. Por este motivo se tuvo que probar fehacientemente el modelo virtual una vez construido.
Simulacin Virtual de Robots Articulados con la necesidad de simular un robot idntico al proporcionado en las prcticas, ha sido el principal motivo de centrarnos en el robot Mentor y no simular otro tipo de estructuras. En la presente seccin se ha detallado el robot Puma para su posterior modelizado y para obtener los datos necesarios para llevar a cabo los clculos matemticos oportunos. Sin una buena medicin de la estructura, la simulacin resultante no coincidira con el modelo terico inicial ni con los resultados matemticos. Sin embargo, nos hace falta un modelo matemtico que nos permita realizar los posteriores clculos. ste modelo utiliza una serie de ejes de coordenadas cartesianos situados estratgicamente en la base, articulaciones y punto extremo de la estructura, de manera que los clculos de la cinemtica directa e inversa puedan llevarse a cabo sin ningn problema. El siguiente esquema es el modelo matemtico utilizado en el resto de esta seccin.
Modelo matemtico del PUMA En la siguiente seccin explicaremos con detalle la eleccin de los ejes de coordenadas y el resto de parmetros. Simplemente se ha querido presentar este esquema para que est presente desde el principio de los desarrollos.
76
77
El problema consiste en calcular la posicin del punto P respecto a un eje de coordenadas sabiendo la posicin del mismo punto respecto al otro. Se definirn para ello transformaciones entre sistemas. Llamaremos Too' a la matriz que permite conocer las coordenadas del punto P respecto al sistema OXY en funcin del sistema O'X'Y'. A su vez, llamaremos To'o a la matriz que permite hacer lo contrario. Es decir, Po = Too' * Po' Po' = To'o * Po Donde Po son las coordenadas del punto P respecto al sistema OXY, y Po' son las coordenadas del punto P respecto al otro sistema. En nuestro caso, nosotros trabajaremos en el espacio, pues la cadena articulada es un robot en tres dimensiones. La clave del problema radica en que es posible modelar cualquier tipo de movimiento espacial mediante una matriz 4x4. Supongamos el mismo ejemplo anterior, pero en el que lo sistemas son tridimensionales, es decir, los ejes de coordenadas cartesianos tienen tres componentes ortogonales entre s (X, Y y Z). Se puede definir una matriz 4x4 tal que:
donde:
o
(X1)0 = vector unitario del sistema 1 sobre el eje X expresado en funcin del sistema 0 (Y1)0 = vector unitario del sistema 1 sobre el eje Y expresado en funcin del sistema 0
78
Simulacin Virtual de Robots Articulados (Z1)0 = vector unitario del sistema 1 sobre el eje Z expresado en funcin del sistema 0 (O1)0 = origen del sistema 1 expresado en funcin del sistema 0
Esta matriz de cambio es muy importante en todos los clculos que se van a presentar a continuacin. Permite localizar un sistema de referencia respecto a otro, y nos va a permitir conocer el punto final de la estructura mecnica sabiendo los valores de los ngulos de las articulaciones. Antes de continuar se tendrn en cuenta las siguientes consideraciones:
Todos los sistemas de referencia utilizados son Dextrgiros, es decir, si realizamos un movimiento del eje X al eje Y por el camino ms corto, el eje Z tiene la direccin del pulgar de la mano derecha. Por convenio, cuando un ngulo es positivo si se mide en sentido contrario a las agujas del reloj. De lo contrario, es negativo. Lo mismo ocurre con las distancias. Son positivas las que se midan segn la direccin de los ejes de los sistemas de referencia.
79
Simulacin Virtual de Robots Articulados Ejemplo de cadena articulada de dos grados de libertad Cada sistema estar fijo al elemento justo anterior. Esto permite que cada movimiento venga determinado por la relacin de las matrices de transformacin entre sistemas. Para definir el sistema bastara con definir las coordenadas de los puntos mviles, es decir, las coordenadas de O1 y O2. Como interesa conocer estas coordenadas desde el sistema de referencia fijo necesitamos conocer las coordenadas de transformacin:
donde:
La estructura tendr tantos grados de libertad como articulaciones. En el caso del ejemplo de la cadena articulada bidimensional de dos grados de libertad, las variables generalizadas sern 1 y 2. La matriz T10 tiene como parmetro variable a parmetro variable a 2.
1
Si definimos las matrices de cambio entre sistemas para este ejemplo, nos quedan de la siguiente manera:
donde:
80
81
Las matrices de transformacin homogneas tienen el efecto combinado de rotacin, traslacin, perspectiva y escalado global cuando operan sobre vectores de posicin expresados en coordenadas homogneas. Si estos dos sistemas de coordenadas se asignan a cada elemento del brazo del robot, por ejemplo, el elemento i-1 y el elemento i, respectivamente, entonces el sistema de coordenadas del elemento i-1 es el sistema de coordenadas de referencia y el sistema de coordenadas del elemento i es el sistema de coordenadas mvil cuando se activa la articulacin i. Utilizando la matriz T, podemos especificar un punto pi en reposo en el elemento i y expresado en el sistema de coordenadas del elemento i, en trminos del sistema de coordenadas del elemento i-1 como
Procedimiento de Denavit-Hartenberg
que el problema de la cinemtica directa est resuelto, pues solamente debemos construirnos las correspondientes matrices de cambio y saber los valores de las variables generalizadas de la cadena articulada para saber la posicin de cualquier articulacin. Sin embargo, el problema se complica al realizar este esquema en tres dimensiones. Para describir la relacin traslacional y rotacional entre elementos adyacentes, Denavit y Hartenberg propusieron un mtodo matricial de establecer de forma sistemtica un sistema de coordenadas (sistema ligado al cuerpo) para cada elemento
PARECE
82
Simulacin Virtual de Robots Articulados de una cadena articulada. La representacin de Denavit-Hartenberg resulta en una matriz de transformacin homognea 4x4 que representa cada uno de los sistemas de coordenadas de los elementos de la articulacin con respecto al sistema de coordenadas del elemento previo. As mediante transformaciones secuenciales, el efector final se puede transformar y expresar en las "coordenadas de base" que constituyen el sistema inercial del sistema dinmico. Se puede establecer para cada elemento, en sus ejes de articulacin, un sistema de coordenadas cartesiano ortonormal (Xi, Yi, Zi), donde i=1,2,...,n (n = Nmero de grados de libertad), ms el sistema de coordenadas de la base. Como una articulacin giratoria tiene solamente un grado de libertad, cada sistema de coordenadas (Xi, Yi, Zi) del brazo de un robot corresponde a la articulacin i+1 y est fija en el elemento i. Cuando el actuador de la articulacin activa la articulacin i, el elemento i se mover respecto al elemento i-1. Como el sistema de coordenadas i-simo est fijo en el elemento i, se mueve junto con ste. Asi pues, el sistema de coordenadas n-simo se mueve con la mueca del robot. Las coordenadas de la base se definen como el sistema de coordenadas nmero 0 (X0, Y0, Z0), que tambin es el sistema de coordenadas inercial del brazo. As para un brazo como el PUMA de seis ejes, tenemos siete sistemas de coordenadas, que representamos con (X0, Y0, Z0), ..., (X6, Y6, Z6). Cada sistema de coordenadas se determina y establece sobre la base de tres reglas: 1. El eje Zi-1 yace a lo largo del eje de la articulacin. 2. El eje Xi es normal al eje Zi-1 y apunta hacia afuera de l. 3. El eje Yi completa el sistema de coordenadas dextrgiro segn se requiera. Mediante estas reglas, uno es libre de escoger la localizacin del sistema de coordenadas 0 en cualquier parte de la base soporte, mientras que el eje Z0 est a lo largo del eje de movimiento de la primera articulacin. El ltimo sistema de coordenadas se puede colocar el cualquier parte de la mueca, mientras que el eje Xn sea normal al eje Zn-1. La representacin Denavit-Hartenberg de un elemento rgido depende de cuatro parmetros geomtricos asociados con cada elemento. Estos cuatro parmetros describen completamente cualquier articulacin prismtica o de revolucin.
83
i: Es el ngulo de la articulacin del eje Xi-1 al eje Xi respecto del eje Zi-1 (utilizando la regla de la mano derecha) di: Es la distancia desde el origen del sistema de coordenadas (i-1)-simo hasta la interseccin del eje Zi-1 con el eje Xi a lo largo del eje Zi-1. ai: Es la distancia de separacin desde la interseccin del eje Zi-1 con el eje Xi hasta el origen del sistema i-simo a lo largo del eje Xi (o la distancia ms corta entre los ejes Zi-1 y Zi). i: Es el ngulo de separacin del eje Zi-1 al eje Zi respecto del eje Xi (utilizando la regla de la mano derecha).
Para una articulacin giratoria, di, ai y i son los parmetros de articulacin y permanecen constantes para un robot, mientras que i es la variable que cambia cuando el elemento i se mueve (o gira) con respecto al elemento i-1. Para una articulacin prismtica, i, ai y i son los parmetros de articulacin y permanecen constantes para un robot, mientras que di es la variable de la articulacin. Con todas estas reglas podemos definirnos todos los sistemas de referencia, tal y como se muestran en la siguiente figura:
84
donde Li es la longitud del i-simo elemento de la cadena articulada. Teniendo definidas estas matrices, tenemos tambin resuelto el problema de la cinemtica directa, pues basta hacer el siguiente clculo para obtener las coordenadas del extremo de la mueca en funcin del sistema de coordenadas de la base.
Simulacin Virtual de Robots Articulados funcin de las variables generalizadas de la misma, se necesita conocer la direccin de acercamiento y cierre de dicha cadena. La direccin de acercamiento es un vector unitario que indica la direccin y sentido en la que se encuentra la mueca del brazo robot, es decir, indica hacia adonde apunta la mueca. Es importante conocerla por su posterior aplicacin para la cinemtica inversa. Puede ser que nos interese llegar a un determinado punto, de manera que la mueca se encuentre girada hacia una determinada direccin, la direccin de acercamiento. La direccin de cierre, por el contrario, indica la direccin en la que se cierra la pinza de la mueca. Esta direccin es independiente del punto final de la estructura, pues simplemente representa el giro de la mueca respecto a su propio eje. La siguiente figura representa la direccin de acercamiento por el vector a y la direccin de cierre por el vector s.
La direccin de acercamiento puede obtenerse de manera trivial y por simple geometra con la siguiente operacin.
donde:
Lo que hacemos es calcular la posicin del extremo de la mueca en funcin del sistema de referencia de la base, luego hacemos lo mismo para la base de la mueca, y por ultimo restamos los dos resultados anteriores. Geomtricamente nos da un vector
86
Simulacin Virtual de Robots Articulados que coincide con la direccin de acercamiento. La direccin de cierre se calcula de manera anloga. Simplemente, en lugar del punto final de la estructura (que se escoge utilizando el vector unitario en el eje Zn), se utiliza el vector unitario en el eje X (perpendicular a la direccin de acercamiento).
87
88
donde: Pc = Punto que identifica la base de la mueca. V = Punto final de la cadena articulada Lm = Longitud del efector (mueca) a = direccin de acercamiento. El clculo de este punto es necesario para limitar inicialmente el clculo a las tres primeras articulaciones. Una vez obtengamos el valor de las tres primeras variables generalizadas, obtendremos el valor de las dos ltimas. Fijmonos en el siguiente diagrama:
Teniendo en cuenta que el radio del cilindro interior d2 lo suponemos cero, solo debemos fijarnos en el punto (px, py) y en el ngulo que forma con el sistema de coordenadas X0Y0. Se ha proyectado la imagen sobre el plano X0Y0 para realizar mejor el clculo. Como el segmento OA mide cero, el ngulo coincide con 1. Es evidente que:
89
Simulacin Virtual de Robots Articulados donde P es la longitud del segmento OB. Si despejamos P en la segunda ecuacin y sustituimos en la primera, obtenemos que:
Por tanto:
Pasemos a calcular el valor de la tercera variable generalizada. Para ello nos centraremos en la segunda y tercera articulacin. Si olvidamos la primera articulacin, el esquema resultante viene a ser algo como el siguiente:
Si llamamos N a la distancia entre el origen del sistema de coordenadas O1X1Y1 obtenemos, por ser la hipotenusa del tringulo rectngulo formado que:
90
Nos queda:
Est claro que Q2 = - . Por tanto calcularemos cada argumento por separado y luego haremos la diferencia. Siguiendo el mismo razonamiento que para el clculo de Q1, sabemos que:
91
Por tanto:
; A su vez:
; Por tanto:
92
Simulacin Virtual de Robots Articulados Por tanto, ya tenemos calculados los valores de las tres primeras variables generalizadas. Estos valores son independientes de las dos ltimas articulaciones, pues se han calculado a partir del punto base de la mueca. A continuacin se pasar a calcular el valor de las dos ltimas articulaciones basndonos en la direccin de acercamiento y cierre que queremos que tenga la mueca.
HABIENDO
Es decir, debemos conocer las coordenadas del punto en cuestin en funcin de los ejes de coordenadas de la base. Consideremos de nuevo el modelo planteado para el Puma.
El origen de coordenadas del ltimo sistema coincide con el punto final de la estructura. El vector unitario que representa al eje Z del ltimo sistema en funcin del 93
Simulacin Virtual de Robots Articulados primer sistema coincide con la direccin de acercamiento, tal y como se defini en secciones anteriores.
El vector unitario que representa al eje X del ltimo sistema en funcin del primer sistema coincide con la direccin de cierre. Si se define el vector normal n como:
donde el vector s es la direccin de cierre deseada, a es la direccin de acercamiento, n es el vector normal a la direccin de acercamiento y cierre, y v es el punto final de la estructura. Adems sabemos que:
Los tres primeros factores podemos calcularlos pues hemos calculado los valores de 1, 2 y 3. Si llamamos R a la multiplicacin de estas tres matrices, nos queda que:
Adems, como podemos calcular los parmetros de Denavit-Hartenberg para las matrices de cambio de los dos ltimos sistemas de coordenadas, sabemos que:
94
; Si desglosamos la multiplicacin de las dos matrices de cambio parcial, nos queda que:
Si realizamos la multiplicacin de las matrices del lado derecho de la igualdad y recordamos la propiedad de que dos matrices son iguales si, y slo si, todos sus elementos son iguales, obtenemos que:
EN
95
En realidad esto no es as, pues existen separaciones horizontales entre los distintos elementos que componen la cadena articulada. Por ejemplo, entre el cilindro vertical que gira como respuesta al cambio de la primera articulacin, y el primer brazo existe una distancia de separacin. Esta puede observarse en la siguiente figura como el parmetro d2. Dicha distancia se ha considerado cero en los clculos de la seccin anterior. Esta suposicin limita las soluciones de la cinemtica inversa a dos. Una de las soluciones se calcula aplicando las frmulas anteriores y la siguiente solucin puede calcularse cambiando de signo 3. O sea, se calcula 3, se cambia de signo y luego se recalcula 2. Esta segunda solucin viene a representar el modo de acercarnos al punto final: por arriba o por abajo.
Sin embargo existen otras dos soluciones. Para obtenerlas debemos sumar 180 al valor calculado para la primera articulacin para que el brazo se ponga al contrario. En el caso de que el valor calculado inicialmente para la primera articulacin sea positivo, se le restarn 180 a efectos de que el resultado final sea factible para el Puma real. Debemos adems de cambiar el valor de la segunda articulacin a efectos de colocar el brazo de manera que se llegue al mismo punto final. El nuevo valor de la segunda articulacin ser 180 menos el antiguo valor. Por ltimo debe cambiarse el signo de la tercera articulacin para que el punto final coincida con el de las dos primeras soluciones. Estos pasos se ven claramente al observar las figuras asociadas con las otras dos soluciones.
96
Por supuesto, se puede dar un razonamiento matemtico para el clculo las cuatro soluciones, pero resulta mucho ms complejo que observar estas soluciones geomtricamente. Bien es cierto que asociada a cada una de estas cuatro soluciones hay dos soluciones para las dos ltimas articulaciones, pero por motivos de sencillez solamente se ha implementado el clculo de una de ellas. Esto es razonable, pues nos basta una determinada configuracin de la mueca para llegar al punto final, por lo que la otra es redundante. El nico motivo que lleve a su clculo es el que las solucin aportada matemticamente no sea factible en el puma real por limitaciones fsicas en el giro de la mueca, pero este problema se descarta.
97
Errores de Precisin
medida que se van desarrollando los clculos matemticos se van produciendo y acumulando una serie de errores que pueden llevar a una mal interpretacin de los resultados obtenidos e incluso clculos completos errneos. El primero de los errores detectados es el error de precisin. Este error se debe a la utilizacin de variables de programacin para realizar los clculos y es un error inevitable. Al utilizar el ordenador como mquina de clculo, los valores intermedios se almacenan en variables que en la mayora de los casos son de tipo flotante. Este tipo de datos tiene un determinado tamao en memoria y una determinada precisin. El rango de valores que abarca un tipo flotante est entre 1.4E-45 y 3.4028235E38, y tiene un tamao en memoria de 32 bits. Los errores de precisin son muy poco perceptibles, y no influyen demasiado en los clculos, por lo que no se les presta mayor importancia. Lo que s cabe sealar es el importante error de precisin producido por cambios de tipo sin control, es decir, convertir un nmero decimal a entero (implcita o explcitamente) para realizar alguna operacin con l. Este tipo de acciones deben controlarse pues pueden llevar a errores muy graves. En toda la aplicacin se ha prestado especial atencin a este detalle pues en Java los cambios de tipo son implcitos, es decir, antes de realizar la operacin en cuestin se convierten los nmeros a los tipos adecuados.
98
Simulacin Virtual de Robots Articulados direccin de cierre; pero estos valores finales estn redondeados. Si utilizamos estos valores para el clculo de la cinemtica inversa, estamos usando los valores redondeados y por lo tanto cometiendo un error durante el clculo de la cinemtica inversa, por lo que los resultados finales no coincidirn de exactamente con los iniciales antes de aplicar la cinemtica directa, debido tanto a los errores de precisin como de redondeo. Un esquema indicativo de la acumulacin de errores debido al clculo recursivo de cinemtica directa e inversa, es el siguiente:
El procedimiento de Eleccin de Solucin permite elegir la solucin correcta entre el conjunto de soluciones que proporciona la cinemtica inversa, basndose nicamente en los valores de los ngulos de las articulaciones del robot. Este procedimiento no se ha implementado, sino que en su lugar se muestran las diferentes soluciones finales y el usuario elegir la que ms le convenga.
Errores de Conversin
Simulacin Virtual de Robots Articulados 5.729 de diferencia. Esto no significa que los errores de precisin lleguen a ser de 0.1 radianes, pero si pueden ser lo suficientemente grandes como para variar el resultado final en uno o dos grados del resultado esperado. Esto se refleja en uno o dos grados de diferencia en los valores de los ngulos de las articulaciones del robot, pero estas variaciones tan pequeas no limitan la exactitud de los clculos. Los errores de conversin no son errores como tales ya que se deben a los errores de precisin, y pueden verse aumentados por los errores de redondeo si utilizamos los resultados de la cinemtica inversa (redondeados y convertidos a grados) para realizar clculos de la cinemtica directa.
100
Conclusiones
101
102
Conocimientos Generales
Funcionalidad Caractersticas Generales Requerimientos y Recomendaciones
Funcionalidad
103
Caractersticas Generales
104
Requerimientos y Recomendaciones
105
Objetivo
Control de la C. Directa
PARA que el usuario pueda variar los ngulos de las articulaciones de robot se
utiliza la interfaz de la figura.
106
Simulacin Virtual de Robots Articulados La interfaz esta formada por una serie de barras de desplazamiento en horizontal que el usuario puede deslizar hasta elegir el nuevo valor. Cada barra de desplazamiento se corresponde con una articulacin. Por ejemplo la barra etiquetada como Q6 se corresponde con el grado de apertura de la pinza del robot. La unidad de medida que utilizamos para medir los ngulos en las articulaciones son grados. Si usted est interesado en conocer con que posicin de la articulacin se corresponde un nmero determinado de grados, puede ver la figura correspondiente al modelo matemtico. Para calcular la cinemtica directa slo hace falta que pulse el botn Calcular de la barra de botones. Este botn es sensible al contexto y tambin servir para calcular la cinemtica inversa como ya veremos en la siguiente seccin.
Barra de Botones del Simulador Quiz se pregunte por qu estn acotadas las barras de desplazamiento y slo permiten seleccionar un rango limitado de ngulos para cada articulacin, adems esos rangos no son iguales. La respuesta es sencilla, son restricciones que tiene el modelo real y que ha heredado nuestro robot virtual.
Resultados Tericos
107
Resultados Virtuales
Ventana de Resultados del Simulador Si estamos trabajando con la cinemtica directa y pulsamos el botn Accin el robot empieza a moverse hasta que cada una de sus articulaciones adquiere la nueva configuracin. A simple vista se puede comprobar como el comportamiento del robot virtual se corresponde con el modelo matemtico. Finalmente, en la ventana de resultados se imprimen los valores de los puntos de la estructura pero ahora no han sido calculados matemticamente sino que son el resultado de realizar mediciones directamente sobre el modelo de robot virtual.
108
Objetivo
LA cinemtica inversa permite obtener los ngulos que deberan tener las articulaciones del
robot para alcanzar con el efector final un objeto ubicado en una posicin determinada y con una direccin de acercamiento y cierre concreta. Despus de calcular la cinemtica directa el simulador de manera automtica introduce como datos de entrada para la cinemtica inversa la direccin de acercamiento, la de cierre y la posicin destino, aunque el usuario los puede cambiar si lo desea.
Control C.Inversa
LA siguiente figura muestra la pestaa que permite la entrada de datos para la cinemtica
inversa. Para acceder a la pestaa basta con pulsar sobre la pestaa etiquetada como C. Inversa. Cuando el usuario introduce los datos estos pasan por un proceso de validacin para ver si son correctos antes de introducirlos definitivamente en la tabla.
Interface de Usuario para la Cinemtica Inversa Hay que mencionar, que no se puede mover el puma estando en la pestaa de cinemtica inversa, es necesario volver a pulsar sobre la pestaa etiquetada como C. Directa para que se active la opcin que permite mover el puma. El puma siempre se mover siguiendo las directrices de la pestaa de introduccin de datos de la cinemtica directa. Una vez introducido los datos de partida de la cinemtica inversa slo hace falta pulsar el botn Calcular para que se inicie el proceso que 109
Simulacin Virtual de Robots Articulados calcula los ngulos de cada una de las articulaciones del PUMA.
Resultados Tericos
LOS resultados de aplicar la cinemtica inversa se pueden observar dentro del panel Virtual
PUMA Status en la pestaa etiquetada como Articulacin. Los resultados muestran el ngulo (en grados) que habra que introducir en cada articulacin para que el robot alcanzara el objetivo.
Una solucin para la Cinemtica Inversa del PUMA En el captulo III, vimos que puede haber ms de una solucin para alcanzar el punto final con una determinada direccin de acercamiento y cierre. Es decir, los resultados pueden no coincidir con la solucin que el usuario este pensando en ese momento, lo que si tiene que coincidir es que la direccin de cierre, de acercamiento y el punto final sean los que ha introducido el usuario. El siguiente apartado profundiza en el tema de las soluciones. El usuario puede observar en la columna ms a la derecha de la figura, la que est etiquetada como Byte, un valor entre 0 y 255 estos valores son los que utiliza el mdulo de acceso remoto.
LA ventana de resultados se utiliza para mostrar las operaciones que vamos realizando, pero
tambin para obtener informacin extra sobre las soluciones de la cinemtica inversa del PUMA. El tema de las soluciones del PUMA es un tema complicado. Slo hay que pensar que yo puedo conseguir la misma direccin de cierre moviendo la mueca (articulacin Q5) en un sentido y tambin en sentido contrario. Dicho esto, slo hay que generalizar para todas las articulaciones del PUMA y plantearse los problemas que pueden aparecer.
110
Soluciones para la Cinemtica Inversa del PUMA (sin considerar el Efector Final) La cinemtica inversa te devuelve una solucin pero realmente hay ms de una. El resto de soluciones las buscamos utilizando un algoritmo que hemos desarrollado. En nuestro algoritmo hemos despreciado las articulaciones Q4, Q5 y Q6, es decir las articulaciones del efector. Trabajando slo con la estructura podemos obtener 4 soluciones posibles. De esas 4 soluciones posibles habr soluciones que no sean alcanzables. Una solucin se dice que no es alcanzable si alguno de los ngulos que pertenecen en esa solucin no es posible alcanzarlo con la articulacin fsica correspondiente del robot. En definitiva, cuando usted utilice el simulador deber observar la ventana de resultados para ver las cuatro soluciones posibles y elegir de entre todas alguna que sea alcanzable. El simulador por defecto carga la primera de las soluciones alcanzables en la pestaa Articulacin que muestra el resultado de la cinemtica inversa.
111
Vistas de la Escena
EL simulador esta preparado para permitir que el usuario pueda cambiar el punto de vista
del robot utilizando una opcin del men Vistas. Actualmente hay definidas cuatro vistas que son:
Men Vistas del Simulador 1. Vista Principal.- La cmara est situada en el punto (X,Y,Z) = (0, -50, 0) y orientada hacia el origen de coordenadas (0, 0, 0). 2. Vista Trasera.- El punto de vista est en (0, 50, 0) orientado hacia el origen de coordenadas. 3. Vista Frontal.- La cmara est ubicada en el punto (50, 0, 0) orientada hacia (0, 0, 0). 4. Vista Posterior.- En el punto (-50, 0, 0) mirando hacia el origen de coordenadas. La siguiente figura muestra la relacin de ejes en el simulador virtual para que el usuario pueda orientarse ms fcilmente.
112
ADEMS de las posibilidades de cambiar el punto de vista para observar mejor como se
desarrolla la accin en la escena, se ha implementado la posibilidad de que el usuario pueda navegar por la escena 3D. Esta caracterstica permite al usuario posicionar el punto del vista del observador donde quiera y con la orientacin que desee. Para conseguir estas vistas lo nico que debe hacer el usuario es situar primero el foco de la aplicacin en el Canvas 3D que contiene el simulador y luego utilizar una serie de teclas predefinidas para realizar los movimientos por el mundo virtual hasta la posicin que desee. De esta forma tan sencilla se pueden conseguir desde vistas areas hasta perspectivas desde el objeto o un zoom de la mueca. Por experiencia sabemos que es muy fcil perder la orientacin dentro de la escena virtual, sobre todo si se pierde de vista al robot PUMA, en estos casos recomendamos que utilice el men Vistas para recuperar la orientacin.
113
EL objeto virtual est representado por una esfera de color verde situada inicialmente dentro
de la escena 3D en la posicin (20, 20, 20). El robot puma esta preparado para poder coger el objeto si est dentro de su rea de trabajo, para ello dispone de unos detectores de colisin que le permiten detectar la esfera (vase captulo II). Las acciones que puede realizar el robot sobre el objeto son: cogerlo, moverlo y soltarlo. Hay que pensar que cuanto ms perfecto sea el modelo, ms recargada estar la escena y consecuentemente ms lento ir el simulador. Nosotros pensamos que se ha conseguido un buen equilibrio en la relacin calidad y velocidad. Para conocer la posicin actual del objeto, el usuario puede pulsar en la pestaa catalogada como Opciones. Dentro encontrar una interfaz que le permite adems de conocer la posicin actual del objeto en la escena, cambiar esa posicin del objeto en el mundo por una nueva. Se deja como responsabilidad del usuario donde pone el objeto dentro de la escena.
114
Luces
SI usted tiene un ordenador algo anticuado y el simulador le va muy lento, quiz debera
deshabilitar las luces. Con esto conseguir un poco ms de velocidad pero perder realismo. Inicialmente el simulador del PUMA tena texturas que se haban puesto con idea de simular los tornillos, cables y remaches que tena el modelo real. Finalmente, a la vista de los resultados en lo que respecta a velocidad se eliminaron las texturas. El uso de texturas requera un trato especial de los objetos y las colisiones que relentizaba mucho los movimientos del puma virtual. Para activar o desactivar las luces pulse el botn Luces.
115
Conclusiones
116
117
ESTE captulo como el propio nombre indica, trata sobre el mdulo que facilita
que un usuario desde cualquier lugar del mundo pueda acceder remotamente a un puma real que actualmente se encuentra ubicado en el Laboratorio de Computadoras y Control de la Universidad de La Laguna. Antes de explicar como se realiza el acceso remoto desde Internet al robot, vamos comentar como funciona el robot puma.
Lazo cerrado, controla la posicin del eje del motor El puma real est preparado para que sus actuadores reciban configuraciones binarias y las transformen en sus respectivos giros. Para gobernar el actuador se utiliza un Conversor Digital/Analgico, de forma que el usuario enva una configuracin binaria al Conversor D/A y obtiene el voltaje de referencia que necesita el motor para posicionar su eje de giro en un determinado ngulo. Nuestro mdulo de acceso remoto trabaja directamente con configuraciones binarias y es capaz de enviar a cada una de las
118
Simulacin Virtual de Robots Articulados articulaciones del PUMA una configuracin binaria utilizando un dispositivo conocido como PPI.
Esquema de funcionamiento de los actuadores del PUMA La siguiente figura muestra seis esferas rojas en la estructura del puma, cada una de ellas se corresponde con la ubicacin de un actuador y tambin un sensor. Puede que en el PUMA real las ubicaciones de los sensores y actuadores no sean como en la figura, esto se debe a que es frecuente jugar con la posicin de los motores dentro del robot para atenuar problemas de inercia en la estructura.
Ubicacin terica de los Sensores y Actuadores en el robot PUMA Adems de los actuadores, el robot puma dispone de una serie de sensores internos que nos van a permitir leer el estado de las articulaciones. De esta forma el usuario puede conocer las configuraciones binarias que tienen en cada momento cualquiera de las articulaciones del robot. Los sensores internos del Puma leen un ngulo de giro de una determinada articulacin y obtienen un voltaje de salida correspondiente. Posteriormente un Conversor A/D transforma el nivel de voltaje en su configuracin binaria correspondiente. No vamos a entrar en detalle de cmo son los motores y los sensores en la realidad. Si el usuario esta interesado en el tema puede recurrir a la bibliografa.
119
Proceso de calibracin
Observaciones realizadas en el PUMA real. La expresin que relaciona el ngulo con su correspondiente configuracin binaria tiene la misma expresin para las tres primeras articulaciones, lo nico que cambia es el valor de los coeficientes ak y bk en la expresin. Los coeficientes de esta expresin para las tres primeras articulaciones Q1, Q2 y Q3 puede obtenerse conociendo dos configuraciones binarias y sus ngulos correspondientes. A partir de estos datos podemos plantear un sistema de dos ecuaciones y dos incgnitas. Resolviendo el sistema obtenemos los coeficientes necesarios para completar nuestra expresin. Estas expresiones estn implementadas en el mdulo de simulacin del puma virtual de forma que podemos calcular las configuraciones binarias correspondientes a cualquier posicin de la estructura del puma. Estas configuraciones binarias se pueden representar perfectamente en un byte por ser valores acotados entre 0 y 255.
120
Relacin de correspondencia para Q1, Q2 y Q3. Las articulaciones Q4 y Q5 del puma no son independientes entre s, por esta razn las expresiones para obtener Q4 y Q5 difieren de las de Q1, Q2 y Q3. Se requiere mayor cantidad de observaciones para poder obtener las expresiones.
Observaciones realizadas en el Puma real para Q4 y Q5. El proceso para obtener las expresiones de correspondencia es muy similar al anterior
121
Relacin de correspondencia para Q4 y Q5. El mdulo de acceso remoto trabaja directamente con configuraciones binarias y es en el mdulo de simulacin donde se realiza la conversin de grados a configuraciones binarias.
122
mdulo de acceso remoto permite leer de los sensores del PUMA las configuraciones binarias correspondientes a los ngulos que poseen sus articulaciones, y adems, mandar nuevas configuraciones a los actuadores del PUMA. El mdulo de acceso remoto est compuesto por un Applet Java que se descargan los clientes del servidor WEB y utiliza una serie de funciones remotas que se ejecutan en el servidor RMI facilitando el control del PUMA. Estas funciones remotas son capaces de manipular el PUMA por medio de una PPI. En nuestro montaje la mquina que hace de Servidor WEB es la misma que hace de Servidor RMI y tiene una PIO-12 (Parallel Digital Interface Board) conectada para facilitar la comunicacin con el PUMA. Comentar, que tambin existe un circuito decodificador que no pertenece a este proyecto pero es el encargado de realizar la interface entre la PPI y el robot Puma. La siguiente figura muestra el esquema general del montaje.
EL
123
A partir de ahora nos centraremos en ver como accede el propio servidor remoto
localmente a la PPI para gobernar el PUMA y dejaremos para ms adelante el estudio de como acceden los clientes al servidor. El equipo servidor utiliza una PPI para comunicarse con el robot, es decir, si somos capaces de programar la PPI desde el servidor tendremos resuelto el acceso local al Puma. Slo hay un inconveniente, Java no tiene punteros y para poder trabajar con la PPI se necesita acceder a ciertas direcciones de memoria (concretamente la 300). La solucin que ofrece Java para este tipo de situaciones es utilizar C/C++ embebido en Java. Al usar C con Java se consigue resolver el problema del acceso a puertos en memoria, pero estamos introduciendo dependencia de la plataforma en la que estamos trabajando. Esto se debe a que parte de la aplicacin estar implementada en C y deber ser compilada para esa plataforma concreta. Por comodidad, ha elegido Windows 98 como plataforma para nuestro servidor. La plataforma Java 2, incorpora la interfaz de programacin Java Native Interface (JNI), para permitir que se puedan escribir programas en otros lenguajes diferentes a Java y mantener la portabilidad entre todas las plataformas. Adems, JNI permite que el cdigo Java que se ejecute en una Mquina Virtual Java pueda mezclarse con aplicaciones y libreras escritas en otros lenguajes, como C, C++ y ensamblador. Adems, la interfaz de programacin Invocation API permite que se puedan llamar a cdigo de la Mquina Virtual Java desde aplicaciones nativas. El objetivo de utilizar JNI para escribir mtodos nativos es el de permitir que los programadores puedan manejar aquellas situaciones en las que una aplicacin no puede ser escrita enteramente en Java, como la que nos ocupa. La programacin a travs del entorno que proporciona JNI para implementar mtodos nativos involucra varias operaciones, y proporciona a estos mtodos nativos una gran flexibilidad, de forma que un mtodo nativo puede utilizar los objetos Java del mismo modo que el propio Java los usa y viceversa. Para acceder a un mtodo nativo desde un programa de Java, debemos crear una clase para el mtodo nativo e invocar a este ltimo por medio de la sintaxis normal de invocacin de mtodos de Java. Los mtodos nativos se crean siguiendo los siguientes pasos: 1. Primero creamos una clase Java para los mtodos nativos e incluimos el cdigo para cargar la biblioteca compartida del mtodo nativo. 2. Utilizamos el programa javah incluido en el JDK para crear un archivo de encabezado de lenguaje C para los mtodos nativos. 3. Implementamos los mtodos nativos como funciones de C. 4. Compilamos y vinculamos el cdigo C para crear una biblioteca compartida.
SE ha creado la clase Java Native, esta clase incluye el cdigo para cargar la biblioteca
124
Simulacin Virtual de Robots Articulados compartida que contendr la implementacin de dos funciones nativas que nos permitirn interaccionar con el PUMA. En este captulo, hemos decidido mostrar un poco de cdigo fuente, pero slo el necesario para que el lector pueda seguir mejor la explicacin de esta seccin. Este es el cdigo que carga la biblioteca PPIAccess.dll que implementa el acceso local al PUMA.
Interfaz Native: Carga de la librera PPIAccess.dll La interfaz Native contiene tambin las declaraciones de las funciones escribir y leer, utilizadas para comunicarnos localmente con el PUMA a travs de la PIO-12 (Parallel Digital Interface Board). El funcionamiento de las dos funciones es muy similar, lo que hacen es enviar o leer una configuracin binaria de una determinada articulacin del robot PUMA. La implementacin de las funciones se encuentra en la librera PPIAccess.dll. Para conseguir la implementacin de estas dos funciones hay que conocer a fondo como trabajar con la PPI. La PPI es un recurso al que se puede acceder utilizando la direccin de memoria 300. Enviando una serie de configuraciones especiales a esa direccin de memoria podemos programar la PPI para realizar lecturas o escrituras en sus puertos I/O. La PPI se encuentra conectada al robot PUMA mediante un circuito que no forma parte de este proyecto y en el que no entraremos en detalle. De esta forma es posible mover el robot PUMA y leer la posicin de sus articulaciones utilizando la PPI. A continuacin se muestran las declaraciones de funciones nativas que contiene la clase Native, la implementacin de las funciones la veremos ms adelante. El lector no debe abrumarse por los comentarios de las funciones, han sido puestos a propsito para el generador de documentos Javadoc. En el apndice de este proyecto podr ver la documentacin sobre el proyecto generada por el programa Javadoc.
Uso de Javah
Simulacin Virtual de Robots Articulados las funciones nativas descritas. Para obtener ms informacin sobre Javah puede invocar al compilador con la opcin help. La nica opcin que vamos a necesitar es jni, la cual crea un archivo de encabezado de estilo JNI. Javah -jni Native Este fichero hace un include de un fichero llamado jni.h que define los tipos que se usan en examples_interfazRMI_Native.h. Examinando dicho fichero encontramos los prototipos en C que nos ha creado javah.
Native.h: Prototipos de los Mtodos Nativos (leer y escribir) Estos mtodos son los que vamos a tener que implementar en la DLL en C. Los parmetros JNIEnv * y jobject se pasan a todos los mtodos nativos y, por lo general, se pueden ignorar. El parmetro JNIEnv * es un sealador al entorno en el que se invoca el mtodo. El parmetro jobject es una referencia el objeto o clase en los que se define el mtodo (En este caso Native). Los parmetros jint son los que vamos a pasar a las funciones y especifican parmetros de tipo int. JNIEXPORT y JNICALL rodean a los valores de retorno de los mtodos que son ambos de tipo jint. JNIEXPORT y JNICALL se usan para definir la secuencia de llamada a la funcin y se definen en el archivo jni_md.h, que se encuentra ubicado en el directorio \jdk1.2.2\include\win32. El fichero jni.h est en el directorio \jdk1.2.2\include.
126
PPIAccess.dll: Constantes e Includes Para crear la librera hemos utilizado Microsoft Visual C++ 5.0 y el proceso no tiene ninguna dificultad, simplemente el detalle de incluir los directorios jdk1.2.2\include y jdk1.2.2\include\win32 en el PATH del compilador. Si utiliza un compilador diferente para construir la DLL tendr que comprobar su documentacin para ver como construir la misma. Una vez creada la librera utilizando la opcin del men habilitada a tal efecto, tenemos que ponerla en un lugar accesible por el sistema para que nuestros programas puedan localizarla. Para utilizar la DLL en nuestros programas java, slo hace falta crear un objeto de tipo Native que utilice los mtodos nativos.
127
PPIAccess.dll: Funciones que manipulan la PPI en C La PIO-12 es un dispositivo que permite comunicarnos con perifricos u otros dispositivos a travs de sus puertos I/O. La PPI utiliza cuatro direcciones I/O que son las siguientes:
Direccionamiento PPI La direccin Base se selecciona mediante jumpers en la placa, en nuestro caso hemos seleccionado la 300. Los valores de W igual a 224 y R igual a 16, vienen dados por exigencias de ese circuito externo que hemos mencionado que existe entre el Puma y la PPI. La funcin escribir recibe como parmetros, primero el actuador a donde se desea enviar la configuracin y segundo la configuracin binaria. Para enviar la configuracin binaria al puma primero inicializamos la PPI, esto se realiza enviando la configuracin 128 a la direccin de control. La configuracin 128 indica que se quiere utilizar la PPI en modo 0, modo bsico de entrada/salida en el que todos los puertos son de entrada/salida. Seguidamente se pone en Pa la configuracin del eje sobre el que deseamos escribir y el Pb la configuracin que se desea enviar. Los datos
128
Simulacin Virtual de Robots Articulados primero pasan por el circuito que su vez se encarga de mandrselos al Puma. Para realizar la lectura el procedimiento es similar, inicializamos la PPI, configuramos el puerto Pb de lectura y leemos la configuracin del eje solicitado. Si se observa el cdigo vemos que se hacen ms cosas, estas operaciones son necesarias para que configurar el circuito externo, no entraremos en detalle porque esta parte no pertenece al proyecto. La funcin myDelay viene a funcionar exactamente igual que la delay del C, nos hemos visto forzados a implementarla al ver que el Visual C++ no tenamos la funcin delay. Una observacin importante es que los prototipos Java de la DLL trabajan con parmetros enteros y las funciones locales trabajan con bytes. Esto se debe a que en C al utilizar el tipo unsigned char tenemos un byte sin signo (0...255) y en Java el tipo byte es con signo (-127...128). Por esta razn, se decidi trabajar con enteros cuando se utiliza cdigo Java y realizar en la DLL TypeCast de enteros a bytes y viceversa (Lgicamente se controla que los TypeCast sean posibles).
129
LAS aplicaciones distribuidas son aquellas que se ejecutan por sistemas host
mltiples. Los objetos que se estn ejecutando en un host invocan a los mtodos de los objetos de otros hosts para ayudarles a realizar su procesamiento. Estos mtodos se ejecutan en hosts remotos, de ah el nombre invocacin remota de mtodos. Los objetos invocados remotamente realizan clculos y pueden devolver valores que sean utilizados por los objetos locales. En el apartado anterior se estudio la clase Native y como sus mtodos que nos permiten controlar localmente al robot Puma. Para poder controlar remotamente al puma slo necesitamos buscar alguna manera de hacer que esos mtodos nativos puedan ser utilizados de forma remota. Para hacer esto habr que implementar un objeto remoto capaz de manipular el puma utilizando esos mtodos nativos y devuelver los resultados a un objeto local utilizado en el mdulo de acceso remoto. El API RMI proporciona un conjunto de paquetes intuitivos y fciles de usar que hacen del desarrollo de las aplicaciones distribuidas una extensin natural de la programacin del hosts nicos. Adems RMI es mucho ms fcil de usar que otras estructuras de programacin de aplicaciones distribuidas actuales, entre las que se incluye la Arquitectura de Intermediacin de Solicitud de Objetos Comunes (CORBA) y el Modelo de Objeto Componente Distribuido (DCOM).
130
Simulacin Virtual de Robots Articulados presentes localmente durante el proceso de compilacin. La interfaz cliente invoca a los mtodos del objeto fragmento adaptador local. El fragmento adaptador local comunica estas invocaciones de mtodos al esqueleto remoto mientras que este ltimo invoca a los mtodos del objeto servidor. El objeto servidor devuelve un valor al objeto esqueleto. El objeto esqueleto devuelve el valor al objeto fragmento adaptador, mientras que este ltimo devuelve el valor al cliente. Las clases de fragmento adaptador actan como proxies locales de objetos remotos. Las clases de esqueleto actan como proxies remotos. Ambas clases implementan la interfaz remota del objeto servidor. El compilador rmic es una herramienta estndar del JDK, se utiliza para generar las clases del fragmento adaptador y esqueleto con ayuda del objeto servidor. El objeto cliente y el fragmento adaptador se comunican por medio de las invocaciones normales de mtodos de Java, al igual que lo hacen el esqueleto y el objeto servidor. El fragmento adaptador y el esqueleto se comunican a travs de una capa de referencia remota.
131
Simulacin Virtual de Robots Articulados Esta capa de referencia remota admite la comunicacin entre el fragmento adaptador y el esqueleto. Tambin puede ser utilizada para activar los objetos servidor cuando se invoquen remotamente. Un proceso separado, al que se llama Demonio de Sistema de Activacin de la RMI de Java, da soporte a la activacin de objetos remotos. Este proceso se ejecuta por medio del programa rmid del JDK en el sistema remoto. En esta vista ampliada del modelo, el objeto cliente invoca a los mtodos del fragmento adaptador local del objeto servidor. El fragmento adaptador local utiliza la capa de referencia remota para comunicarse con el esqueleto del servidor. La capa de referencia remota utiliza la capa de transporte RMI para establecer una conexin entre los espacios de direcciones locales y remotos y para obtener una referencia del objeto esqueleto. La capa de transporte configura y administra las conexiones que se dan entre los espacios destinados a direcciones de los hosts remoto y local, controla los objetos a los que se puede acceder remotamente y determina cundo las conexiones estn en comps de espera y se vuelven inoperativas. La capa de transporte utiliza por defecto TCP para comunicarse entre los hosts local y remoto. No obstante, se pueden usar tambin otros protocolos de capa de transporte, como SSL y UDP.
Registro de Objetos Remotos Para poder acceder remotamente a un objeto servidor; ste debe registrarse a s mismo con el registro remoto. Esto lo hace asociando su instancia de objeto a un nombre. El registro remoto es un proceso que se ejecuta en el host del servidor y se crea ejecutando el programa rmiregistry, otra herramienta del JDK. El registro remoto mantiene una base de datos de objetos servidor y los nombres en virtud de los cuales se puede hacer referencia a esos objetos. Cuando un cliente crea una instancia de la interfaz de un objeto servidor (es decir; su fragmento adaptador local), la capa de transporte del host local se comunica con la capa de transporte del host remoto para determinar si el objeto al que se ha hecho referencia existe y para ver el tipo de interfaz que implementa el objeto al que se ha hecho referencia. La capa de transporte del lado del servidor utiliza el registro remoto para acceder a esta informacin. Ahora que conocemos un poco como funciona RMI, vamos a describir el proceso realizado para implementar la invocacin remota de los mtodos que manipulan el puma. Este proceso pasa por:
132
Simulacin Virtual de Robots Articulados 1. Crear una interfaz remota para poder referenciar los objetos remotos. La interfaz debe ser public y ampliar la interfaz Remote. 2. Crear una clase que implemente la interfaz remota. 3. Crear las clases del fragmento adaptador y esqueleto. 4. Ficheros del Host Cliente 5. Iniciar el registro remoto 6. Crear y registrar el objeto remoto
InterfazRMI: Interfaz Remota Los mtodos escribirPPI y leerPPI funcionan exactamente igual que los mtodos nativos que ya comentamos. El fichero anterior slo contiene las interfaces de las funciones remotas.
134
Simulacin Virtual de Robots Articulados Web podemos distribuir automticamente los archivos que necesita el cliente y no es necesario copiar ningn fichero en l. Sin embargo, tambin se puede utilizar mtodos remotos sin applets o servidores Web, en estos casos el cliente necesita tener localmente la clase del servidor y el fichero Stub.
UNA vez tenemos terminado el servidor remoto, slo hay que ejecutar el
programa InterfazRMIImpl con el fin de crear un objeto que se registre a s mismo con la ayuda del registro remoto. Ahora slo falta que el cliente acceda al servidor Web y se descargue el applet que ser el que acceda a los mtodos remotos desde la mquina del cliente.
136
Interfaz de Usuario del Mdulo de Acceso Remoto al PUMA No vamos a comentar como se construye la interfaz del applet pero si vamos a comentar la parte de cdigo ms importante del applet que es cuando se invocan los mtodos remotos. Lo primero que hace el applet es conectarse con el servidor, el mtodo getHost nos permite obtener el nmero IP del servidor web de donde nos bajamos el applet. Cuando se ejecutaba el servidor rmi, este se registraba con el nombre InterfazServer. Este nombre nos sirve para que nuestro applet de acceso remoto encuentre al objeto servidor. Despus de ejecutarse este cdigo tendremos un objeto llamado obj capaz de acceder a los mtodos remotos.
Inicializacin del acceso remoto en el Cliente El acceso a cada articulacin se realiza llamando al mtodo escribirPPI con lo parmetros adecuados. EL siguiente ejemplo muestra como enviar una configuracin binaria a la articulacin Q1 del robot puma.
Acceso al actuador situado en Q1 Para leer de las articulaciones el proceso es similar, utilizamos el mtodo remoto adecuado exactamente igual que se hubiera hecho con un mtodo local.
137
138
Mdulo de Monitorizacin
Requerimientos en el Servidor Visualizacin en los Clientes
Requerimientos en el Servidor
139
140
Threads en Java
141
Conclusiones
142
143
Conclusiones Finales
144
Sugerencias
Controlar que en cada instante de tiempo slo pueda estar accediendo al robot real un solo usuario. Capacidad de controlar mltiples recursos no solo el robot PUMA. Los usuarios deberan poderse clasificar segn una jerarqua (alumno, profesor, invitado, etc.) en funcin de la cual asignar un tiempo mnimo de acceso a cada recurso. La poltica de acceso debera ser: "Cada usuario tiene asignado el PUMA un tiempo mnimo que establece el administrador, pero en caso de que ningn otro usuario solicite el mismo recurso debera poder seguir disfrutando del mismo" Sera til llevar una serie de estadsticas personalizadas para cada usuario sobre nmero de lecturas realizadas en los sensores del robot, nmero de sesiones, etc. El mdulo de simulacin debera slo ocuparse de la validacin de los usuarios y una vez se ha realizado la validacin del usuario la comunicacin debera realizarse directamente entre el cliente y el servidor del recurso correspondiente, de esta forma se consigue que el mdulo de validacin quede libre para seguir realizando otras tareas como ofrecer informacin a los usuarios o validar nuevos usuarios.
El siguiente diagrama presenta un esquema cmo se podra implementar este mdulo de validacin de usuarios.
145
Esquema del Mdulo de Validacin Aquellos usuarios que deseen conocer informacin acerca de su actividad en el sistema pueden recurrir al servlet de autenticacin el cual puede informarles sobre estos temas gracias a que va almacenando este tipo de informacin en una base de datos. El administrador del sistema tambin puede dirigirse al servlet para configurar las cuentas de acceso de los usuarios. Cuando un usuario intenta acceder al robot PUMA el servlet de autenticacin deber realizar los siguiente pasos: 1. Comprobar si el usuario que solicita el recurso tiene permisos y comprobar el tiempo que ha consumido el usuario anterior utilizando el recurso. 2. Si el tiempo asignado para el usuario anterior ha expirado, se debe invocar al servidor RMI del PUMA para que asigne el recurso al nuevo usuario y obtener las estadsticas de acceso del usuario anterior. Despus deber actualizar los datos del usuario anterior en la base de datos y comunicar al nuevo cliente que ya puede acceder al puma. El mdulo servidor RMI se encargar de comunicar al viejo cliente que su tiempo de acceso ha expirado. 3. Finalmente en caso de que el usuario no este registrado o el usuario anterior no haya consumido su tiempo mnimo de acceso, el servlet comunica al usuario el respectivo mensaje de error. En el captulo V, se comentaba la existencia de una librera en C que permita la interaccin a bajo nivel con el robot PUMA. Esta librera se desarroll para trabajar con Windows 9x que es un sistema operativo de pago, lo ideal hubiese sido implementarla el C para Linux. Linux hoy en da, va ganando adeptos gracias a que es un sistema operativo "gratuito". Nosotros no la hemos desarrollado porque nos dimos cuenta
146
Simulacin Virtual de Robots Articulados cuando el mdulo de acceso remoto estaba acabado y funcionando. Tambin nos hubiese gustado comprobar el funcionamiento del simulador sobre otras plataformas diferentes de la de Windows 9x, para ver como se comporta Java 3D sobre otros sistemas operativos como Solaris o Linux.
147
Apndices
148
149
El WebSite contiene la memoria completa del proyecto con sus respectivas imgenes. El mdulo de acceso remoto se encuentra situado en el directorio llamado AccesoRemoto. En l podemos encontrar los fuentes del mdulo y tambin informacin sobre las clases que utiliza. Esta informacin ha sido generada utilizando la herramienta Javadoc que se incluye en el JDK (Java Development Kit). El mdulo de monitorizacin se encuentra en el directorio Monitoriz, y al igual que el mdulo anterior, presenta informacin acerca de sus clases y los fuentes de las mismas. El mdulo de simulacin situado en el directorio simulador contiene adems de la informacin sobre el mdulo, el applet completo del simulador y los ficheros fuentes asociados. Por ltimo, la presentacin realizada en PowerPoint para la entrega del proyecto se ha exportado en formato HTML y se encuentra disponible en el directorio present.
150
Los pasos para compilar e inicializar la parte del servidor del mdulo de acceso remoto son las siguientes: 1) Comprobar la existencia de los siguientes ficheros:
// Contiene la interface de los metodos Remotos // Implementacion de los metodos remotos // Applet cliente que utiliza los metodos remotos
NOTA: java.policy // Fichero que establece el nivel de seguridad. Asegrese de que ajusta los niveles de seguridad de la mquina virtual Java para poder acceder y escuchar el puerto 1099. 2) Compilar InterfazRMI.java javac -d c:\inetpub\wwwroot\myclasses InterfazRMI.java 3) Compilar InterfazRMIImpl.java javac -d c:\inetpub\wwwroot\myclasses InterfazRMIImpl.java 4) Llamo a rmic rmic -d c:\inetpub\wwwroot\myclasses examples.interfazRMI.InterfazRMIImp Esto hace que se creen los ficheros: InterfazRMIImpl_Skel.class InterfazRMIImpl_Stub.class 5) Inicializo el rmiregistry start rmiregistry 6) Compilo el InterfazRMIApplet javac -d c:\inetpub\wwwroot\myclasses InterfazRMIApplet.java 7) Inicializo el servidor pasando como parametro el fichero de seguridad, java -Djava.rmi.server.codebase=http://<IP_SERVER>/myclasses/ 151
Simulacin Virtual de Robots Articulados Djava.security.policy=<RAIZ_WEBSERVER>\myclasses\policy examples.interfazRMI.InterfazRMIImpl Deber aparecer en la pantalla InterfazRMI Server Ready 8) Ahora el usuario puede acceder al applet de acceso remoto ubicado en este servidor. Utilice el enlace adecuado.
152
153
Bibliografa
Web sites
http://java.sun.com http://java.sun.com/products/java-media/3D http://vrm.sgi.com/moving-worlds/spec/changeLog.html http://www.omg.org http://www.omg.org/news/begin.htm http://www.javauniverse.com http://www.javaworld.com http://www.eidos.es http://www.ria.cl/ria/javatutor http://www.geocities.com/SiliconValey/Lakes/5276/man1.html
Artculos
Tutorial de Java y Java 3D de Sun Microsystems API de Java y Java 3D de Sun Siggraph 96/98 Apuntes de la asignatura Robotica I del quinto curso de Ingeniera Superior en Informtica de la Universidad de La Laguna, impartida por D. Leopoldo Acosta Snchez. Revista Programacin Actual Revista Linux Journal
Robtica, control, deteccin, visin e inteligencia. Autor K. S. Fu, R. C. Gonzlez, C. S. G. Lee. Editorial Mc-Graw Hill,1988 Robots, Mquinas a imagen y semejanza del hombre. Autor Isaac Asimov, Karen A. Frenkel. Editorial Plaza&Janes, 1987 Java 1.2, Al descubierto, la solucin ms completa. Autor Jamie Jaworski, Editorial Prentice Hall, 1999. Java 2, Manual de Usuario y Tutorial. Autor Agustn Froufe, Editorial RA-MA, 1999. Java Programming with Corba. Autor Andreas Vogel, Keith Duddy. Editorial
154
Como programar en Java. Biblioteca tcnica de programacin. Editorial Prensa Tcnica, 1997. VRML, biblioteca del programador. Autor Jamsa Schmauder Yee. Editorial McGraw Hill, 1998. VRML 2.0, el lenguaje 3D de Internet. Autor: Javier Guerrero. Editorial Abeto, 1998 (traduccin casi literal del Siggraph 96).
Libros Generales
- Data Structures and C Programs. Autor Christopher J. Van Wyk, Addison-Wesley, 1988. - Writing Efficient Programs. Autor Jon Bentley, Prentice Hall, 1982, especially p. 110 and p. 145-151. - More Programming Pearls. Autor Jon Bentley. Association for Computing Machinery, February 1988. - Programming Pearls. Autor Jon Bentley, Addison-Wesley 1989. Part II addresses generic performance enhancements. - Code Complete: A Practical Handbook of Software Construction. Autor Steve McConnell, Microsoft Press 1993, Chapter 9. - Object-Oriented System Development. Autor Champeaux, Lea, and Faure, Chapter 25. - The Art of Programming. Autor Donald Knuth, Volume 1 Fundamental Algorithms 3rd Edition, 1997; Volume 2, Seminumerical Algorithms 3 rd Edition; Volume 3 Sorting and Searching 2 nd Edition, Addison-Wesley. The definitive encyclopedia of algorithms. - Algorithms in C: Fundamentals, Data Structures, Sorting, Searching. Autor Robert Sedgewick, 3 rd Edition, Addison-Wesley 1997. The author is an apprentice of Knuths. This is one of seven editions devoted to several languages and contains timely, somewhat simpler treatments of algorithms.
155
156