martes, 14 de mayo de 2013

[RT] Tarea 6: Geolocalización

Para ésta entrada se pidió realizar un código de geolocalización utilizando triangulación de antenas detectando la potencia de las señales de las señales.

Triangulación

Como su nombre lo dice, el método de triangulación hace uso de trigonometría para determinar la posición de objetos relevantes sobre un área determinada.

Mediante triangulación, se pueden obtener las coordenadas de un punto, por ejemplo, el barco de la imágen.
[1]

Primero, se calcula la distancia existente b entre dos puntos conocidos: A y C.
Se miden los ángulos de los vértices A y C, y aplicando trigonometría, es posible obtener las distancias AB y CB, y por tanto, las coordenadas del punto B.


Trilateración

La trilateración es un método que ha venido supliendo a la triangulación, consiste en conocer de antemano las ubicaciones de los puntos de referencia que se utilizarán para detectar la posición de un objeto en un área.

[2]

Sobreponiendo 3 esferas las cuales pueden representar el alcance de una torre transmisora, por ejemplo, el radio de las esferas representa las distancias de las torres transmisoras al punto que se desea localizar.
Medir los 3 radios puede proporcionar la distancia relativa de las torres al punto seleccionado.


Simulación

Realicé una script en Python que permite simular la localización de un punto mediante trilateración, conociendo de antemano la ubicación de 3 torres transmisoras.

Utilicé como referencia las fórmulas halladas en Wikipedia, se programaron en Python y utilizando la libreria Numpy para facilitar algunos cálculos de álgebra lineal, además basándome en un post el cual se encuentra en las referencias.
Lo demás fue agregar una sencilla interfaz gráfica para ilustrar los resultados.

Se necesita conocer el alcance de la señal de cada transmisor, en éste caso, en pixeles; las coordenadas de los transmisores.
A pesar que el programa sabe la ubicación del receptor, se etiquetará el mismo con las coordenadas obtenidas mediante las ecuaciones de trilateración.

Código
Video


Referencias

lunes, 13 de mayo de 2013

[Lab CU] Actividad 11: Sugerencias sobre privacidad


Habiendo escuchado la clase de los compañeros sobre las consideraciones sobre privacidad, redactaremos la retroalimentación de los proyectos junto con algunas sugerencias sobre cómo mejorar los mismos.

...

Casa segura (Rene, Raúl, Iván)


Pienso que también debería de tomar en cuenta algunos aspectos sobre la seguridad del usuario, es decir, cómo se puede proteger la integridad del usuario y de su patrimonio si se llegasen a perder los accesos o el control sobre el sistema.
Otro detalle, pienso que no es muy necesario almacenar información delicada del usuario como su ubicación, pueden utilizar alguna API de mapas que les permita calcular el tiempo aproximado en el que el usuario llegará a la casa para asi encender las luces o los climas, o que el celular se conecte automáticamente a la red de la casa mientras el usuario va llegando para ir encendiendo todo en la casa.
Y pues lo demás solo cuidar la conexión a internet de la casa, por ejemplo, que las cámaras no sean accesibles desde el exterior, solo desde el interior.
De ahi en adelante cifrar la información y un pequeño servidor de sincronización donde el equipo móvil y la casa intercambien mensajes cada cierto momento.

...

Garage Inteligente (Emmanuel, Max, Carmen, Victor)



La mayoría de los proyectos no tomaron en cuenta un aspecto muy importante que ustedes si, al ser una empresa que presta un servicio entonces es necesario conocer al cliente, es por ello que al facturar la venta de un servicio deben estar conscientes que almacenarán el domicilio del cliente y posiblemente algunos datos de su tarjeta bancaria y ese tipo de cosas. Y obvio es necesario si quieren llevar un seguimiento interno de su cartera de clientes.
Otro aspecto que incluyeron fue el qué hacer en caso de fallo, por ejemplo, fallo en el suministro eléctrico de la casa.
Solo hay un hueco en sus responsabilidades, en lo personal no creo que los accidentes con la puerta sean responsabilidad del usuario ya que ustedes son los proveedores de todo el sistema y su integración para que funcione bonito, porque supongamos que un motor para abrir la puerta falla, el fabricante del motor también se quita de toda responsabilidad si se altera o modifica el motor, entonces el usuario queda vulnerable en ese aspecto.
Todo lo demás esta muy bien.


...

Bloqueo mágico de computadora (Obed, Ave, Pedro, Jona)


Las consideraciones de privacidad son suficientes considerando el alcance de su proyecto.

Pero como recomendación del sistema, además de implementar el reconocimiento del rostro también pueden implementar un medio secundario para iniciar sesión, por ejemplo, un PIN, el cual se activa si el sistema no te reconoce en 10 segundos por ejemplo; entonces ahí ya es conveniente pensar en como almacenar esa contraseña y relacionarla con un usuario.

De igual forma, el correo o las imágenes almacenadas saber si se guardaran en algún formato cifrado o algo por el estilo.

...

Galeria Inteligente (Blanca, Vanessa, Adriana, Rodolfo)


Pienso que realmente sus consideraciones de privacidad cumplen con el alcance del proyecto.

Una consideración importante y que ustedes visualizaron bien en esta entrega fue identificar correctamente a sus usuarios, dicho de otra forma, el visitante por un lado es el usuario que hará uso de la interfaz ubicua porque en realidad el solo sabe que al acercarse a la obra el sistema reaccionara, por el otro lado, el museo es el usuario que hace uso de la interfaz visible. Visto desde esta perspectiva, los resultados o información que en realidad cuenta es la información sobre el uso del sistema, la cual es puramente estadística, cantidad de visitas al museo y la cantidad de reproducciones sobre una obra.
Ya la empresa sabrá el nivel de seguridad que quiere darle a los datos, si quiere cifrarlos o no, pero eso ya no entra en el alcance de su proyecto.

