<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fedemuj</id>
		<title>Proyecto Butiá - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fedemuj"/>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php/Especial:Contribuciones/Fedemuj"/>
		<updated>2026-04-06T01:14:17Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7731</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7731"/>
				<updated>2015-09-18T22:56:19Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''Testing''' ===&lt;br /&gt;
Para poder realizar pruebas sobre los monitores implementados, se utilizo la estructura del TutleBot &amp;quot;Por Siempre&amp;quot; y se le pedía el valor a todos los tipos de sensores, mientras los desconectábamos y conectábamos rápidamente.&lt;br /&gt;
Comprobando que los monitores detecten correctamente los errores generados.&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7730</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7730"/>
				<updated>2015-09-18T22:53:36Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''Testing''' ===&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7729</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7729"/>
				<updated>2015-09-18T22:51:52Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[&amp;lt;embedvideo service=&amp;quot;youtube&amp;quot;&amp;gt;https://www.youtube.com/watch?v=ZSBlnh0YeEs&amp;lt;/embedvideo&amp;gt;]&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7728</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7728"/>
				<updated>2015-09-18T22:51:37Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;embedvideo service=&amp;quot;youtube&amp;quot;&amp;gt;https://www.youtube.com/watch?v=ZSBlnh0YeEs&amp;lt;/embedvideo&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7727</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7727"/>
				<updated>2015-09-18T22:49:58Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Butia_Monitor.png&amp;diff=7726</id>
		<title>Archivo:Butia Monitor.png</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Butia_Monitor.png&amp;diff=7726"/>
				<updated>2015-09-18T22:49:26Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: subió una nueva versión de «Archivo:Butia Monitor.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Imagen Monitor Butia&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7725</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7725"/>
				<updated>2015-09-18T22:48:30Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png|400x400px ]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7724</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7724"/>
				<updated>2015-09-18T22:48:16Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Monitor.png|400x400px ]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7723</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7723"/>
				<updated>2015-09-18T22:48:08Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:MonitorButia.png|400x400px ]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7722</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7722"/>
				<updated>2015-09-18T22:46:02Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png|400x400px ]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7721</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7721"/>
				<updated>2015-09-18T22:45:20Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png|{400}x{400}px ]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7720</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7720"/>
				<updated>2015-09-18T22:44:04Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png|frame|400x|400px]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7719</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7719"/>
				<updated>2015-09-18T22:40:07Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png|frame|400px]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7718</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7718"/>
				<updated>2015-09-18T22:39:50Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7717</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7717"/>
				<updated>2015-09-18T22:39:26Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png|frame|200px]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7716</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7716"/>
				<updated>2015-09-18T22:38:33Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png|20px‎]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7715</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7715"/>
				<updated>2015-09-18T22:34:55Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:Butia_Monitor.png‎]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Butia_Monitor.png&amp;diff=7714</id>
		<title>Archivo:Butia Monitor.png</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Butia_Monitor.png&amp;diff=7714"/>
				<updated>2015-09-18T22:34:35Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: Imagen Monitor Butia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Imagen Monitor Butia&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7713</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7713"/>
				<updated>2015-09-18T22:32:44Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:MonitorTurtleBots.png]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7712</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7712"/>
				<updated>2015-09-18T22:32:31Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:MonitorTurtleBots.png]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[https://www.youtube.com/watch?v=ZSBlnh0YeEs]:Butia Monitor]&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7711</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7711"/>
				<updated>2015-09-18T22:31:51Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:MonitorTurtleBots.png]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs:Butia-Monito]&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7710</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7710"/>
				<updated>2015-09-18T22:30:23Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* TurtleBots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Gonzalo Crovetto [mailto:crovetto.gonzalo@gmail.com crovetto.gonzalo@gmail.com] &lt;br /&gt;
