Linux Droids Blog

Experiencias y Proyectors robóticos de Sphinx

Detector de estasis 3 septiembre, 2010

Filed under: Electrónica,Mecánica,Programación — Sphinx @ 15:55
Tags: , ,

Mecánicaboton_electronica.pngProgramaciónA través de uno de mis blogs preferidos (es-robot.com , lo tengo en mi blogroll como podéis ver en la columna de la derecha), he leído un articulo sobre este dispositivo.

Me ha resultado interesante, sobre todo, después de haberme planteado mis propias dudas sobre robots móviles debido a mi trabajo en el proyecto PartyBot, y también después de haber leído el interesantísimo libro Robot Programming de Joseph Jones (del que dentro de poco escribiré un articulo también en este blog).

Estasis (que no éxtasis), traducido del termino ingles “stasis“.
Porque según la RAE:

Estasis .- (en Medicina) Estancamiento de sangre o de otro líquido en alguna parte del cuerpo.

Éxtasis .- 1. Estado del alma enteramente embargada por un sentimiento de admiración, alegría, etc. 2. m. Rel. Estado del alma caracterizado por cierta unión mística con Dios mediante la contemplación y el amor, y por la suspensión del ejercicio de los sentidos. << esta no es la definición que nos aplica.

…porque el detector de estasis o detector de estancamiento (otra acepción valida de traducir “stasis” al castellano) pretende proporcionar al robot la capacidad de detectar cuando se ha quedado atrancado o estancado, cuando el resto de sus sensores no le da ninguna información al robot sobre esta situación, y “engañado por sus sentidos” sigue intentando ejecutar una tarea que nunca conseguirá cumplir.

Pongamos por ejemplo un caso extremo, un robot móvil de dos ruedas (similar al PartyBot). Este en su actividad normal de desplazarse por una habitación, podría quedarse enganchado en una alfombra o similar, de modo que ninguna de sus ruedas tocase el suelo. Y podría ser que siguiera energizando sus motores, creyendo que está avanzando, porque sus sensores de giro de las propias ruedas le informan de que estas siguen girando normalmente. Y tampoco los sensores de proximidad de infrarrojos o los detectores de colisión (bumpers) le informarían de cambios en el entorno, puesto que no se mueve. Así que lo que el robot entiende es que estaría avanzando con normalidad. Luego con este conjunto de sensores no habría posibilidad de detectar la situación real de estancamiento en la que se encuentra el robot. Finalmente, no conseguirá completar su tarea, a pesar de que “él lo cree” así, sino que lo que realmente conseguirá será agotar sus baterías sin haberse movido ni un ápice.

Me he puesto en contacto con Chris Dawn, el autor del articulo sobre “la lógica del estasis”, y me ha concedido permiso para traducirlo al castellano y reeditarlo aquí, en mi blog junto con sus fotos. De modo que muchas gracias desde aquí a Chris, y no dudéis en dirigios a su web en caso de que queráis ver la versión original en ingles, u otros artículos interesantes sobre robótica.


Lógica del Estasis

por Chris Dawn.

PicBot IV en la arena robótica, lista para la prueba y la programación del estasis. Mi gato T'Pring se divierte mirando al pequeño robot como se mueve y salta de vez en cuando en él.

Introducción

En el entorno de un hogar un robot encontrará muchos obstáculos que podrá detectar y evitar fácilmente con los sensores de proximidad estándar de IR, o si va equipado con un sistema de detectores de colisión. Sin embargo, hay numerosas situaciones en las cuales el robot se atascará o se enredará, que no detectarán estos sensores. Los sensores de estasis cubren este vacío de información sensorial tan importante, y permitirán al robot intentar escapar para liberarse a si mismo y continuar con la tarea asignada. En este articulo, discutiremos métodos para la detección de estasis, y la programación de comportamientos asociados para su uso en un robot para el entorno de un hogar.

Uso detallado