Aprovechando las capacidades del sistema también sería bueno utilizar el sistema como un sistema de seguridad interno que grabe a los usuarios y en caso de robo que se puedan visualizar los videos. Ahí solo faltaría especificar en su Aviso de Privacidad que en caso de algún robo al museo se tendrá acceso a las grabaciones las cuales pueden contener los rasgos físicos y otra información sobre los visitantes.

...

Alarma de automóvil (Alex, Ricardo, Sergio, Roberto)


Pienso que no tienen muy bien pensado el concepto de privacidad en este momento.

Se centran mucho en ver las desventajas de las tecnologías que quieren implementar pero eso no ayuda de mucho, no deben darle vueltas al concepto de seguridad para proteger los datos, no tengan miedo, son cosas que ya hemos visto antes, les propongo probar con algo simple ya sea el cifrado RSA o una firma HASH con MD5 o SHA1, eso puede quitarles muchas preocupaciones sobre seguridad al momento de iniciar sesión y esas cosas. Si piensan sacar el producto al mercado las consideraciones de seguridad y resguardo de información deben ser lo primero a considerar.

Otra cosa es la frase "la privacidad queda a consideración del usuario", en realidad no, ustedes son la empresa, ustedes recaban la información, ustedes deciden que hacer con la información almacenada y postprocesada: ¿La guardan como historial? ¿La eliminan? Depende de las necesidades de su sistema, por lo menos ustedes están aceptando que el sistema almacena cierta información y especifican cuál es.

...

Alarma inteligente (Omar, Saúl Isaías)


Viendo el alcance del proyecto, pienso que son suficientes las consideraciones de privacidad, realmente no tienen muchos datos que cuidar por lo que la encriptación de las configuraciones es un buen punto.
Otro punto también es proteger los datos para evitar que se eliminen (si es que son muy importantes), ya que android te permite ver todo el contenido de la memoria al conectarlo via MTP a la computadora, por lo que sería bueno analizar esta posibilidad y dejar solo al sistema y a la aplicación con permisos para borrar cuando el usuario decida eliminar la aplicación.
No me quedo claro cómo el sistema funciona en su totalidad, pero si los dispositivos en cierto momento de comunican pienso que también sería buena opción proteger los canales de comunicación.

...

Oficina Inteligente (Lupe, Osvaldo, Triana, Esteban)


Buenas consideraciones de privacidad.
Pienso que se complican mucho al meterse en aspectos biométricos del usuario cuando pueden simplemente combinar algunos aspectos de criptografía en su proyecto.

Además, si yo leo su Aviso de Privacidad no creo animarme a comprar su producto, no pueden comprometerse a almacenar datos del usuario y simplemente no se hacerse responsables de lo que pase con ellos después de almacenarlos, ese no es el fin de un Aviso de Privacidad. Solo especifiquen como se manipulan sus datos y no hagan cosas malas con ellos.
También en los Términos y Condiciones sería bueno delimitar las responsabilidades tanto de la empresa como de los usuarios, por ejemplo, el compromiso de un servicio 24/7 puede dar espacio a demandas, pero ¿qué pasa si el usuario no cuenta con electricidad o conexión a internet? Pequeños huecos que pueden dar problemas legales.

...

Despertador inteligente (Ramón, Cecy, Roberto)


Siendo una aplicación móvil, pienso son suficientes las medidas de privacidad y seguridad de su proyecto, solo hay que cuidar algunos aspectos.
Hablan de la creación de un llave única, pero, ¿qué tan única?, ¿cuál es el mecanismo para su generación?, ¿el mecanismo de generación de llaves es reproducible? Recordar también que los métodos de sincronización pueden ser vulnerables, solo bastaría implementar algún método de comunicación seguro entre servidor y dispositivo, ya sea un túnel SSH o cifrado temporal.
También verificar que tan vulnerable es el sistema a hackeos, supongamos que alguien es capaz de vulnerar el arduino o la conexión bluetooth; en ese caso, qué se podría hacer si un mismo miembro de la casa ha vulnerado el sistema por simple diversión por ejemplo.
Solo bastaría también especificar las medidas necesaria a implementar en el servidor de sincronización.

Las consideraciones de seguridad del usuario y cuidar su integridad física también fueron adecuadas, pienso es el único proyecto en el que aplican.
...


Esas fueron mis observaciones y recomendaciones para los demás proyectos.

jueves, 9 de mayo de 2013

[IT] Homework 5: Error detection (Hamming Block Code)

For this week we had to implement an error detection technique using a block code method. We had to simulate the transmission of data through a noisy channel and use our error detection technique to fix the errors during the transmission.
I use the Hamming Code as my block code method.

NOTE: If you want to understand how works the Hamming Block Code, check the references at the footer.


Experiment

For my experiment, I prepared a Python script that generate several random words of length 4 (4 bits) and then, send them through a noisy channel, the parameters of the experiment are:
  • wordLength: Word length (4 bits)
  • frecZeros: Frequency of zeros in the word
  • probError: Probability that a word is transmitted wrong by the channel
  • errorBits: Maximum number of errors in the transmitted word
  • rep: Amount of experiment repetitions
For the experiment, the wordLength and the errorBits are fixed at 4 and 1, respectively, the parameters freqZeros and probError only affects the final behavior of the channel.

As we can see, with 1 as the number of error bits in the word, the Hamming Block code can fix all the errors without problems.



If we increase the amount of erros in each word, for instance, 2 errors per word, we begin to experience some failures in the method



There are not much difference if we increase the amount of errors to 3



The Hamming Code methos works fine while the amount of errors in a word still's one, but, when the amount of errors increases two a number bigger than one, the Hamming Code will start to experiment some failures.
Also,we can see that the amount of good transmissions and errors follows a linear relation.

The implemented Hamming Code uses a 7x4 "H" matrix, with which is able to correct a single bit error.

When you multiply the original 4-bits word and the encode "G" matrix, the result is a 7-bit codeword "xG":