* Federico Mujica  [mailto:federicomujica1@gmail.com federicomujica1@gmail.com]&lt;br /&gt;
* Nicolás Vázquez  [mailto:nicovazquez90@gmail.com nicovazquez90@gmail.com] &lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera [mailto:gtejera@fing.edu.uy gtejera@fing.edu.uy]&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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 .&lt;br /&gt;
=== '''Objetivos''' ===&lt;br /&gt;
&lt;br /&gt;
Nos planteamos los siguientes objetivos:&lt;br /&gt;
* Brindar nuevas funcionalidades a Turtlebots para poder reconocer más intuitivamente los posibles problemas que puedan estar sucediendo.&lt;br /&gt;
&lt;br /&gt;
* Lograr que los nuevos usuarios puedan reconocer fácilmente dichos problemas, haciendo que su período de aprendizaje sea más ameno y menos frustrante.&lt;br /&gt;
&lt;br /&gt;
* Dejar el camino abierto a la implementación de nuevas funcionalidades que permitan el monitoreo no solo de errores, sino de determinados comportamientos que puedan ser de interés para el usuario&lt;br /&gt;
&lt;br /&gt;
¿Cómo lograrlo?&lt;br /&gt;
* Encontrando los errores que se manifiestan con normalidad.&lt;br /&gt;
* Identificando cada uno de dichos errores y agrupándolos para darles un significado distinto que el usuario pueda comprender.&lt;br /&gt;
* Modificando la visualización de los componentes de acuerdo al error identificado.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;br /&gt;
&lt;br /&gt;
== '''Investigación''' ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ComunicacionModulos.jpg]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
* (falta hablar de butia y usb4butia, etc)&lt;br /&gt;
&lt;br /&gt;
== '''Desarrollo''' ==&lt;br /&gt;
&lt;br /&gt;
Mantenemos el código en el siguiente repositorio Git: [https://github.com/nvazquez/Turtlebots https://github.com/nvazquez/Turtlebots]&lt;br /&gt;
&lt;br /&gt;
Como puede verse en el directorio /plugins/butia hemos creado dos nuevas clases:&lt;br /&gt;
* MonitorButia (definido en el archivo monitor.py)&lt;br /&gt;
* MonitorElem (definido en el archivo monitor_elem.py)&lt;br /&gt;
&lt;br /&gt;
=== '''MonitorButia''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Definición''' ====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def __init__(self):&lt;br /&gt;
    self.sensors = {&lt;br /&gt;
        'grey': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'light':[MonitorElem() for i in range(6)],&lt;br /&gt;
        'distanc': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'button': [MonitorElem() for i in range(6)],&lt;br /&gt;
        'motors': [MonitorElem() for i in range(8)]&lt;br /&gt;
    }&lt;br /&gt;
    self.sensors_name = ['grey', 'light', 'button', 'distanc','motors']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''MonitorElem''' ====&lt;br /&gt;
Cada instancia de MonitorElem contiene los contadores de errores y las operaciones de monitoreo, las cuales son invocadas desde MonitorButia según el sensor que esté conectado&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorElem.png]]&lt;br /&gt;
&lt;br /&gt;
==== '''Identificación de errores''' ====&lt;br /&gt;
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:&lt;br /&gt;
* ERROR_BOARD_DISCONECTED = -100 (este error se genera cuando la placa no esta conectada)&lt;br /&gt;
* ERROR_MODULE_NOT_PRESENT = -101 (este error se genera cuando el modulo al que se quiere acceder no esta disponible)&lt;br /&gt;
* ERROR_EXCEPTION = -102 (este tipo de error lo incluimos para aquellos casos donde puede darse un fallo impredecible)&lt;br /&gt;
&lt;br /&gt;
Para poder hacer uso de estos tipos de errores, tuvimos que modificar la funcion call_module de usb4butia.py&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from plugins.butia.monitor import ERROR_BOARD_DISCONECTED&lt;br /&gt;
from plugins.butia.monitor import ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
from plugins.butia.monitor import ERROR_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
#....&lt;br /&gt;
&lt;br /&gt;
def callModule(self, modulename, board_number, number, function, params = [], ret_type = int):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Call one function: function for module: modulename in board: board_name&lt;br /&gt;
        with handler: number (only if the module is pnp, else, the parameter is&lt;br /&gt;
        None) with parameteres: params&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        try:&lt;br /&gt;
            number = int(number)&lt;br /&gt;
            board_number = int(board_number)&lt;br /&gt;
            if len(self._bb) &amp;lt; (board_number + 1):&lt;br /&gt;
                return ERROR_BOARD_DISCONECTED&lt;br /&gt;
            board = self._bb[board_number]&lt;br /&gt;
            if board.devices.has_key(number) and (board.devices[number].name == modulename):&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
            else:&lt;br /&gt;
                number = self._open_or_validate(modulename, board) #Trata de obtener el modulo&lt;br /&gt;
                if number == ERROR:&lt;br /&gt;
                    return ERROR_MODULE_NOT_PRESENT&lt;br /&gt;
                return board.devices[number].call_function(function, params) #Aca puede venir un -1 y lo dejamos asi&lt;br /&gt;
        except Exception, err:&lt;br /&gt;
            if hasattr(err, 'errno'):&lt;br /&gt;
                if (err.errno == 5) or (err.errno == 19):&lt;br /&gt;
                    self.closeB(board)&lt;br /&gt;
            self._debug('ERROR:usb4butia:callModule', err)&lt;br /&gt;
            return ERROR_EXCEPTION #Aca exploto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== '''Funciones''' ====&lt;br /&gt;
En forma gráfica podemos ver sus atributos y métodos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:MonitorButia.png]]&lt;br /&gt;
&lt;br /&gt;
===== '''evaluateResult''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* sensor_name : string -&amp;gt; El nombre del sensor o actuador que se está evaluando&lt;br /&gt;
* sensor_port : int -&amp;gt; El número de puerto en el que se encuentra conectado el sensor o actuador&lt;br /&gt;
* sensor_result : int -&amp;gt; El resultado numérico obtenido al llamar a una función específica del sensor o actuador&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para el sensor o actuador identificado:&lt;br /&gt;
** Se incrementa el contador de operaciones totales en 1&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''getMonitorEvaluation''' =====&lt;br /&gt;
Entrada:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salida:&lt;br /&gt;
* Una lista indicando el sensor, puerto donde se encuentra conectado y el tipo de evaluación de errores, el cual puede ser:&lt;br /&gt;
** MONITOR_RETURN_TYPE_NO_OP (indica que no se ha utilizado)&lt;br /&gt;
** MONITOR_RETURN_TYPE_LOW (indica que el promedio de errores para el sensor en ese puerto es menor al 25%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_MEDIUM (indica que el promedio de errores para el sensor en ese puerto es mayor al 25% y menor al 50%)&lt;br /&gt;
** MONITOR_RETURN_TYPE_HIGH (indica que el promedio de errores para el sensor en ese puerto es mayor al 50%)&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para cada sensor:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''activateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_new_devices : lista de sensores conectados&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_new_devices:&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
===== '''desactivateMonitor''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas:&lt;br /&gt;
* set_old_devices : lista de sensores que estaban conectados antes del llamado&lt;br /&gt;
&lt;br /&gt;
Salidas:&lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento&lt;br /&gt;
* Para cada sensor en set_old_devices:&lt;br /&gt;
** Se pone el pone el atributo inuse en False para la instancia de MonitorElem correspondiente al sensor. Los contadores permanecen iguales.&lt;br /&gt;
&lt;br /&gt;
===== '''reset''' =====&lt;br /&gt;
&lt;br /&gt;
Entradas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Salidas: &lt;br /&gt;
* Ninguna&lt;br /&gt;
&lt;br /&gt;
Funcionamiento:&lt;br /&gt;
* Para todos los sensores que están en uso: &lt;br /&gt;
** Resetea todos los contadores&lt;br /&gt;
&lt;br /&gt;
=== '''TurtleBots''' ===&lt;br /&gt;
&lt;br /&gt;
A nivel de TurtleBots agregamos una nueva paleta para poder utilizar bloques de monitoreo&lt;br /&gt;
[[Archivo:MonitorTurtleBots.png]]&lt;br /&gt;
&lt;br /&gt;
Actualmente, el bloque resetMonitorButia está en funcionamiento y llama a la función reset de MonitorButia.&lt;br /&gt;
&lt;br /&gt;
También se puede observar el funcionamiento en el siguiente video:&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZSBlnh0YeEs]&lt;br /&gt;
&lt;br /&gt;
==== '''Trabajo a futuro''' ====&lt;br /&gt;
Como trabajo a futuro nos plantemos los siguientes desafíos:&lt;br /&gt;
* Agregar un bloque que reciba como entrada un sensor y devuelva el porcentaje de errores que tuvo el sensor con respecto al total de operaciones, estos deberían ser: FALLO BAJO, FALLO MEDIO, FALLO ALTO (que ya se encuentran disponibles en la paleta con un color correspondiente según el grado de error)&lt;br /&gt;
* Con el punto anterior se busca permitir que el usuario pueda diseñar su programa de forma que se pueda detectar cómo actuar según el comportamiento de los sensores&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7604</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7604"/>
				<updated>2015-09-09T22:54:50Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Motivación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Nicolás Vázquez  nicovazquez90@gmail.com &lt;br /&gt;
