121
AMBIENTE PROTOTIPO PARA TELEOPERACION DE ROBOTS JUAN DIEGO BOTIVA LEON UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERIA DEPARTAMENTO DE SISTEMAS Y COMPUTACION GRUPO DE INFORMÁTICA GRAFICA BOGOTA D.C. SEPTIEMBRE DE 2004

Ambiente Prototipo Para Teleoperacin De Robots

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ambiente Prototipo Para Teleoperacin De Robots

AMBIENTE PROTOTIPO PARA TELEOPERACION DE ROBOTS

JUAN DIEGO BOTIVA LEON

UNIVERSIDAD DE LOS ANDES

FACULTAD DE INGENIERIA

DEPARTAMENTO DE SISTEMAS Y COMPUTACION

GRUPO DE INFORMÁTICA GRAFICA

BOGOTA D.C.

SEPTIEMBRE DE 2004

Page 2: Ambiente Prototipo Para Teleoperacin De Robots

AMBIENTE PROTOTIPO PARA TELEOPERACION DE ROBOTS

JUAN DIEGO BOTIVA LEON

Tesis para optar al título de

Ingeniero de Sistemas y Computación

Profesor Asesor

PABLO ALEJANDRO FIGUEROA FORERO

UNIVERSIDAD DE LOS ANDES

FACULTAD DE INGENIERIA

DEPARTAMENTO DE SISTEMAS Y COMPUTACION

GRUPO DE INFORMÁTICA GRAFICA

BOGOTA D.C.

SEPTIEMBRE DE 2004

Page 3: Ambiente Prototipo Para Teleoperacin De Robots

A mis padres Sergio y Mª. Constanza,

mis hermanos Andrés y Mª. Alejandra,

y a Sandra

Page 4: Ambiente Prototipo Para Teleoperacin De Robots

AGRADECIMIENTOS

Agradezco a todos los que de una u otra forma me ayudaron en el desarrollo de este

trabajo.

En especial a mis padres y a mis hermanos por su apoyo y motivación, siempre les estaré

agradecido.

A Sandra, por su cariño, apoyo y ánimo constantes.

A mi asesor Pablo Figueroa por su guía y valiosos aportes y a mi asesor de Ciclo

Terminal 1, Fernando De la Rosa.

Page 5: Ambiente Prototipo Para Teleoperacin De Robots

TABLA DE CONTENIDO

1. INTRODUCCION ........................................................................................................ 1

1.1. OBJETIVO GENERAL....................................................................................... 2

1.2. OBJETIVOS ESPECIFICOS............................................................................... 2

1.3. PLAN DEL DOCUMENTO................................................................................ 3

2. MARCO TEORICO...................................................................................................... 5

2.1. TELEOPERACION............................................................................................. 5

2.1.1. Definición ................................................................................................ 5

2.1.2. Problemas de la Teleoperación ................................................................ 7

2.1.2.1. Retardos en la Comunicación ................................................... 7

2.1.2.2. Pérdida del Enlace de Comunicación ....................................... 8

2.1.2.3. Factor Humano.......................................................................... 8

2.1.2.4. Confiabilidad............................................................................. 8

2.1.3. Control Colaborativo ............................................................................... 9

3. TRABAJOS RELACIONADOS ................................................................................ 10

3.1. SISTEMAS DE TELEOPERACION ACTUALES .......................................... 10

3.1.1. Standardized Teleoperation System (STS) ............................................ 10

3.1.2. TELEDRIVE.......................................................................................... 11

3.1.3. Advanced Teleoperation Interfaces ....................................................... 12

3.2. PROYECTOS DE TELEOPERACION CON EL LEGO RCX........................ 13

3.2.1. Proyecto Red Rover Goes to Mars......................................................... 13

3.3. ALCANCE DEL PRESENTE TRABAJO ........................................................ 14

4. DESCRIPCION DEL SISTEMA ............................................................................... 16

4.1. HARDWARE .................................................................................................... 17

Page 6: Ambiente Prototipo Para Teleoperacin De Robots

4.1.1. Lego Robotics Invention System 2.0 ..................................................... 17

4.1.2. Construcción del Robot Móvil............................................................... 19

4.2. SOFTWARE...................................................................................................... 23

4.2.1. leJOS...................................................................................................... 23

4.2.1.1. Memoria.................................................................................. 25

4.2.1.2. Hilos........................................................................................ 25

4.2.1.3. Arreglos................................................................................... 26

4.2.1.4. Modelo de Eventos ................................................................. 26

4.2.1.5. Excepciones ............................................................................ 26

4.2.1.6. Recolección de Basura............................................................ 27

4.2.2. API de leJOS.......................................................................................... 27

4.2.2.1. Salida....................................................................................... 27

4.2.2.2. Entrada .................................................................................... 28

4.2.2.3. Botones del RCX .................................................................... 28

4.2.2.4. Batería ..................................................................................... 29

4.2.2.5. LCD......................................................................................... 29

4.2.2.6. Parlante ................................................................................... 29

4.2.2.7. Comunicación IR .................................................................... 29

4.2.3. Modificaciones Realizadas a leJOS....................................................... 31

4.2.4. Respuesta del Sistema a Problemas de Teleoperación .......................... 32

4.2.5. Diseño de la Primera Versión del Sistema............................................. 33

4.2.5.1. Diagrama de Clases Aplicación del PC .................................. 34

4.2.5.2. Diagrama de Clases Aplicación del RCX............................... 40

4.2.5.3. Diagramas de Secuencia ......................................................... 43

4.2.6. Diseño de la Segunda Versión del Sistema............................................ 47

4.2.6.1. Diagrama de Clases Aplicación del PC .................................. 48

4.2.6.2. Diagrama de Clases Aplicación del RCX............................... 52

4.2.6.3. Diagramas de Secuencia ......................................................... 55

4.3. AMBIENTE....................................................................................................... 59

4.4. LIMITANTES.................................................................................................... 60

4.4.1. Memoria del RCX.................................................................................. 60

Page 7: Ambiente Prototipo Para Teleoperacin De Robots

4.4.2. Medio de Comunicación PC – RCX...................................................... 60

5. PRUEBAS DEL SISTEMA........................................................................................ 62

6. CONCLUSIONES Y TRABAJO FUTURO .............................................................. 69

7. REFERENCIAS.......................................................................................................... 71

8. APENDICE A............................................................................................................. 74

Page 8: Ambiente Prototipo Para Teleoperacin De Robots

1

1. INTRODUCCION

La robótica es un área con un potencial enorme, que ha contribuido en las últimas

décadas en un variado conjunto de operaciones como manufactura, construcción,

demolición, vigilancia, entre otros.

Una de las grandes ventajas que ha introducido la robótica, es que ha permitido que el

hombre llegue a lugares donde, por distancia o por seguridad no puede ir. Podemos tomar

como ejemplos el Mobot Ch-KhV [12] que trabajó en la planta de energía nuclear de

Chernobil luego del desastre, y el Soujurner [13], un vehículo que fue enviado hasta

Marte para hacer diferentes análisis sobre la superficie. Estos robots no eran totalmente

autónomos. Para que estos robots pudieran desarrollar su labor, necesitaban de la

asistencia de un humano.

Otros campos en los que este tipo de robots controlados a distancia se utilizan son: la

detección de minas antipersonales y de otros tipos (terrestres y submarinas), desarme

remoto de artefactos explosivos, vigilancia y exploración, entre otros. Como se puede

ver, las aplicaciones son muchas y muy variadas; desafortunadamente, estos robots y los

sistemas que los controlar son muy costosos para llegar a ser usados en cantidad

considerable en Colombia.

Actualmente en Internet se encuentran muchos sitios que ofrecen la oportunidad de

controlar un robot desde el lugar en que se encuentre la persona conectada, estos sitios

son muy interesantes, ya que acercan a las personas comunes a la robótica, sin embargo,

estos sistemas no evolucionan para convertirse en algo útil para el sector productivo.

Page 9: Ambiente Prototipo Para Teleoperacin De Robots

2

La motivación de este trabajo es explorar los problemas inherentes a un sistema de

teleoperación, mediante la implementación de un prototipo sobre una plataforma

comercial. Es nuestro objetivo que nuestras conclusiones sean útiles en el contexto

industrial colombiano y en la Universidad.

1.1. OBJETIVO GENERAL

El objetivo general de este trabajo es diseñar un prototipo de un ambiente de

teleoperación de robots, con tecnologías libre y hardware de bajo costo, que

eventualmente pase de ser un prototipo a un sistema con opciones de uso reales.

1.2. OBJETIVOS ESPECIFICOS

Dentro del marco del objetivo general de este trabajo, los objetivos específicos que se

esperan lograr son los siguientes:

• Adquirir conocimiento en el área de robótica y en especial de teleoperación, como

está el estado del arte, que problemas y retos enfrenta y que se ha hecho por

solucionarlos.

• Adquirir conocimiento en las tecnologías libres disponibles para el desarrollo del

prototipo.

• Afianzar los conocimientos adquiridos en diferentes cursos vistos en la

Universidad, con un problema real.

Page 10: Ambiente Prototipo Para Teleoperacin De Robots

3

• Diseñar una solución que sea lo más independiente posible de la tarea que el robot

desempeñe, con el fin de que la mayor parte del sistema sea reutilizable en otras

actividades.

• Desarrollar un piloto que permita poner a prueba las diferentes características del

prototipo.

1.3. PLAN DEL DOCUMENTO

La estructura del presente documento es la siguiente:

En el segundo capítulo, se explican algunos conceptos necesarios para la comprensión de

este trabajo. Se inicia con el concepto de teleoperación, requerimientos y problemas

relativos a ésta y finalmente se expone el concepto de control colaborativo, que se

pretende sea involucrado poco a poco en la evolución futura de este trabajo.

En el tercer capítulo, se mencionan algunos trabajos recientes relacionados con

teleoperación con el fin de poner al lector en contexto con el estado del arte en la materia.

Se inicia mostrando sistemas de teleoperación actuales y luego aquellos que se basan en

el Lego RCX. No se mencionan trabajos hechos en la Universidad, debido a su

antigüedad y poca relación con el que se desea desarrollar.

En el cuarto capítulo, se hace una descripción general del sistema que se ha desarrollado.

Se comienza presentando el hardware utilizado y sus características, y se explica cómo se

llegó al diseño actual del robot. A continuación, se describen las características del

software que funciona como máquina virtual en el controlador del robot, su API y las

modificaciones que se le debieron hacer para usarlo en teleoperación. Dentro de ésta

sección, se hace la descripción detallada del diseño del sistema en sus dos versiones, se

incluye el diagrama de clases y un diagrama de secuencia para ilustrar el funcionamiento

Page 11: Ambiente Prototipo Para Teleoperacin De Robots

4

en condiciones normales de operación. Por último se describe cómo es el ambiente en el

que opera el robot y las limitantes de hardware/software del sistema.

En el quinto capítulo, se exponen las pruebas realizadas al sistema y se incluyen

imágenes de la demostración ejecutada.

Se incluye un apéndice con las instrucciones de armado del robot. Cabe anotar que se

usaron partes adicionales al Robotics Invention System 2.0 y un sensor fue

proporcionado por la Universidad.

Page 12: Ambiente Prototipo Para Teleoperacin De Robots

5

2. MARCO TEORICO

2.1. TELEOPERACION

2.1.1. Definición

Teleoperar un dispositivo significa operarlo a distancia, permite sentir y actuar en una

ubicación remota. [2] considera que la teleoperación no es solo el control directo (sin

funciones autónomas) sino que comprende un espectro más amplio desde el control

manual hasta el de supervisión. Un sistema de teleoperación puede emplear control

continuo/directo, control intermitente/supervisión o cualquier punto intermedio. El tipo

de control puede variar sobre el tiempo o en función de la situación y puede ser

compartido/intercambiado entre el operador y el robot remoto.

El marco de trabajo básico de teleoperación según [2] es el siguiente: Un operador

humano trabaja en una estación de control, generando comandos a través de dispositivos

de entrada/control y recibiendo retroalimentación en monitores. El vehículo remoto, que

ejecuta los comandos del operador, está equipado con sensores, actuadores, y

frecuentemente algún nivel de autonomía. El operador y el vehículo están separados por

una barrera (ambiente, distancia, tiempo, etc.) e intercambian información a través de un

enlace de comunicaciones (figura 1).

Page 13: Ambiente Prototipo Para Teleoperacin De Robots

6

Figura 1. Marco de Trabajo de Teleoperación

Tomada de [2]

En el caso de teleoperación de vehículos o robots móviles, ésta tiene requerimientos

adicionales que la distinguen del simple control remoto y de otros tipos de teleoperación

(telemanipulación). Los requerimientos son:

• Navegación confiable: El robot debe saber con exactitud donde se encuentra en

el espacio.

• Generación de comandos de movimiento eficiente: El robot, dado un comando

de movimiento, debe ser preciso en sus movimientos para que la posición final

sea la esperada.

• Interpretación precisa de los datos de los sensores: Si no se interpreta de

manera correcta la información proveniente de los sensores, se pueden tomar

decisiones erradas por parte del robot o del operador.

Page 14: Ambiente Prototipo Para Teleoperacin De Robots

7

2.1.2. Problemas de la Teleoperación

A continuación se describen brevemente algunos de los problemas y desafíos relativos a

la teleoperación y las soluciones que se han llevado a cabo para resolverlos o mitigarlos.

2.1.2.1. Retardos en la Comunicación

Este es uno de los problemas más cruciales. Debido a que el dispositivo controlado y el

operador no se encuentran en el mismo ambiente, debe haber un enlace de

comunicaciones, que muy probablemente introduzca retardos en el envío de órdenes y

recepción de retroalimentación. Los retardos se pueden incrementar por factores tan

diversos como clima (afectando la confiabilidad del enlace de comunicación),

inestabilidad del sistema del dispositivo controlado o de la estación de control.

El retardo puede ser de dos tipos: fijo o variable. En el retardo fijo, el tiempo de retraso

entre el envío y la recepción de órdenes o retroalimentación es siempre el mismo, en el

retardo variable no hay certeza con respecto al tiempo de retraso y puede que no haya

retraso del todo (no hay retardo) o el retraso sea muy grande.

Como solución a este problema, se utilizan visualizaciones predictivas. Estas consisten en

el uso de realidad virtual para darle al operador una retroalimentación en tiempo real de

las órdenes que éste da, tanto en visualización (el dispositivo ubicado en el ambiente

virtual se antepone a la visualización del robot real) como en fuerzas (force feedback,

resultante de la interacción del dispositivo virtual con el ambiente virtual), antes de ser

enviadas al dispositivo real, en caso de que las acciones del dispositivo virtual sean

consideradas satisfactorias, se enviarán las ordenes al robot real.

Page 15: Ambiente Prototipo Para Teleoperacin De Robots

8

2.1.2.2. Pérdida del Enlace de Comunicación

Se puede perder el contacto entre el dispositivo controlado y la estación de control por

obstrucciones, posición y/o distancia entre ellos. Esto está fuertemente relacionado a las

limitaciones inherentes al medio de comunicación (infrarrojos, radio, etc.). Por ejemplo,

en el caso de utilizar infrarrojos, la potencia de los emisores puede restringir las

condiciones a que debe haber línea de visión entre el emisor y el receptor.

2.1.2.3. Factor Humano

El operador por diversas razones (poco entrenamiento, cansancio, mala interpretación de

los sensores, etc.), puede juzgar mal y dar una orden errónea. Si el dispositivo controlado

se encuentra en un ambiente peligroso (no seguro), esto puede llegar a afectar seriamente

la estabilidad del sistema completo y la integridad del dispositivo.

A pesar de esto, operador humano sigue jugando un papel muy importante, ya que cuenta

con capacidades que aún una máquina no puede lograr, la solución que se le da a este

inconveniente es asistir al humano en las tareas que más se le dificultan y que de esta

forma se dedique a las que realmente requieren de su intervención. Este es un poco el

enfoque del Control Colaborativo de [2], expuesto más adelante.

2.1.2.4. Confiabilidad

El dispositivo controlado en si, puede introducir errores en el sistema debido a su

construcción, sensores descalibrados, problemas en la alimentación de poder, etc. Las

condiciones del ambiente de operación pueden también tener consecuencias en la

operación del sistema.

Para anticiparse a las consecuencias que esto pueda tener, se realizan simulaciones de una

operación o un conjunto de estas en ambientes de realidad virtual, en donde se puede ver

Page 16: Ambiente Prototipo Para Teleoperacin De Robots

9