When you decode the codeword using the "H" matrix, the multiplication result is a 3-bit word. That word is a binary representation of a single digit. The digit represents the bit that is wrong in the transmitted codeword through the noisy channel.


We only need to translate the binary representation to an integer, which we will be able to correct the bit error.

Code



References:

miércoles, 8 de mayo de 2013

[Lab VC] Actividad 8: Detección de esquinas


Para ésta tarea se debieron programar las rutinas para detectar esquinas en imagenes. Para ello se utilizó una combinación entre filtro mediano y filtro en escala de grises.


Teoría

Primeramente, los pasos necesarios para la detección son:
  • Aplicar filtro mediano a la imágen
  • Aplicar filtro escala de grises a la imágen
  • Por cada pixel, restar el valor del filtro mediano al filtro en escala de grises, dicha diferencia al final resaltará las esquinas a color blanco.
  • Identificar las coordenadas donde se encuentra cada esquina y asignarlas al objeto al que pertenecen. Se puede utilizar detección de bordes y BFS para dicho objetivo.
  • Se hace un corte pequeño en los bordes detectados (borde discontinuo), al utilizar BFS nuevamente el corte obligará al BFS a recorrer los pixeles en una sola dirección, lo que permitirá darle un orden al las esquinas detectadas.
  • Con las esquinas asignadas a cada objeto y ordenasas, conectarlas con una línea para obtener el wireframe de cada objeto o polígono detectado.
  • Dibujar las lineas, y si se requiere, etiquetar las esquinas y objetos.

    Práctica

    Las imagen utilizada para las pruebas fue la siguiente:

    Imágen original


    Se eligió la imágen porque cuenta con varias figuras para hacer diferentes pruebas, es una imágen con poco ruido en realidad y por ahora es necesario que las figuras se encuentren separadas y rellenas de un color solido para poder resaltar sus bordes correctamente.

    Objetos completamente sólidos


    Resultados

    Para los resultados primero se sacan los bordes

    Bordes detectados

    Después realizamos el corte en los bordes, no se alcanza a ver muy bien, pero haciendo zoom en la imágen se alcanza a ver muy bien

    Corte en la primer esquina detectada

    Lo demás ya es automático, recorriendo los bordes podemos fácilmente ordenar las esquinas, ya solo es de etiquetarlas y dibujar el wireframe, es éste caso es de color negro y muy delgado pero ahí esta. En la terminal se ve un paso intermedio, donde se asignan las esquinas a cada objeto, por ello hay 4 listas.


    En la imágen, el wireframe con las esquinas y objetos etiquetados.
    En la terminal, las esquinas asignadas a cada objeto.


    Código


    En el repositorio encuentran la implementación completa en código, la carpeta marcada como Tarea 9.


    Para la detección de esquinas

    Para dibujar en la GUI


    Referencias:

    martes, 7 de mayo de 2013

    [RT] Extra: Infografia Satelites


    [Lab RT] Actividad 10: Seguridad en redes móviles e inalámbricas (Infografía)

    [Lab CU] Actividad 10: Privacidad en sistemas de cómputo ubicuo

    Para ésta semana continuamos con los temas de lecturas científicas, ahora el tema es referente a técnicas de usabilidad en sistemas de cómputo ubicuo, el documento seleccionado fue:

    ...
    Designing for ubiquity: the perception of privacy

    El paper aparece en: Pervasive Computing, IEEE, Volume: 2 , Issue: 2
     Tipo de producto: Journals & Magazines
    Página(s): 40 - 46
    Fecha de publicación: April-June 2003
    Autor: Richard Beckwith
    ...

    Contexto

    Los investigadores en el campo del cómputo ubicuo han sostenido durante mucho tiempo que la privacidad es un problema de diseño, el éxito en el diseño requiere de entender los deseos, preocupaciones y sensibilización de los usuarios de alguna tecnología. Sin embargo, debido a que los sistemas ubicomp son relativamente poco comúnes, es muy poca la investigación existente para informar a los diseñadores sobre el potencial de entender a los usuarios. Además, el diseño se complica con el hecho de que estos sistemas suelen estar incrustados y ser invisibles, por lo que es difícil para los usuarios saber en qué momento los dispositivos están functionando. Y no es sorprendente saber que la incapacidad de los usuarios para ver una tecnología hace que sea difícil para ellos comprender cómo puede afectar su privacidad.

    Se nos habla de 2 tipos de sistemas ubicuos:

    • Personales: Los cuales son independientesde la ubicación física.
    • Infraestructura: Que son los sistemas ubicados en cierto lugar.
    Un estudio de privacidad toma en cuenta los sistemas de infraestructura, que consisten en sensores y otro tipo de tecnologías profundamente embebidas en las casas o edificios, y que sirven para monitorear a la gente que habita en esos lugares.

    La finalidad de la investigación es conocer cómo las personas se desenvuelven en un ambiente ubicuo con enfoque en el cuidado de gente adulta y diversas incapacidades. Asi mismo, conocer cuáles tecnologías son las más útiles.


    1. Metodología de la investigación

    El método de investigación descrito tiene como principal enfoque las observaciones informales, asi mismo, se realizaron 29 entrevistas con personas que utilizan sistemas ubicuos.
    El alcance fue de:
    • 10 miembros de la familia (quienes toman las decisiones sobre el cuidado del hogar)
    • 9 residentes (con niveles variados de demencia)
    • 8 miembros (grupo al cuidado de las personas)
    • 2 managers de los grupos.
    Las preguntas abarcan cierto rango de problemas, desde el tipo de rutinas que realizan diariamente hasta cómo y porqué seleccionaron cierta tecnología para facilitar su trabajo.

    La investigación se centra en 2 tipos de tecnologías
    • Celdas de carga: Para monitorear el peso de los residentes, están colocadas en las patas de las camas
    • ID Móviles: Cuyo nombre en inglés es mobile badge y son muy parecidas a los controles de alarma de un auto, con 2 botones. Su función es identificar al portador y monitorear mediante radiofrecuencias su ubicación dentro y fuera de las instalaciones.

    2. Percepciones

    Todos los residentes y miembros del grupo de cuidados deben portar un ID móvil.
    La investigación indica que los portadores no comprenden en realidad las capacidades de monitoreo del dispositivo, los residentes observan el dispositivo como algo que les permite pedir ayuda lanzando una señal inalámbricamente.
    La realidad es que el dispositivo esta rastreando todo el tempo a los residentes, de tal forma que sean fáciles de ubicar en caso de emergencia, por ejemplo, si un residente se encuentra solo en la cocina, el dispositivo puede cerrar el paso del gas en las estufas. Asi mismo, avisa si los residentes estan saliendo del edificio.
    Dado que el dispositivo no cuenta con ninguna otra interfaz visibles mas que dos simples botones, los usuarios no se percatan de las funciones que permanecen invisibles.
    Los cuidadores se encargan de estudiar la información almacenada para establecer las estrategias y cuidados para las personas de las cuales están encargados.

    Las celdas de carga (parecidas a las de la imágen) están instaladas en las patas de las camas de los residentes para medir las pérdidas o ganancias en el peso.
    Sin embargo, los residentes no se percatan que la información recolectada esta siendo utilizada con otros fines, por ejemplo, si durante la noche se detecta peso nulo en cierta cama, los miembros del staff pueden saber quién se levanto de su cama; variaciones en las mediciones pueden indicar que una persona se esta moviendo repetidamente sobre la cama lo que se puede entender como dificultad para dormir. Todos estos indicadores le sirven al staff para conocer los patrones de sueño de los residentes y detectar posibles problemas.


    3. Razonando sobre la privacidad

    Este razonamiento se analiza desde 3 puntos de vista:
    • Receptor de la información: ¿Quién utilizará o tendrá acceso a la información?. En este caso la respuesta se responde con la pregunta ¿Quién monitorea a quienes? Los cuidadores son los que reciben la información y la utilizan, por lo que ellos también son los principales consumidores de la información y entran en segundo lugar los familiares y los prestadores de servicios clínicos. La mayoría de las personas entrevistadas no estaban conscientes de ello
    • Uso de la información: ¿Cómo la información será utilizada, y qué se ganara o perderá al utilizarla? Hay una meta con la cuál todas las personas, residentes, cuidadores y familiares están de acuerdo, el sistema instalado busca ampliar la vida de los residentes. En este caso, identificar el uso de la información resulta ambiguo ya que en realidad la información consumida es una fusión de otras variables, por ejemplo, el tiempo, a qué hora se levanto un residente, en qué momento cambio de lugar o incluso si iba acompañado o no; y como ya vimos en el caso de las celdas, analizar si los residentes están o no en sus camas.
    • Sensibilidad de la información: Se refiere a cuál información es compartida. Por ejemplo, el sistema puede determinar con cierto grado de exactitud la ubicación delos residentes y con quién están. Esto se puede considerar invasivo y sensible si llega a conocerse por personas con malas intenciones, pero los usuarios para los cuales todo el sistema es invisible aún no llegan a comprender el alcance de ello, para los residentes el propósito del sistema es indicar en cualquier momento "si alguien puede venir aquí a ayudarme".

    4. Implicaciones

    La ignorancia por parte de los usuarios sobre las tecnologías utilizadas se debe a que son un arma de dos filos, por un lado pueden resultar invasivos, pero por el otro se tratan de sistemas que simplifican la vida de residentes y cuidadores.

    Es quizá poco realista esperar que los residentes de un centro de atención puedan comprender plenamente la tecnología y tomar decisiones acerca de la privacidad y de la compartición de datos. Y por desgracia, no se ha encontrado tampoco una mayor conciencia de las tecnologías utilizadas entre los miembros de la familia. Los miembros de la familia que fueron entrevistados parecían saber sólo que las tecnologías están ahí para el bienestar de los residentes y no entendían los datos que se están recogiendo para lograrlo. Manifestaron claramente que querían balancear la privacidad de sus seres queridos con una mejor calidad de vida. Sin embargo, raramente se consideran las necesidades de privacidad de sus seres queridos. Un miembro de una familia expreso que:
    "Ese tipo de tecnologías pueden ayudar a las personas a vivir una vida un poco más independiente de lo que sería de otra manera. Yo lo veo como de riesgo muy positivo. Supongo que no estoy seguro de qué riesgo existe, salvo la vergüenza. Y cuando se llega a ser de 80 años de edad, avergonzarse ya no es tan fácil."
    Otro miembro de la familia dijo que la tecnología no tuvo ningún efecto sobre la privacidad, pero luego agregó que "no conoce el posibilidades".


    5. Diseñando la privacidad.

    En un estudio relacionado de la compañia Omnipoint (proveedor de telecomunicaciones inalámbricas) se reportó que el 20% de sus usuarios miente con regularidad sobre su verdadera ubicación, lo que significa que hay quienes desean mantener esta información en secreto.
    Dicha aseveración coincide con un punto de vista de uno de los cuidadores quien afirma que "la privacidad solo importa cuando alguien no esta haciendo lo que se supone deberia estar haciendo", y muchos usuarios relacionan el querer mantener su privacidad con mantener algo oculto. Es obvio que las personas que opinan de esta forma no estan muy bien enteradas de las formas en las que su información puede ser utilizada, y los desarrolladores deben mantener eso en mente.


    Conclusión y critica

    Me parece buena la investigación para los fines que se buscan y permite echar un vistazo a las particularidades de los sistemas ubicuos ya que siempre se intentan comprender desde un punto de vista general sin tomar en cuenta que algunas veces éstos deben centrarse en un tipo muy especifico de personas con características bien definidas.
    Resulta bastante útil la investigación porque además nos da un vistazo a la percepción real de los usuarios ante un sistema, nos permite ver cómo realmente los usuarios no están enterados de todas las capacidades del sistema y solo se centran en aceptarlo si los beneficios son mayores a los riesgos, en éste caso, ambas partes, tanto cuidadores como residentes le toman más valor a los beneficios obtenidos y a las facilidades obtenidas que a los riesgos, los cuales simplemente minimizan.
    Pienso que es un excelente ejemplo que puede


    Referencias

    Designing for ubiquity: the perception of privacy


    El paper aparece en: Pervasive Computing, IEEE, Volume: 2 , Issue: 2
     Tipo de producto: Journals & Magazines
    Página(s): 40 - 46
    Fecha de publicación: April-June 2003
    Autor: Richard Beckwith

    jueves, 2 de mayo de 2013

    [Lab VC] Actividad 7: Detección de polígonos


    Para ésta tarea se debieron programar las rutinas para detectar polígonos con base en las líneas rectas detectadas en la imagen. Para ello se utilizó la Transformada de Hough.


    Teoría

    Primeramente, los pasos necesarios para la detección son:
    • Trabajar con la imagen en escala de grises.
    • Detectar los bordes, altamente recomendable que los bordes sean continuos.
    • Separar los polígonos por su borde, es decir, agrupar los pixeles contiguos utilizando alguna técnica como BFS.
    • A cada lista de borders, aplicar la convolucion discreta, en este caso se elegieron 2 máscaras de Sobel
    • A partir de las matrices de gradientes obtenidas, calcular la pendiente local para cada pixel.
    • Agrupar los pixeles con la misma pendiente. Cada grupo representa un posible segmento, eliminar aquellos grupos que generan ruido, por ejemplo, si tienen pocos pixeles.
    • Ordenar los pixeles de cada segmento para obtener los puntos teóricos inicial y final.

      Práctica

      Las imagen utilizada para las pruebas fueron las siguientes:

      Original
      Binarizada
      Contornos

      La prueba realizada fue muy simple, detección de bordes e identificación del posible segmento, sin embargo podemos notar que se obtenía mucho ruido.
      Se cubren los requisitos de detectar bordes y agrupar los objetos por su borde, aplicar la convolución discreta para obtener las gradientes y calcular las pendientes, y de agrupar los segmentos por su pendiente.


      Resultados




      Sin embargo, aquí aplico a las pendientes la función floor al valor de la pendiente lo que parece limpiar un poco los resultados.



      Cabe mencionar que las lineas dibujadas corresponden a los segmentos detectados, se puede ver, por ejemplo, en el pentágono algunos segmentos detectados cubren en realidad 2 lados de la figura y en el caso del hexágono hasta 3 lados.

      Esta de mas decir que los resultados no fueron los esperados.


      Código


      En el repositorio encuentran la implementación completa en código, la carpeta marcada como Tarea 8.

      Referencias:

      martes, 30 de abril de 2013

      [Lab RT] Actividad 9: Ahorro de energía (Lectura)



      Para ésta semana continuamos con los temas de lecturas científicas, ahora el tema es referente a ahorro de energía, el documento seleccionado fue:

      ...


      An Energy-Efficient MAC Protocol with Random
      Listen-Sleep Schedule for Wireless Sensor Networks

      Sung-Chan Choi∗ , Jang-Won Lee∗ , Yeonsoo Kim† , Hakjin Chong†
      ∗ Dept. of Electrical and Electronic Engineering, Yonsei University, Seoul, Korea
      † Future Technology Laboratory, KT, Seoul, Korea

      ...

      Resumen

      En el paper, se prope un protocolo MAC que hace uso eficiente de la energía para redes de sensores inalámbricos. Puesto que los nodos sensores utilizan energía de una batería, reducir el consumo de energía es un tema crítico para prolongar la vida útil de la red.
      Para resolver este problema, se utiliza un ciclo de escucha-espera conocido como S-MAC, lo que permite a los nodos apagar su transceptor durante un período de espera. En S-MAC, los nodos sensores tienen un ciclo fijo de actividad y un calendario sincronizado en un clúster virtual. Por lo tanto, en la S-MAC, no es fácil adaptar una variación del entorno de red. Por otra parte, debido a la programación sincronizada, las colisiones de transmisión aumentarán resultando en el desperdicio de energía y de bajo rendimiento. Para hacer frente a tales ineficiencias en S-MAC, se propone un sensor de probabilidad MAC (PS-MAC), en el que cada nodo determina su estado, "escuchar" o "sueño", basado pseudo-aleatoriamente en su propia probabilidad de activación previa y las probabilidades de pre-wakeup de su nodos vecinos en cada intervalo de tiempo. Esto permite que el programa de escucha-dormir mantega cada par transmisor-receptor sincronizado mientras que el del resto de los nodos puede ser asincrónico. Por lo tanto, las colisiones pueden reducirse incluso bajo condiciones de tráfico pesado que resultan en la reducción de desperdicio de energía y el logro de un alto rendimiento. Además, ya que la probabilidad de pre-activación de cada nodo se puede ajustar la adaptación al cambio del entorno de red, mediante el ajuste de forma dinámica probabilidades pre-wakeup de nodos de sensores, el rendimiento del sistema puede ser mejorado aún más.


      Introducción


      Las redes de sensores inalámbricos tienen diversas aplicaciones, tales como el monitoreo del clima, animales o plantas, el seguimiento de objetivos en campo de batalla, y los edificios o infraestructuras de observación para la defensa. En general, los nodos sensores se hacen funcionar con una pequeña
      batería que tiene una cantidad limitada de energía y que no puede ser fácilmente recargada o reemplazada. Por lo tanto, en el sensor inalámbrico redes, reducir el consumo de energía de cada nodo sensor es una de las cuestiones importantes para prolongar la vida de la red.
      En un nodo sensor, el consumo de energía se produce en el transceptor cuya utilización está controlada un protocolo de control (MAC).

      En la capa MAC, hay varias fuentes principales de desperdicio de energía. La primera de ellas es la escucha ociosa, lo que ocurre cuando un nodo se convierte en el receptor a pesar de que no hay datos para transmitir o recibir. Se ha estudiado que el consumo de energía durante el estado inactivo de escucha es comparable al consumo durante el estado de recepción. La segunda
      uno está oyendo, que se produce cuando un nodo recibe y decodifica los paquetes que no estén destinados a la misma. El tercero es una overemitting, que se produce cuando el nodo transmisor transmite un paquete, mientras que el nodo receptor no está preparado para recibir. la última fuente importante de desperdicio de energía es de colisión, que se produce cuando hay transmisiones simultáneas de varios nodos que están dentro del alcance de la interferencia del nodo receptor. 

      Para reducir los desperdicios de energía, se propondrán algunos protocolos MAC para redes de sensores inalámbricos.
      Estos protocolos se pueden clasificar como:
      • Los protocolos basados en programación suelen utilizar protocolos TDMA, en el que cada nodo sensor  se le asigna uno de los intervalos de tiempo y se puede comunicar sólo en  el intervalo de tiempo asignado. Protocolos basados ​​en TDMA son libres de contención, y por lo tanto, no hay desperdicio de energía causada por  colisiones. Sin embargo, generalmente no es fácil diseñar un sencillo  algoritmo para la asignación de ranura de tiempo, debido a un gran número de nodos sensores y la falta de la unidad central. Además, se requiere sincronización de tiempo elaborada para corregir temporización error causado por la deriva del reloj.
      • Los protocolos basados ​​en contención no son libres de colisiones. Sin embargo, debido a su simplicidad y escalabilidad, se prefieren en la práctica. Hasta el momento, muchos de estos protocolos tienen como objetivo reducir el consumo de energía. S-MAC es uno de los protocolos MAC mejor conocidos por su eficiencia energética en redes de sensores inalámbricos. Adopta una ciclo periodico de escucha-espera para reducir el tiempo de escucha ociosa. Cada nodo apaga su transceptor de radio en un período de espera. Despierta en un período de escucha y puede comunicarse con otros nodos. Este período de escucha se utiliza para el intercambio de paquetes de control tales como SYNC, RTS, CTS y ACK y paquetes de datos. Por otra parte, puesto que cada nodo tiene un ciclo de trabajo fijo, S-MAC no puede adaptarse a la variación de los entorno de red.
      Se propone un nuevo protocolo MAC con el concepto de 'escuchar' y 'esperar' para reducir el plazo escucha ociosa. Sin embargo, en contraste con la técnica de sincronizado y la técnica de escucha-espera de otros protocolos, en la propuesta los periodos de escuchar y esperar están determinados pseudoaleatoriamente en las probabilidades de pre-wakeup. Esto permite que el protocolo MAC propuesto operar en un modo asíncrono entre los diferentes pares de transmisor y receptor de nodos. Esto da como resultado un trafico uniformemente distribuido a través de intervalos de tiempo y la reducción de las colisiones.

      2. Diseño propuesto



      El protocolo MAC propuesto se conoce como "Sensor de Probabilidad MAC (PS-MAC).
      PS-MAC es un protocolo de tiempo segmentado como S-MAC. Sin embargo, a diferencia de S-MAC, en el que todos los nodos tienen ciclos de escucha sincronizados y periódicos, y el mismo ciclo de espera, en el protocolo propuesto los pares de nodos transmisor y el receptor tienen ciclos escucha asíncronos y no periódicos y horarios de espera.
      Para decidir entre escuchar o esperar en cada segmento de tiempo, cada nodo sensor hace uso de un generador de números pseudoaleatorios y determina su decisión según su probabilidad de preactivación y el número de semillas. Aunque cada nodo sensor determine de manera autónoma su periodo de escucha-espera, los nodos no pueden conocer el de nodos vecinos y podría haber un problema de overemitting que es causada por la la transmisión de paquetes cuando el nodo receptor está todavía en la
      modo de suspensión. Para hacer frente a esta situación, los nodos vecinos intercambian sus probabilidades de preactivación y números de semillas. esto permite a cada nodo de saber la programación nodos vecinos, que se llama "programa de pre-activación", ya que en generador pseudo-aleatorio la secuencia generada es una secuencia determinista que depende del número de semillas. Basándose en su propio programa de pre-activacion y en el de sus vecinos, cada nodo determina su tiempo de escucha real y su tiempo de espera por la elección de un intervalo de tiempo como un modo de escucha si tanto algunos de sus nodos vecinos y sí está en el modo de escucha en ese intervalo de tiempo.

      Algoritmo


      1. Programa de preactivación


      El algoritmo consta de dos etapas:
      1. Determinación del programa de preactivación
      2. Determinación de programa de activación real.
      Cada nodo i tiene su propio número de semillas Seedi que se utiliza para generar una secuencia de números pseudo-aleatorios y probabilidad de preactivacion Pi. Cada nodo determina su programa de preactivación en función de su número de semillas y la probabilidad preactivación.
      En primer lugar, en cada intervalo de tiempo t, cada nodo i genera un número Ui(t) entre 0 y 1 mediante con el uso de su generador pseudo-aleatorio y su número de semillas. El nodo establece la variable P Li (t) para el intervalo de tiempo t como:
      $$ P L_{i} \left ( t \right ) = \begin{cases} & 1 \text{ if } U_{i} \left ( t \right ) \leq P_{i} \\ & 0 \text{ otherwise } \end{cases} $$
      Basandose en P Li (t), el nodo i determina su programa de preactivación. Si P Li (t) = 1, el nodo i permanece en el modo de escucha en el intervalo de tiempo t , y si P Li (t) = 0, el nodo i permanece en el modo de suspensión en el intervalo de tiempot.

      La figura 1 ilustra un ejemplo de programación de pre-activación de dos nodos diferentes, el nodo 1 y el nodo 2; ambos tienen la misma probabilidad de pre-activación P1 = P2 = 0.3. Cada número en cada intervalo de tiempo representa un número generado pseudoaleatoriamente según el número de semillas de cada nodo. Desde que el programa de preactivación de cada nodo se determina (pseudo) al azar, cada nodo tiene un horario preactivación asincrónica en PS-MAC.


      Después de determinar su programa de preactivación, cada nodo determina su programa de activación real basado en su propio horario preactivación y el de sus vecinos. Cada nodo i determina Lij (t) para cada nodo j su vecino en el intervalo de tiempo t  comparando su horario preactivación y el de preactivación del nodo j de la siguiente manera:
      $$ L_{ij} \left ( t \right ) = \begin{cases} & 1 \text{ if } P L_{i} \left ( t \right ) = P L_{j} \left ( t \right ) \\ & 0 \text{ otherwise } \end{cases} $$

      Por lo tanto, si Lij (t) = 1, entonces el nodo i y el nodo j se encuentran en modo escucha en sus programas de pre-activacion. Por lo tanto, el nodo i y el nodo j son capaces de comunicarse entre sí en el intervalo de tiempo t si Lij (t) = 1. Por lo tanto, en el programa de activación real, el nodo i esta en modo de escucha, si Lij (t) = 1 para alguno de sus vecinos nodo j.

      2. Programa de activación real

      El programa de activación de nodo i se determina mediante la realización de este procedimiento para cada uno de sus nodos vecinos. La figura 2 muestra programación de activación real entre el nodo 1 y el nodo 2. En la figura 1, el nodo 1 está en el modo de escucha en intervalos de tiempo de 1, 4,
      y 9, y el nodo 2 en las ranuras de tiempo 4, 9, y 10. Por lo tanto, los nodos 1 y 2 estan en el modo de escucha en intervalos de tiempo de 4 y 9 en su programas de activación reales y se pueden comunicar uno con el otro en aquellos intervalos de tiempo.

      3. Evaluación del desempeño

      3. Topología de la simulación

      Se utiliza el simulador NS-2 para las pruebas. Suponemos que la PS-MAC tiene formación SYNC-RTS-CTS como en S-MAC y que el número de semillas y la probabilidad de activación de cada nodo se transmite al vecino los nodos a través de un paquete SYNC. En esta simulación, 15 nodos están desplegados en un círculo regularmente, como se ilustra en la figura. 4. el nodo receptor está situado en el centro de un círculo cuyo radio es 50 metro. Cada nodo en la línea de un círculo transmite paquetes a el nodo receptor. El tiempo de ejecución de la simulación es de 1000 segundos.
      Cada nodo sensor en la red experimental tiene un nivel inicial de energía de 100 joules. Un nodo consume una potencia de 500 mW en la transmisión de paquetes, 300 mW en la recepción y de 50 MW en el estado de reposo. Los parámetros del sistema son:

      Transmit Power0.5 W
      Receive Power0.3 W
      Idle Power0.05 W
      Radio Transmission Range250 m
      Radio Interference Range550 m
      Packet Length50 bytes

      Para el modelo de tráfico, se utiliza tráfico UDP / CBR. La probabilidad de preactivación de cada nodo PS-MAC se ajusta para que sea 0.3.

      4. Consumo de energía total de S-MAC y PS-MAC

      La figura 4 muestra el consumo total de energía en comparación con el paquetetiempo entre llegadas. Como se muestra en esta figura, cuando el intervalo de tiempo de llegada es más de 20 segundos, PS-MAC está consumiendo menos energía quee S-MAC. Sin embargo, cuando el tiempo entre llegadas es
      menos de 20 segundos, PS-MAC consume más energía que la S-MAC. Esto se debe a una situación de carga de tráfico pesado, el cual resulta en colisiones de paquetes graves en S-MAC. Cuando una colisiónse produce en S-MAC, el nodo emisor realiza al azar un retroceso y regenera el paquete RTS. Sólo después de que el nodo emisor recibe una respuesta de paquete CTS desde el nodo receptor, se transmiten los paquetes. Sin embargo, si aumentan las colisiones, es más probable que los paquetes RTS sólo se transmiten en lugar de la secuencia completa RTS-CTS-DATA-ACK. Por lo tanto, el número de paquetes transmitidos disminuye y S-MAC tiene menos energía el consumo.

      5. Proporción de entrega de paquetes de S-MAC y PS-MAC


      La figura 5 muestra comparación ente las proporciones de la entrega de paquetes en diferentes intervalos de tiempo. La relación de la entrega de paquetes se define como la relación entre el número de paquetes recibidos con éxito a la de los paquetes transmitidos. Como se muestra en esta figura, PS-MAC tiene una relación de la entrega de paquetes más alto que S-MAC en todas las situaciones.
      Por otra parte, cuando el tiempo entre llegadas es inferior a 30 segundos, PS-MAC es mucho mejor que el S-MAC. Esto sucede debido al programa de sincronización en S-MAC, lo que resulta en una gran número de colisiones en situaciones de carga de tráfico pesado. Sin embargo, en PS-MAC, debido a la programación asíncrona los tiempos de escucha-espera entre cada par de nodos, el número de colisiones disminuye proporcionando una relación de entrega de paquetes más alta.

      6. Eficiencia energética de PS-MAC relativa a S-MAC

      La figura 6 muestra la eficiencia energética de PS-MAC relativa a S-MAC. Se muestra el consumo de energía por paquete transmitido con éxito para cada protocolo. Como se muestra en esta figura, PS-MAC tiene mejor rendimiento que el S-MAC. Por otra parte, como el tráfico cargas se vuelven más pesados​​, PS-MAC proporciona una mayor eficiencia energética que S-MAC. Este resultado nos dice que en S-MAC, el desperdicio de energía es mucho más grande en situaciones de carga más pesadas debido a la mucho mayor número de colisiones en comparación con PS-MAC.



      Conclusión

      Como se puede ver en los experimentos, me parece que el método propuesto es bastante bueno, ya que, establecer periodos donde los nodos permanecen activos y después entran en espera o dormidos parece ser una solución bastante simple y lógica, que mejor forma de ahorrar energía que apagar los nodos cuando no están haciendo nada.
      Como ya puede leer, el único detalle es el establecimiento de dichos intervalos de escucha-espera, ya que se hace de forma pseudoaleatoria, pienso que en este aspecto aún se puede mejorar más. Es de esperarse que en condiciones de tráfico pesado el modelo propuesto se comporte un poco peor, pues los periodos de espera son pseudoaleatorios, una distribución pseudoaleatoria obvio no corresponde al comportamiento real del tráfico en una red, por lo que los nodos pueden entrar en espera aún cuando realmente deben estar despiertos porque la red se los exige. Lo bueno es que este método se puede adaptar a las condiciones de cada red modificando las probabilidades y el número de semillas.
      Sin embargo, los experimentos demuestran que el modelo propuesto es mejor a uno ya existente por lo que se puede decir que el experimento fue exitoso.
      Como trabajo adicional se puede experimentar con los diferentes parámetros para establecer las probabilidades reales de preactivación que proporcionen resultados mejores en condiciones de congestión alta.


      Referencias

      An Energy-Efficient MAC Protocol with Random

      Listen-Sleep Schedule for Wireless Sensor Networks

      Sung-Chan Choi∗ , Jang-Won Lee∗ , Yeonsoo Kim† , Hakjin Chong†
      ∗ Dept. of Electrical and Electronic Engineering, Yonsei University, Seoul, Korea
      † Future Technology Laboratory, KT, Seoul, Korea

      ** Imágenes tomadas del respectivo paper.

      [RT] Tarea 5: Control de congestión

      Para ésta semana se tuvieron que realizar las siguientes 3 actividades:

      "Desarrollen para ns-2/3 un módulo que permite
      • Crear topologías
      • Generar “patrones” tráfico 
      • Comparar por lo menos dos diferentes esquemas de control de congestión (inventados por ustedes mismos, no anden googleando ni por ideas ni por código)"

      1. Crear topologías y habilitar métodos de ruteo


      Código que permite crear topologías de tipo:

      • Estrella
      • Anillo
      • Malla
      • Scale-Free
      • Small-World


      Además poder habilitar diferentes métodos de ruteo unicast, multicast y adhoc



      2. Generar tráfico

      Código que permite generar tráfico sobre UDP o TCP, se puede configurar para seguir distintos patrones y distribuciones de probabilidad para hacerlo más realista.



      3. Esquemas de control de congestión

      Para el control de congestión, diseñe 2 esquemas muy simples, los cuales detectan una congestión basándose si hay o no pérdida de paquetes y la medida que toman para controlar la congestión es controlar la tasa de transferencia directamente.
      Los esquemas se comportarían de la siguiente forma:

      • El primero necesita evaluar primeramente las condiciones de consumo de banda ancha, por eso en una primera etapa comienza con una tasa de transferencia pequeña que aumenta linealmente en pasos iguales. Si no se detecta ninguna pérdida entonces la tasa de transferencia comenzara a aumentar exponencialmente, al doble del paso anterior en cada tiempo, hasta llegar al tope de la cantidad de banda ancha disponible para esa conexion. Cuando se detecte la primera pérdida de paquetes entonces la tasa de transferencia cae hasta un 10%, después todo el proceso comienza de la misma forma, los paquetes perdidos se reenvian al estilo fast-retransmit en la primera oportunidad. Con esto espero que las colas de paquetes se vacíen un poco antes de volver a transmitir a la misma eficiencia que antes.
      Comportamiento esperado


      • El segundo comienza con un aumento progresivo en la tasa de transferencia, evaluando las condiciones de la red y el consumo mientras aumenta. La tasa de transferencia esta acotada por el máximo de banda ancha disponible, así que, conforme la tasa de transferencia se acerca al tope, esta comienza a frenarse poco a poco, digamos que se comporta como una gráfica logarítmica. Si se detecta una pérdida de paquetes entonces la tasa de transferencia cae un 30% y vuelve a aumentar de la misma forma que antes. De la misma manera, se espera que las colas de datos se vacíen un poco antes de volver a enviar datos. La recuperación también es rápida adoptando los esquemas de fast-recovery y fast-retransmit de los protocolos TCP.
      Comportamiento esperado




      Sin embargo, la implementación de los esquemas de control de congestión están muy apegados al diseño de los llamados agentes (que suelen representar protocolos de capa 4 [TCP, UDP]).
      La correcta implementación requiere tener conocimientos de programación C++ y si es posible, creación de patches para modificar el código existente en NS-2 en partes específicas.
      Dentro de la carpeta donde descomprimimos NS-2 habrá una carpeta con el nombre ns-2.35, dentro se  encuentran ordenados por carpetas los diferentes protocolos disponibles.
      Si queremos crear un nuevo esquema, agente o protocolo, debemos crear su carpeta ahí y dentro crear por lo menos 2 archivos:

      • Header (*.h): Que como sabemos, en C++ contiene la estructura del nuevo agente, los métodos y atributos.
      • Código (*.cc): Que contiene el desarrollo de los algoritmos necesarios para manipular las colas de datos, tablas de ruteo, estructuras de los paquetes, mensajes, timers, etcétera. Aqui es donde se implementa todo el código.
      El tutorial escrito Marc Greis en http://www.isi.edu/nsnam/ns/tutorial/index.html indica de forma precisa como implementar un nuevo agente, en éste caso, emulando a PING.

      El tutorial escrito por Elmurod A. Talipov en http://elmurod.net/en/index.php/archives/157 indica la forma de agregar los nuevos agentes a NS-2 y modificar ciertos archivos para recompilar el código fuente y que estén disponibles para las simulaciones con TCL.

      Sin embargo, traté de seguir el tutorial con los ejemplos ahí incluidos y terminaba rompiendo el código fuente de NS-2, además de recibir múltiples mensajes de error al correr el makefile.


      Referencias