* Gonzalo Crovetto crovetto.gonzalo@gmail.com &lt;br /&gt;
* Federico Mujica  federicomujica1@gmail.com &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera &amp;lt;gtejera@fing.edu.uy&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== '''Objetivo''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
De esta forma, el usuario puede darse cuenta cuando cambiar un cable o un sensor defectuoso que este afectando su programa.&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7599</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7599"/>
				<updated>2015-09-09T21:58:41Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Objetivo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Nicolás Vázquez  nicovazquez90@gmail.com &lt;br /&gt;
* Gonzalo Crovetto crovetto.gonzalo@gmail.com &lt;br /&gt;
* Federico Mujica  federicomujica1@gmail.com &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera &amp;lt;gtejera@fing.edu.uy&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== '''Objetivo''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
Dada la falta de actuadores disponibles para el robot butiá es deseable contar con un actuador que habilite al mismo a manipular objetos del entorno. Es esta necesidad la que se intentará satisfacer con el diseño de un brazo robótico adaptado al robot butiá. Dado que el proyecto butiá está enfocado a la enseñanza en liceos y escuelas, el brazo debe ser de costo razonablemente bajo, y con materiales de fácil acceso. &lt;br /&gt;
&lt;br /&gt;
 Actualmente la plataforma incluye algunos elementos en este sentido:&lt;br /&gt;
&lt;br /&gt;
    Movimiento de motores al arranque.&lt;br /&gt;
    Indicador de carga de batería.&lt;br /&gt;
    Coloreado de bloques en TurtleBots. &lt;br /&gt;