la respuesta del dispositivo a las órdenes y al ambiente (asumiendo que el modelo del

dispositivo refleja fielmente el comportamiento real del mismo).

2.1.3. Control Colaborativo

Un nuevo modelo de teleoperación propuesto por [2] es el Control Colaborativo. En este

modelo, un humano y un robot colaboran para desempeñar tareas y alcanzar metas

comunes. En vez de un humano siempre estando completamente “en control”, el robot

esta más en igualdad y puede tratar al humano como una fuente limitada de planeación e

información, tal como otros módulos del sistema.

Una consecuencia importante de este modelo es que el robot puede decidir como usar el

consejo humano: seguirlo cuando este disponible y es relevante; para modificarlo (o

incluso ignorarlo) cuando sea inapropiado o inseguro. De esta forma, si el robot está

operando autónomamente y tiene problemas, puede preguntarle al operador “Que debo

hacer?” Si el humano está en capacidad de responder (y puede hacerlo pronto), entonces

se hará lo que diga. Sin embargo si la respuesta llega tarde (debido a un retardo en la

comunicación) o es insegura, entonces el robot puede ver el consejo con escepticismo y

buscar aclaración (“esta seguro?”), reformular la pregunta (“Que otras opciones

diferentes tengo?”) o negociar (“puedo hacerlo de otra forma?”).

Esto no significa que el robot se convierta en el “amo” del sistema, éste aun sigue una

estrategia de alto nivel establecida por el humano. Sin embargo el robot tiene más

libertad en la ejecución y es capaz de funcionar mejor si el operador está distraído, no

está atento o no está disponible. Como resultado, la teleoperación se vuelve más

adaptable, más flexible y permite acomodar mejor diferentes niveles de autonomía,

interacción y capacidades humanas.

Page 17: Ambiente Prototipo Para Teleoperacin De Robots

10

3. TRABAJOS RELACIONADOS

A continuación se mencionan algunos de los sistemas de teleoperación de vehículos

disponibles en la actualidad, tanto comerciales como proyectos de investigación y libres,

con el fin de contextualizar al lector en el estado del arte del campo.

3.1. SISTEMAS DE TELEOPERACION ACTUALES

3.1.1. Standardized Teleoperation System (STS) [19]

Este sistema fue desarrollado originalmente por Omnitech Robotics International LLC,

para el Unmanned Ground Vehicles/Systems Joint Program Office de Estados Unidos, la

Marina y la Armada del mismo país. Está formado por componentes modulares para

convertir cualquier vehículo a control remoto, control teleoperado o control

semiautónomo. Puede controlar el encendido y apagado del motor, acelerador, luces,

frenos, dirección, caja de cambios y el manipulador que pueda tener el vehículo (pala,

cuchilla, etc.) .

Page 18: Ambiente Prototipo Para Teleoperacin De Robots

11

Figura 2. Standardized Teleoperation System (STS)

Tomada de [19]

Este sistema se ha utilizado en aplicaciones tanto militares como comerciales. La

aplicación militar más frecuente es la detección y remoción de minas y la comercial es la

manipulación de material peligroso pesado.

3.1.2. TELEDRIVE [20]

Este proyecto del Laboratorio de Automóviles de la Universidad de Zaragoza, España,

tiene el objetivo de desarrollar un sistema completo de teleoperación de vehículos. Está

actualmente en desarrollo y participan varias empresas comerciales de España, Italia y

Francia. Tiene como principales características la integración de interfaces

multisensoriales (replicación de la dinámica del vehículo), técnicas avanzadas e

visualización (para introducir información adicional en la visualización) y teleoperación

multioperador (manejo simultaneo, supervisión, etc.).

El sistema está conformado por:

• Una estación de control multisensorial, la cual genera estímulos visuales,

auditivos y cinéticos.

• Un salón de muestra para pasajeros virtuales, el cual genera estímulos visuales,

auditivos y cinéticos.

Page 19: Ambiente Prototipo Para Teleoperacin De Robots

12

• Una estación de supervisión multisensorial, la cual genera estímulos visuales,

auditivos y cinéticos (dependiendo de la aplicación específica).

• Un vehículo operado remotamente (adaptación de uno comercial) adecuado para

la aplicación especifica del proyecto.

• Enlaces de comunicación (RF, Internet y/o GPRS) entre el vehículo y las

estaciones del operador/supervisor/salón de muestra y el sistema global de

control.

Los campos de aplicación potenciales del proyecto son:

• Entretenimiento y diversión: visitas a ruinas submarinas, observación de fauna o

conducción remota.

• Educación: Información visual complementada con realidad aumentada.

• Intervenciones remotas en ambientes peligrosos: plantas nucleares, lugares de

desecho de residuos, etc.

• Actividades subterráneas/submarinas: minería, reparación, mantenimiento, etc.

• Herramienta de propósito general para proyectos de investigación en telepresencia

y teleoperación.

3.1.3. Advanced Teleoperation Interfaces [21]

Es un proyecto de la misma persona que propuso el Control Colaborativo, mencionado

anteriormente, en el Robotics Institute de la universidad de Carnegie Mellon, junto con el

Instituto Federal de Tecnología de Suiza. Consiste en el diseño de varias herramientas

que hagan de la teleoperación algo más accesible para usuarios novatos como para

expertos, mediante el empleo del Control Colaborativo.

Dentro de las herramientas se destacan:

Page 20: Ambiente Prototipo Para Teleoperacin De Robots

13

• PdaDriver: interfase basada en PocketPC para la teleoperación de vehículos.

• WebDriver: interfase basada en Web para la teleoperación de vehículos.

• GestureDriver: interfase basada en HOT (Human Oriented Tracking), una librería

que ubica la cabeza y las manos de un humano usando cámaras de video

estereoscópicas para interpretar gestos basada en un vocabulario establecido.

3.2. PROYECTOS DE TELEOPERACION CON EL LEGO RCX

3.2.1. Proyecto Red Rover Goes to Mars [22]

Es un proyecto de The Planet Society (fundada por Carl Sagan), con el apoyo de The

LEGO Group, que tiene el objetivo de que cualquier persona con acceso a Internet, viva

la experiencia de explorar un planeta desconocido a través de los ojos de un robot móvil.

Consiste de varias “estaciones” que recrean una zona del ambiente marciano y que

permiten al usuario teleoperar un robot, moviéndolo en cuatro direcciones y tener

retroalimentación a través de una cámara que tiene equipada el robot o una cámara

externa. Las estaciones son mantenidas por diferentes universidades de los Estados

Unidos y Europa. En esta investigación se utilizo la estación MARS STATION South

Pole2 [23], alojada en Marshall University, en Huntington, West Virginia, USA.

Page 21: Ambiente Prototipo Para Teleoperacin De Robots

14

Figura 3. Panel de Control de Red Rover Goes to Mars

Tomada de [23]

Figura 4. Uno de los robots de Red Rover Goes to Mars en su ambiente.

Tomada de [22]

3.3. ALCANCE DEL PRESENTE TRABAJO

Debido a las limitaciones de tiempo y costo, y a que el interés de este trabajo es

comprender los problemas de las aplicaciones de teleoperación, el ambiente que se

desarrolló presenta las siguientes limitaciones:

Page 22: Ambiente Prototipo Para Teleoperacin De Robots

15

• Rango de Operación: El rango de operación del robot está limitado debido a que

el medio de transmisión es infrarrojo, con un alcance máximo de 10 metros

aproximadamente.

• Controlador del Robot: El hardware que controla el robot presenta limitaciones

en cuanto al número se sensores (3) y actuadotes (3), y no se cuenta con una

cámara para retroalimentar al operador. Solo se dispone de dos motores, un sensor

de rotación, un sensor de luz y dos sensores de contacto.

• Retroalimentación: El operador recibe retroalimentación visual (no

multisensorial) a través del monitor de la estación de control, en esta

retroalimentación no hay video ni imágenes.

• Interface: Se dispone de una interfaz de teleoperación que es una aplicación con

interfaz gráfica que corre en un computador (PC o Mac) y que se controla con

ratón y teclado, no se dispone de interfaz gestual o con joystick o que corra en

dispositivos móviles o por Web.

• Operadores: Solo un operador puede estar usando el sistema a la vez.

Page 23: Ambiente Prototipo Para Teleoperacin De Robots

16

4. DESCRIPCION DEL SISTEMA

El problema que se planea resolver consiste en el diseño e implementación de un

ambiente prototipo para la teleoperación de robots, basado en la propuesta de control

colaborativo hecha por Fong [2]. Igualmente se pondrá a prueba el diseño del sistema

para determinar que tan bien se comporta frente a los problemas de teleoperación.

Se utilizará un robot móvil como el dispositivo controlado. Como tarea para probar la

funcionalidad del sistema se operará el robot en un ambiente desconocido para el

operador (con ciertas condiciones) y tratar de reconstruir parcialmente ese ambiente con

la información de los sensores.

El sistema tendrá varios niveles de autonomía (operador, estación de control y robot) En

caso de detectar una situación anormal, el robot avisa al operador de lo acontecido.

La tarea que va a desempañar el robot, y el sistema en general, es la de reconocer ciertos

elementos en un ambiente construido para tal fin. Más adelante se dan los detalles del

ambiente y su construcción.

A continuación se detallan los recursos de hardware y software usados en el desarrollo

del sistema, así como el sistema en si.

Page 24: Ambiente Prototipo Para Teleoperacin De Robots

17

4.1. HARDWARE

4.1.1. Lego Robotics Invention System 2.0

Este kit se utilizó para construir un robot móvil como dispositivo controlado. Consiste en

un conjunto de 700 de piezas de Lego, junto con un microcomputador programable

(RCX) y un puerto infrarrojo USB para transmisión de datos entre el RCX y un PC o

Mac, además, incluye 2 motores, 2 sensores de contacto y 1 sensor de luz, etc. A

continuación se detallan las características del RCX 2.0.

El RCX 2.0 es un microcomputador basado en el Renesas (antes Hitachi) H8/3292,

trabaja a 16 MHz, tiene 16K de ROM y 32K de RAM externa. Tiene 3 entradas y tres

salidas, LCD, puerto infrarrojo y generador de tonos. Funciona con 6 pilas de 1.5 voltios

(AA).

El puerto infrarrojo se usa para descargar programas al RCX y para enviarle comandos, el

RCX puede a su vez enviar información de retroalimentación. Esto permite tener una

lógica más poderosa en el computador anfitrión y que la que se programe en el RCX se

limite a seguir instrucciones de movimiento o decisiones sencillas.

Para permitir la interacción del RCX con el entorno, se utilizan las entradas y salidas de

este. Las salidas permiten accionar motores, encender luces, entre otras. Las entradas

permiten el uso de diferentes sensores. Los sensores incluidos en el kit son:

• Luz: Permiten detectar la intensidad de luz.

• Contacto: Permite saber si hay contacto con otro objeto.

Page 25: Ambiente Prototipo Para Teleoperacin De Robots

18

Adicionalmente, se encuentran disponibles los siguientes sensores:

• Temperatura: Permite leer la temperatura.

• Rotación: Permite leer la velocidad de rotación de un elemento.

Las interfaces análogas de propósito general permiten conectar una gran variedad de

sensores al RCX, su papel es convertir la salida de estos sensores, a valores que puedan

ser leídos por el RCX.

La limitación de tres entradas y tres salidas puede ser eliminada al usar multiplexores que

se pueden adquirir o ser fabricados por uno mismo.

Para programar el RCX existen diferentes alternativas desde el software incluido con el

RCX, hasta reemplazos de firmware que permiten usar lenguajes existentes (con algunas

modificaciones y restricciones) como C, C++, Java, Perl y Visual Basic, entre otros.

Figura 5: Lego RCX 2.0

Tomada de [15]

Page 26: Ambiente Prototipo Para Teleoperacin De Robots

19

Figura 6: Lego RCX 2.0 con Motores Figura 7: Lego RCX 2.0 con Sensores Tomada de [15] Tomada de [15]

4.1.2. Construcción del Robot Móvil

Antes del primer prototipo usado en la solución del problema, se construyeron dos

prototipos de robots móviles (que se denominarán A y B, figuras 8 y 9 respectivamente)

para probar el kit RIS 2.0 de Lego.

En todos los prototipos se buscó que el puerto infrarrojo del RCX quedara inclinado hacia

arriba con el fin de poder establecer comunicación si éste se encontraba apuntando en

dirección opuesta al puerto infrarrojo del computador, esto resultó efectivo cuando había

algún elemento frente al puerto del RCX, que reflejara los rayos infrarrojos hacia el

puerto del PC.

El primero de los prototipos usaba tracción sobre bandas (oruga), una vez terminado se

detectó que al ordenarle seguir una trayectoria en línea recta se desviaba de esta por dos

motivos: el primero es que los motores están diseñados para girar mejor en una dirección

particular y los motores en este robot giran en direcciones opuestas y el segundo es que

los motores no son completamente idénticos y esto se ve más cuando están sometidos a

una gran carga, como lo es mover la banda de tracción (oruga); por no contar con

Page 27: Ambiente Prototipo Para Teleoperacin De Robots

20

sensores de rotación para hacer que los motores giraran a la misma velocidad, se decidió

utilizar como alternativa los dos sensores de contacto para que los ejes de las ruedas los

activaran cada media rotación (ver figura 10).

Aunque la trayectoria mejoraba bastante, el robot seguía desviándose principalmente por

que en algún momento uno de los sensores no se activaba. Para las rotaciones se encontró

que detectar media rotación no era útil ya que media rotación del piñón que impulsa la

banda (oruga) representaba alrededor de 7 centímetros de avance, lo que es demasiado

para poder realizar un giro de 90 grados con un buen grado de exactitud. Otro

inconveniente que se presentó con este prototipo era que al rotar, había mucho

deslizamiento entre la banda de tracción y el suelo, lo que hacia contar media rotación del

eje del piñón aún más inútil.

El segundo prototipo usaba cuatro ruedas donde el par de cada lado era impulsado por un

motor, también utilizaba los sensores de contacto y, aunque la trayectoria era casi recta,

presentaba el mismo problema de deslizamiento al rotar y los 90 grados tampoco se

podían hacer con exactitud. Como no era posible medir distancias relevantes de avance

con los sensores de contacto (solo tramos de aproximadamente 7 centímetros), se

incorporó un sensor de luz que detectara en el suelo una línea negra donde el robot debía

detenerse, al hacer esto se encontró que los sensores de contacto para las rotaciones

dejaban de funcionar correctamente debido a que, el estar interrogando continuamente al

sensor de luz, hacía que no se detectara a tiempo la activación de los sensores de contacto

y se perdiera este evento.

Page 28: Ambiente Prototipo Para Teleoperacin De Robots

21

Figura 8: Prototipo A Figura 9: Prototipo B

Figura 10: Detalle de los sensores de contacto para detectar rotación

A partir de lo aprendido con los dos prototipos anteriores, se decidió buscar y utilizar

sensores de rotación para contar el número de rotaciones de cada una de las ruedas y de

esta forma, mantener el robot en una trayectoria lo más recta posible e igualmente hacer

posible que el robot rotara lo más cercano a los 90 grados. Finalmente, solo fue posible

incorporar al robot un sensor de rotación proporcionado por la universidad. Para poder

cumplir con el objetivo de mantener trayectorias rectas y de hacer rotaciones más

precisas con un solo sensor de rotación, fue necesario utilizar un diferencial (ver figura

11), lo que hizo posible que las ruedas roten a la misma velocidad, pero imposibilitó el

medir distancias. Cabe anotar que con un solo sensor de rotación es posible que el robot

gire 90 grados, pero no es posible lograr que las ruedas giren a la misma velocidad en

sentidos contrarios durante la rotación, por lo que no se garantiza que el robot gire sobre

su eje y es posible que se desvíe de la trayectoria esperada durante la rotación, sin

embargo, se hizo todo lo posible para minimizar la fricción de los engranajes y que de

esta forma la ruedas rotaran los más parejo posible.

Page 29: Ambiente Prototipo Para Teleoperacin De Robots

22

Figura 11: Ensamblaje del Diferencial Usado en el Robot

Tomada de [1]

Con el fin de evitar el deslizamiento de las ruedas, se decidió que el robot solo tuviera

dos ruedas con tracción, ubicadas en la mitad de los costados laterales del robot, y un par

de llantas pequeñas de apoyo atrás que giran 360 grados. Para saber cuando detenerse, el

robot está equipado con un sensor de contacto apuntado hacia el suelo que se activa al