En nuestra experiencia, cada robot para el hogar que hemos construido que no tenía un sensor de estasis, en cuestión de unas horas se quedaba atascado en las esquinas de los muebles, en una alfombra o en un simple cable eléctrico, sin importar lo bien construido que estuviese. La propia naturaleza del entorno del hogar presenta dificultades que no siempre podemos prever para todos los casos. Los robots para el hogar tienen generalmente dos modos de operación: Ejecución de una tarea, y desplazamiento hasta la localización donde tiene que realizar esa tarea. Éstas pueden definirse como una arquitectura de comportamientos en capas, tales que al desplazamiento hacia y desde un objetivo se puede acoplar en capas con el comportamiento del estasis en el nivel oportuno. Un ejemplo simplificado de esta arquitectura puede ser un comportamiento para “Deambular” en la capa inferior, en el nivel superior a este, el comportamiento para el “detector de colisión”, después un comportamiento para el “estasis”, y finalmente, la tarea primaria tal como agarrar una lata de bebida del refrigerador como capa superior. Con este tipo de arquitectura, si el robot se queda atrapado de camino al refrigerador y los sensores de colisión no detectan un impacto, el comportamiento de estasis entrará en juego e intentará para liberar al robot.

Técnicas para detectar el estasis

Aquí discutiremos diversas técnicas para detectar el estasis, y los problemas que aparecen con cada método.

Rueda de estasis

Éste es nuestro método preferido de detección de estasis. El concepto implica colocar una pequeña rueda en la parte inferior o detrás del robot, con un sensor óptico o mecánico para detectar la rotación. Según el robot ruede hacia su objetivo, la rueda también dará vueltas midiendo la distancia de desplazamiento y el sentido de la marcha. Codificando la rueda con líneas blancas y negras o agujeros podemos especificar mecánicamente la distancia mínima que la rueda debe girar para indicar una detección. Por ejemplo, para una rueda de 1 pulgada de diámetro con una circunferencia de 3 pulgadas, poner dos agujeros a 180 grados indicará que se desplazó una distancia mínima de 1.5 pulgadas. Esta táctica llegará a ser importante más adelante en nuestra discusión.

Sensor óptico de suelo

Un método obvio para la detección de movimiento es medir simplemente el brillo de un haz de luz reflejado sobre el suelo directamente debajo del robot. Esto se puede lograr fácilmente con un LED rojo que proyecta un círculo de una pulgada de diámetro encendido hacia el suelo, y mirando hacia esa área un fototransistor. Mientras que el robot se mueve sobre un suelo con cierto patrón tal como un suelo de madera o una alfombra, la reflectividad cambiará. Una gran desventaja de este método es que si el suelo es homogéneo o sin rasgos distinguibles, el sensor de estasis reportará una condición de estancamiento. También, incluso con un suelo irregular, se tendrá que utilizar de cierta forma un tiempo de integración para modelar los datos y sacar un patrón de variación continua sin picos. También ocurre muchas veces que el robot se enreda en un cable eléctrico, y el cuerpo entero del robot oscila hacia adelante y hacia atrás según intenta moverse. En estas condiciones el sensor óptico detectará que el robot sigue estando en movimiento, y no una condición de estancamiento.

Sensores de distancia IR

Otro método interesante es monitorizar la distancia a los objetos y a las paredes próximas. Si la distancia está cambiando constantemente, es porque el robot está en movimiento. Pero, sin embargo, además del problema de oscilación en el caso de enredo con el cable que comentábamos antes, en habitaciones más grandes el sensor podría no ver las paredes, e intentar escapar de … nada.

Sensores de distancia por sonar

Similar al caso del sensor de distancia IR, pero con mucho de más alcance. La mayoría de las habitaciones no serían un problema para este método de detección, y además puede proporcionar una cierta capacidad para evitar colisiones. El principal problema con este método es que su coste es alto.

Detectores visuales

Se puede utilizar una CMU Cam como detector del estasis, mientras haya suficiente contraste en la habitación para ver los objetivos móviles. Según el robot se acerque a una pared o a un obstáculo distante, el histograma cambiará continuamente. Esto también se puede utilizar para la detección del estasis, sin embargo el cómo fijar el umbral para establecer la condición de escape no está claro en absoluto. Éste es probablemente el método más costoso y complejo de los comentados.

Fotocélulas de luz visible

Pon un fototransistor en un tubo corto, y haz que apunte hacia delante. Según el robot se mueva, la salida variará. La integración de tal señal puede ser problemática, no obstante en una habitación con suficientes contrastes esta sería la solución sería viable y mas barata.