&lt;br /&gt;
Se espera el desarrollo de elementos de software, pero no se descarta la definición y desarrollo de electrónica.&lt;br /&gt;
&lt;br /&gt;
Tutor: Gonzalo Tejera. Capacidades a desarrollar: Programación y electrónica.&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7597</id>
		<title>Monitor</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Monitor&amp;diff=7597"/>
				<updated>2015-09-09T21:49:15Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Integrantes''' ==&lt;br /&gt;
 &lt;br /&gt;
* Nicolás Vázquez  nicovazquez90@gmail.com &lt;br /&gt;
* Gonzalo Crovetto crovetto.gonzalo@gmail.com &lt;br /&gt;
* Federico Mujica  federicomujica1@gmail.com &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Tutor'''==&lt;br /&gt;
* Gonzalo Tejera &amp;lt;gtejera@fing.edu.uy&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Introducción''' ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== '''Objetivo''' ==&lt;br /&gt;
&lt;br /&gt;
Realizar un brazo robótico o pinza de bajo costo que se integre como actuador al kit butiá y se pueda comandar desde una paleta de turtlebots.&lt;br /&gt;
Construcción, diseño programación.&lt;br /&gt;
&lt;br /&gt;
== '''Motivación''' ==&lt;br /&gt;
&lt;br /&gt;
Dada la falta de actuadores disponibles para el robot butiá es deseable contar con un actuador que habilite al mismo a manipular objetos del entorno. Es esta necesidad la que se intentará satisfacer con el diseño de un brazo robótico adaptado al robot butiá. Dado que el proyecto butiá está enfocado a la enseñanza en liceos y escuelas, el brazo debe ser de costo razonablemente bajo, y con materiales de fácil acceso. &lt;br /&gt;
&lt;br /&gt;
 Actualmente la plataforma incluye algunos elementos en este sentido:&lt;br /&gt;
&lt;br /&gt;
    Movimiento de motores al arranque.&lt;br /&gt;
    Indicador de carga de batería.&lt;br /&gt;
    Coloreado de bloques en TurtleBots. &lt;br /&gt;
&lt;br /&gt;
Se espera el desarrollo de elementos de software, pero no se descarta la definición y desarrollo de electrónica.&lt;br /&gt;
&lt;br /&gt;
Tutor: Gonzalo Tejera. Capacidades a desarrollar: Programación y electrónica.&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6667</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6667"/>
				<updated>2015-04-17T02:52:37Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Integrantes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Agustin Esteche&lt;br /&gt;
* Ernesto Perroux&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&amp;lt;center&amp;gt;[[Archivo:Medicion.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se realizo la prueba medianto un proyecto de Turtelbot para poder medir la desviacion de los diferentes sensores.&lt;br /&gt;
En la caja aux se guarda el valor del sensor que se esta probando.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón: Escala 0-1 : Desviacion 0 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises:Escala 0-65535 : Desviacion 160&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz:Escala 0-65535:Escala 0-65535 : Desviacion 157 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia:Escala 0-65535 : 1,25%&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono: La desviacion dio muy alta, por lo que creemos que las pruebas no fueron correctas &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia): desviacion 3.3%&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón:Escala 0-1 : Desviacion 0&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
Se probaron diferentes actuad ores, el caso mas interesante es el motor del kit lego. El cual se le pasa un valor de potencia, que según el signo es el sentido del giro de los motores. La potencia minima para que el motor gire es de 53. También se comprobó que el kit lego nos puede indicar la posición que se encuentra el motor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
El kit de Lego cuenta con un sensor de sonido, mientras que el kit butia no.&lt;br /&gt;
La manera que el kit butia sensa la distancia es con un infrarojo, mientas que el kit lego lo hace con ultrasonido. Cada uno de esto tipos de sensores es mas o menos conveniente segun el ambiente y el material que se quiera saber la distancia (vidrio, obetos opacos,etc).&lt;br /&gt;
Los motores del kit lego funcionan ingresando valores de potencia.&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6666</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6666"/>
				<updated>2015-04-17T02:51:40Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Ernesto Perroux&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&amp;lt;center&amp;gt;[[Archivo:Medicion.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se realizo la prueba medianto un proyecto de Turtelbot para poder medir la desviacion de los diferentes sensores.&lt;br /&gt;
En la caja aux se guarda el valor del sensor que se esta probando.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón: Escala 0-1 : Desviacion 0 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises:Escala 0-65535 : Desviacion 160&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz:Escala 0-65535:Escala 0-65535 : Desviacion 157 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia:Escala 0-65535 : 1,25%&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono: La desviacion dio muy alta, por lo que creemos que las pruebas no fueron correctas &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia): desviacion 3.3%&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón:Escala 0-1 : Desviacion 0&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
Se probaron diferentes actuad ores, el caso mas interesante es el motor del kit lego. El cual se le pasa un valor de potencia, que según el signo es el sentido del giro de los motores. La potencia minima para que el motor gire es de 53. También se comprobó que el kit lego nos puede indicar la posición que se encuentra el motor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
El kit de Lego cuenta con un sensor de sonido, mientras que el kit butia no.&lt;br /&gt;
La manera que el kit butia sensa la distancia es con un infrarojo, mientas que el kit lego lo hace con ultrasonido. Cada uno de esto tipos de sensores es mas o menos conveniente segun el ambiente y el material que se quiera saber la distancia (vidrio, obetos opacos,etc).&lt;br /&gt;
Los motores del kit lego funcionan ingresando valores de potencia.&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6665</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6665"/>
				<updated>2015-04-17T02:51:12Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Ernesto Perroux&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&amp;lt;center&amp;gt;[[Archivo:Medicion.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se realizo la prueba medianto un proyecto de Turtelbot para poder medir la desviacion de los diferentes sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón: Escala 0-1 : Desviacion 0 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises:Escala 0-65535 : Desviacion 160&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz:Escala 0-65535:Escala 0-65535 : Desviacion 157 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia:Escala 0-65535 : 1,25%&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono: La desviacion dio muy alta, por lo que creemos que las pruebas no fueron correctas &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia): desviacion 3.3%&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón:Escala 0-1 : Desviacion 0&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
Se probaron diferentes actuad ores, el caso mas interesante es el motor del kit lego. El cual se le pasa un valor de potencia, que según el signo es el sentido del giro de los motores. La potencia minima para que el motor gire es de 53. También se comprobó que el kit lego nos puede indicar la posición que se encuentra el motor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
El kit de Lego cuenta con un sensor de sonido, mientras que el kit butia no.&lt;br /&gt;
La manera que el kit butia sensa la distancia es con un infrarojo, mientas que el kit lego lo hace con ultrasonido. Cada uno de esto tipos de sensores es mas o menos conveniente segun el ambiente y el material que se quiera saber la distancia (vidrio, obetos opacos,etc).&lt;br /&gt;
Los motores del kit lego funcionan ingresando valores de potencia.&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6664</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6664"/>
				<updated>2015-04-17T02:50:04Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Ernesto Perroux&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
[[Archivo:Medicion.png]]&lt;br /&gt;
&lt;br /&gt;
Se realizo la prueba medianto un proyecto de Turtelbot para poder medir la desviacion de los diferentes sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón: Escala 0-1 : Desviacion 0 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises:Escala 0-65535 : Desviacion 160&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz:Escala 0-65535:Escala 0-65535 : Desviacion 157 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia:Escala 0-65535 : 1,25%&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono: La desviacion dio muy alta, por lo que creemos que las pruebas no fueron correctas &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia): desviacion 3.3%&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón:Escala 0-1 : Desviacion 0&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
Se probaron diferentes actuad ores, el caso mas interesante es el motor del kit lego. El cual se le pasa un valor de potencia, que según el signo es el sentido del giro de los motores. La potencia minima para que el motor gire es de 53. También se comprobó que el kit lego nos puede indicar la posición que se encuentra el motor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
El kit de Lego cuenta con un sensor de sonido, mientras que el kit butia no.&lt;br /&gt;
La manera que el kit butia sensa la distancia es con un infrarojo, mientas que el kit lego lo hace con ultrasonido. Cada uno de esto tipos de sensores es mas o menos conveniente segun el ambiente y el material que se quiera saber la distancia (vidrio, obetos opacos,etc).&lt;br /&gt;
Los motores del kit lego funcionan ingresando valores de potencia.&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Medicion.png&amp;diff=6663</id>
		<title>Archivo:Medicion.png</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Medicion.png&amp;diff=6663"/>
				<updated>2015-04-17T02:49:38Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6662</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6662"/>
				<updated>2015-04-17T02:40:27Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Conclusiones */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Ernesto Perroux&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se realizo la prueba medianto un proyecto de Turtelbot para poder medir la desviacion de los diferentes sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón: Escala 0-1 : Desviacion 0 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises:Escala 0-65535 : Desviacion 160&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz:Escala 0-65535:Escala 0-65535 : Desviacion 157 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia:Escala 0-65535 : 1,25%&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono: La desviacion dio muy alta, por lo que creemos que las pruebas no fueron correctas &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia): desviacion 3.3%&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón:Escala 0-1 : Desviacion 0&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
Se probaron diferentes actuad ores, el caso mas interesante es el motor del kit lego. El cual se le pasa un valor de potencia, que según el signo es el sentido del giro de los motores. La potencia minima para que el motor gire es de 53. También se comprobó que el kit lego nos puede indicar la posición que se encuentra el motor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
El kit de Lego cuenta con un sensor de sonido, mientras que el kit butia no.&lt;br /&gt;
La manera que el kit butia sensa la distancia es con un infrarojo, mientas que el kit lego lo hace con ultrasonido. Cada uno de esto tipos de sensores es mas o menos conveniente segun el ambiente y el material que se quiera saber la distancia (vidrio, obetos opacos,etc).&lt;br /&gt;
Los motores del kit lego funcionan ingresando valores de potencia.&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6661</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6661"/>
				<updated>2015-04-17T02:35:57Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Ernesto Perroux&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se realizo la prueba medianto un proyecto de Turtelbot para poder medir la desviacion de los diferentes sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón: Escala 0-1 : Desviacion 0 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises:Escala 0-65535 : Desviacion 160&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz:Escala 0-65535:Escala 0-65535 : Desviacion 157 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia:Escala 0-65535 : 1,25%&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono: La desviacion dio muy alta, por lo que creemos que las pruebas no fueron correctas &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia): desviacion 3.3%&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón:Escala 0-1 : Desviacion 0&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
Se probaron diferentes actuad ores, el caso mas interesante es el motor del kit lego. El cual se le pasa un valor de potencia, que según el signo es el sentido del giro de los motores. La potencia minima para que el motor gire es de 53. También se comprobó que el kit lego nos puede indicar la posición que se encuentra el motor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6660</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6660"/>
				<updated>2015-04-17T02:35:30Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Ernesto Perroux&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se realizo la prueba medianto un proyecto de Turtelbot para poder medir la desviacion de los diferentes sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón: Escala 0-1 : Desviacion 0 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises:Escala 0-65535 : Desviacion 160&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz:Escala 0-65535 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia:Escala 0-65535 : 1,25%&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono: La desviacion dio muy alta, por lo que creemos que las pruebas no fueron correctas &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia): desviacion 3.3%&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón:Escala 0-1 : Desviacion 0&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
Se probaron diferentes actuad ores, el caso mas interesante es el motor del kit lego. El cual se le pasa un valor de potencia, que según el signo es el sentido del giro de los motores. La potencia minima para que el motor gire es de 53. También se comprobó que el kit lego nos puede indicar la posición que se encuentra el motor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6659</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6659"/>
				<updated>2015-04-17T02:34:48Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Ernesto Perroux&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se realizo la prueba medianto un proyecto de Turtelbot para poder medir la desviacion de los diferentes sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón: Escala 0-1 : Desviacion 0 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises:Escala 0-65535 : Desviacion 160&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz:Escala 0-65535 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia:Escala 0-65535 : 1,25%&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono: &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia): desviacion 3.3%&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón:Escala 0-1 : Desviacion 0&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
Se probaron diferentes actuad ores, el caso mas interesante es el motor del kit lego. El cual se le pasa un valor de potencia, que según el signo es el sentido del giro de los motores. La potencia minima para que el motor gire es de 53. También se comprobó que el kit lego nos puede indicar la posición que se encuentra el motor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Practico_1&amp;diff=6658</id>
		<title>Practico 1</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Practico_1&amp;diff=6658"/>
				<updated>2015-04-17T02:27:36Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[grupo_0|Grupo 0]]&lt;br /&gt;
* [[grupo_5_2015|Grupo 5]]&lt;br /&gt;
* [[grupo_10|Grupo 10]]&lt;br /&gt;
* [[Usuario Discusión:Fedemuj|Grupo 2]]&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6657</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6657"/>
				<updated>2015-04-17T02:26:34Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Ernesto Perroux&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se realizo la prueba medianto un proyecto de Turtelbot para poder medir la desviacion de los diferentes sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón: Escala 0-1 : Desviacion 0 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises:Escala 0-65535 : Desviacion 160&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz:Escala 0-65535 &amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia:Escala 0-65535 : 1,25%&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
dkafjldakfjda kfsd kfj sdlkfj sadlkf jsdalk fjsd&lt;br /&gt;
fsdkfjasl fsadlkf jsadlkf sadlkf aslk fd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6656</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6656"/>
				<updated>2015-04-17T02:18:40Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Ernesto Perroux&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se realizo la prueba medianto un proyecto de Turtelbot para poder medir la desviacion de los diferentes sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
dkafjldakfjda kfsd kfj sdlkfj sadlkf jsdalk fjsd&lt;br /&gt;
fsdkfjasl fsadlkf jsadlkf sadlkf aslk fd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6655</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6655"/>
				<updated>2015-04-17T02:17:55Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Integrantes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Ernesto Perroux&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se realizaron dos tipos de pruebas sobre ambos kits. El primer tipo de prueba fue la medición de los rangos de trabajo de los distintos sensores. El segundo consistió en tomar un conjunto de mediciones para el mismo estado para poder calcular el margen de error con el que trabajan los sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
dkafjldakfjda kfsd kfj sdlkfj sadlkf jsdalk fjsd&lt;br /&gt;
fsdkfjasl fsadlkf jsadlkf sadlkf aslk fd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6654</id>
		<title>Grupo 10</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6654"/>
				<updated>2015-04-17T02:17:16Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Camila Serena&lt;br /&gt;
* Gonzalo Herrera&lt;br /&gt;
* Josefina Fasoli&lt;br /&gt;
* Vanessa Revetria&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante la primera parte del desarrollo de esta actividad nos dedicamos a tomar mediciones de los distintos sensores del kit butiá y del kit lego.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
Se realizaron dos tipos de pruebas sobre ambos kits. El primer tipo de prueba fue la medición de los rangos de trabajo de los distintos sensores. El segundo consistió en tomar un conjunto de mediciones para el mismo estado para poder calcular el margen de error con el que trabajan los sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
Los actuadores utilizados en ambos kits fueron las ruedas de cada uno respectivamente.&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Las diferencias que encontramos entre el funcionamiento de los dos kits fueron&lt;br /&gt;
&lt;br /&gt;
- El funcionamiento de los motores - Butiá gira si le das corriente&lt;br /&gt;
                                   - Lego recibe como input la cantidad de rotaciones además de la potencia&lt;br /&gt;
&lt;br /&gt;
- La manera de medir distancia  - El kit lego lee mediante ultrasonido&lt;br /&gt;
                                - Butiá lee las distancias mediante un sensor infrarojo&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6653</id>
		<title>Grupo 10</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6653"/>
				<updated>2015-04-17T02:14:27Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Camila Serena&lt;br /&gt;
* Gonzalo Herrera&lt;br /&gt;
* Josefina Fasoli&lt;br /&gt;
* Vanessa Revetria&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante la primera parte del desarrollo de esta actividad nos dedicamos a tomar mediciones de los distintos sensores del kit butiá y del kit lego.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
[[Archivo:sensoresError.png]]&lt;br /&gt;
Se realizaron dos tipos de pruebas sobre ambos kits. El primer tipo de prueba fue la medición de los rangos de trabajo de los distintos sensores. El segundo consistió en tomar un conjunto de mediciones para el mismo estado para poder calcular el margen de error con el que trabajan los sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
Los actuadores utilizados en ambos kits fueron las ruedas de cada uno respectivamente.&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Las diferencias que encontramos entre el funcionamiento de los dos kits fueron&lt;br /&gt;
&lt;br /&gt;
- El funcionamiento de los motores - Butiá gira si le das corriente&lt;br /&gt;
                                   - Lego recibe como input la cantidad de rotaciones además de la potencia&lt;br /&gt;
&lt;br /&gt;
- La manera de medir distancia  - El kit lego lee mediante ultrasonido&lt;br /&gt;
                                - Butiá lee las distancias mediante un sensor infrarojo&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6652</id>
		<title>Grupo 10</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6652"/>
				<updated>2015-04-17T02:14:17Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Camila Serena&lt;br /&gt;
* Gonzalo Herrera&lt;br /&gt;
* Josefina Fasoli&lt;br /&gt;
* Vanessa Revetria&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante la primera parte del desarrollo de esta actividad nos dedicamos a tomar mediciones de los distintos sensores del kit butiá y del kit lego.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
[[Archivo:sensoresError.png‎‎|1500px]]&lt;br /&gt;
Se realizaron dos tipos de pruebas sobre ambos kits. El primer tipo de prueba fue la medición de los rangos de trabajo de los distintos sensores. El segundo consistió en tomar un conjunto de mediciones para el mismo estado para poder calcular el margen de error con el que trabajan los sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
Los actuadores utilizados en ambos kits fueron las ruedas de cada uno respectivamente.&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Las diferencias que encontramos entre el funcionamiento de los dos kits fueron&lt;br /&gt;
&lt;br /&gt;
- El funcionamiento de los motores - Butiá gira si le das corriente&lt;br /&gt;
                                   - Lego recibe como input la cantidad de rotaciones además de la potencia&lt;br /&gt;
&lt;br /&gt;
- La manera de medir distancia  - El kit lego lee mediante ultrasonido&lt;br /&gt;
                                - Butiá lee las distancias mediante un sensor infrarojo&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6651</id>
		<title>Grupo 10</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6651"/>
				<updated>2015-04-17T02:14:05Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Camila Serena&lt;br /&gt;
* Gonzalo Herrera&lt;br /&gt;
* Josefina Fasoli&lt;br /&gt;
* Vanessa Revetria&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante la primera parte del desarrollo de esta actividad nos dedicamos a tomar mediciones de los distintos sensores del kit butiá y del kit lego.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
[[Archivo:sensoresError.png‎]]&lt;br /&gt;
Se realizaron dos tipos de pruebas sobre ambos kits. El primer tipo de prueba fue la medición de los rangos de trabajo de los distintos sensores. El segundo consistió en tomar un conjunto de mediciones para el mismo estado para poder calcular el margen de error con el que trabajan los sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
Los actuadores utilizados en ambos kits fueron las ruedas de cada uno respectivamente.&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Las diferencias que encontramos entre el funcionamiento de los dos kits fueron&lt;br /&gt;
&lt;br /&gt;
- El funcionamiento de los motores - Butiá gira si le das corriente&lt;br /&gt;
                                   - Lego recibe como input la cantidad de rotaciones además de la potencia&lt;br /&gt;
&lt;br /&gt;
- La manera de medir distancia  - El kit lego lee mediante ultrasonido&lt;br /&gt;
                                - Butiá lee las distancias mediante un sensor infrarojo&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6650</id>
		<title>Grupo 10</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6650"/>
				<updated>2015-04-17T02:13:51Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Camila Serena&lt;br /&gt;
* Gonzalo Herrera&lt;br /&gt;
* Josefina Fasoli&lt;br /&gt;
* Vanessa Revetria&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante la primera parte del desarrollo de esta actividad nos dedicamos a tomar mediciones de los distintos sensores del kit butiá y del kit lego.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
[[Archivo:sensoresError.png‎|950px]]&lt;br /&gt;
Se realizaron dos tipos de pruebas sobre ambos kits. El primer tipo de prueba fue la medición de los rangos de trabajo de los distintos sensores. El segundo consistió en tomar un conjunto de mediciones para el mismo estado para poder calcular el margen de error con el que trabajan los sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
Los actuadores utilizados en ambos kits fueron las ruedas de cada uno respectivamente.&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Las diferencias que encontramos entre el funcionamiento de los dos kits fueron&lt;br /&gt;
&lt;br /&gt;
- El funcionamiento de los motores - Butiá gira si le das corriente&lt;br /&gt;
                                   - Lego recibe como input la cantidad de rotaciones además de la potencia&lt;br /&gt;
&lt;br /&gt;
- La manera de medir distancia  - El kit lego lee mediante ultrasonido&lt;br /&gt;
                                - Butiá lee las distancias mediante un sensor infrarojo&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6649</id>
		<title>Grupo 10</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6649"/>
				<updated>2015-04-17T02:13:41Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Camila Serena&lt;br /&gt;
* Gonzalo Herrera&lt;br /&gt;
* Josefina Fasoli&lt;br /&gt;
* Vanessa Revetria&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante la primera parte del desarrollo de esta actividad nos dedicamos a tomar mediciones de los distintos sensores del kit butiá y del kit lego.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
[[Archivo:sensoresError.png‎|550px]]&lt;br /&gt;
Se realizaron dos tipos de pruebas sobre ambos kits. El primer tipo de prueba fue la medición de los rangos de trabajo de los distintos sensores. El segundo consistió en tomar un conjunto de mediciones para el mismo estado para poder calcular el margen de error con el que trabajan los sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
Los actuadores utilizados en ambos kits fueron las ruedas de cada uno respectivamente.&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Las diferencias que encontramos entre el funcionamiento de los dos kits fueron&lt;br /&gt;
&lt;br /&gt;
- El funcionamiento de los motores - Butiá gira si le das corriente&lt;br /&gt;
                                   - Lego recibe como input la cantidad de rotaciones además de la potencia&lt;br /&gt;
&lt;br /&gt;
- La manera de medir distancia  - El kit lego lee mediante ultrasonido&lt;br /&gt;
                                - Butiá lee las distancias mediante un sensor infrarojo&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6648</id>
		<title>Grupo 10</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6648"/>
				<updated>2015-04-17T02:13:33Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Camila Serena&lt;br /&gt;
* Gonzalo Herrera&lt;br /&gt;
* Josefina Fasoli&lt;br /&gt;
* Vanessa Revetria&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante la primera parte del desarrollo de esta actividad nos dedicamos a tomar mediciones de los distintos sensores del kit butiá y del kit lego.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
[[Archivo:sensoresError.png‎|250px]]&lt;br /&gt;
Se realizaron dos tipos de pruebas sobre ambos kits. El primer tipo de prueba fue la medición de los rangos de trabajo de los distintos sensores. El segundo consistió en tomar un conjunto de mediciones para el mismo estado para poder calcular el margen de error con el que trabajan los sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
Los actuadores utilizados en ambos kits fueron las ruedas de cada uno respectivamente.&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Las diferencias que encontramos entre el funcionamiento de los dos kits fueron&lt;br /&gt;
&lt;br /&gt;
- El funcionamiento de los motores - Butiá gira si le das corriente&lt;br /&gt;
                                   - Lego recibe como input la cantidad de rotaciones además de la potencia&lt;br /&gt;
&lt;br /&gt;
- La manera de medir distancia  - El kit lego lee mediante ultrasonido&lt;br /&gt;
                                - Butiá lee las distancias mediante un sensor infrarojo&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6647</id>
		<title>Grupo 10</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Grupo_10&amp;diff=6647"/>
				<updated>2015-04-17T02:12:31Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Camila Serena&lt;br /&gt;
* Gonzalo Herrera&lt;br /&gt;
* Josefina Fasoli&lt;br /&gt;
* Vanessa Revetria&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante la primera parte del desarrollo de esta actividad nos dedicamos a tomar mediciones de los distintos sensores del kit butiá y del kit lego.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
[[Archivo:sensoresError.png]]&lt;br /&gt;
Se realizaron dos tipos de pruebas sobre ambos kits. El primer tipo de prueba fue la medición de los rangos de trabajo de los distintos sensores. El segundo consistió en tomar un conjunto de mediciones para el mismo estado para poder calcular el margen de error con el que trabajan los sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
Los actuadores utilizados en ambos kits fueron las ruedas de cada uno respectivamente.&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Las diferencias que encontramos entre el funcionamiento de los dos kits fueron&lt;br /&gt;
&lt;br /&gt;
- El funcionamiento de los motores - Butiá gira si le das corriente&lt;br /&gt;
                                   - Lego recibe como input la cantidad de rotaciones además de la potencia&lt;br /&gt;
&lt;br /&gt;
- La manera de medir distancia  - El kit lego lee mediante ultrasonido&lt;br /&gt;
                                - Butiá lee las distancias mediante un sensor infrarojo&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:SensoresError.png&amp;diff=6646</id>
		<title>Archivo:SensoresError.png</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:SensoresError.png&amp;diff=6646"/>
				<updated>2015-04-17T02:12:13Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6645</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6645"/>
				<updated>2015-04-17T02:11:35Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Juan Rodriguez&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se realizaron dos tipos de pruebas sobre ambos kits. El primer tipo de prueba fue la medición de los rangos de trabajo de los distintos sensores. El segundo consistió en tomar un conjunto de mediciones para el mismo estado para poder calcular el margen de error con el que trabajan los sensores.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Butiá:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Escala de grises&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Luz&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Distancia&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Kit Lego:&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Microfono&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Ultrasonido(distancia)&amp;lt;/i&amp;gt;&lt;br /&gt;
*&amp;lt;i&amp;gt;Botón&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
dkafjldakfjda kfsd kfj sdlkfj sadlkf jsdalk fjsd&lt;br /&gt;
fsdkfjasl fsadlkf jsadlkf sadlkf aslk fd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6644</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6644"/>
				<updated>2015-04-17T02:10:40Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Sensores utilizados y pruebas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Juan Rodriguez&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
dkafjldakfjda kfsd kfj sdlkfj sadlkf jsdalk fjsd&lt;br /&gt;
fsdkfjasl fsadlkf jsadlkf sadlkf aslk fd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6643</id>
		<title>Usuario discusión:Fedemuj</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Usuario_discusi%C3%B3n:Fedemuj&amp;diff=6643"/>
				<updated>2015-04-17T02:10:25Z</updated>
		
		<summary type="html">&lt;p&gt;Fedemuj: /* Desarrollo de la actividad */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Integrantes ==&lt;br /&gt;
 &lt;br /&gt;
* Juan Perez&lt;br /&gt;
* Juan Rodriguez&lt;br /&gt;
* Federico Mujica&lt;br /&gt;
&lt;br /&gt;
==Desarrollo de la actividad==&lt;br /&gt;
&lt;br /&gt;
Durante el desarrollo de esta activa, para poder medir la desviación de los sensores se crea un proyecto en turtelbot y que luego de una cantidad N de mediciones, calculo el porcentaje de la desviación estandar. Tomando los valores máximo y un minimos sensando un mismo objeto y sacando el promedio la diferencia de dichas medidas. Luego se paso a probar los distintos actuadores.&lt;br /&gt;
&lt;br /&gt;
==Sensores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
dkafjldakfjda kfsd kfj sdlkfj sadlkf jsdalk fjsd&lt;br /&gt;
fsdkfjasl fsadlkf jsadlkf sadlkf aslk fd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Actuadores utilizados y pruebas==&lt;br /&gt;
&lt;br /&gt;
dkafjldakfjda kfsd kfj sdlkfj sadlkf jsdalk fjsd&lt;br /&gt;
fsdkfjasl fsadlkf jsadlkf sadlkf aslk fd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusiones==&lt;br /&gt;
&lt;br /&gt;
===Generales===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;br /&gt;
&lt;br /&gt;
===Comparación de los dos Kits (Ventajas y Desventajas de cada uno)===&lt;br /&gt;
&lt;br /&gt;
*Se plantea la investigación varios kits robóticos para hacer un revelamiento de los actuadores que incorpora.&lt;br /&gt;
*Uno de los actuadores a incorporar será el motor pasos a paso y para comenzar a trabajar en este tipo de motores debemos discutir varios puntos por lo cual decidimos&lt;/div&gt;</summary>
		<author><name>Fedemuj</name></author>	</entry>

	</feed>