Proyecto RHINO

Tabla de Contenidos

Proyecto RHINO

Servo Robot XR4 Rhino

Entorno:

Plataforma

Estructura de directorios

Archivos relacionados

Desarrollo Cliente/Servidor:

Cliente Rhino

Screenshot

Servidor Rhino

Screenshot

Diagrama de flujo del servidor

Archivos relacionados

Programa Demo

Screenshot

Archivos relacionados a todos los proyectos

Pendientes

Desarrollo Clase Rhino:

Utilización básica

Archivos de la clase

Material extra

Programa de aplicación/testeo

Pendientes

Desarrollo Clase Serialcom:

Archivos de la clase

Material extra

Doxygen

Programa de aplicación/testeo

Versiones futuras

Diagrama de flujo del servidor

Políticas para la gestión de estado y errores

Pendientes a nivel de proyecto global

Servo Robot XR4 Rhino

http://www.rhinorobotics.com/xr4_flyer.html

Entorno:

Plataforma

El Cliente y el Servidor del sistema Servo Robot Rhino XR4 fueron desarrollados en Borland Builder C++ 5.0/6.0, utilizando Windows 2000 como sistema operativo. La plataforma de hardware utilizada para el desarrollo de software, como así también para ensayos con el servo robot se baso en tecnología X86 32bit.

La clase Rhino fue desarrollada bajo el entorno SUSE Linux 9.0/10.0, utilizando emacs como editor y gcc (g++) como compilador. La misma es 100% portable Linux/Windows. Puede incorporarse a un proyecto en Borland Builder C++ 5.0/6.0, compilar y correr sin ningún cambio previo. Como herramienta de debug se utilizo DDD, y Sourcenav para inspeccionar el código. Para la documentación se utilizo doxygen.Para que cualquiera de las aplicaciones pueda ser ejecutada, es necesario contar con una instalación de Borland Builder C++ 6.0 con los objetos correspondientes (Indy, Tcomport, Joystick)

Estructura de directorios

Los directorios de trabajo se organizaron según la estructura mostrada a continuación. Todos los archivos de cada proyecto se encuentran bajo el mismo directorio, a excepción de los archivos de la clase Rhino que se encuentran en un directorio independiente.

<img width="303" alt="EstructuraDirectoriosDesarrollo.png" src="/pub/CIII/LabElectronica/ProyectoRhino/EstructuraDirectoriosDesarrollo.png" height="245" />

Archivos relacionados

Dir-Info.txt: Informacion sobre directorios

Este archivo contiene información sobre los directorios de trabajo

Desarrollo Cliente/Servidor:

Cliente Rhino

Por medio de esta aplicación es posible conectarse al servidor Rhino, que corre en la PC local del AGV, desde una maquina remota, por medio de una conexión de red. Utiliza el protocolo UDP. Para que la comunicación sea posible, es necesario configurar en el cliente la dirección IP del servidor, así como también el puerto de comunicaciones y recompilar la aplicación. Hay que asegurarse que el puerto de comunicaciones este libre a tal efecto.A través de la aplicación cliente es posible comandar el servo robot Rhino con un un Joystick, configurándose para ello los motores en modo Velocidad, o por medio de una línea de comando. Cuando se trabaja en Windows 2000 es necesario reconfigurar el controlador del Joystick desde el panel de control cada vez que arranca el sistema operativo. Esta falla no ha podido ser eliminada y causa la falla de la aplicación cliente.La aplicación cliente cuenta también con una rutina de prueba para comprobar la comunicación con el servidor y la funcionalidad del servo robot. Esta rutina inicializa en controlador y lo lleva a la posición de hard home. Durante este procedimiento, el grip del brazo cierra y abre una vez.El trafico proveniente del servo robot, reenviado por el servidor Rhino, es visualizada por el cliente en su ventana. Así mismo, el servidor puede loguear mensajes propietarios en el cliente por este medio. Para que el controlador Rhino comience a ejecutar las instrucciones enviadas por el cliente, es necesario habilitar el host, además hay que habilitar el Joystick para comenzar a utilizarlo.

Screenshot

<img width="372" alt="ClienteRhinoVisu.png" src="/pub/CIII/LabElectronica/ProyectoRhino/ClienteRhinoVisu.png" height="310" />

Servidor Rhino

El servidor Rhino es el encargado de reenviar el tráfico proveniente del cliente remoto hacia el controlador Rhino y viceversa, reenvía todo el tráfico proveniente del controlador Rhino hacia el cliente remoto. Cumple básicamente la función de rutear el tráfico entre cliente remoto y controlador Rhino.Tiene la capacidad de procesar el tráfico en ambas direcciones, logueando de forma preestablecida tanto el flujo de datos, como los mensajes generados por el sistema. Para ello se vale de la clase Rhino.Para que la comunicación con la aplicación cliente sea posible, es necesario configurar en el servidor la dirección IP del cliente remoto, así como también el puerto de comunicaciones y recompilar la aplicación. Hay que asegurarse que el puerto de comunicaciones este libre a tal efecto.Todo el tráfico es visualizado en la pantalla del servidor, según procedencia y destino. Se visualizan mensajes generados internamente por el servidor y/o generados a partir del flujo de datos proveniente del controlador Rhino.