pasar el robot sobre una marca cuadrada ubicada en el suelo levantada unos 7 milímetros

del resto del suelo. Al escoger la tarea con la que se probaría el sistema, se decidió

incorporar un segundo sensor de contacto esta vez apuntado hacia el frente para detectar

obstáculos al avance del robot, igualmente se incorporó un sensor de luz al lado del

primer sensor de contacto, apuntado igualmente hacia abajo para detectar el color de la

marca sobre la que el robot se detuvo. Para superar la limitante de solo tres puertos de

entrada del Lego RCX, se conectaron los dos sensores de contacto al mismo puerto,

activándose este último cuando cualquiera de los dos sensores de contacto se active. Para

diferenciar entre una marca debajo del robot y un obstáculo en frente de éste, se usa el

sensor de luz, si debajo del robot el suelo es blanco (no hay marcas) significa que hay un

obstáculo en frente, cualquier otro color significa que hay una marca debajo del robot.

En la figura 12 se puede observar el diseño final del robot utilizado. Las instrucciones de

armado, paso a paso, se encuentran en el Apéndice A: INSTRUCCIONES DE ARMADO

DEL ROBOT.

Page 30: Ambiente Prototipo Para Teleoperacin De Robots

23

Figura 12. El Robot visto desde varios ángulos.

4.2. SOFTWARE

4.2.1. leJOS

El microcomputador del robot (RCX) será programado en Java, para esto se usará leJOS,

un reemplazo de firmware (código de programa almacenado en ROM, aunque en el RCX

es RAM) para el RCX que implementa una máquina virtual Java reducida. Se escogió

leJOS ya que permite programar el robot en java, un lenguaje bien conocido por el

desarrollador, y por contar con un API muy completo que facilito enfocarse en el

problema a resolver. El robot se comunicará con la estación remota a través de un puerto

infrarrojo usando una adaptación de las clases de comunicación habituales de java,

Page 31: Ambiente Prototipo Para Teleoperacin De Robots

24

proporcionadas por leJOS. A continuación se presenta los aspectos relevantes para el

desarrollo del sistema, de la descripción realizada por [1] de leJOS.

Inicialmente se creó TinyVM, una máquina virtual Java escrita en C para el RCX, junto

con software para descargar programas al RCX. También incluía un encadenador escrito

en Java. Ocupaba alrededor de 10K en el RCX, quedando cerca de 16K disponibles para

programas y datos. Las principales características son:

• Multitarea preventiva

• Excepciones

• Sincronización

• Arreglos, incluyendo arreglos multidimensionales

• Recursión

• Acceso a los botones del RCX

• Incluye un emulador

El proyecto de TinyVM se dividió y surgió leJOS. Las características adicionales a

TinyVM son:

• Operaciones de punto flotante

• Constantes de caracteres (String)

• Provee la clase java.lang.Math

leJOS se puede comparar con el Java 2 SDK de Sun Microsystems, ambos constan de una

máquina virtual Java (JVM) , un compilador (leJOS usa el mismo compilador de J2SE,

Page 32: Ambiente Prototipo Para Teleoperacin De Robots

25

javac) y un API, que es un conjunto de clases que pueden usar los programadores que

proveen funcionalidades avanzadas.

La JVM es el firmware que reemplaza al estándar de Lego. Esta debe ser descargada al

RCX para que éste ejecute programas Java, ya que sabe interpretar el bytecode y se

comunica con la ROM del RCX para hacer lo que uno desea. La especificación de la

JVM de leJOS para el RCX se describe a continuación.

4.2.1.1. Memoria

El RCX tiene 32KB de memoria, de los cuales 4KB están fuera de alcance por ser de uso

exclusivo de la ROM, esto deja 28KB libres. leJOS ocupa 16KB, esto deja cerca de

12KB para los programas del usuario.

Figura 13. Mapa de memoria de la JVM de leJOS

Tomada de [1]

4.2.1.2. Hilos

El esquema de hilos de ejecución (threads) de leJOS es muy completo, permitiendo

sincronización e interrupción. Los hilos son controlados por un hilo planificador, que

permite que un hilo tome control del procesador durante un número determinado de

Page 33: Ambiente Prototipo Para Teleoperacin De Robots

26

instrucciones (128 instrucciones en la última versión de leJOS). El planificador es muy

sencillo, mantiene una lista de los hilos actuales y cambia del hilo actual al siguiente

usando una función nativa escrita en C. En teoría, leJOS permite hasta 255 hilos

simultáneos, sin embargo, con las limitaciones de memoria del RCX, se debe mantener el

número de hilos en los estrictamente necesarios (alrededor de 5 si se monitorean los tres

sensores).

4.2.1.3. Arreglos

leJOS permite usar arreglos, incluyendo arreglos multidimensionales. Estos son muy

útiles en el caso de la navegación, para crear una grilla bidimensional y poder hacer un

seguimiento de la navegación. Aunque los arreglos multidimensionales son soportados,

hay que tener en cuenta las limitaciones de recursos del RCX.

4.2.1.4. Modelo de Eventos

leJOS es capaz de usar el modelo de eventos de Java, que incluye Listeners y Event

Sources. En el API de leJOS hay tres objetos que usan Listeners: Timer (TimerListener),

Button (ButtonListener) y Sensor (SensorListener). Este modelo permite un código

limpio, fácil de entender cuando se requiere que el RCX espere a que ocurra un evento.

En el modelo de eventos, un objeto actúa como un Event Source (fuente de eventos),

como un sensor. Al inicio de la ejecución del programa, uno o más objetos se registran

con el sensor para escuchar eventos. Cuando un evento ocurre todos los Listeners son

notificados del evento.

4.2.1.5. Excepciones

El manejo de excepciones ha sido incluido en leJOS. La ventaja del manejo de

excepciones es que separa la lógica regular del programa del código de chequeo de

Page 34: Ambiente Prototipo Para Teleoperacin De Robots

27

errores. Los programas Java muestran un stack trace que facilita localizar el error en caso

de una excepción que no fue atrapada. En el caso de leJOS, cuando una excepción no es

atrapada por el programa, el RCX emite un sonido y muestra en el LCD un índice del

método que falló y el índice de la clase modulo 10. Para identificar la fuente del error se

hace un volcado de la imagen que se transfirió al RCX.

4.2.1.6. Recolección de Basura

leJOS en la actualidad no tiene recolección de basura (garbage collection). Debido a esto

se debe ser cuidadoso y reutilizar objetos en vez de crear nuevos. La última versión de

leJOS provee un mecanismo de reciclaje, con clases que hacen la reutilización posible de

una manera ordenada, sin dificultar el entendimiento del código.

4.2.2. API de leJOS

El paquete josx.platform.rcx, que hace parte del API de leJOS, es el encargado de

proveer acceso al RCX.

4.2.2.1. Salida

Los tres puertos de salida (A, B y C) pueden ser controlados con leJOS. En el caso de los

motores, estos pueden ser activados para moverse hacia adelante (método forward()),

hacia atrás (método backward()) o cambiar de dirección (método

reverseDirection()). Para parar los motores hay dos métodos: el primero es detener

el motor y aplicar una fuerza para mantenerlo bloqueado (breaking, con el método

stop()), la segunda es detener el motor sin aplicar fuerza y dejar que siga rotando hasta

que pare (coasting, con el método flt()). La potencia del motor también puede ser

ajustada con leJOS (con el método setPower(int)). Todo esto se hace con la clase

Page 35: Ambiente Prototipo Para Teleoperacin De Robots

28

Motor, la cual tiene tres atributos estáticos (A, B y C) que son instancias de esta misma

clase, y que corresponden a los tres puertos de salida del RCX.

4.2.2.2. Entrada

Para cada puerto de entrada, debe especificarse el tipo y el modo

(setTypeAndMode(int,int)). El tipo de entrada (sensor) incluye el de los sensores Lego

estándar: luz, tacto, rotación y temperatura. El tipo de entrada se puede seleccionar

también como raw, de esta forma no se interpreta la entrada y se obtienen valores entre 0

y 1023. El modo especifica el tipo de recolección de datos que hará el RCX (los datos se

obtienen con readValue()), por ejemplo, la información del sensor de temperatura se

puede obtener en grados Celsius o en grados Fahrenheit. Esto se hace con la clase

Sensor, que al igual que Motor, tiene tres atributos estáticos (S1, S2 y S3) que son

instancias de Sensor. Si se desea que se notifique al haber algún cambio en la lectura del

sensor, se debe implementar la interfaz SensorListener (que solo define el método

stateChanged, a ser llamado al haber algún cambio y que recibe el sensor en el que

ocurrió el cambio, el valor anterior y el nuevo valor) y agregarla al correspondiente

sensor (método addSensorListener(SensorListener)). Antes de poder leer datos de

un sensor, este debe activarse para que reciba alimentación del RCX (con el método

activate()), también se puede especificar un valor anterior en el sensor, en especial

para el sensor de rotación para inicializarlo en cero sin importar la posición en que se

encuentre (con el método setPreviousValue(int))

4.2.2.3. Botones del RCX

Todos los botones, excepto el de encendido (On-Off) pueden ser reprogramados en

leJOS, gracias a que cuenta con el modelo de eventos.

Page 36: Ambiente Prototipo Para Teleoperacin De Robots

29

4.2.2.4. Batería

leJOS permite determinar la carga de las baterías del RCX. Se obtiene un valor que es el

voltaje de las baterías, usando el método getVoltageMilliVolt().

4.2.2.5. LCD

Con leJOS es posible encender y apagar cualquier segmento del LCD del RCX, incluye

además un conjunto completo de letras arábigas, que resulta útil para presentar

información de depuración.

4.2.2.6. Parlante

Se puede usar leJOS para reproducir sonidos predefinidos del RCX. También permite

tener control total sobre la frecuencia y duración.

4.2.2.7. Comunicación IR

Los paquetes java.io y josx.rcxcomm de leJOS proveen los Streams estándar de Java

para enviar datos primitivos (byte, boolean, char, float, int y short) del PC al RCX, o del

RCX al PC, cualquiera puede iniciar la comunicación. Estos streams están soportados por

LLC (Low-level comms), un protocolo desarrollado por el grupo LEGO3 en DTU-IAU,

que garantiza entrega confiable mediante sumas de verificación, acks (confirmaciones) y

números de secuencia de un bit.

Las aplicaciones de usuario cuentan con un conjunto de clases que ofrecen métodos de

comunicación de alto nivel, las más utilizadas son DataOutputStream y

DataInputStream, que permiten la transmisión de tipos de datos primitivos de Java

(byte, boolean, char, float, int y short). Estas clases están soportadas a su vez por las

Page 37: Ambiente Prototipo Para Teleoperacin De Robots

30

clases OutputStream e InputStream en el PC y RCXOutputStream e RCXInputStream

en el RCX, que ofrecen métodos para la transmisión de bytes. Para establecer la conexión

y poder usar estás clases, se utiliza la clase RCXPort, ya que esta es quien las instancia.

El protocolo LLC está implementado en las clases LLCHandler y LLCReliableHandler.

La primera trabaja con paquetes y acks (confirmaciones). La segunda garantiza entrega

confiable mediante el uso de sumas de verificación, acks (confirmaciones) y números de

secuencia de un bit. En el RCX el paso de los paquetes de LLC, desde LLCHandler hasta

el hardware, se hace a través de código nativo (escrito en C), utilizando la clase LLC. En

el caso del PC se hace a través de la clase Tower.

Figura 14. Comunicación RCX – PC con leJOS

Segmentos tomados de [6]

A continuación se detallan las clases que deben ser usadas por las aplicaciones de

usuario, con el fin de establecer comunicación entre dos RCXs p entre un RCX y un PC:

Page 38: Ambiente Prototipo Para Teleoperacin De Robots

31

• RCXPort

Implementa manejo de streams de entrada/salida y buffer de entrada, utilizando

un manejador de paquetes. Se asegura de que todos los paquetes lleguen, si la

torre de comunicación no esta en el rango de alcance, la comunicación se

reintenta hasta volver a estar la torre en el rango de alcance y completar con éxito

la transferencia.

• DataOutputStream

Codifica varios tipos de datos en bytes y los envía a través de un stream de salida

de datos. El método que se utilizó de esta clase fue:

void writeInt ( int v ) Escribe un int al stream subyacente como un valor de 4 bytes.

• DataInputStream

Recibe bytes en un stream de entrada de datos y los codifica en uno de varios

tipos de datos. El método que se utilizó de esta clase fue:

int readInt ( )

Lee un int del stream subyacente.

4.2.3. Modificaciones Realizadas a leJOS

Con el fin de que el sistema pudiera enfrentar los problemas inherentes a la comunicación

en teleoperación, como pérdida del enlace de comunicación y retardos en la

comunicación, se hizo necesario modificar las clases LLCReliableHandler y

RCXAbstractPort, ya que estas permitían especificar un time-out de lectura, pero no de

Page 39: Ambiente Prototipo Para Teleoperacin De Robots

32

escritura (se reintentaba el envío hasta tener éxito) y este último es indispensable para

poder detectar que se perdió la comunicación o que un retardo es demasiado largo.

Se agregaron los atributos enteros attempts y ackTimeOut a la clase

LLCReliableHandler, con sus correspondientes métodos de set y get, que son llamados

desde RCXAbstractPort por unos métodos con el mismo nombre, y estos a su vez son

llamados por el usuario en su programa (usando la clase RCXPort). El atributo attempts

especifica cuantas veces se debe intentar enviar un dato antes de generar una excepción

(IOException), el atributo ackTimeOut especifica cuantos milisegundos se debe esperar

por una respuesta de confirmación (acknowledge) de la recepción del dato, antes de

volver a intentar o de generar una excepción si era el último intento.

Estos cambios se hicieron públicos a la comunidad a través de la lista de discusión de

leJOS, ya que se consideró que podían ser de utilidad para otras personas y podrían ser

incluidos en una próxima versión de leJOS.

4.2.4. Respuesta del Sistema a Problemas de Teleoperación

Para enfrentar el problema de los retardos y la pérdida del enlace de comunicación, el

programa de control del robot dispone de un buffer en el que almacena secuencialmente

las órdenes que debe ejecutar y otro buffer donde almacena las lecturas de los sensores.

Luego de recibir una serie de órdenes, el robot comenzará a ejecutarlas una por una

enviando una confirmación de éxito al finalizar una exitosamente. En caso de no haber

comunicación (ya sea que no hay enlace o existe un retardo muy grande), las lecturas de

los sensores y las confirmaciones de éxito, serán almacenadas en el buffer y enviadas

cuando se reestablezca el enlace de comunicación.

Al aplicar el modelo de Control Colaborativo en el desarrollo de este sistema, se logran

minimizar los problemas relacionados con el factor humano al prescindir del operador en

los casos en que sus decisiones puedan comprometer la estabilidad e integridad del

Page 40: Ambiente Prototipo Para Teleoperacin De Robots

33

sistema, además de los casos en que por fallas de comunicación u otras circunstancias, el

operador no esté disponible.

4.2.5. Diseño de la Primera Versión del Sistema

La primera versión soporta cuatro modos: directo, cola de comandos, autónomo RCX y

autónomo PC.

El modo directo cosiste en que el operador le envía comandos al robot y a medida que el

robot los recibe, los ejecuta; el operador debe esperar la finalización del comando que se

está ejecutando antes de enviar uno nuevo. El modo cola de comandos consiste en que el

operador define un conjunto de comandos, los cuales son enviados al RCX y

posteriormente éste los ejecuta y va enviando la respuesta de cada uno a medida que

termina su ejecución. En el modo autónomo RCX, el programa en el RCX decide los

comandos a ejecutar y envía solo las respuestas al PC. En el modo autónomo PC, el PC

decide el comando a ejecutar, lo envía al RCX y cuando recibe la respuesta del comando

por parte del RCX, decide el siguiente comando y así sucesivamente hasta que determina

que terminó la tarea.

Los comandos son representados por identificadores, atributos estáticos enteros

almacenados bajo un nombre fácil de entender en una clase aparte, igual que las

respuestas a los comandos. Tanto la clase de constantes de comandos como la de

respuestas a estos, son idénticas tanto en el PC como en el RCX.

El diseño de esta primera versión responde a la necesidad de separar la lógica de la tarea

a realizar, del resto del sistema, aunque algunos comandos, como el de la carga de la

batería y la memoria libre quedaron dentro de la clase de comunicaciones. Sin embargo,

un cambio en la tarea puede representar cambios significativos si por ejemplo el robot

deja de ser un robot móvil a ser un manipulador.