Sensor de campo magnético

Utilizar una brújula electrónica puede funcionar especialmente bien en un ambiente al aire libre. De precio moderado, según el robot se mueve, la brújula variará su ángulo de la salida. Un trayecto en línea recta naturalmente sería un problema, no obstante los pequeños cambios que ocurran mientras el robot se desplaza sobre rocas y otros obstáculos podrían ser detectados por el robot.

Detección de estasis mediante programa

Ésta es la solución más barata de todas, no obstante tiene un tiempo de reacción extraordinariamente lento. Aquí el área de trabajo del robot tiene un tamaño limitado, y por lo tanto si el robot no choca con ningún obstáculo al cabo de varios minutos de desplazamiento, pues se asume que probablemente esté atascado. Se puede basar en cualquier otro sensor que detecte una condición de impacto. Si no hay impactos durante un tiempo, se asume la condición de estasis. Aunque aparentemente sea barato y sencillo, el robot podría quemar sus motores durante los minutos que se tarde en entrar en la condición de estasis y ejecutar la rutina de escape.
Los robots aspiradoras baratos utilizan este método y pasan más tiempo atascados ¡que haciendo su trabajo!

Rueda de estasis: Diseño mecánico

El diseño mecánico básico es sencillo en si mismo, como se ha comentado. Hay varias maneras de implementar este diseño mecánicamente. Una técnica usada en nuestros robots Ostracode y PAAMI es un puntal en voladizo que sujeta a una rueda y la mantiene en contacto con el suelo, permitiendo el movimiento arriba y abajo de manera que en superficies desiguales el brazo pivote. Se monta un fotointerruptor en el brazo, para captar los sectores oscuros de la superficie de la rueda transparente. En PicBot IV, implementamos este concepto de una manera mucho más simple y una escala más pequeña para que se ajustase a los parámetros físicos del pequeño diseño del robot. Aquí, según se puede ver en las imágenes (ver más abajo), la rueda de fricción se monta directamente sobre un soporte con el optointerruptor muy cerca de ella, y con una hoja curvada de lexan como brazo, que actúa como resorte y presiona la rueda firmemente sobre el suelo. Este diseño fue fácil de montar, el brazo curvado era una tira de lexan doblada con los pequeños alicates con la forma requerida, dado que el lexan se puede doblar y no se rompe como el acrílico.

Aquí se pueden ver mecánica básica del sensor de estasis de PicBot IV. Esta es una vista frontal que muestra la rueda en contacto con el piso entre las ruedas motrices.

Aquí vista lateral muestra el puntal curvado de lexan el cuál lleva el optointerruptor, y aplica a una presión constante la rueda sobre el piso.

Vista frontal que muestra la fina rueda de estasis en contacto con el suelo.

Aquí estoy presionando sobre la rueda para mostrar que es el soporte curvado de lexan el que actúa como un resorte y hace que la rueda estén continuamente en contacto con el suelo.

Aquí está la rueda de estasis de nuestro robot de Ostracode. En ella utilizamos un disco negro con los agujeros perforados para que el sensor los detecte.

El sensor de estasis de Pammi es del tipo reflexivo y utiliza un sensor reflexivo de IR con una onda de salida de forma sinusoidal. Esta salida lo llevamos a un una puerta Schmidt para dar forma a la onda.

En el banco de prueba, hicimos girar la rueda de estasis a aproximadamente la tasa de rotación prevista con un pequeño motor para probar la forma de onda y su frecuencia de la salida.

Aquí se ve la señal de salida que practicamente va de 0V a 5V (2v/div.).