Screenshot

<img width="629" alt="ServidorRhinoVisu.png" src="/pub/CIII/LabElectronica/ProyectoRhino/ServidorRhinoVisu.png" height="501" />

Diagrama de flujo del servidor

El servidor se comporta como un router, reenviando el trafico entre cliente y controlador. La conexión con el cliente remoto se realiza a través de un puerto de comunicaciones de red UDP. En el servidor hay que configurar la direcciona IP y puerto de comunicaciones del cliente remoto. Cuando un paquete llega al servidor desde el cliente, se genera un evento, llamándose a la función Udpserverread, que pone el paquete a disposición del servidor. El paquete es preprocesado y reenviado al controlador Rhino por un puerto de comunicaciones serial. La función Comrortwrite, del objeto Comport es la encargada de enviar la trama al controlador. Antes de ser enviada la trama, se pasa como parámetro a la clase Rhino y luego se almacena en disco, en el archivo Rhinolog.txt Cuando el controlador Rhino envía datos al server, se genera un evento, llamándose a la función Comportreadchar, perteneciente al objeto Comport. Esta función pone los datos a disposición del servidor una vez recibida la trama completa. Estos datos son preprocesados y reenviados al cliente remoto por medio de la función Clienudpsend. En la etapa de preproceso, el paquete recibido es pasado a la clase Rhino para la generación de los mensajes de sistema y error correspondientes.

<img width="672" alt="DiagramaServidorRhino.png" src="/pub/CIII/LabElectronica/ProyectoRhino/DiagramaServidorRhino.png" height="529" />

Archivos relacionados

RhinoLog.txt: Archivo de salida de la clase Rhino

En el archivo Rhinolog.txt se almacena todo el tráfico que pasa por el servidor. Esta opción puede ser desactivada desde el panel principal.

Programa Demo

Este programa puede ser utilizado para comprobar la funcionalidad del servo robot ejecutándose en forma local. Cuenta con botones para la ejecución de: una rutina de inicialización, una función para llevar el brazo a la posición de hard home, una función que genera movimientos coordinados de todos los motores con posición final aleatoria dentro de los margenes del sistema (elongaciones o giros máximos) y una rutina DEMO con una secuencia de comandos preestablecidos, con la cual el brazo simula tomar un objeto, partiendo desde la posición de hard home, desplazándolo a otra posición, volviendo a su posición inicial y realizando la misma rutina en forma inversa. La rutina puede ser repetida para comprobar la precisión y repetibilidad del brazo.Así mismo es posible enviar comando ingresados de forma manual, recibiendo y visualizando las respuestas del controlador en forma original, sin preproceso.

Screenshot

<img width="404" alt="DemoVisu.png" src="/pub/CIII/LabElectronica/ProyectoRhino/DemoVisu.png" height="319" />

Archivos relacionados a todos los proyectos

HistoricoDeCambios.txt

Histórico de cambios Servidor Rhino

Rhino-AGV_Fotos.zip

Fotos del Servo Robot montado en el AGV.

Pendientes

Por implementar en el cliente y el servidor Rhino: Comentarios del 18/04/2008

Modificar las aplicaciones para que sea posible cambiar las direcciones IP respectivas y los puertos de comunicaciones en forma dinámica, y no sea necesario recompilar las aplicaciones.

Desarrollo Clase Rhino:

Por medio de la clase Rhino es posible interpretar los mensajes de estado y de error provenientes del controlador Rhino. La clase recibe como parámetro los comandos enviados hacia el controlador para la gestión de estado y error, y recibe también la respuesta del mismo. La clase almacena y procesa la información recibida, luego accede a arreglo de cadena de caracteres (base de datos hardcodeada) donde correlaciona estos códigos con los mensajes de sistema correspondientes, pasándolos al la capa superior, de forma previamente establecida por el nivel de logueo seteado por el usuario.La transferencia de información de la clase al programa principal puede ser realizada por medio de funciones o por un sistema de logueo con cuatro niveles distintos de operación (se diferencian en la presentación de información al usuario)La documentación principal de la clase Rhino fue desarrollada con Doxygen.

Utilización básica

La secuencia básica de inicialización y utilización de la clase es la siguiente:

Crear una instancia de la clase Rhino.

Se llama a la función set_LogLevel() pasando el nivel de logueo deseado como parámetro.

Cada vez que llega un comando para el controlador se llama previamente a la función Processcommandcorhino() pasándole como parámetro el comando recibido.

Se pasa la respuesta recibida del controlador a la función Processmessagefromrhino()

Estos dos últimos pasos se repiten cíclicamente por cada comando recibido.

Destruir la instancia de la clase Rhino al finalizar la aplicación.