Page 41: Ambiente Prototipo Para Teleoperacin De Robots

34

4.2.5.1. Diagrama de Clases Aplicación del PC

<<ex

cept

ion

>>B

lock

edPa

thEx

cept

ion

Com

man

d

<<cr

eate

>>+C

omm

and(

bVal

ue:b

yte)

:Com

man

d+g

etC

omm

and(

):Byt

e+s

etS

ent()

:voi

d+w

asS

ent()

:boo

lean

+set

Exe

cute

d():v

oid

+was

Exe

cute

d():b

oole

an

Com

mun

icat

ionE

vent

<<cr

eate

>>+C

omm

unic

atio

nEve

nt(s

ourc

e:O

bjec

t,bS

tate

:boo

lean

):Com

mun

icat

ionE

vent

<<cr

eate

>>+C

omm

unic

atio

nEve

nt(s

ourc

e:O

bjec

t,iD

ata:

int):

Com

mun

icat

ionE

vent

+con

nect

ionL

ost()

:boo

lean

+con

nect

ionR

esto

red(

):boo

lean

+get

Rec

eive

dDat

a():i

nt

<<in

terfa

ce>>

Com

mun

icat

ionE

vent

List

ener

<<>>

+dat

aRec

eive

d(ce

:Com

mun

icat

ionE

vent

):voi

d<<

>>+c

onne

ctio

nLos

t(ce:

Com

mun

icat

ionE

vent

):voi

d<<

>>+c

onne

ctio

nRee

stab

lishe

d(ce

:Com

mun

icat

ionE

vent

):voi

d

Envi

ronm

ent

-inst

ance

:Env

ironm

ent=

nul

l

<<cr

eate

>>-E

nviro

nmen

t():E

nviro

nmen

t+ g

etIn

stan

ce():

Env

ironm

ent

+clo

ne():

Obj

ect

+che

ckM

oveR

obot

Forw

ard(

):voi

d+c

heck

Mov

eRob

otB

ackw

ard(

):voi

d+m

oveR

obot

Forw

ard(

):voi

d+m

oveR

obot

Bac

kwar

d():v

oid

+mov

eRob

otLe

ft():v

oid

+mov

eRob

otR

ight

():v

oid

+mar

kFou

nd(m

Col

or:in

t):vo

id+o

bsta

cleF

ound

():v

oid

+che

ckM

oveV

irtua

lRob

otFo

rwar

d():v

oid

+che

ckM

oveV

irtua

lRob

otB

ackw

ard(

):voi

d+m

oveV

irtua

lRob

otFo

rwar

d():v

oid

+mov

eVirt

ualR

obot

Bac

kwar

d():v

oid

+mov

eVirt

ualR

obot

Left(

):voi

d+m

oveV

irtua

lRob

otR

ight

():v

oid

+get

Rob

otH

eadi

ng():

int

+get

Env

ironm

ent()

:Lin

kedL

ist

<<in

terfa

ce>>

Envi

ronm

entP

ositi

on

Envi

ronm

entR

econ

stru

ct

-inst

ance

:Env

ironm

entR

econ

stru

ct=

null

<<cr

eate

>>-E

nviro

nmen

tRec

onst

ruct

():E

nviro

nmen

tRec

onst

ruct

+ get

Inst

ance

():E

nviro

nmen

tRec

onst

ruct

+rec

onst

ruct

():vo

id+u

pdat

e(o:

Obs

erva

ble,

arg:

Obj

ect):

void

IOM

anag

er

-inst

ance

:IOM

anag

er=

null

-com

mun

icat

ionL

iste

ners

:Vec

tor=

nul

l

<<cr

eate

>>-IO

Man

ager

():IO

Man

ager

+ get

Inst

ance

():IO

Man

ager

+clo

ne():

Obj

ect

+sta

rt():v

oid

+sen

dDat

a(da

ta:b

yte)

:voi

d+r

ecei

veD

ata(

):int

+act

ionP

erfo

rmed

(e:A

ctio

nEve

nt):v

oid

+add

Com

mun

icat

ionE

vent

List

ener

(cel

:Com

mun

icat

ionE

vent

List

ener

):voi

d+r

emov

eCom

mun

icat

ionE

vent

List

ener

(cel

:Com

mun

icat

ionE

vent

List

ener

):voi

d-fi

reD

ataR

ecei

vedE

vent

(ce:

Com

mun

icat

ionE

vent

):voi

d-fi

reC

onne

ctio

nEve

nt(c

e:C

omm

unic

atio

nEve

nt):v

oid

Mar

k

<<cr

eate

>>+M

ark(

mC

olor

:int):

Mar

k+s

etC

olor

(mC

olor

:int):

void

+get

Col

or()

:int

Mob

ileR

obot

Com

man

ds

+BE

GIN

:byt

e= 0

+RE

SE

T:by

te=

1+S

TOP:

byte

= 2

+HA

LT:b

yte=

3+F

OR

WA

RD

:byt

e= 4

+BA

CK

WA

RD

:byt

e= 5

+LE

FT:b

yte=

6+R

IGH

T:by

te=

7+R

EA

D_S

EN

SO

R:b

yte=

8+C

HE

CK

_CO

MM

:byt

e= 9

+BA

TTE

RY:

byte

= 10

+ME

MO

RY:

byte

= 11

+SE

T_M

OD

E:by

te=

12+I

NIT

:byt

e= 1

3+K

ILL:

byte

= 14

Mob

ileR

obot

Con

trol

ler

-inst

ance

:Mob

ileR

obot

Con

trolle

r= n

ull

<<cr

eate

>>-M

obile

Rob

otC

ontro

ller()

:Mob

ileR

obot

Con

trolle

r+ g

etIn

stan

ce():

Mob

ileR

obot

Con

trolle

r+c

lone

():O

bjec

t+i

nit()

:voi

d+k

ill():v

oid

+set

Dire

ctM

ode(

):voi

d+s

etQ

ueue

Mod

e():v

oid

+set

PC

Aut

oMod

e():v

oid

+set

RC

XA

utoM

ode(

):voi

d+g

etM

ode(

):byt

e+b

egin

():vo

id+r

eset

():vo

id+a

ddFo

rwar

dCom

man

d():v

oid

+add

Bac

kwar

dCom

man

d():v

oid

+add

Sto

pCom

man

d():v

oid

+add

LeftC

omm

and(

):voi

d+a

ddR

ight

Com

man

d():v

oid

+add

Rea

dSen

sorC

omm

and(

):voi

d+c

lear

Com

man

ds()

:voi

d+s

endC

omm

ands

():vo

id+g

etC

omm

ands

():L

inke

dLis

t+m

oveF

orw

ard(

):voi

d+m

oveB

ackw

ard(

):voi

d+s

top(

):voi

d+m

oveL

eft()

:voi

d+m

oveR

ight

():vo

id+r

eadS

enso

r():v

oid

+get

Bat

tery

Cha

rge(

):voi

d+g

etC

harg

e():i

nt+g

etFr

eeM

emor

y():v

oid

+get

Mem

ory(

):int

+con

nect

ionA

live(

):boo

lean

-sen

dCom

man

d(co

mm

and:

byte

):voi

d+d

ataR

ecei

ved(

ce:C

omm

unic

atio

nEve

nt):v

oid

+con

nect

ionL

ost(c

e:C

omm

unic

atio

nEve

nt):v

oid

+con

nect

ionR

eest

ablis

hed(

ce:C

omm

unic

atio

nEve

nt):v

oid

Mob

ileR

obot

Res

pons

es

+CO

MM

_OK:

int=

0+O

BS

TAC

LE:in

t= 1

+SE

NS

OR

_RE

AD

:int=

2+C

HA

RG

E:in

t= 3

+FR

EE

_ME

M:in

t= 4

+SU

CC

ES

S_F

OR

WA

RD:

byte

= 5

+SU

CC

ES

S_B

AC

KW

AR

D:by

te=

6+S

UC

CE

SS

_LE

FT:b

yte=

7+S

UC

CE

SS

_RIG

HT:

byte

= 8

+SU

CC

ES

S_S

TOP:

byte

= 9

Path

+HO

RIZ

ON

TAL:

int=

0+V

ER

TIC

AL:

int=

1

<<cr

eate

>>+P

ath(

pOrie

ntat

ion:

int,p

Blo

cked

:boo

lean

):Pat

h+s

etO

rient

atio

n(pO

rient

atio

n:in

t):vo

id+g

etO

rient

atio

n():i

nt+s

etB

lock

ed(p

Blo

cked

:boo

lean

):voi

d+i

sBlo

cked

():bo

olea

n

<<ex

cept

ion

>>Po

sitio

nOut

OfB

ound

sExc

eptio

n

<<ex

cept

ion

>>R

CXO

utO

fRan

geEx

cept

ion

Rob

ot

+NO

RTH

:int=

0+S

OU

TH:in

t= 1

+EA

ST:

int=

2+W

ES

T:in

t= 3

<<cr

eate

>>+R

obot

(pH

eadi

ng:in

t,xP:

int,y

P:in

t):R

obot

+get

X():i

nt+s

etX(

xP:in

t):vo

id+g

etY(

):int

+set

Y(yP

:int):

void

+set

Hea

ding

(pH

eadi

ng:in

t):vo

id+g

etH

eadi

ng():

int

Rob

otM

ode

+DIR

EC

T:by

te=

0+Q

UE

UE:

byte

= 1

+PC

_AU

TO:b

yte=

2+R

CX

_AU

TO:b

yte=

3

+get

Mod

e():b

yte

+set

Mod

e(m

ode:

byte

):voi

d

<<in

terfa

ce>>

Obs

erve

r

+upd

ate(

o:O

bser

vabl

e,ar

g:O

bjec

t):vo

id

Obs

erva

ble

+set

Cha

nged

():vo

id+n

otify

Obs

erve

rs():

void

posi

tions

-1.

.*

is m

ade

of

envi

ronm

ent

-ch

ecks

<<re

aliz

e>>

robo

tCon

trolle

r-

uses

envi

ronm

ent

-

chec

ks a

nd u

pdat

es

io-send

s da

ta th

roug

h

<<re

aliz

e>>

<<re

aliz

e>>

robo

t-

hold

s

virtu

alR

obot

-

hold

s

com

man

ds+

*st

ores

uses

uses

fires

wai

ts fo

r

1..*

quer

ies

sets

and

que

ries

<<re

aliz

e>>

notif

ies

chan

ges

to

thro

ws

thro

ws

Page 42: Ambiente Prototipo Para Teleoperacin De Robots

35

El objetivo de estas clases permitir la ejecución de los diferentes comandos soportados

por el robot, y dar retroalimentación al operador sobre los mismos, esto soportado por

una clase de comunicación con el robot que envía datos y espera la recepción de los

mismos desde éste (IOManager). Otro objetivo es modelar el ambiente en el que se

encuentre el robot para que el operador tenga una visión aproximada de éste y pueda

tomar mejores decisiones en cuanto a los siguientes comandos.

A continuación se describe cada una de las clases que hace parte de la aplicación del PC:

Clase IOManager

Esta clase es la encargada de la entrada/salida entre el PC y el RCX. Ofrece un método

para enviar un dato entero al RCX y para recibir un dato igualmente entero en un

momento específico (cuando el cliente de la clase lo requiera). Esta clase usa el patrón

singleton por accesibilidad y para mantener una sola instancia y así evitar conflictos de

acceso al hardware. Para usar esta clase, además de usar el método estático de acceso a la

instancia getInstance(), la clase cliente debe implementar la interfaz

CommunicationEventListener y registrarse con IOManager como tal, para ser

notificada al llegar un dato del RCX o cuando se pierde o reestablece la comunicación

con éste.

Esta clase tiene una clase embebida o interna (inner class) llamada ReceptionThread, la

cual es un thread que esta en continua espera de datos del RCX, al llegar un dato, se

notifica a los CommunicationEventListeners registrados para que hagan el

procesamiento pertinente y en caso de requerir más datos, llamen el método

receiveData() de IOManager, para recibir un dato, éste método solo funciona cuando la

clase cliente está siendo notificada, de lo contrario, lanza IOException para evitar entrar

en conflicto con el thread de recepción, lo que podría generar resultados inesperados.

Esta clase es independiente de la tarea que el robot y el sistema desempeñen.

Page 43: Ambiente Prototipo Para Teleoperacin De Robots

36

Interfaz CommunicationEventListener

Esta interfaz define los métodos requeridos para que una clase pueda usar IOManager, y

sea notificada cuando lleguen datos del RCX o ha habido algún cambio en la

comunicación (se ha perdido o reestablecido)

Esta clase es independiente de la tarea.

Clase CommunicationEvent

Representa un evento de comunicación con el RCX, que puede ser la llegada de un dato

desde el RCX, la perdida de comunicación con el mismo o el reestablecimiento de ésta.

Se envía una instancia de esta clase a los CommunicationEventListeners registrados

con IOManager, con los detalles del evento, para notificarlos.

Esta clase es independiente de la tarea.

Clase RobotMode

Almacena el modo de operación actual del robot, y define las respectivas constantes.

Soporta los cuatro modos mencionados anteriormente: directo, cola de comandos,

autónomo RCX y autónomo PC.

Esta clase es independiente de la tarea, mientras que los modos soportados sean

suficientes para el desarrollo de ésta, de no ser así, debe modificarse para agregar nuevos

modos.

Page 44: Ambiente Prototipo Para Teleoperacin De Robots

37

Clase Command

Representa un comando a almacenar en la cola de comandos cuando el modo de

operación es el de cola de comandos. Un comando tiene tres posibles estados: no

enviado, enviado y no ejecutado y ejecutado.

Esta clase es independiente de la tarea ya que solo almacena el identificador del

comando, que puede ser cualquiera, sin importar a que tarea pertenezca.

Clase MobileRobotController

Esta clase es la encargada del control del robot y el RCX, ofrece métodos para mover el

robot hacia adelante y hacia atrás, girar el robot 90° a la derecha y a la izquierda,

detenerse, leer el sensor del robot, obtener la carga actual de las baterías y la cantidad de

memoria libre en el RCX. También ofrece métodos para poner los comandos anteriores

en la cola de comandos y luego enviarlos (modo cola de comandos), excepto los dos

últimos. Por último ofrece los métodos para iniciar el modo autónomo RCX y autónomo

PC.

Esta clase es dependiente de la tarea, ya que ofrece los métodos específicos para la tarea

que se escogió, en caso de cambiar la tarea, se debe cambiar toda la clase. A partir de esta

clase, todas las que siguen son dependientes de la tarea.

Clase MobileRobotCommands

Almacena las constantes correspondientes a los comandos que puede ejecutar el robot,

para accederlas estáticamente, sin conocer su valor.

Page 45: Ambiente Prototipo Para Teleoperacin De Robots

38

Clase MobileRobotResponses

Almacena las constantes correspondientes a las respuestas a los comandos que son

enviadas desde el RCX, para accederlas estáticamente, sin conocer su valor.

Clase Environment

Esta clase modela el ambiente que el robot esta reconociendo, como un arreglo

bidimensional en el que puede haber marcas o caminos. Igualmente almacena la

ubicación y orientación del robot y de un robot virtual que se mueve cuando se añade otro

comando a la cola de comandos (en modo cola de comados), para poder determinar la

posición final del robot al ejecutar todos los comandos antes de que estos sean

ejecutados por el robot.

Clase Robot

Representa al robot en el ambiente, almacena sus coordenadas bidimensionales y su

orientación, junto con las constantes pertinentes.

Interfaz EnvironmentPosition

Modela una posición en el ambiente, que puede ser alguna de las dos clases que siguen a

continuación, las cuales la implementan.

Page 46: Ambiente Prototipo Para Teleoperacin De Robots

39

Clase Mark

Representa una marca en el ambiente, color es almacenado con la lectura del sensor

hecha sobre la marca.

Clase Path

Representa un camino o trayectoria horizontal o vertical entre dos marcas vecinas.

También guarda información de si el camino está despejado o hay algún obstáculo en él.

Clase EnvironmentReconstruct

Esta clase, basada en la información que obtiene del ambiente (clase Environment,

donde esta registrada como Observer, patrón tomado de [17]), decide de manera

autónoma (modo autónomo PC) el siguiente comando a enviar al robot.

Page 47: Ambiente Prototipo Para Teleoperacin De Robots

40

4.2.5.2. Diagrama de Clases Aplicación del RCX

IOManager

<< create >>+IOManager(robot:Robot):IOManager+sendData(data: ): -sendResponses():

MobileRobot