Dependiendo de cómo detectes la rotación de la rueda de estasis, se determinará la electrónica del interfaz. En Paami, utilizamos un módulo optoreflector de Fairchild QRB1114 y detectamos la reflexión del IR sobre una rueda codificada en sectores blanco y negro impresos. Esto requirió no sólo un amplificador operacional LM324 como buffer de la señal, sino que fue seguido de un disparador de Schmidt para conformar la onda antes de enviarla al procesador. Puedes hacerlo así porque ofrece una gran flexibilidad o como alternativa mucho más simple, hacer tu rueda de estasis fina y transparente de manera que puedas utilizar un fotointerruptor que quepa en la rueda. Utilizamos este método con PicBot IV, y con una resistencia de pull-up para la unidad NTE 3100 que proporcione niveles TTL sin buffering. Lo mejor es que con la mayoría de los procesadores PIC, tienen entradas con disparador de Schmidt ya incorporado, y conformarán automáticamente este tipo de forma de onda en una casi cuadrada para facilitar la interconexión. Para otros procesadores, sin entradas de Schmidt trigger, puedes agregar un circuito integrado 7414 con puertas Schmidt triggers, utilizar una de ellas y aprovecha las otras para otros usos.

Consideraciones de programación.

Afortunadamente, programar la detección de estasis es bastante directa. Esencialmente consiste en un autómata finito con dos estados primarios: Exploración y Escape. Durante el estado de la exploración, el sensor de estasis es interrogado continuamente para determinar una condición atasco. Esto se hace simplemente contando las transiciones durante un pequeño intervalo de por ejemplo 5 segundos. Si durante ese tiempo, la cuenta cae por debajo del valor previsto o es cero, se cumple la condición de atasco, y ésta es la condición de disparo para ir al estado de escape del estasis.

Para escapar del estasis, la idea general es invertir el sentido de movimiento durante una pequeña cantidad de tiempo y girar lejos del punto de disparo. La rutina más acertada que hemos utilizado en el ambiente de una casa es hacer un movimiento alternado de cada rueda hacia atrás. Aquí, movemos una rueda por vez de manera sucesiva, para escapar del cable de la lampara o del hilo de la alfombra en el que estamos atascados. Después de unos cuantos centímetros hacemos que el robot rote un angulo aleatorio para no reentrar en la condición de atasco de nuevo. Si el sensor de estasis se dispara una vez más en un margen de tiempo pequeño, podemos intentar escapar de nuevo o pedir ayuda y hacer que el robot se autodesconecte. Además, podemos añadir al procesador encargado del estasis una salida para informar de la condición de estasis a otros procesadores, tal que otros procesadores superiores de la arquitectura puedan utilizar esta información sensorial para tomar decisiones a más alto nivel.

Pruebas y evaluación

Nuestro campo de pruebas se utilizó para para la evaluación preliminar, y después el entorno de una casa real, tanto con suelos irregulares como suelos alfombrados. Aquí va un video del entorno de pruebas. Aquí puedes ver a PicBot funcionando sobre obstáculo muy fino (tablero de la espuma) y quedarse parado aunque las ruedas siguen girando a toda velocidad. Después de 3 segundos, el robot decide que está en una condición del estasis, y se parada, hace el sonido correspondiente, y después se aleja del obstáculo con movimientos alternos y hacia atrás de cada rueda. Entonces gira aleatoriamente, y continua moviéndose.

En el entorno de la casa, el robot funcionó muy bien tanto en suelos de azulejos, madera y alfombra. Al contrario que sobre superficies lisas en las que las ruedas se deslizan más fácilmente, en las alfombras se quedan atascadas casi inmediatamente tras impactar, así que podría ser interesante acortar el tiempo de 3 segundos para la condición de estasis.

Conclusión

Nuestra prueba y los datos a partir de nuestros dos robots caseros Ostracode y PAAMI fueron muy positivas anteriores, y han demostrado sin lugar a duda que un sensor del estasis es absolutamente esencial para hacer que el robot consiga salir de diversas situaciones en las cuales ningún otro sensor detectaría un problema. Es una añadido muy simple a considerar para tu propio robot, y con el cual obtendrás un robot que andará por tu hogar durante horas, o más bien durante días sin acabar atascado en cualquier alfombra, cable o la esquina de un mueble.

Anuncios
 

2 Responses to “Detector de estasis”

  1. nunes Says:

    Muchas gracias por la mención, como ves también sigo tu blog que me parece muy bueno! Este artículo mejora mucho el mío, enhorabuena.

    Me gusta

    • Sphinx Says:

      Gracias. Bueno, mejorarlo quizá no. Mi intención era centrarme en el contenido técnico y se me ocurrió contactar con el autor. Gracias de nuevo por la inspiración y por tus palabras. Saludos.

      Me gusta


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s