Monitor

De Proyecto Butiá
Revisión del 19:02 10 sep 2015 de Nvazquez (Discusión | contribuciones) (Desarrollo)

Saltar a: navegación, buscar

Integrantes

  • Nicolás Vázquez nicovazquez90@gmail.com
  • Gonzalo Crovetto crovetto.gonzalo@gmail.com
  • Federico Mujica federicomujica1@gmail.com

Tutor

  • Gonzalo Tejera <gtejera@fing.edu.uy>

Introducción

La plataforma Butiá se caracteriza por su amigabilidad y ayuda al usuario. Este proyecto plantea estudiar las posibilidades de ampliar la ayuda al usuario mediante la incorporación de un elemento monitor, que permita diagnosticar y apoyar el desarrollo de comportamientos.

Objetivo

El objetivo del proyecto es integran un monitoreo del estado de los sensores a la interfaz gráfica del TutleBot. De esta manera queremos que el usuario sepa de una forma facil e intuitiva cuando un sensor esta teniendo algún tipo de problema.

Motivación

Al finalizar este proyecto debemos poder brindar una forma intuitiva para usuarios sin conocimientos de electrónica ni programación de saber cual es el estado de los sensores butia. De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.

Investigación

Previo a poder implementar algunas de las ideas que nos surgían, pasamos por un largo proceso de investigación del funcionamiento de la plataforma Butiá. Identificamos módulos clave en la arquitectura del sistema, que se comunican de la siguiente manera:

ComunicacionModulos.jpg

En el centro de la imagen pueden verse las componentes centrales del sistema: pybot_client y pybot_server. Al iniciar TurtleBots, se inicializan ambos, y toda la interacción que podemos hacer desde la interfaz gráfica se va a traducir en comandos que se envían desde pybot_client hacia pybot_server, donde son atendidos estos pedidos.

  • (falta hablar de butia y usb4butia, etc)

Desarrollo

Mantenemos el código en el siguiente repositorio Git: https://github.com/nvazquez/Turtlebots

Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:

  • MonitorButia (definido en el archivo monitor.py)
  • MonitorElem (definido en el archivo monitor_elem.py)

MonitorElem

MonitorElem.png

MonitorButia

Definición

Nuestra clase MonitorButia está compuesta por un hash llamado sensors, en el cual la clave de cada elemento es el String que identifica a cada uno de los sensores o actuadores, y el valor es un arreglo de 6 elementos MonitorElem (ya que es el número máximo de puertos que contiene la placa USB4Butia). Ademas contamos con las claves por separado en el atributo sensors_name. Para clarificar veamos la inicialización de la clase MonitorButia:

def __init__(self):
    self.sensors = {
        'grey': [MonitorElem() for i in range(6)],
        'light':[MonitorElem() for i in range(6)],
        'distanc': [MonitorElem() for i in range(6)],
        'button': [MonitorElem() for i in range(6)],
        'motors': [MonitorElem() for i in range(8)]
    }
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']

Identificación de errores =

A partir de la investigación del sistema previa al desarrollo, fuimos observando que podemos detectar ciertos tipos de errores, de forma de tener una idea más precisa de que tipo de falla es la que se obtiene, ya que cuando había algún fallo de cualquier tipo siempre se devolvía la constante -1. Por lo tanto incluímos:

  • ERROR_BOARD_DISCONECTED = -100
  • ERROR_MODULE_NOT_PRESENT = -101
  • ERROR_EXCEPTION = -102
  • ERROR = -1

Funciones

En forma gráfica podemos ver sus atributos y métodos:

MonitorButia.png

evaluateResult

Entrada:

  • sensor_name : string -> El nombre del sensor o actuador que se está evaluando
  • sensor_port : int -> El número de puerto en el que se encuentra conectado el sensor o actuador
  • sensor_result : int -> El resultado numérico obtenido al llamar a una función específica del sensor o actuador

Salida:

  • Ninguna

Funcionamiento:

  • Para el sensor o actuador identificado:
    • Se incrementa el contador de operaciones totales en 1
    • Se evalua sensor_result para detectar si el mismo es un error o no, y en caso de ser un error identificar el tipo de error e incrementar el contador del error correspondiente
getMonitorEvaluation

Entrada:

  • Ninguna

Salida:

  • Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:
    • MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)
    • MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)
    • MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)
    • MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)

Funcionamiento:

  • Para cada sensor:
    • Si está en uso, se calcula el promedio de errores sobre la cantidad de operaciones totales. Se devuelve la salida correspondiente segun el porcentaje calculado
activateMonitor

Entradas:

  • set_new_devices : lista de sensores conectados

Salidas:

  • Ninguna

Funcionamiento

  • Para cada sensor en set_new_devices:
    • Se pone el pone el atributo inuse en True y se inicializan todos los contadores en 0 para la instancia de MonitorElem correspondiente al sensor
desactivateMonitor

Entradas:

  • set_old_devices : lista de sensores que estaban conectados antes del llamado

Salidas:

  • Ninguna

Funcionamiento

  • Para cada sensor en set_old_devices:
    • Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.
reset

Entradas:

  • Ninguna

Salidas:

  • Ninguna

Funcionamiento:

  • Para todos los sensores que están en uso:
    • Resetea todos los contadores