-atNorth:= true-vertHeading:= true-turn:= false-read:= false-ROTATION:= 187

<< create >>+MobileRobot():MobileRobot+start(): +stateChanged(aSource: ,aOldValue: ,aNewValue: ): +setCommand(command: ): +addCommand(command: ): +begin(): +nextCommand(): +getSensorRead(): +main(args: ):

MobileRobotCommands

+BEGIN:= 0+RESET:= 1+STOP:= 2+HALT:= 3+FORWARD:= 4+BACKWARD:= 5+LEFT:= 6+RIGHT:= 7+READ_SENSOR:= 8+CHECK_COMM:= 9+BATTERY:= 10+MEMORY:= 11+SET_MODE:= 12+INIT:= 13+KILL:= 14

MobileRobotResponses

+COMM_OK:= 0+OBSTACLE:= 1+SENSOR_READ:= 2+CHARGE:= 3+FREE_MEM:= 4+SUCCESS_FORWARD:= 5+SUCCESS_BACKWARD:= 6+SUCCESS_LEFT:= 7+SUCCESS_RIGHT:= 8+SUCCESS_STOP:= 9

Queue

<< create >>+Queue(size: ):Queue+enqueue(element: ): +empty(): +iterate(): +dequeue(): +hasNext(): +isEmpty():

<< interface >>Robot

<< >>+setCommand(command: ): << >>+addCommand(command: ): << >>+begin():

RobotMode

+DIRECT:= 0+QUEUE:= 1+PC_AUTO:= 2+RCX_AUTO:= 3

+getMode(): +setMode(mode: ):

io-

sends data through

responses-

stores responses in

commands-

stores commands in

robot-notifies

<< realize >>

sets and queries

queries

uses uses

Page 48: Ambiente Prototipo Para Teleoperacin De Robots

41

El objetivo de estas clases es ofrecer todos los comandos que soporta el robot y manejar

la entrada/salida hacia y desde el PC (IOManager), junto el buffer requerido en caso de

perder comunicación con el PC, el cual almacena las respuestas de los diferentes

comandos ejecutados hasta que pueden enviarse al PC al reestablecer la comunicación

con éste.

A continuación se describe cada una de las clases que hace parte de la aplicación del PC:

Clase IOManager

Esta clase es la encargada de la entrada/salida entre el PC y el RCX. Ofrece un método

para enviar un dato entero al PC. Esta clase usa el patrón singleton por accesibilidad y

para mantener una sola instancia y así evitar conflictos de acceso al hardware. Para usar

esta clase, además de usar el método estático de acceso a la instancia getInstance(), la

clase cliente debe implementar la interfaz Robot y registrarse con IOManager, para que al

llegar un dato del PC, que es un nuevo comando, la clase cliente inicie su ejecución

(modo directo) o lo almacene en la cola de comandos (modo cola de comandos).

En caso de perderse la comunicación con el PC, ésta clase puede almacenar las respuestas

de los comandos que estaban ejecutándose en cola, para ser enviadas al reestablecerse la

comunicación.

Esta clase tiene una clase embebida o interna (inner class) llamada ReceptionThread, la

cual es un thread que esta en continua espera de datos del PC, al llegar un dato, se

notifica al Robot registrado para que haga el procesamiento pertinente.

Esta clase es independiente de la tarea que el robot y el sistema desempeñen.

Page 49: Ambiente Prototipo Para Teleoperacin De Robots

42

Interfaz Robot

Esta interfaz define los métodos requeridos para que una clase pueda usar IOManager, y

sea notificada cuando lleguen datos del PC.

Esta clase es independiente de la tarea.

Clase MobileRobot

Esta clase sabe ejecutar los diferentes comandos soportados por el robot, usando el API

de leJOS para acceder al RCX. También maneja la cola de comandos, cuando se está en

modo cola de comandos.

Clase RobotMode

Almacena el modo de operación actual del robot, y define las respectivas constantes.

Soporta los cuatro modos mencionados anteriormente: directo, cola de comandos,

autónomo RCX y autónomo PC.

Esta clase es independiente de la tarea, mientras que los modos soportados sean

suficientes para el desarrollo de ésta, de no ser así, debe modificarse para agregar nuevos

modos.

Clase MobileRobotCommands

Almacena las constantes correspondientes a los comandos que puede ejecutar el robot,

para accederlas estáticamente, sin conocer su valor.

Page 50: Ambiente Prototipo Para Teleoperacin De Robots

43

Clase MobileRobotResponses

Almacena las constantes correspondientes a las respuestas a los comandos que son

enviadas desde el RCX, para accederlas estáticamente, sin conocer su valor.

Clase Queue

Implementa una cola de enteros.

4.2.5.3. Diagramas de Secuencia

El siguiente es un diagrama de secuencia de todo el proceso de ejecución de un comando,

en el caso normal de operación. Está dividido en tres partes: la primera va desde la acción

del operador sobre la interfaz grafica, hasta que el comando es enviado al RCX, la

segunda comprende la recepción y ejecución del comando en el RCX y el envió de la

respuesta, la ultima parte es la recepción y procesamiento de la respuesta en el PC y la

retroalimentación al operador. El comando que se escogió fue el de movimiento hacia

adelante, suponiendo que no ocurren errores de comunicación y que no se encuentran

obstáculos.

En la primera parte se realiza una verificación en el ambiente simulado por el PC, antes

de enviar el comando al RCX, para comprobar que el movimiento es posible en el

ambiente real (esto significa que no hay obstáculos y que el robot no se encuentra en el

límite del ambiente). En la segunda parte, luego de recibir el comando, se puede observar

el ciclo (loop) que comprende la ejecución del movimiento hacia delante en trayectoria

recta: se activan los dos motores y en caso de que alguno avance más rápido que el otro,

se desactiva hasta que el otro lo iguale y esto se repite hasta que el robot se detenga en la

siguiente marca, para luego enviar el resultado de éxito al PC. En la tercera parte, se

recibe el comando y se actualiza el ambiente y su visualización.

Page 51: Ambiente Prototipo Para Teleoperacin De Robots

44

robo

tCon

trolle

r:Mob

ileR

obot

Con

trolle

rG

UI

envi

ronm

ent:E

nviro

nmen

tro

bot:R

obot

posi

tions

[x][y

]:Pat

hio

:IOM

anag

erou

t:Dat

aOut

putS

tream

:m

oveF

orw

ard(

)

:ch

eckM

oveR

obot

Forw

ard(

)

:h:

=get

Hea

ding

()

head

ing

:

: :=

getX

()

x:

: :=

getY

()

y:

:x:

=isB

lock

ed()

:bl

ocke

d

:ch

ecke

d

:se

ndD

ata(

FOR

WA

RD

)

:

:

:w

riteB

yte(

4)

:

Page 52: Ambiente Prototipo Para Teleoperacin De Robots

45

receive:ReceptionThread in:DataInputStream robot:MobileRobot Thread S1:Sensor A:Motor C:Motorio:IOManager out:DataOutputStream

Loop

S3:Sensor

: readByte()

: data

: setCommand(FORWARD)

:

: yield()

: setPreviousValue(0)

:

:

: forward()

:

: forward()

:

: readValue()

: value

: flt()

:

: readValue()

: value

: forward()

:

: readValue()

: value

: flt()

:

: readValue()

: value

: forward()

:

: yield()

: stateChanged(S1,old,new)

:

: sendData(SUCCESS_FORWARD)

: sendData(5)

:

:

:

: yield()

: readValue()

: value

Page 53: Ambiente Prototipo Para Teleoperacin De Robots

46

in:D

ataI

nput

Stre

amio

:IOM

anag

erre

ceiv

e:R

ecep

tionT

hrea

d

ce:C

omm

unic

atio

nEve

nt

robo

t:Mob

ileR

obot

Con

trolle

ren

viro

nmen

t:Env

ironm

ent

robo

t:Rob

ot

posi

tions

[x][y

]:Pat

h

GU

I

:re

adB

yte(

)

:5

:ne

w C

omm

unic

atio

nEve

nt(d

ata)

:fir

eDat

aRec

eive

dEve

nt(c

e)

:

:da

taR

ecei

ved(

ce)

:m

oveR

obot

Forw

ard(

)

:x:

=get

Rec

eive

dDat

a()

:5

:x:

=get

Hea

ding

()

:he

adin

g

:se

tX(x

)

:x

:se

tY(x

)

:y

:ne

w P

ath(

head

ing,

fals

e)

:

:

:

:

:up

date

()

:

Page 54: Ambiente Prototipo Para Teleoperacin De Robots

47

4.2.6. Diseño de la Segunda Versión del Sistema

La segunda versión soporta los mismos cuatro modos: directo, cola de comandos,

autónomo RCX y autónomo PC. En este diseño, la lógica de la tarea quedo

completamente separada de la parte de comunicaciones.

En esta versión se utilizó el patrón Command, descrito por [17], con el fin de poder

agregar posteriormente nuevos comandos, minimizando los cambios a realizar en otras

clases (solo se tendría que modificar el administrador de comandos, o CommandManager

como lo llama [17]). Para la implementación, se utilizó también el patrón Factory de

[17], para instanciar los comandos.

Los identificadores que representan los comandos y sus respuestas ahora son generados

dinámicamente, al instanciar el comando. La clase CommandRegistry es la encargada de

esta función.

Se creó un paquete llamado common, que es común tanto a la aplicación del PC como a la

del RCX, en este paquete se encuentra ahora la clase que maneja el modo de operación

del robot (RobotMode), junto con las clases que definen la raíz de la jerarquía de

comandos (Command y AbstractCommand) y la clase que asigna dinámicamente los

identificadores de comando y de respuesta (CommandRegistry).

Page 55: Ambiente Prototipo Para Teleoperacin De Robots

48

4.2.6.1. Diagrama de Clases Aplicación del PC

Abs

trac

tPC

Com

man

d

+exe

cute

():v

oid

+res

pons

eRec

eive

d(re

spon

se:in

t):bo

olea

n+r

epla

cesC

urre

ntC

omm

and(

):boo

lean

+dep

ends

OnS

enso

r():b

oole

an

Blo

cked

Path

Exce

ptio

n

+toS

tring

():S

tring

+get

Mes

sage

():S

tring

Com

mun

icat

ionE

vent

<<cr

eate

>>+C

omm

unic

atio

nEve

nt(s

ourc

e:O

bjec

t,bS

tate

:boo

lean

):Com

mun

icat

ionE

vent

<<cr

eate

>>+C

omm

unic

atio

nEve

nt(s

ourc

e:O

bjec

t,iD

ata:

int):

Com

mun

icat

ionE

vent

+con

nect

ionL

ost()

:boo

lean

+con

nect

ionR

esto

red(

):boo

lean

+get

Rec

eive

dDat

a():i

nt

Com

mun

icat

ionE

vent

List

ener

+dat

aRec

eive

d(ce

:Com

mun

icat

ionE

vent

):voi

d+c

onne

ctio

nLos

t(ce:

Com

mun

icat

ionE

vent

):voi

d+c

onne

ctio

nRee

stab

lishe

d(ce

:Com

mun

icat

ionE

vent

):voi

d

Envi

ronm

ent

-inst

ance

:Env

ironm

ent=

nul

l

<<cr

eate

>>-E

nviro

nmen

t():E

nviro

nmen

t+ g

etIn

stan

ce()

:Env

ironm

ent

+clo

ne():

Obj

ect

+che

ckM

oveR

obot

Forw

ard(

):voi

d+c

heck

Mov

eRob

otB

ackw

ard(

):voi

d+m

oveR

obot

Forw

ard(

):voi

d+m

oveR

obot

Bac

kwar

d():v

oid

+tur

nRob

otLe

ft():v

oid

+tur

nRob

otR

ight

():v

oid

+mar

kFou

nd(m

Col

or:in

t):vo

id+o

bsta

cleF

ound

():vo

id+c

heck

Mov

eVirt

ualR

obot

Forw

ard(

):voi

d+c

heck

Mov

eVirt

ualR

obot

Bac

kwar

d():v

oid

+mov

eVirt

ualR

obot

Forw

ard(

):voi

d+m

oveV

irtua

lRob

otB

ackw

ard(

):voi

d+t

urnV

irtua

lRob

otLe

ft():v

oid

+tur

nVirt

ualR

obot

Rig

ht()

:voi

d+g

etR

obot

Hea

ding

():in

t+g

etE

nviro

nmen

t():L

inke

dLis

t

Envi

ronm

entP

ositi

on

Envi

ronm

entR

econ

stru

ct

-inst

ance

:Env

ironm

entR

econ

stru

ct=

null

<<cr

eate

>>-E

nviro

nmen

tRec

onst

ruct

():E

nviro

nmen

tRec

onst

ruct

+ get

Inst

ance

():E

nviro

nmen

tRec

onst

ruct

+rec

onst

ruct

():vo

id+u

pdat

e(o:

Obs

erva

ble,

arg:

Obj

ect):

void

IOM

anag

er

-inst

ance

:IOM

anag

er=

null

-com

mun

icat

ionL

iste

ners

:Vec

tor=

nul

l

<<cr

eate

>>-IO

Man

ager

():IO

Man

ager

+ get

Inst

ance

():IO

Man

ager

+clo

ne():

Obj

ect

+sta

rt():v

oid

+sen

dDat

a(da

ta:in

t):vo

id+r

ecei

veD

ata(

):int

+act

ionP

erfo

rmed

(e:A

ctio

nEve

nt):v

oid

+add

Com

mun

icat

ionE

vent

List

ener

(cel

:Com

mun

icat

ionE

vent

List

ener

):voi

d+r

emov

eCom

mun

icat

ionE

vent

List

ener

(cel

:Com

mun

icat

ionE

vent

List

ener

):voi

d-fi

reD

ataR

ecei

vedE

vent

(ce:

Com

mun

icat

ionE

vent

):voi

d-fi

reC

onne

ctio

nEve

nt(c

e:C

omm

unic

atio

nEve

nt):v

oid

Mar

k

<<cr

eate

>>+M

ark(

mC

olor

:int):

Mar

k+s

etC

olor

(mC

olor

:int):

void

+get

Col

or():

int

Path

+HO

RIZ

ON

TAL:

int=

0+V

ER

TIC

AL:

int=

1

<<cr

eate

>>+P

ath(

pOrie

ntat

ion:

int,p

Blo

cked

:boo

lean

):Pat

h+s

etO

rient

atio

n(pO

rient

atio

n:in

t):vo

id+g

etO

rient

atio

n():i

nt+s

etB

lock

ed(p

Blo

cked

:boo

lean

):voi

d+i

sBlo

cked

():bo

olea

n

PCB

ackw

ardC

omm

and

<<cr

eate

>>+P

CB

ackw

ardC

omm

and(

):PC

Bac

kwar

dCom

man

d+r

espo

nseR

ecei

ved(

resp

onse

:int):

bool

ean

PCB

atte

ryC

omm

and

<<cr

eate

>>+P

CB

atte

ryC

omm

and(

):PC

Bat

tery

Com

man

d+r

espo

nseR

ecei

ved(

resp

onse

:int):

bool

ean

PCB

egin

Com

man

d

<<cr

eate

>>+P

CB

egin

Com

man

d():P

CB

egin

Com

man

d

PCC

omm

andF

acto

ry

-inst

ance

:PC

Com

man

dFac

tory

= nu

ll-fo

rwar

dCom

man

d:C

omm

and=

nul

l-b

ackw

ardC

omm

and:

Com

man

d= n

ull

-leftC

omm

and:

Com

man

d= n

ull

-righ

tCom

man

d:C

omm

and=

nul

l-re

adS

enso

rCom

man

d:C

omm

and=

nul

l-s

topC

omm

and:

Com

man

d= n

ull

-hal

tCom

man

d:C

omm

and=

nul

l-b

atte

ryC

omm

and:

Com

man

d= n

ull

-mem

oryC

omm

and:

Com

man

d= n

ull

-che

ckC

omm

Com

man

d:C

omm

and=

nul

l-s

etM

odeC

omm

and:

Com

man

d= n

ull

-beg

inC

omm

and:

Com

man

d= n

ull

<<cr

eate

>>-P

CC

omm

andF

acto

ry()

:PC

Com

man

dFac

tory

+ get

Inst

ance

():P

CC

omm

andF

acto

ry+c

lone

():O

bjec

t+g

etFo

rwar

dCom

man

d():C

omm

and

+get

Bac

kwar

dCom

man

d():C

omm

and

+get

LeftC

omm

and(

):Com

man

d+g

etR

ight

Com

man

d():C

omm

and

+get