Uno de los parámetros devueltos por la función Processmessagemromrhino() es el mensaje de estado o error ya procesado, perteneciente al controlador Rhino. Es posible extraer los mensajes de sistema o error por medio de otro grupo de funciones específicas ( get_StatusMsg() get_ErrorMsg() )

Archivos de la clase

rhino.cpp

Archivo de implementación de todos los métodos de la clase Rhino.

rhino.h

Archivo de cabecera de la clase Rhino.

errdef.h

Definición de todos los códigos de error del sistema Rhino.

cmddef.h

Enumeración de comandos del sistema Rhino.

statusdef.h

Definición de los principales códigos de estado del sistema Rhino.

Material extra

Makefile

Archivo de configuración para la aplicación make.

ChangeLog.txt

Histórico de cambios.

rc_error_log.txt

Formato de salida del archivo de logueo de errores de la Clase RHINO.

utilities.txt

Instructivo para realizar copias de seguridad y documentación con Doxygen de la clase Rhino.

.snprj

Archivo de configuración para utilización de la aplicación Source Navigator.

Doxyfile

Archivo de configuración para utilización de la aplicación Doxygen.

DocClaseRhinoStatus.zip

Documentación de la clase Rhino.

Programa de aplicación/testeo

''terminal.cpp

Esta aplicación sirve para analizar y testear todos los casos de utilización de la clase Rhino. También sirve como ejemplo de utilización de la clase.

Pendientes

Por implementar en la clase: Comentarios del 18/04/2008

Cargar los mensajes de error y de estado desde un archivo (sacarlos del código fuente)

Renombrar las variables globales bajo un mismo criterio.

Renombrar las variables locales bajo un mismo criterio.

Homogeneizar un idioma para los nombres de funciones.

Implementar la función CALLBACK.

Terminar de codificar el proceso de los comandos restantes.

Separar en capas las distintas tareas:

Eliminar de la clase toda impresión en pantalla.

Eliminar de la clase toda escritura en HD.

Terminar de codificar el proceso de los comandos restantes y completar la base de dato con los mensajes de sistema correspondientes.

Desarrollo Clase Serialcom:

La clase Serialcom fue desarrollada para permitir la comunicación directa de la clase Rhinocontrol (aun no implementada) con el controlador del servo robot. Está basada en un conjunto de funciones pertenecientes a una librería GNU para comunicación serial, encapsuladas en una clase y con nuevos métodos.Esta clase no es utilizada en el proyecto Rhino actualmente. Se preve su utilización una vez codificada la clase para el control directo del servo robot.La clase fue desarrollada y ensayada bajo SUSE Linux 9.0, utilizando un módem externo como dispositivo de ensayo y visualización, emacs como editor y gcc como compilador.

Archivos de la clase

comSerial.cpp

Implementación de los métodos de la clase Serialcom.comSerial.h

Archivo de cabecera de la clase Serialcom.

Material extra

''Makefile

Archivo de configuración para la aplicación make.change_log.txt

Histórico de cambios.

Doxygen

La documentación de la clase se genero con doxygen en formato HTNL

Programa de aplicación/testeo

terminal.cpp

Esta aplicación permite probar la funcionalidad de la clase.

Versiones futuras

Diagrama de flujo del servidor

Diagramas_De_Flujo_Servidor_V3.0.zip

La versión 3.0 del servidor Rhino esta en fase de desarrollo. Un 80% de los diagramas de flujo del nuevo servidor ya han sido generados, utilizando la aplicación DIA.

Políticas para la gestión de estado y errores

Se preve la redistribución de rutinas de emergencia entre cliente y servidor ante la aparición de un error de sistema. Para ello se establecerán niveles de ejecución de rutinas de emergencia.

Pendientes a nivel de proyecto global

Diseño y codificación de la clase Rhinocontrol.

Corrección de las rutinas de inicialización del controlador del servo robot.

El brazo presenta deterioros mecánicos: engranajes flojos, falta de lubricación y suciedad. Hace falta y una revisión y service general (limpieza, ajustes, lubricación)

Revisión y mantenimiento eléctrico. En el sistema del GRIP, hay fines de carrera que no están funcionando y el conector de uno de los encoders hace falso contacto, esta deteriorado. Es necesario corregir esta falla para evitar que los motores permanezcan excitados y puedan deteriorarse por exceso de temperatura.

Implementar un mecanismo de comunicación entre aplicaciones para poder enlazar a la aplicación cliente o servidor con una fuente de datos ajena a las mismas (propuesta: Mailboxes)

Establecer niveles de seguridad y acceso al servidor.

Implementación de un gestor de procesos para el servidor.

Implementar la comunicación con el controlador Rhino por medio de un driver dedicado.

Desarrollo de una maquina de estados portable, para ser utilizada por el usuario en la programación de rutinas de alto nivel.

Incorporar al informe un resumen de las características del Rhino.

Revision e implementacion bajo Linux de la claseSerialcom.