Rea

dSen

sorC

omm

and(

):Com

man

d+g

etS

topC

omm

and(

):Com

man

d+g

etH

altC

omm

and(

):Com

man

d+g

etB

atte

ryC

omm

and(

):Com

man

d+g

etM

emor

yCom

man

d():C

omm

and

+get

Che

ckC

omm

Com

man

d():C

omm

and

+get

Set

Mod

eCom

man

d():C

omm

and

+get

Beg

inC

omm

and(

):Com

man

d

PCFo

rwar

dCom

man

d

<<cr

eate

>>+P

CFo

rwar

dCom

man

d():P

CFo

rwar

dCom

man

d+r

espo

nseR

ecei

ved(

resp

onse

:int):

bool

ean

PCH

altC

omm

and

<<cr

eate

>>+P

CH

altC

omm

and(

):PC

Hal

tCom

man

d

PCLe

ftCom

man

d

<<cr

eate

>>+P

CLe

ftCom

man

d():P

CLe

ftCom

man

d+r

espo

nseR

ecei

ved(

resp

onse

:int):

bool

ean

PCM

emor

yCom

man

d

<<cr

eate

>>+P

CM

emor

yCom

man

d():P

CM

emor

yCom

man

d+r

espo

nseR

ecei

ved(

resp

onse

:int):

bool

ean

PCR

eadS

enso

rCom

man

d

<<cr

eate

>>+P

CR

eadS

enso

rCom

man

d():P

CR

eadS

enso

rCom

man

d+r

espo

nseR

ecei

ved(

resp

onse

:int):

bool

ean

PCR

ight

Com

man

d

<<cr

eate

>>+P

CR

ight

Com

man

d():P

CR

ight

Com

man

d+r

espo

nseR

ecei

ved(

resp

onse

:int):

bool

ean

PCSe

tMod

eCom

man

d

<<cr

eate

>>+P

CS

etM

odeC

omm

and(

):PC

Set

Mod

eCom

man

d+e

xecu

te():

void

PCSt

opC

omm

and

<<cr

eate

>>+P

CS

topC

omm

and(

):PC

Sto

pCom

man

d+r

espo

nseR

ecei

ved(

resp

onse

:int):

bool

ean

Posi

tionO

utO

fBou

ndsE

xcep

tion

+toS

tring

():S

tring

+get

Mes

sage

():S

tring

Que

uedC

omm

and

<<cr

eate

>>+Q

ueue

dCom

man

d(co

mm

and:

Com

man

d):Q

ueue

dCom

man

d+g

etC

omm

and(

):Com

man

d+s

etS

ent()

:voi

d+w

asS

ent()

:boo

lean

+set

Exe

cute

d():v

oid

+was

Exe

cute

d():b

oole

an

RC

XOut

OfR

ange

Exce

ptio

n

+toS

tring

():S

tring

+get

Mes

sage

():S

tring

Rob

ot

+NO

RTH

:int=

0+S

OU

TH:in

t= 1

+EA

ST:

int=

2+W

ES

T:in

t= 3

<<cr

eate

>>+R

obot

(pH

eadi

ng:in

t,xP:

int,y

P:in

t):R

obot

+get

X():i

nt+s

etX(

xP:in

t):vo

id+g

etY(

):int

+set

Y(yP

:int):

void

+set

Hea

ding

(pH

eadi

ng:in

t):vo

id+g

etH

eadi

ng()

:int

Rob

otC

ontr

olle

r

-inst

ance

:Rob

otC

ontro

ller=

nul

l

<<cr

eate

>>-R

obot

Con

trolle

r():R

obot

Con

trolle

r+ g

etIn

stan

ce()

:Rob

otC

ontro

ller

+clo

ne():

Obj

ect

+ini

t():v

oid

+kill

():vo

id+s

etD

irect

Mod

e():v

oid

+set

Que

ueM

ode(

):voi

d+s

etP

CA

utoM

ode(

):voi

d+s

etR

CX

Aut

oMod

e():v

oid

+get

Mod

e():i

nt+b

egin

():v

oid

+res

et()

:voi

d+c

lear

Com

man

ds():

void

+sen

dCom

man

ds():

void

+get

Com

man

ds()

:Lin

kedL

ist

+mov

eFor

war

d():v

oid

+mov

eBac

kwar

d():v

oid

+sto

p():v

oid

+tur

nLef

t():v

oid

+tur

nRig

ht()

:voi

d+r

eadS

enso

r():v

oid

+get

Bat

tery

Cha

rge(

):voi

d+s

etC

harg

e(ch

arge

:int):

void

+get

Cha

rge(

):int

+get

Free

Mem

ory(

):voi

d+s

etM

emor

y(m

emor

y:in

t):vo

id+g

etM

emor

y():i

nt+c

onne

ctio

nAliv

e():b

oole

an+d

ataR

ecei

ved(

ce:C

omm

unic

atio

nEve

nt):v

oid

+con

nect

ionL

ost(c

e:C

omm

unic

atio

nEve

nt):v

oid

+con

nect

ionR

eest

ablis

hed(

ce:C

omm

unic

atio

nEve

nt):v

oid

Abs

trac

tCom

man

d(fr

om c

omm

on)

<<cr

eate

>>+A

bstra

ctC

omm

and(

):Abs

tract

Com

man

d+g

etId

():in

t

<<in

terfa

ce>>

Com

man

d(fr

om c

omm

on)

+exe

cute

():v

oid

+get

Id():

int

+res

pons

eRec

eive

d(re

spon

se:in

t):bo

olea

n+r

epla

cesC

urre

ntC

omm

and(

):boo

lean

Com

man

dReg

istr

y(fr

om c

omm

on)

-inst

ance

:Com

man

dReg

istry

= nu

ll

<<cr

eate

>>-C

omm

andR

egis

try():

Com

man

dReg

istry

+ get

Inst

ance

():C

omm

andR

egis

try+g

etC

omm

andI

d():i

nt+g

etR

espo

nseI

d():i

nt

Rob

otM

ode

(from

com

mon

)

+DIR

EC

T:in

t= 1

+QU

EU

E:in

t= 2

+PC

_AU

TO:in

t= 3

+RC

X_A

UTO

:int=

4-m

ode:

int=

DIR

EC

T

+get

Mod

e():i

nt+s

etM

ode(

mod

e:in

t):vo

id

crea

tes

an in

stan

ce o

f all

com

man

ds

envi

ronm

ent

-ch

ecks

<<re

aliz

e>>

<<re

aliz

e>>

robo

t-

hold

s

virtu

alR

obot

-

hold

s

robo

tCon

trolle

r-

uses

io-star

ts re

ceiv

ing

thre

ad o

f

envi

ronm

ent

-

com

man

dFac

tory

-

requ

ests

com

man

ds fr

om

<<re

aliz

e>>

com

man

d-

hold

s

avai

labl

eCom

man

ds-1.

.*st

ores

<<re

aliz

e>>

fires

wai

ts fo

r

thro

ws

quer

ies

quer

ies

sets

thro

ws

posi

tions

-

1..*

is m

ade

of

uses

usesno

tifie

s

com

man

ds-

*st

ores

Page 56: Ambiente Prototipo Para Teleoperacin De Robots

49

Las siguientes clases e interfaces son iguales a las correspondientes en la primera versión

del sistema, y su detalle puede verse en la sección 4.2.5.1.:

• Clase IOManager

• Interfaz CommunicationEventListener

• Clase CommunicationEvent

• Clase RobotMode

• Clase Environment

• Clase Robot

• Interfaz EnvironmentPosition

• Clase Mark

• Clase Path

• Clase EnvironmentReconstruct

Clase QueuedCommand

Esta clase es igual a la clase Command, de la primera versión del sistema, la cual

representa un comando a almacenar en la cola de comandos cuando el modo de operación

es el de cola de comandos.

Clase RobotController

Esta clase es igual a la clase MobileRobotController de la primera versión del sistema,

con la diferencia que ahora usa el patrón Command de [17] para el manejo de los

distintos comandos.

Esta clase es dependiente de la tarea, ya que ofrece los métodos específicos para la tarea

que se escogió, en caso de cambiar la tarea, se debe cambiar toda la clase. La ventaja de

esta clase con respecto a la de la primera versión es que es más fácil incorporarle

Page 57: Ambiente Prototipo Para Teleoperacin De Robots

50

comandos nuevos. A partir de esta clase, todas las que siguen son dependientes de la

tarea.

Clase PCCommandFactory

Esta clase se encarga de crear y almacenar la instancia de cada uno de los diferentes

comandos disponibles en el sistema.

Clase CommandRegistry

Esta clase se encarga de generar en ejecución los identificadores de comando y respuesta,

para cada uno de los comandos disponibles en el sistema.

Interfaz Command

Esta interfaz representa un comando tanto del RCX como del PC, define el método a

llamar para ejecutar el comando (execute()), un método que devuelve el identificador

de comando asociado (getId()), un método para notificar al comando en el PC que llegó

respuesta por parte del RCX (responseReceived(int)) y un método que dice si el

comando reemplaza al que está actualmente en ejecución, o si se puede ejecutar al mismo

tiempo (replacesCurrentCommand()).

Clase Abstracta AbstractCommand

Implementa el método getId() de la interfaz Command y el constructor que usarán todos

los comandos tanto en el RCX como en el PC, excepto el comando de movimiento hacia

adelante.

Page 58: Ambiente Prototipo Para Teleoperacin De Robots

51

Clase Abstracta AbstractPCCommand

Extiende la clase abstracta AbstractCommand, e implementa los métodos restantes de la

interfaz Command, para su uso en el PC. Los comandos que extienden esta clase abstracta

y que son los diferentes comandos que ofrece el sistema son:

• PCBackwardCommand

• PCBatteryCommand

• PCBeginCommand

• PCForwardCommand1

• PCHaltCommand

• PCLeftCommand

• PCMemoryCommand

• PCReadSensorCommand

• PCRightCommand

• PCSetModeCommand

• PCStopCommand

1 La clase PCForwardCommand hace override del constructor implementado en AbstractCommand, debido a que utiliza dos identificadores de respuesta.

Page 59: Ambiente Prototipo Para Teleoperacin De Robots

52

4.2.6.2. Diagrama de Clases Aplicación del RCX

Abs

trac

tRC

XCom

man

d

<<cr

eate

>>+A

bstra

ctR

CX

Com

man

d():A

bstra

ctR

CX

Com

man

d+e

xecu

te()

:voi

d+r

epla

cesC

urre

ntC

omm

and(

):boo

lean

+res

pons

eRec

eive

d(re

spon

se:in

t):bo

olea

n

IOM

anag

er

-inst

ance

:IOM

anag

er=

null

<<cr

eate

>>-IO

Man

ager

():IO

Man

ager

+ get

Inst

ance

():IO

Man

ager

+set

Rob

otFo

rNot

ifica

tion(

robo

t:Rob

ot):v

oid

+sen

dDat

a(da

ta:in

t):vo

id+r

ecei

veD

ata(

):int

-sen

dRes

pons

es()

:voi

d

Mob

ileR

obot

-inst

ance

:Mob

ileR

obot

= nu

ll-c

omm

and:

int=

-1-a

tNor

th:b

oole

an=

true

-ver

tHea

ding

:boo

lean

= tru

e-tu

rn:b

oole

an=

fals

e-re

ad:b

oole

an=

fals

e

<<cr

eate

>>-M

obile

Rob

ot():

Mob

ileR

obot

+get

Inst

ance

():M

obile

Rob

ot+s

tart(

):voi

d+s

tate

Cha

nged

(aS

ourc

e:S

enso

r,aO

ldV

alue

:int,a

New

Val

ue:in

t):vo

id+s

etC

omm

and(

com

man

d:in

t):vo

id+a

ddC

omm

and(

com

man

d:in

t):vo

id+b

egin

():v

oid

+nex

tCom

man

d():v

oid

+mai

n(ar

gs:S

tring

[]):v

oid

RC

XBac

kwar

dCom

man

d

<<cr

eate

>>+R

CX

Bac

kwar

dCom

man

d():R

CX

Bac

kwar

dCom

man

d+e

xecu

te()

:voi

d+t

erm

inat

eExe

cutio

n():v

oid

+sen

dRes

pons

e():v

oid

+rep

lace

sCur

rent

Com

man

d():b

oole

an

RC

XBat

tery

Com

man

d

<<cr

eate

>>+R

CX

Bat

tery

Com

man

d():R

CX

Bat

tery

Com

man

d+e

xecu

te()

:voi

d

RC

XBeg

inC

omm

and

<<cr

eate

>>+R

CX

Beg

inC

omm

and(

):RC

XB

egin

Com

man

d+e

xecu

te():

void

RC

XCom

man

dFac

tory

-forw

ardC

omm

and:

Com

man

d= n

ew R

CX

Forw

ardC

omm

and

( )-b

ackw

ardC

omm

and:

Com

man

d= n

ew R

CX

Bac

kwar

dCom

man

d ( )

-leftC

omm

and:

Com

man

d= n

ew R

CX

LeftC

omm

and

( )-ri

ghtC

omm

and:

Com

man

d= n

ew R

CX

Rig

htC

omm

and

( )-re

adS

enso

rCom

man

d:C

omm

and=

new

RC

XR

eadS

enso

rCom

man

d ( )

-sto

pCom

man

d:C

omm

and=

new

RC

XS

topC

omm

and

( )-h

altC

omm

and:

Com

man

d= n

ew R

CX

Hal

tCom

man

d ( )

-bat

tery

Com

man

d:C

omm

and=

new

RC

XB

atte

ryC

omm

and

( )-m

emor

yCom

man

d:C

omm

and=

new

RC

XM

emor

yCom

man

d ( )

-che

ckC

omm

Com

man

d:C

omm

and=

new

RC

XC

heck

Com

mC

omm

and

( )-s

etM

odeC

omm

and:

Com

man

d= n

ew R

CX

Set

Mod

eCom

man

d ( )

-beg

inC

omm

and:

Com

man

d= n

ew R

CX

Beg

inC

omm

and

( )

<<cr

eate

>>-R

CX

Com

man

dFac

tory

():R

CX

Com

man

dFac

tory

+get

Forw

ardC

omm

and(

):Com

man

d+g

etB

ackw

ardC

omm

and(

):Com

man

d+g

etLe

ftCom

man

d():C

omm

and

+get

Rig

htC

omm

and(

):Com

man

d+g

etR

eadS

enso

rCom

man

d():C

omm

and

+get

Sto

pCom

man

d():C

omm

and

+get

Hal

tCom

man

d():C

omm

and

+get

Bat

tery

Com

man

d():C

omm

and

+get

Mem

oryC

omm

and(

):Com

man

d+g

etC

heck

Com

mC

omm

and(

):Com

man

d+g

etS

etM

odeC

omm

and(

):Com

man

d+g

etB

egin

Com

man

d():C

omm

and

RC

XFor

war

dCom

man

d

<<cr

eate

>>+R

CX

Forw

ardC

omm

and(

):RC

XFo

rwar

dCom

man

d+e

xecu

te()

:voi

d+t

erm

inat

eExe

cutio

n():v

oid

+sen

dRes

pons

e(su

cces

s:bo

olea

n):v

oid

+rep

lace

sCur

rent

Com

man

d():b

oole

an

RC

XHal

tCom

man

d

<<cr

eate

>>+R

CX

Hal

tCom

man

d():R

CX

Hal

tCom

man

d+e

xecu

te()

:voi

d+r

epla

cesC

urre

ntC

omm

and(

):boo

lean

RC

XLef

tCom

man

d

-RO

TATI

ON

:int=

180

<<cr

eate

>>+R

CX

LeftC

omm

and(

):RC

XLe

ftCom

man

d+e

xecu

te():

void

+rep

lace

sCur

rent

Com

man

d():b

oole

an

RC

XMem

oryC

omm

and

<<cr

eate

>>+R

CX

Mem

oryC

omm

and(

):RC

XM

emor

yCom

man

d+e

xecu

te()

:voi

d+r

epla

cesC

urre

ntC

omm

and(

):boo

lean

RC

XRea

dSen

sorC

omm

and

<<cr

eate

>>+R

CX

Rea

dSen

sorC

omm

and(

):RC

XR

eadS

enso

rCom

man

d+e

xecu

te():

void

+rep

lace

sCur

rent

Com

man

d():b

oole

an

RC

XRig

htC

omm

and

-RO

TATI

ON

:int=

180

<<cr

eate

>>+R

CX

Rig

htC

omm

and(

):RC

XR

ight

Com

man

d+e

xecu

te():

void

+rep

lace

sCur

rent

Com

man

d():b

oole

an

RC

XSet

Mod

eCom

man

d

<<cr

eate

>>+R

CX

Set

Mod

eCom

man

d():R

CX

Set

Mod

eCom

man

d+e

xecu

te()

:voi

d+r

epla

cesC

urre

ntC

omm

and(

):boo

lean

RC

XSto

pCom

man

d

<<cr

eate

>>+R

CX

Sto

pCom

man

d():R

CX

Sto

pCom

man

d+e

xecu

te()

:voi

d+r

epla

cesC

urre

ntC

omm

and(

):boo

lean

<<in

terfa

ce>>

Rob

ot

<<>>

+set

Com

man

d(co

mm

and:

int):

void

<<>>

+add

Com

man

d(co

mm

and:

int):

void

<<>>

+beg

in()

:voi

d

Rob

otM

ode

(from

com

mon

)

+DIR

EC

T:in

t= 1

+QU

EU

E:in

t= 2

+PC

_AU

TO:in

t= 3

+RC

X_A

UTO

:int=

4-m

ode:

int=

DIR

EC

T

+get

Mod

e():i

nt+s

etM

ode(

mod

e:in

t):vo

id

Abs

trac

tCom

man

d(fr

om c

omm

on)

<<cr

eate

>>+A

bstra

ctC

omm

and(

):Abs

tract

Com

man

d+g

etId

():in

t

<<in

terfa

ce>>

Com

man

d(fr

om c

omm

on)

<<>>

+exe

cute

():v

oid

<<>>

+get

Id()

:int

<<>>

+res

pons

eRec

eive

d(re

spon

se:in

t):bo

olea

n<<

>>+r

epla

cesC

urre

ntC

omm

and(

):boo

lean

Com

man

dReg

istr

y(fr

om c

omm

on)

-inst

ance

:Com

man

dReg

istry

= nu

ll

<<cr

eate

>>-C

omm

andR

egis

try()

:Com

man

dReg

istry

+ get

Inst

ance

():C

omm

andR

egis

try+g

etC

omm

andI

d():i

nt+g

etR

espo

nseI

d():i

nt

crea

tes

an in

stan

ce o

f all

com

man

ds

Que

ue(fr

om rc

x::u

til)

<<cr

eate

>>+Q

ueue

(siz

e:in

t):Q

ueue

+enq

ueue

(ele

men

t:int

):voi

d+e

mpt

y():v

oid

+ite

rate

():vo

id+d

eque

ue():

int

+has

Nex

t():b

oole

an+i

sEm

pty(

):boo

lean

robo

t-

<<re

aliz

e>>

avai

labl

eCom

man

ds-

1..*

<<re

aliz

e>>

uses

uses

sets

quer

ies

quer

ies

requ

ests

com

man

ds fr

om

all c

omm

and

send

s da

ta th

roug

h

stor

es re

spon

ses

id's

in

stor

es c

omm

ands

id's

in

Page 60: Ambiente Prototipo Para Teleoperacin De Robots

53

Las siguientes clases e interfaces son iguales a las correspondientes en la primera versión

del sistema, y su detalle puede verse en la sección 4.2.5.2.:

• Clase IOManager

• Interfaz Robot

• Clase RobotMode

Clase MobileRobot

Esta clase es igual a la de la primera versión del sistema, con la diferencia que ahora usa

el patrón Command de [17] para el manejo de los distintos comandos.

Esta clase es dependiente de la tarea, ya que ofrece incluye la lógica específica para la

tarea que se escogió, en caso de cambiar la tarea, se debe cambiar toda la clase. La

ventaja de esta clase con respecto a la de la primera versión es que es más fácil

incorporarle comandos nuevos para la misma tarea.

Clase RCXCommandFactory

Esta clase se encarga de crear y almacenar la instancia de cada uno de los diferentes

comandos disponibles en el sistema.

Clase CommandRegistry

Esta clase se encarga de generar en ejecución los identificadores de comando y respuesta,

para cada uno de los comandos disponibles en el sistema.

Page 61: Ambiente Prototipo Para Teleoperacin De Robots

54

Interfaz Command

Esta interfaz representa un comando tanto del RCX como del PC, define el método a

llamar para ejecutar el comando (execute()), un método que devuelve el identificador

de comando asociado (getId()), un método para notificar al comando en el PC que llegó

respuesta por parte del RCX (responseReceived(int), que no se usa en el RCX) y un

método que dice si el comando reemplaza al que está actualmente en ejecución, o si se

puede ejecutar al mismo tiempo (replacesCurrentCommand()).

Clase Abstracta AbstractCommand

Implementa el método getId() de la interfaz Command y el constructor que usarán todos

los comandos tanto en el RCX como en el PC, excepto el comando de movimiento hacia

adelante.

Clase Abstracta AbstractRCXCommand

Extiende la clase abstracta AbstractCommand, e implementa los métodos restantes de la

interfaz Command, para su uso en el RCX. Los comandos que extienden esta clase

abstracta y que son los diferentes comandos que ofrece el sistema son:

• RCXBackwardCommand

• RCXBatteryCommand

• RCXBeginCommand

• RCXForwardCommand

• RCXHaltCommand

• RCXLeftCommand

• RCXMemoryCommand

• RCXReadSensorCommand

Page 62: Ambiente Prototipo Para Teleoperacin De Robots

55

• RCXRightCommand

• RCXSetModeCommand

• RCXStopCommand

NOTA: La clase RCXForwardCommand hace override del constructor implementado en

AbstractCommand, debido a que utiliza dos identificadores de respuesta.

Clase Queue

Implementa una cola de enteros.

4.2.6.3. Diagramas de Secuencia

El siguiente es un diagrama de secuencia de todo el proceso de ejecución de un comando,

en el caso normal de operación. Está dividido en tres partes: la primera va desde la acción

del operador sobre la interfaz grafica, hasta que el comando es enviado al RCX, la

segunda comprende la recepción y ejecución del comando en el RCX y el envió de la

respuesta, la ultima parte es la recepción y procesamiento de la respuesta en el PC y la

retroalimentación al operador. Se escogió el mismo comando de movimiento hacia

adelante, para que el lector pueda contrastar mejor los dos diseños.

La diferencia de estos diagramas, con respecto a los del primer diseño, es la utilización de

los patrones Command y Factory, de [17], la verificación previa al envío al RCX y el

ciclo de ejecución del movimiento hacia delante, siguen siendo iguales.

La ventaja del patrón Command, como puede observarse, es que una sola clase está

encargada exclusivamente de la recepción del comando, ejecución del movimiento hacia

delante y envío de respuesta en el RCX (RCXForwardCommand), y del envío del comando,

recepción y procesamiento de la respuesta en el PC (PCForwardCommand).

Page 63: Ambiente Prototipo Para Teleoperacin De Robots

56

GU

Iro

botC

ontro

ller:R

obot

Con

trolle

ren

viro

nmen

t:Env

ironm

ent

robo

t:Rob

otpo

sitio

ns[x

][y]:P

ath

com

man

dFac

tory

:PC

Com

man

dFac

tory

forw

ardC

omm

and:

PCFo

rwar

dCom

man

d

com

man

dReg

istry

:Com

man

dReg

istry

:Rob

otM

ode

io:IO

Man

ager

out:D

ataO

utpu

tStre

am

:m

oveF

orw

ard(

)

:ch

eckM

oveR

obot

Forw

ard(

)

:h:

=get

Hea

ding

()

:he

adin

g

:x:

=get

X()

:x

:y:

=get

Y()

:y

: :=

isBl

ocke

d()

:bl

ocke

d

:

: :=

getF

orw

ardC

omm

and(

)

:fo

rwar

dCom

man

d

:ne

w

:

:ex

ecut

e()

: :=

getR

espo

nseI

d()

:re

spon

seId

: :=

getM

ode(

)

:m

ode

:

:

:se

ndD

ata(

id)

:

:w

riteI

nt(id

)

:

Page 64: Ambiente Prototipo Para Teleoperacin De Robots

57

receive:ReceptionThread in:DataInputStream :RobotMode robot:MobileRobot Thread forwardCommand:RCXForwardCommand A:Motor C:Motor S1:Sensor S3:Sensorio:IOManager out:DataOutputStream

Loop

: readInt()

: data

: :=getMode()

: mode

: setCommand(data)

:

: yield()

:

: execute()

: forward()

:

: forward()

: setPreviousValue(0)

:

:

: readValue()

: value

: flt()

:

: readValue()

: value

: forward()

:

: readValue()

: value

: flt()

:

: readValue()

: value

: forward()

:

: yield()

: stateChanged(S1,old,new)

: terminateExecution()

:

:

: readValue()

execute() returns :

: value

: sendResponse(true)

: sendData(response)

: writeInt(response)

:

:

: yield()

:

: yield()

Page 65: Ambiente Prototipo Para Teleoperacin De Robots

58

rece

ive:

Rec

eptio

nThr

ead

in:D

ataI

nput

Stre

amio

:IOM

anag

er

ce:C

omm

unic

atio

nEve

nt

robo

tCon

trolle

r:Rob

otC

ontro

ller

forw

ardC

omm

and:

PC

Forw

ardC

omm

and

envi

ronm

ent:E

nviro

nmen

tro

bot:R

obot

posi

tions

[x][y

]:Pat

h

GU

I

:re

adIn

t()

:da

ta

:fir

eDat

aRec

eive

dEve

nt(c

e)

:ne

w C

omm

unic

atio

nEve

nt(d

ata)

:

:da

taR

ecei

ved(

ce)

: :=

getR

ecei

vedD

ata(

)

:da

ta

: :=

resp

onse

Rec

eive

d(da

ta)

:m

oveR

obot

Forw

ard(

)

: :=

getH

eadi

ng()

:he

adin

g

:se

tX(x

)

:

:se

tY(x

)

:

:ne

w P

ath(

head

ing,

fals

e) :

:

:

:

:

:up

date

()

:

Page 66: Ambiente Prototipo Para Teleoperacin De Robots

59

4.3. AMBIENTE

El ambiente en el que operará el robot será construido y será desconocido para el

operador, lo único que sabe el operador es que en el ambiente hay marcas equidistantes.

La función del operador será reconstruir el ambiente, cuidando la integridad del robot con

la ayuda de la lógica de la estación remota (control colaborativo). Dentro del ambiente

habrá marcas sobresalientes en el suelo rodeadas de un color en particular, que le

permitirán al robot saber donde termina los diferentes tramos establecidos que puede

recorrer y el color determinará que tan seguro es esa parte del ambiente, al llegar a estas

marcas, el robot, basado en las órdenes recibidas y el nivel de seguridad, deberá rotar,

enviar la lectura actual de los sensores, detenerse y esperar nuevas órdenes, etc. En el

ambiente podrá haber obstáculos que el operador no conoce y el robot deberá detectarlos

y reportar al operador de su hallazgo.

Debido a las limitaciones del RCX en cuanto al número de sensores que soporta (3), se

decidió utilizar un sensor de contacto para las marcas, que está conectado al mismo

puerto que el sensor de obstáculos, que también es de contacto en el momento de que

cualquiera de estos sensores se active, se activará y utilizará el sensor de luz para saber si

lo que activo el puerto fue un obstáculo (esto se sabrá porque alrededor del obstáculo y en

general donde no hay marcas el suelo será blanco) o una marca (en este caso, se enviará

la lectura del sensor de luz y ésta determinará de qué color es el suelo y su nivel de

seguridad

Page 67: Ambiente Prototipo Para Teleoperacin De Robots

60

4.4. LIMITANTES

4.4.1. Memoria del RCX

La memoria disponible para programas de usuario usando leJOS es de 12 Kb, en estos,

además de almacenar el código ejecutable (bytecode) del programa, se almacenan todas

las variables que son creadas en ejecución y todas las estructuras necesarias para la

ejecución del programa, como por ejemplo, la pila de ejecución (stack). Además, leJOS

no tiene recolección de basura, por lo que la memoria utilizada en variables u objetos que

se creen en ejecución, no puede ser recuperada.

Lo anterior limita el tamaño de los programas, las variables y objetos que se declaren en

él (todas las variables usadas en el sistema son globales a la clase donde se usan), el

número de threads concurrentes que se pueden tener y el tamaño de las estructuras de

datos como arreglos.

Esto fue una gran limitante para el desarrollo de la aplicación ya que en varias ocasiones

el RCX se quedaba sin memoria y era necesario revisar el código fuente al mismo tiempo

que se utilizaba el LCD del RCX en ejecución, para ver la cantidad de memoria libre en

él en cada momento, y así poder detectar posibles fallas en la programación que

aumentaran la memoria en uso. Esto sucedió más que todo en la versión 2 del sistema,

debido al aumento considerable en el número de clases. A pesar de esto, se logró reducir

el consumo de memoria en ejecución con la ayuda del Asesor y la aplicación funcionó

satisfactoriamente.

4.4.2. Medio de Comunicación PC – RCX

La limitante del medio infrarrojo es que debe haber línea de visión entre el emisor y el

receptor para que haya comunicación, o al menos debe haber un objeto en el que los

Page 68: Ambiente Prototipo Para Teleoperacin De Robots

61

rayos puedan rebotar hacia el receptor. Esto mantuvo la distancia entre el RCX y el PC a

un máximo de 5 metros, con paredes alrededor. Una posible solución para extender el

rango de recepción del RCX podría ser utilizar una extensión del cable USB del sensor

infrarrojo del PC, considerando que el puerto USB al que se conecta debe tener

alimentación propia y la extensión debe contar con un núcleo de ferrita para minimizar

interferencias.

Page 69: Ambiente Prototipo Para Teleoperacin De Robots

62

5. PRUEBAS DEL SISTEMA

Para las pruebas del sistema se construyó un ambiente de 5 x 5 marcas, con cartulina

blanca como base. Las marcas se hicieron con palos de balso cortados a una altura de

7mm., aproximadamente. Para los colores de las marcas se utilizó papel iris y se cortó de

tal manera que cubriera la marca de madera.

Se encontró que el sensor de luz no diferenciaba entre los colores verde, amarillo y rojo,

por lo que se decidió utilizar únicamente marcas de color verde y negro, las cuales si

puede distinguir el sensor de luz de Lego.

Igualmente se encontró que la iluminación del ambiente alteraba las lecturas del sensor

de luz, a pesar de que este se encuentra casi en el centro, debajo del robot y al estar sobre

una marca, ésta ultima queda a escasos milímetros del sensor. Por lo tanto es necesario

calibrar el sensor previamente a usar el robot en un ambiente con condiciones de

iluminación diferentes.

Page 70: Ambiente Prototipo Para Teleoperacin De Robots

63

Figura 15. Ambiente de Prueba Visto Desde Arriba

Para ambas versiones del sistema, las pruebas consistieron de cuatro partes, que

corresponden a los cuatro modos soportados por el sistema. En cada una de estas partes

se buscó, entre otras cosas, poner a prueba la respuesta del sistema al problema de la

pérdida de comunicación. El comportamiento que se esperaba era que si se perdía la

comunicación, la aplicación notificara al operador de este hecho y no le permitiera

ingresar más comandos hasta que se reestableciera la comunicación, si el robot debía

enviar algo al PC, se debía dar cuenta que no había comunicación y almacenaría lo que

iba a enviar en el buffer hasta reestablecer la comunicación, al suceder esto, el robot

enviaría todo lo que estuviera en el buffer de manera automática y el PC lo procesaría

como era debido.

Con estas pruebas también se quería poner a prueba la autonomía de la aplicación del

RCX y del PC, en los correspondientes modos (Autónomo RCX y Autónomo PC). Si se

daba la orden de iniciar el modo Autónomo RCX, la aplicación en el RCX debía decidir

cual debía ser el siguiente comando a ejecutar para recorrer el ambiente en una

trayectoria de norte a sur y de oeste a este, enviando al PC un mensaje que le notificaba

Page 71: Ambiente Prototipo Para Teleoperacin De Robots

64

que había ejecutado con éxito un determinado comando, la aplicación del PC debía

retroalimentar al operador acerca de lo que había hecho el robot. En el caso de dar la

orden de iniciar el modo Autónomo PC, la aplicación del PC era quien debía decidir el

siguiente comando a ejecutar, basado en su conocimiento del ambiente (lo puede hacer

más fácilmente ya que conoce su ubicación y orientación, el RCX no, por lo que este

último debía guardar algo de historia de sus movimientos en su respectivo modo

autónomo) para decidir el siguiente comando a ejecutar y poder así enviar una respuesta

al terminar de ejecutarlo. Para el modo Autónomo RCX, se deben ubicar obstáculos en

los límites del ambiente, ya que el RCX no conoce las dimensiones de éste.

Durante las pruebas se presentó un problema que obligó a asistir al robot durante las

rotaciones. Esto sucedió debido a que el suelo donde se instaló el ambiente no era

totalmente liso y tenía protuberancias que hacían que el robot no pudiera avanzar al

quedar este bloqueado por la marca sobre la que se encontraba (al quedar ésta más alta y

por lo tanto por encima del sensor), y depresiones en las que una o ambas de las ruedas

perdían tracción y hacían que el robot se desviara, más que todo en las curvas. En pruebas

anteriores (en un suelo más liso), se logró que el robot recorriera más de la mitad del

ambiente sin requerir asistencia para corregir su curso.

La disposición del ambiente (al no tener objetos circundantes que reflejaran) y las

condiciones de iluminación (luz blanca muy intensa), hicieron que en algunos momentos

no fuera posible la comunicación entre el PC y el RCX, y fuera necesario mantener el

puerto infrarrojo del PC apuntado siempre al puerto infrarrojo del RCX. En pruebas

anteriores, con paredes circundantes y luz más tenue, se logró siempre comunicación

entre el PC y el RCX y viceversa, dejando el sensor en el suelo apuntado hacia el

ambiente y con las paredes al fondo y a los lados.

Para poner en funcionamiento el sistema, se debe tener instalado lo siguiente, verificando

que las variables de entorno se definan correctamente (los instaladores se incluyen en el

CD adjunto):

Page 72: Ambiente Prototipo Para Teleoperacin De Robots

65

1. Máquina virtual de Java (versión usada: 1.4.2_04).

2. Apache Ant (versión usada: 1.6.1).

3. Controlador (Driver) del Transmisor Infrarrojo de Lego.

Los pasos a seguir para la ejecución son:

1. Conectar el Transmisor Infrarrojo de Lego a un puerto USB auto alimentado.

2. Copiar al disco duro del computador, el directorio APT del CD.

3. Definir la variable de entorno LEJOS_HOME y apuntarla al subdirectorio leJOS,

dentro de APT.

4. Ejecutar la tarea firmware de Ant, para transferir leJOS al RCX.

5. Ejecutar la tarea download de Ant, para compilar, encadenar y descargar el

programa al RCX.

6. Ejecutar la tarea start de Ant, o presionar el botón “Run” del RCX para ejecutar

el programa en el RCX.

7. Ejecutar la tarea run de Ant para compilar y ejecutar el programa en el PC.

Page 73: Ambiente Prototipo Para Teleoperacin De Robots

66

La interfaz gráfica de la aplicación se muestra a continuación:

Figura 16. Interfaz Gráfica de la Aplicación del PC

Los diferentes componentes de la interfaz gráfica son:

1. Panel de Reconstrucción del Ambiente: En éste, el operador tiene una visión de

lo que el robot ha logrado reconocer del ambiente, en la tarea que desarrolló el

robot, se pueden distinguir marcas (con su color), caminos (bloqueados o libres) y

la posición y orientación del robot. El panel está identificado en la figura con rojo.

2. Panel de Modo de Control: En éste, el operador escoge entre los cuatro posibles

modos de operación, si escoge los modos PC Auto o RCX Auto, el sistema le

pedirá una confirmación y procederá a iniciar dicho modo. El panel está

identificado en la figura con amarillo.

Page 74: Ambiente Prototipo Para Teleoperacin De Robots

67

3. Panel de Estado del Robot: En este panel el operador puede ver el estado del

robot en lo que se refiere a enlace de comunicación, carga de la batería y cantidad

de memoria libre. Se dispone de un botón para actualizar los valores cuando el

operador lo requiera. El panel está identificado en la figura con naranja.

4. Panel de Comandos: En este panel se encuentran los botones para los distintos

comandos de movimientos y sensores (adelante, atrás, girar a izquierda y derecha,

detenerse y leer el sensor de luz). Si el sistema se encuentra en modo Directo, el

comando será enviado y ejecutado inmediatamente por el RCX, si el modo es

Cola de Comandos, el comando se almacenará y posteriormente se enviará con

los demás comandos almacenados al RCX para su ejecución. El panel está

identificado en la figura con verde.

5. Panel de Cola de Comandos: En este panel se muestran los comandos que están

almacenados actualmente si las letras de un comando están en rojo, significa que

el comando no ha sido enviado al RCX, si están en amarillo, significa que el

comando ha sido enviado al RCX pero no se ha ejecutado, si están en verde,

significa que el comando ya se ejecutó. Se dispone de un botón para enviar los

comandos al RCX, otro para comenzar la ejecución de los mismos, y un último

para borrar los comandos que se encuentren almacenados. El panel está

identificado en la figura con azul.

Page 75: Ambiente Prototipo Para Teleoperacin De Robots

68

Figura 17. Componentes de la Interfaz Gráfica de la Aplicación del PC

Page 76: Ambiente Prototipo Para Teleoperacin De Robots

69

6. CONCLUSIONES Y TRABAJO FUTURO

La teleoperación de robots es un campo con muchas aplicaciones en áreas como

producción, vigilancia, manipulación, entretenimiento, entre muchas otras,

desafortunadamente, no se ha hecho la suficiente investigación en la Universidad y la que

se ha hecho no ha tenido continuidad y por lo tanto no ha resultado útil. Se espera que se

siga con el desarrollo de este trabajo por parte de otros estudiantes con el fin de llegar a

hacer un aporte por parte de la Universidad al país.

El desarrollo del sistema permitió enfrentarse a los problemas de concurrencia, vistos de

una manera muy teórica en los cursos relacionados, en una aplicación real, con varios

hilos de ejecución simultáneos en más de una máquina (PC y RCX). Fue muy interesante

y formativo abordar estos problemas y darles solución.

La principal limitante fue la memoria del RCX, mencionada anteriormente, lo que retraso

considerablemente el desarrollo. Para futuros trabajos sobre este sistema, se sugiere

integrar más de un RCX en el robot, con el fin poder tener una lógica más robusta y mas

entradas (sensores) y salidas (motores).

Se observó que no se ha usado leJOS en otros proyectos similares, ya que se debieron

hacer algunos cambios para poder afrontar de manera adecuada los problemas de

comunicación que se pueden presentar en la teleoperación. Se espera que al hacer

públicos estos cambios sean integrados en una futura versión de leJOS y que el origen de

estos motive a otros a desarrollar trabajos similares.

Page 77: Ambiente Prototipo Para Teleoperacin De Robots

70

Se espera que a partir de este trabajo, se siga investigando en el área de robótica y en

especial en la de teleoperación, ya que de esta investigación pueden resultar ideas más

concretas que pueden beneficiar de algún modo al sector productivo colombiano, entre

otros, con herramientas libres como lo son java y leJOS.

El siguiente paso en el desarrollo de este trabajo es extender la distancia entre el operador

y el robot, usando Internet como medio de comunicación. Se puede comenzar por utilizar

RMI para utilizar el código existente, luego pasar a una interfaz Web (usando servlets o

EJBs) para finalmente llegar a controlar el robot desde dispositivos móviles (con

interfaces WML o J2ME), se debe tener en cuenta que los problemas relacionados con

teleoperación mencionados se presentarían a dos niveles: el primero es la actual

comunicación vía infrarrojos entre el RCX y el PC y el segundo sería la comunicación

entre el PC y el dispositivo del operador (móvil o fijo), que sería por Internet, usando los

protocolos HTTP, HTTPS, RTP o alguno creado para este trabajo en particular. Además

de esto, es importante probar el sistema con otras tareas, para así demostrar las

verdaderas capacidades y posibles usos reales del sistema.

Se considera que el Lego RCX 2.0 puede utilizarse en la solución de problemas de la vida

real, sin la necesidad de adquirir hardware a altos costos, ya que se comprobó que,

usando leJOS, la interacción con el PC es muy sencilla. Se puede aumentar la robustez

del software agregando más de un RCX al robot (como se sugirió anteriormente) y

reemplazando las piezas plásticas de lego por partes metálicas hechas a la medida (no

tienen que ser como las de lego, solo se utiliza el RCX como dispositivo de control de

bajo costo, con varias posibilidades para ser programado, como java, c, c++, etc.).

El Control Colaborativo resulta ser una gran alternativa para reducir la carga en el

operador y permitir que éste se dedique a los aspectos realmente relevantes y que

requieran de su intervención, dejando que el dispositivo controlado u otro intermedio se

dediquen a los demás aspectos y de esta forma se aumenta la estabilidad y robustez del

sistema.

Page 78: Ambiente Prototipo Para Teleoperacin De Robots

71

7. REFERENCIAS

[1] Bagnall, Brian. (2002). Core LEGO MINDSTORMS Programming: Unleash the

Power of the Java Platform. Prentice Hall.

[2] Fong, Terrence. (2001). Collaborative Control: A Robot-Centric Model for Vehicle

Teleoperation. Pittsburgh, Pennsylvania. Carnegie Mellon University

[3] Fiorini, Paolo & Oboe, Roberto. (1997). Internet-Based Telerobotics: Problems and

Approaches. Pasadena, California. CiteSeer.

[4] RFC 1889. (1986). RTP: A Transport Protocol for Real-Time Applications.

Schulzrinne, et al. Recuperado el 23 de Septiembre de 2003, de

http://www.faqs.org/rfcs/rfc1889.html

[5] MindStorms RCX Sensor Input Page. Recuperado el 23 de Septiembre de 2003, de

http://www.plazaearth.com/usr/gasperi/lego.htm

[6] LEGO.com Mindstorms RIS Highlights. Recuperado el 23 de Septiembre de 2003, de

http://mindstorms.lego.com/eng/products/ris/rishighlights.asp

[7] The leJOS Tutorial: A practical guide for developers. Recuperado el 23 de

Septiembre de 2003, de http://mp.scholz.bei.t-online.de/lejos/tutorial/index.html

Page 79: Ambiente Prototipo Para Teleoperacin De Robots

72

[8] LeJOS. Recuperado el 23 de Septiembre de 2003, de

http://dudley.wellesley.edu/~anderson/robots/lejos/

[9] Using leJOS. Recuperado el 23 de Septiembre de 2003, de http://www.informatik.fh-

muenchen.de/~schieder/usinglejos/

[10] MindStorms RCX Sensor Input Page. Recuperado el 14 de Octubre de 2003, de

http://www.plazaearth.com/usr/gasperi/lego.htm

[11] Boulette's Robotics page. Recuperado el 14 de Octubre de 2003, de

http://www.restena.lu/convict/Jeunes/RoboticsIntro.htm

[12] Department of Automatic Systems and Robotics @ BMSTU RISM – Rusia

[13] JPL @ NASA – USA

[14] Ivanisevic, I. and Lumelsky, V. (1998) Operating in Configuration Space

Significantly Improves Human Performance in Teleoperation. Robotics Lab,

University of Wisconsin-Madison.

[15] The LEGO Group, (2000) LEGO MindStorms RIS 2.0 Constructopedia

[16] Crosbie, Mark. LEGO Differential Drive. Recuperado el 4 de Marzo de 2004, de

http://www.mastincrosbie.com/mark/lego/diffdrive.html

[17] Grand, Mark. (1998). Patterns in Java, Volume 1, A Catalog of Reusable Design

Patterns Illustrated with UML. John Wiley & Sons.

[18] Scholz, Matthias Paul. Bagnal, Brian y Griffiths, Lawrie. (2003). The leJOS

Tutorial, A practical guide for developers. Recuperado el 13 de Mayo de 2003 de:

http://lejos.sourceforge.net/tutorial/

Page 80: Ambiente Prototipo Para Teleoperacin De Robots

73

[19] Omnitech Robotics International, LLC. (2001). Standardized Teleoperation System

(STS) Datasheet.

[20] TELEDRIVE Project Page. (2003). Recuperado el 18 de Mayo de 2004 de:

http://www.cps.unizar.es/~laimuz/teledrive/Home.html

[21] Fong, Terrence. (2002). Advanced Teleoperation Interfaces Project Briefing.

Recuperado el 18 de Mayo de 2004 de: http://vrai-group.epfl.ch/projects/ati/

[22] Red Rover Goes to Mars Project Page. Recuperado el 18 de Mayo de 2004 de:

http://redrovergoestomars.org/

[23] MARS STATION South Pole2. Recuperado el 18 de Mayo de 2004 de:

http://lego.marshall.edu/Marsprof.htm

[24] MLCad. http://www.lm-software.com/mlcad/e_main.htm

[25] LPub. http://www.kclague.net/LPub/

[26] L3P. http://www.hassings.dk/l3/l3p.html

[27] POV-Ray. http://www.povray.org/

[28] leJOS. http://lejos.sourceforge.net/

[29] Java. http://java.sun.com/j2se/

Page 81: Ambiente Prototipo Para Teleoperacin De Robots

74

8. APENDICE A

INSTRUCCIONES DE ARMADO DEL ROBOT

A continuación se encuentran los pasos para armar el robot usado en este trabajo, en cada

paso se enumeran las partes necesarias para completar dicho paso, algunas no hacen parte

del Robotics Invention System 2.0, y fueron tomadas de otros sets de Lego, el sensor de

rotación fue proporcionado por la Universidad. El modelo del robot se creó usado

MLCad [24], las instrucciones de armado fueron generadas con LPub [25] y las imágenes

se generaron con L3P [26] y POV-Ray [27].

Page 82: Ambiente Prototipo Para Teleoperacin De Robots

75

Page 83: Ambiente Prototipo Para Teleoperacin De Robots

76

Page 84: Ambiente Prototipo Para Teleoperacin De Robots

77

Page 85: Ambiente Prototipo Para Teleoperacin De Robots

78

Page 86: Ambiente Prototipo Para Teleoperacin De Robots

79

Page 87: Ambiente Prototipo Para Teleoperacin De Robots

80

Page 88: Ambiente Prototipo Para Teleoperacin De Robots

81

Page 89: Ambiente Prototipo Para Teleoperacin De Robots

82

Page 90: Ambiente Prototipo Para Teleoperacin De Robots

83

Page 91: Ambiente Prototipo Para Teleoperacin De Robots

84

Page 92: Ambiente Prototipo Para Teleoperacin De Robots

85

Page 93: Ambiente Prototipo Para Teleoperacin De Robots

86

Page 94: Ambiente Prototipo Para Teleoperacin De Robots

87

Page 95: Ambiente Prototipo Para Teleoperacin De Robots

88

Page 96: Ambiente Prototipo Para Teleoperacin De Robots

89

Page 97: Ambiente Prototipo Para Teleoperacin De Robots

90

Page 98: Ambiente Prototipo Para Teleoperacin De Robots

91

Page 99: Ambiente Prototipo Para Teleoperacin De Robots

92

Page 100: Ambiente Prototipo Para Teleoperacin De Robots

93

Page 101: Ambiente Prototipo Para Teleoperacin De Robots

94

Page 102: Ambiente Prototipo Para Teleoperacin De Robots

95

Page 103: Ambiente Prototipo Para Teleoperacin De Robots

96

Page 104: Ambiente Prototipo Para Teleoperacin De Robots

97

Page 105: Ambiente Prototipo Para Teleoperacin De Robots

98

Page 106: Ambiente Prototipo Para Teleoperacin De Robots

99

Page 107: Ambiente Prototipo Para Teleoperacin De Robots

100

Page 108: Ambiente Prototipo Para Teleoperacin De Robots

101

Page 109: Ambiente Prototipo Para Teleoperacin De Robots

102

Page 110: Ambiente Prototipo Para Teleoperacin De Robots

103

Page 111: Ambiente Prototipo Para Teleoperacin De Robots

104

Page 112: Ambiente Prototipo Para Teleoperacin De Robots

105

Page 113: Ambiente Prototipo Para Teleoperacin De Robots

106

Page 114: Ambiente Prototipo Para Teleoperacin De Robots

107

Page 115: Ambiente Prototipo Para Teleoperacin De Robots

108

Page 116: Ambiente Prototipo Para Teleoperacin De Robots

109

Page 117: Ambiente Prototipo Para Teleoperacin De Robots

110

Page 118: Ambiente Prototipo Para Teleoperacin De Robots

111

Page 119: Ambiente Prototipo Para Teleoperacin De Robots

112

Page 120: Ambiente Prototipo Para Teleoperacin De Robots

113

Page 121: Ambiente Prototipo Para Teleoperacin De Robots

114