(a) robot movil guiado con vision visbot 1026

29
González et al. (2013) 1 Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana Robot Móvil Guiado con Visión (VISBOT) Juan C. GONZALEZ, Iván D. MORA, Johny A. VARELA Universidad Pontificia Bolivariana, Cir. 1 # 70-01, B11, Medellín, Colombia juancamilo.gonzalezve alfa.upb.edu.co Resumen: Este artículo describe el diseño y la implementación de dos prototipos funcionales de robot móvil guiado con visión. El primero de estos utiliza una webcam Logitech convencional y una BeagleBoard xM para realizar dos tareas: seguimiento de línea usando redes neuronales, y parqueo automático mediante reconocimiento de celdas y números en un ambiente controlado, aplicando sistemas de lógica difusa y maquinas de soporte vectorial. El segundo prototipo utiliza el sensor Kinect de Microsoft, y el framework ROS (Robotic Operating System) para resolver el problema de localización y mapeo simultáneo, SLAM (Simultaneous Localization and Mapping) usando odometría visual. Este proyecto se desarrolló en el Semillero A+D. Copyright © UPB 2013 Palabras clave: Visión de maquina, Robot móvil, Kinect, BeagleBoard xM, SLAM, ROS. Abstract: This paper describes the design and implementation of two mobile robots controlled with computer vision algorithms. The first prototype uses a Logitech webcam and BeagleBoard xM to perform two tasks: line tracking and automatic parking by cell and numbers recognition on a controlled environment. The second prototype uses Microsoft’s Kinect and ROS to solve the problem of Simultaneous Localization and Mapping (SLAM). Keywords: Computer vision, Mobile Robot, Kinect, BeagleBoard xM, SLAM, ROS. UPB_autoArt 2013-07-19, s 2013-11-12

Upload: jose-luis-romero

Post on 28-Nov-2015

50 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 1

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Robot Móvil Guiado con Visión (VISBOT)

Juan C. GONZALEZ, Iván D. MORA, Johny A. VARELA

Universidad Pontificia Bolivariana, Cir. 1 # 70-01, B11, Medellín, Colombia

juancamilo.gonzalezve alfa.upb.edu.co

Resumen: Este artículo describe el diseño y la implementación de dos prototipos funcionales de robot móvil guiado

con visión. El primero de estos utiliza una webcam Logitech convencional y una BeagleBoard xM para realizar dos

tareas: seguimiento de línea usando redes neuronales, y parqueo automático mediante reconocimiento de celdas y

números en un ambiente controlado, aplicando sistemas de lógica difusa y maquinas de soporte vectorial. El

segundo prototipo utiliza el sensor Kinect de Microsoft, y el framework ROS (Robotic Operating System) para

resolver el problema de localización y mapeo simultáneo, SLAM (Simultaneous Localization and Mapping) usando

odometría visual. Este proyecto se desarrolló en el Semillero A+D. Copyright © UPB 2013

Palabras clave: Visión de maquina, Robot móvil, Kinect, BeagleBoard xM, SLAM, ROS.

Abstract: This paper describes the design and implementation of two mobile robots controlled with computer vision

algorithms. The first prototype uses a Logitech webcam and BeagleBoard xM to perform two tasks: line tracking

and automatic parking by cell and numbers recognition on a controlled environment. The second prototype uses

Microsoft’s Kinect and ROS to solve the problem of Simultaneous Localization and Mapping (SLAM).

Keywords: Computer vision, Mobile Robot, Kinect, BeagleBoard xM, SLAM, ROS.

UPB_autoArt 2013-07-19, s 2013-11-12

Page 2: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 2

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

1. INTRODUCCIÓN

¿Cómo conseguir que un robot móvil sea cada vez más autónomo

y capaz de hacer tareas más complejas que sean de utilidad a los

humanos? Desde hace muchos años y en diversas partes del

mundo se trabaja en la solución de este problema usando visión

artificial. Gracias al avance de la tecnología, el uso de las técnicas

de visión artificial se está extendiendo rápidamente en las

investigaciones de robots móviles en entornos controlados. En la

Universidad Pontificia Bolivariana, en el Semillero de Automática

y Diseño (A+D), se desarrolló el proyecto Robot Móvil Guiado

con Visión, para el diseño y la implementación de prototipos con

aplicaciones en robótica móvil usando algoritmos de aprendizaje

y visión artificial. Con los logros obtenidos, se impulsa la robótica

inteligente en la región y en el país.

En este artículo se presentan los procedimientos y los resultados

de dicho proyecto. En la sección 2 se presenta el estado del arte,

en la sección 3 se explica el proceso de construcción del prototipo

seguidor de línea, la implementación del vehículo de parqueo

automático se expone en la sección 4. En la sección 5 se explica el

proceso de localización y mapeo simultáneo con Kinect.

Finalmente, en la última sección se dan las conclusiones.

2. ESTADO DEL ARTE

La estimación de la posición de un objeto o la identificación de

una ruta a seguir a partir de ciertas marcas guía para un robot en

movimiento o a partir de la percepción del entorno, la

identificación de formas o de color, etc. constituyen tareas

fundamentales en cualquier desarrollo de visión artificial aplicado

a la robótica móvil. Actualmente, este tipo de proyectos ha tenido

un gran auge debido al avance de los microprocesadores que

permite realizar procesamientos en tiempo real.

Se han desarrollado simulaciones que permiten observar el

diseño de un controlador difuso para el parqueo en reversa de un

vehículo terrestre no articulado. Además se muestra el desarrollo

de una interfaz configurable construida en Matlab, la cual permite

el control bien sea manual o automático del vehículo. (Restrepo

et. al, 2010)

Algunos proyectos elaborados por algunas universidades llevan

esta simulación a un prototipo. El proyecto llevado a cabo por la

Universidad de München, presenta una aproximación a la

adquisición y transferencia de las habilidades de un conductor

experimentado para un controlador de estacionamiento

automático. El controlador procesa la información de entrada

procedente de una cámara generando los comandos de dirección

correspondientes. Para la arquitectura del control hibrido se

consideraron dos enfoques: redes neuronales y lógica difusa.

(Chen, 1996)

Otro proyecto similar se llevó a cabo en la Universidad de

Florida, el cual consiste en demostrar experimentalmente el

funcionamiento de un vehículo que utiliza lógica difusa para el

parqueo en espacios reducidos. Los parámetros necesarios para el

Page 3: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 3

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

controlador son aprendidos mediante sistemas genéticos, los

cuales se adaptan a este para que realice la tarea de la forma más

óptima. (Gupta, 1989)

Chih-Yung Chen y Hsuan-Ming Feng desarrollaron un integrando

de transformadas Wavelet, mapas de organización, lógica difusa y

redes neuronales para implementar un sistema inteligente

mediante FPGA (Field Programmable Gate Array) y

microprocesadores que fuera capaz de mover un robot móvil para

que este lograra parquearse de forma automática en una celda.

(Aby et. al, 2011)

Se desarrolló y diseñó un algoritmo en redes neuronales en tiempo

discreto para la aplicación en robótica móvil en la Universidad de

San Juan Argentina, buscando implementar controladores para

reducir las perturbaciones ocasionadas por las variaciones del

modelo debido a la cámara abordo. (Rossommando et. al, 2011).

El problema del SLAM ha sido planteado y resuelto por diversas

universidades del extranjero como se puede consultar en los

trabajos de Giorgio Grisetti (Grisetti et. al, 2008) y Sebastian

Thrun (Thrun, et. al, 2008). En estos casos se usaron filtros de

Kalman extendidos y filtros de partículas para la solución del

problema.

3. SEGUIDOR DE LÍNEA CON CÁMARA

A continuación se explica el diseño y puesta a punto del prototipo

de seguidor de línea con visión. Inicialmente se describe la

construcción de un primer prototipo usando la CmuCam 4 y se

explican sus limitaciones. Posteriormente se explica en detalle el

diseño y construcción del prototipo final usado para este fin.

3.1. Diseño del prototipo inicial

El prototipo inicial de seguidor de línea se implementó con la

cámara CmuCam 4 que permite desarrollar aplicaciones de visión

de forma rápida y sencilla con la ayuda de un microcontrolador de

la familia Arduino.

Dado que la cámara cuenta con funciones ya implementadas para

extraer ciertas características provenientes de la imagen, es una

buena herramienta para tomar una primera aproximación al diseño

de controladores con visión artificial.

Usando las librerías propias del dispositivo, se pueden extraer

características tales como el centroide de una zona de la imagen

de un color determinado, la media, mediana y desviación estándar

de cada uno de los canales del espacio del color fundamental

(RGB, rojo, verde y azul), o el histograma de la imagen (con

posibilidad de seleccionar el numero de agrupaciones que este

realiza), entre otros.

Para este problema, se configuraron los parámetros de la cámara

para seguir zonas de color negra y obtener el centroide de esta

zona. Una vez se tenia este centroide se implemento un control

proporcional que usaba como referencia el centro de la imagen, y

que mediante la manipulación de los motores del robot móvil, se

orientaba para hacer que el centroide se mantuviera siempre

Page 4: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 4

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

cercano a la referencia. De este modo, si el centroide se

desplazaba hacia la izquierda, se hacia girar el motor derecho

hacia adelante y el motor izquierdo hacia atrás (girando hacia la

izquierda el robot móvil), si se desplazaba hacia la derecha se

daba una orden de control opuesta (girando hacia la derecha el

robot móvil), y si estaba cerca del centro, se ordenaba al robot

marchar hacia adelante.

La plataforma usada para este prototipo inicial se muestra en la

Figura 1. En este caso se utilizo un Arduino Mega, pues en el

Arduino Uno no era posible modificar el programa con la cámara

conectada, debido a que este solo tiene un puerto serial, y al

ocuparlo la cámara, no era posible establecer la conexión con la

IDE (Integrated Development Environment) en el ordenador,

dificultando así el proceso de calibración y puesta a punto del

controlador.

A pesar de las múltiples ventajas por hardware, la CmuCam

presentaba ciertas limitaciones al momento de llevar a cabo el

seguimiento de línea. Debido a que se limita el número y tipo de

características que se pueden extraer de la imagen, no es posible

realizar giros complejos (como un ángulo recto o una forma

cerrada). Por lo tanto solo se puede realizar un seguimiento de

línea básico sin ningún tipo de discontinuidades. Por esta razón,

se decide unir la función de seguir línea al segundo prototipo

usado para el parqueo automático en ambiente controlado.

Figura 1. Prototipo inicial del seguidor de línea con CmuCam 4 y

Arduino Mega

3.2. Diseño del prototipo final

En esta sección se explica como fue construida la estructura final

usada para el seguidor de línea, y las características de las

unidades de procesamiento seleccionadas.

Diseño de la estructura. La estructura final empleada se muestra

en la Figura 2. Se utilizo un diseño en acrílico de dos niveles que

permitiera ubicar todos los componentes necesarios para el

funcionamiento del robot.

Page 5: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 5

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Las llantas seleccionadas son llantas de goma de 7 cm de diámetro

y 1.8 cm de ancho empleadas en aeromodelismo, y en la parte

frontal tiene acoplada una rueda libre para mejorar el apoyo.

Unidad de procesamiento. Debido a que el robot es totalmente

autónomo y además deberá procesar una gran cantidad de

información suministrada por la cámara, es indispensable el uso

de un buen procesador. Se usó la tarjeta de desarrollo

Beagleboard xM desarrollada por Texas Instruments, mostrada en

la Figura 3. Esta tarjeta contiene un procesador Cortex A8 1 GHz,

lo que le permite trabajar similar a una laptop. El sistema

operativo seleccionado para el desarrollo del robot es Ubuntu, este

sistema operativo le permite a la tarjeta tener una velocidad de

procesamiento mucho mayor debido a su buen manejo de los

recursos del sistema. Los puertos que tiene la tarjeta son

suficientes para la conexión del Arduino Uno (para el control de

motores), y para la conexión de la cámara (sensor).

Control de Motores. Para el control de los motores, se decidió

utilizar la tarjeta Arduino Uno. Este microcontrolador está basado

en ATmega328, con 14 pines de entrada y salida, de los cuales 6

son análogos, permitiendo utilizarlas como salida de PWM

(Pulse-Width Modulation), además tiene un cristal de 16 MHz lo

que le permite funcionar de una manera rápida. Este

microcontrolador es muy utilizado en proyectos de ingeniería, lo

que permite acceder a grandes cantidades de información en

internet, facilitando su uso y resolución de posibles problemas que

se presentan en el trascurso del proyecto (ver Figura 4).

Figura 2. Prototipo diseñado para el seguidor de línea y el parqueo

automático

Figura 3. Tarjeta Beagleboard xM. Tomado de Beagleboard

(2012)

Page 6: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 6

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Figura 4. Tarjeta Arduino Uno. Tomada de Arduino Main Board

(2012)

Además, para el control de los motores se eligió un puente H de

referencia L298N, debido a que permite invertir el sentido de giro

del motor fácilmente con comandos provenientes del Arduino

Uno, y permite modificar su velocidad mediante variaciones en la

señal del PWM.

Sensor de Visión. Se utilizó la cámara Logitech C170 compatible

con la tarjeta Beagleboard xM. Esta cámara tiene un tamaño

adecuado para el robot móvil y permite cambiar el ángulo de

visión debido a su diseño ergonómico. La cámara Logitech C170,

tiene una resolución de 640 x 480 pixeles y captura video a una

velocidad de 30 cuadros por segundo (ver Figura 5).

Figura 5. Cámara Logitech C170. Tomada de Testfreaks (2012)

Fuente de energía. El robot móvil debe ser autónomo respecto al

suministro de energía, por lo tanto esta debe estar a bordo del

robot. Se decidió utilizar 6 baterías AA que dan un voltaje de 9 V,

los necesarios para la alimentación de los motores, y una batería

de ion polímero de 3 celdas, capaz de entregar un voltaje de hasta

12.6 V. Esta última es conectada a la entrada de un regulador de

5V de referencia LM2576, que soporta corrientes de hasta 3 A.

Este arreglo se usa como alimentación para la BeagleBoard xM,

que requiere de 5V @ 1A para funcionar y de 500 mA por cada

periférico adicional que se conecte a esta.

3.3. Software

En este punto se consideraron dos alternativas para la solución del

problema, las cuales serán descritas a continuación.

Page 7: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 7

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Python. Una posibilidad es elegir este lenguaje de programación,

debido a que es multiplataforma, orientado a objetos, permite

programación imperativa y funcional, y ofrece un gran soporte y

documentación en línea que facilita en gran medida su desarrollo.

Para el procesamiento de imágenes y video, se usará Open CV

(Open Source Computer Vision Library) que es una librería de

código abierto que le permite a los desarrolladores del campo de

visión artificial, obtener muy buenos resultados y gran eficiencia

en el procesamiento de imágenes y video.

Matlab. La BeagleBoard xM tiene librerías de Simulink que

pueden ser utilizadas en conjunto con las herramientas de visión

artificial de Matlab para elaborar proyectos de robótica que

requieran control de actuadores mediante visión. De este modo,

utilizando tan solo un cable de red, es posible enviar programas

desde el Host donde se tiene instalado Matlab y grabar modelos

de Simulink que funcionan en la BeagleBoard xM.

Debido a que Simulink para Beagleboard xM está en una fase de

desarrollo temprana, no soporta completamente todas las

propiedades y herramientas de Matlab, como es el caso de la

comunicación vía serial, lo que imposibilitó mandarle ordenes al

Arduino para el control de los motores, por tal razón esta opción

de programación quedo descartada y se realizó el proyecto con

Python. Sin embargo cabe resaltar que el procesamiento de

imágenes con la librería de Simulink y la tarjeta Beagleboard xM,

permite desarrollar aplicaciones en tiempo real ya que posee gran

velocidad de procesamiento y estabilidad en la adquisición de la

imagen.

Con la integración de Python y Open CV, se creó un código

rápido y eficiente que procesa imágenes, controla motores por

medio de mandos seriales y permitió diseñar un control

inteligente para lograr un buen desempeño del robot móvil.

3.4. Procesamiento de imágenes

El diseño del control se puede separar en dos etapas. La primera

consiste en tomar datos y características relevantes del sensor, y la

segunda en utilizar dichos datos para crear un modelo de control

adecuado que cumpla con los objetivos planteados.

En esta sección se explican las etapas del procesamiento de la

imagen para extraer las características más relevantes que

alimentan el controlador.

Suavizado. También conocido como difuminado, es una

operación muy simple y usada habitualmente en procesamiento de

imágenes. Hay muchas razones para realizar un suavizado, pero

usualmente se hace para reducir el ruido y problemas en la captura

de la imagen por parte de la cámara.

Para esta aplicación se utiliza un filtrado de mediana, que consiste

en reemplazar cada pixel de la imagen por la mediana de los

pixeles contenidos en una máscara cuadrada de 3x3, cuyo centro

se ubica sobre cada uno de los pixeles. Lo que se consigue con

Page 8: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 8

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

esto es eliminar el ruido de disparo, que se manifiesta como

valores marginales en la distribución de pixeles de la imagen.

Segmentación. Con el fin de separar el color deseado de la imagen

(en este caso negro, pero puede ser reemplazado por otro color),

se aplica un algoritmo de segmentación a la imagen.

Este algoritmo lo que hace es poner en un valor de 255 (blanco)

todos los pixeles que se encuentren dentro del rango especificado,

y en 0 (negro) todos los que se encuentren por fuera de este.

Antes de pasar la imagen por este filtro, es conveniente cambiar la

imagen original del espacio de color RGB (Red, Green, Blue) a

otro más conveniente para hacer segmentación de color. El

espacio HSL (hue, saturation, lightness) es mucho más adecuado

para llevar a cabo esta tarea, debido a que es menos susceptible a

error ante cambios de iluminación en la imagen (Poudel, 2010).

Para determinar que valores de matiz, iluminación y saturación

son los correspondientes al color negro, se captura la imagen

usando Open CV, y mediante el visualizador de imágenes se

determina el rango en el cual se encuentran los pixeles de color

negro, como se muestra en al Figura 6. Los rangos encontrados

son: entre 0 y 180 para el matiz, entre 0 y 155 para la saturación, y

entre 0 y 255 para la iluminación.

Erosión. La erosión es una operación morfológica que consiste en

realizar una convolución entre la imagen deseada y un kernel,

generalmente de forma cuadrada, y de un tamaño determinado

(conocido como mascara). Este kernel busca encontrar el mínimo

local dentro de la máscara de convolución (Bradsky, 2008).

Figura 6. Imagen en espacio de color HSL, como se muestra en el

visualizador de imágenes de Open CV

De forma intuitiva, lo que hace esta operación es cerrar los

agujeros negros que pueden haber quedado dentro de lo

segmentos blancos obtenidos en el paso anterior. El resultado

final se muestra en la Figura 7.

Contornos. Una vez obtenida la imagen mostrada en la Figura 7

se puede proceder a buscar los contornos más relevantes de la

imagen.

Page 9: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 9

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Figura 7. Resultado de la operación de erosión. Izquierda: Angulo

recto, visto por el seguidor de línea. Derecha: celda de parqueo

Un contorno es una lista de puntos que define una curva en una

imagen. En Open CV estos son representados por medio de una

secuencia la cual codifica tanto la localización del punto actual,

como la localización del punto siguiente (Bradsky, 2008).

Una vez encontrados estos contornos, se encierran dentro de un

rectángulo (Bounding Box), y se filtran con el fin de eliminar

aquellos contornos cuya forma y tamaño sean despreciables. El

resultado para el caso del seguidor de línea se muestra en la

Figura 8.

Momentos. Si bien la secuencia obtenida en el paso anterior es

una representación de los contornos obtenidos, esta no resulta

muy útil para realizar control debido a la complejidad de su

estructura en árbol.

Un método común para clasificar contornos es usar sus

momentos. De manera informal, un momento se puede definir

como una característica obtenida a partir de integrar todos los

pixeles del contorno. En otras palabras, es la integral de línea

realizada sobre la superficie del contorno, en sentido antihorario.

En este caso, la integral se vuelve una suma sobre todos los

valores del contorno debido a la naturaleza discreta de la

estructura obtenida (Bradsky, 2008).

Figura 8. Línea negra encerrada en el Bounding Box tras la

extracción de contornos

De este modo se obtiene un vector de características de 7

posiciones, que no solo representa la forma del contorno, sino

también la orientación del mismo.

Para el seguidor de línea, se aísla el contorno más relevante de la

imagen (Figura 8), y se obtienen los momentos normalizados, que

son iguales a los momentos descritos anteriormente, desplazados

Page 10: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 10

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

un valor igual a la media de la secuencia. La expresión para

calcular estos momentos esta dada por

(1)

donde, p y q son los índices de los momentos, I(x,y) es la imagen

objetivo, xavg y yavg son las medias de los valores de x y y

respectivamente.

La ecuación (1) se implementa mediante el comando

getNormalizedMoments de Open CV.

3.5. Algoritmo de control

Redes neuronales. Una vez realizado todo el procesamiento de la

imagen, se usa el vector de momentos normalizados para entrenar

una red neuronal, y determinar así la acción de control más

adecuada.

Lo que se busca es identificar 3 posibles estados en los que se

puede encontrar el robot móvil: línea recta, giro hacia la derecha y

giro hacia la izquierda, y de este modo definir la acción de control

más adecuada para cada uno de los casos.

Para entrenar esta red se toman 50 datos de cada posible estado

(tomando en cuenta varios posibles ángulos de giro), y se llevan a

Matlab. Con la ayuda de la Toolbox para redes neuronales se

construye una red tipo feedforward con 7 nodos en la capa de

entrada, 10 nodos en la capa oculta, y 3 nodos en la capa de

salida. Las capas de entrada y de salida tienen función de

activación lineal (denominada purelin en Matlab), y las capas

ocultas función de activación sigmoidea.

La red se entrena usando el algoritmo back propagation, y se

obtiene una precisión del 96% en los datos de entrenamiento y

92% en los datos de validación (tomando este ultimo conjunto

como el 30% de los datos totales). Las matrices de pesos se llevan

a Python y con ayuda de la librería matemática Numpy, se

implementa la red neuronal.

La salida de la red define cada uno de los posibles estados en los

que se encuentra el seguidor de línea, etiquetando como 1 la línea

recta, como 2 el giro hacia la derecha y como 3 el giro a la

izquierda.

Acción de control. Una vez se define el estado, se decide cual es

la acción de control mas optima para cada caso.

Para esto se usa una máquina de estados finita, cuyo diagrama se

muestra en la Figura 9. Cuando se comienza el proceso el robot se

encuentra en el estado s0, en el cual activa la red neuronal, y con

esta determina en que estado se encuentra actualmente.

Una vez determinado el estado actual se pasa a uno de los 3

posibles estados s1, s2 y s3, cada uno con su correspondiente

acción de control u1, u2 y u3, que corresponden a la salida de la

red.

Page 11: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 11

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Figura 9. Máquina de estados finita, definida para el problema del

seguidor de línea

En los estados 2 y 3, la acción de control consiste en avanzar

hacia adelante hasta no registrar ningún contorno en la imagen

(indicando así que el robot se encuentra en el punto límite del

giro), y girar a la izquierda o a la derecha según el caso. Una vez

se comienza el giro se espera a registrar de nuevo un contorno (se

encuentra de nuevo la línea negra), y se regresa al estado s1.

En el estado s1 el robot debe realizar dos tareas: una de

verificación y otra de control. La de verificación consiste en

verificar cada 300 ms si se encuentra aun en s1, o si esta de nuevo

en el estado s2 o s3. Si encuentra que llego a s2 o s3 se realiza el

control explicado en el párrafo anterior. Si aún esta en s1, debe

realizar la acción de control correspondiente a este estado.

La acción de control u1, por otro lado, debe buscar mantener el

robot alineado con la línea negra. Si simplemente se le da la orden

de avanzar hacia adelante, no se logra un control óptimo debido a

la incertidumbre inherente de los actuadores. Por lo tanto se debe

usar como referencia algún parámetro de la imagen. En este caso

se usa la coordenada x del centroide del rectángulo que encierra el

contorno de la línea (punto rojo en la Figura 8).

El control usado para este fin es el mismo control proporcional

usado en el prototipo inicial descrito en la sección 3.1, es decir,

que la acción de control es proporcional a la diferencia entre el

centroide de la línea negra y el centro de la imagen.

4. SISTEMA DE PARQUEO AUTOMÁTICO

4.1. Descripción del problema

El sistema de parqueo automático tiene como objetivo simular

esta tarea dentro de un ambiente controlado. Para ello se ubica el

robot móvil dentro de un ambiente de 1.5 m x 1.5 m, rodeado de

paredes blancas, y en cuya superficie se encuentran impresos 4

dígitos modificables en el rango de 0 a 9. Cada uno de estos

dígitos tiene asignado una celda de parqueo, de orientación

variable, como se muestra en la Figura 10.

Page 12: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 12

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Figura 10. Celda de parqueo usada para el problema de parqueo

automático

El objetivo del robot móvil es dada una secuencia de números de

entrada, buscar estos dígitos en orden, y realizar el parqueo de

forma automática en cada una de las celdas correspondientes.

Para esto se deben resolver 3 problemas fundamentales:

identificar cual es la celda siguiente mediante el digito asociado,

determinar la posición del robot móvil respecto a la celda de

parqueo, y llevar a cabo la acción de control adecuada para

cumplir el objetivo planteado.

A continuación se explica la solución dada a cada uno de estos

problemas.

4.2. Procesamiento adicional de la imagen

Para el caso del parqueo automático se realizan todos los pasos de

pre-procesamiento explicados anteriormente en la sección 3.4,

excluyendo la obtención de los momentos. Sin embargo, se deben

realizar unos pasos adicionales que faciliten la obtención de datos

para la solución del problema. Estos se describen a continuación.

Obtención de los extremos de cada contorno. Para realizar el

proceso de identificación del estado actual del robot con respecto

a la celda de parqueo (explicado en la sección 4.4.), se deben

obtener los puntos más altos y más bajos de cada uno de los

contornos identificados en la imagen (puntos azules de la Figura

10).

En Open CV, estos se pueden obtener fácilmente de la estructura

secuencial que define a cada contorno. Solo basta con encontrar el

valor mínimo y máximo de cada secuencia con las funciones

argmin() y argmax().

Histograma de gradientes orientados. Es una técnica de

extracción de características ampliamente utilizada en visión de

máquina. Consiste en calcular los gradientes de la imagen de

entrada, y construir un histograma que muestre la distribución de

dichos gradientes (Bradsky, 2008). Esta distribución de

Page 13: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 13

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

gradientes es una representación de la forma del contorno de

entrada.

Para construir el gradiente se aplica el operador de Sobel tanto en

la dirección x como en la y, a la imagen obtenida tras el proceso

de erosión. Este operador es una mascara de convolución análoga

al operador derivación del cálculo diferencial, que permite

determinar la orientación de cada uno de los pixeles que

constituyen el contorno. Una vez definida la orientación de estos,

se puede construir el histograma mediante funciones de la librería

matemática Numpy.

4.3. Reconocimiento de dígitos

Máquinas de soporte vectorial. Esta metodología de aprendizaje

consiste en optimizar el separador que permite clasificar un

conjunto de datos de entrada, mediante la reducción del producto

vectorial entre el separador y el vector de pesos.

Este algoritmo de aprendizaje se utilizó para el reconocimiento de

dígitos. Inicialmente, se tomó como base un grupo reducido de

datos, pero posteriormente se uso un algoritmo que descargaba

estos datos en línea, y mejoraba así el desempeño del clasificador.

Este último aprendizaje tardó alrededor de 1200 s en realizarse, y

una vez terminado genera un archivo .DAT que puede ser leído

gracias a las funciones propias de la librería dedicada a SVM

(Support Vector Machine) de Python.

La característica usada como entrada para el algoritmo fue el

histograma de gradientes, cuya obtención fue descrita en la

sección anterior. Los datos fueron obtenidos de tal forma que se

entrenara un clasificador que fuera invariante ante la rotación de

los dígitos tal como se muestra en la Figura 11.

Figura 11. Clasificación correcta de los dígitos ante cambios en su

ángulo con respecto a la vertical

La SVM se entrenó usando un kernel gaussiano, y se usó una

constante de regularización C = 1.64, y una constante gamma

(parámetro de la gaussiana), γ = 0.26. Estos parámetros fueron

encontrados buscando un compromiso entre el error cuadrático

medio del conjunto de validación, y el error del conjunto de

entrenamiento (Marsland, 2009).

Page 14: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 14

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

4.4. Definición del estado actual

Para poder seleccionar la acción de control adecuada en cada caso

se emplea una metodología similar a la descrita para el seguidor

de línea. En este caso los estados se definen de acuerdo a la

posición relativa del robot móvil con respecto a la celda de

parqueo, tal como se define a continuación.

Estado s0. En este estado el robot móvil se encuentra justo al

frente de la celda de parqueo, tal como se muestra en la Figura 12.

Figura 12. Estado s0. Robot móvil frente a la celda de parqueo

Estado s1. En este estado el robot móvil se encuentra a la derecha

de la celda de parqueo, como se muestra en la Figura 13.

Figura 13. Estado s1. Robot móvil a la derecha de la celda de

parqueo

Estado s2. En este estado el robot móvil se encuentra a la

izquierda de la celda de parqueo, como se muestra en la Figura

14.

Para determinar en que estado se encuentra el robot móvil con

respecto a la celda de parqueo se debe usar un método de

clasificación que tomando los puntos clave de la celda (marcados

en rojo y azul en las Figuras 12, 13 y 14), determine la orientación

del robot respecto a esta. Sin embargo el método de clasificación

Page 15: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 15

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

que se seleccione debe ser capaz de reconocer cada estado sin

importar la distancia del robot a la celda de parqueo, ni la

inclinación que tenga respecto a esta. También debe ser capaz de

identificar la celda aun cuando no se puede capturar una de las

dos líneas de parqueo.

Inicialmente se probó con los dos métodos ya descritos de

aprendizaje de maquina (SVM y redes neuronales), pero los

resultados no fueron satisfactorios.

Una posible causa sería la naturaleza de las características usadas

(coordenadas de los puntos clave) y las características propias de

estos algoritmos, que son modelos tipo “caja negra” en los cuales

no es posible modelar la estructura del problema estudiado.

Figura 14. Estado s2. Robot móvil a la izquierda de la celda de

parqueo

Una metodología de clasificación ampliamente usada en el campo

de la Inteligencia Artificial es el modelamiento por medio de

redes bayesianas. La principal ventaja de estas redes es que

permiten modelar el problema de acuerdo a la experiencia de

quien la diseña, y que puede realizar predicciones acertadas con

muy pocos datos de entrenamiento.

La red planteada se muestra en la Figura 15. La idea central de

esta red es modelar la estructura y forma de la celda de parqueo,

teniendo en cuenta la inclinación de las líneas que delimitan la

celda. Se busca que la red tenga una estructura tipo árbol, en la

cual cada nodo solo tiene a lo sumo un padre de tipo continuo y

uno de tipo discreto, para facilitar así su entrenamiento.

El nodo marcado como K es una variable discreta que define el

estado obtenido tras la clasificación. Las demás variables son de

tipo continuo y están definidas por las coordenadas (x,y) de cada

nodo. La probabilidad conjunta de cada nodo es el producto de

las probabilidades individuales de x y y, es decir, se asume

independencia entre estos dos parámetros.

Para entrenar la red se usa la metodología de gaussianas lineales

condicionadas. Esta metodología consiste en asignar a cada

variable continua una distribución normal de probabilidad, cuya

media es una combinación lineal de las variables asociadas al

nodo padre, y cuya desviación se estima con la covarianza de las

variables de los nodos hijo y padre. Los detalles de las ecuaciones

obtenidas y la derivación matemática se pueden consultar en

Koller (2013).

Page 16: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 16

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

La rutina de entrenamiento se programa en Python, con ayuda de

la librería SciPy que permite resolver sistemas de ecuaciones

lineales y cálculos estadísticos de forma sencilla.

Figura 15. Red bayesiana planteada para clasificar el estado del

robot respecto a la celda de parqueo

La precisión obtenida tras entrenar el algoritmo y probar con el

conjunto de validación es de 96%, lo cual muestra la efectividad

de este acercamiento.

4.5. Acción de control

Una vez obtenido el estado actual del robot con respecto a la zona

de parqueo, se define la acción de control adecuada que le permita

a este parquearse de forma exitosa.

El control elegido para este caso es un controlador difuso, cuyas

características cambian en función del estado identificado. Estos

se explican a continuación.

Estado s0. En este estado, el vehículo ya se encuentra frente a la

celda de parqueo. Por lo tanto lo que debe hacer es seguir hacia

adelante y terminar la tarea. Sin embargo, al igual que el seguidor

de línea, se debe tener en cuenta el ruido inherente en los motores,

por lo que se debe seguir usando un controlador que tenga como

referencia el centroide, en este caso del número que identifica la

celda.

Con el fin de obtener un controlador que varíe de forma más

suave la velocidad, se diseña un controlador difuso, cuyos

conjuntos de entrada y salida se observan en las Figuras 16 y 17

respectivamente.

Para este caso, las reglas se muestran en la Tabla 1. Cabe anotar

que no se muestran los conjuntos de salida para el motor derecho,

pues estos son iguales al izquierdo. Solo cambian las reglas

aplicadas.

Page 17: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 17

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Figura 16. Conjuntos de entrada, variable: centroide

Figura 17. Conjuntos de salida, variable: speed_L/speed_R

Estados s1 y s2. Para el caso de los estados s1 y s2 se propone una

acción de control que consta de dos acciones: una rotación y una

traslación. Fijando la velocidad de giro como constante se

construye un sistema difuso cuyas entradas y salidas se muestran

en las Figuras 18 a 21, y sus respectivas reglas en la Tabla 2.

Tabla 1. Reglas lingüísticas para el estado s0

If Centroide Then …

Izquierda

SpeedL = Reversa

SpeedR = Adelante

Centro

SpeedL = Centro

SpeedR = Centro

Derecha

SpeedL = Adelante

SpeedR = Reversa

La idea central consiste en realizar un giro que aleje o acerque la

plataforma a la celda de parqueo, según que tan cerca se encuentre

a esta. Esto se evidencia con el parámetro del área del digito, que

al ser pequeña indica que se encuentra lejos y al ser grande indica

que esta cerca.

Tras realizar el giro por el tiempo definido en el conjunto de

salida, se realiza la traslación. El tiempo que se traslada hacia

adelante depende de la inclinación de las líneas de parqueo. De

este modo si estas son muy agudas, se hace un avance largo que

permita acercarse más a la celda, y si son muy rectas, se traslada

Page 18: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 18

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

muy poco, pues ya se encuentra cerca al estado s0. Una vez hecha

la traslación se vuelve a realizar un giro en sentido opuesto a la

anterior y se ubica de nuevo la celda de parqueo. Si ya se llego a

s0 se realiza el control indicado, de lo contrario se repite el

proceso anterior.

Figura 18. Conjuntos de entrada, variable: ángulo

Figura 19. Conjuntos de entrada, variable: área

Figura 20. Conjuntos de salida, variable: tiempo de giro

Figura 21. Conjuntos de salida, variable: tiempo de traslación

Page 19: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 19

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Tabla 2. Reglas lingüísticas para el estado s1 y s2

If …AND… Then …

Ángulo = Pequeño

Área = Lejos t_giro = Poco t_tras = Mucho

Ángulo = Pequeño

Área = Cerca t_giro = Normal t_tras = Normal

Ángulo = Pequeño

Área = Muy cerca t_giro = Mucho t_tras =Poco

Ángulo = Medio

Área = Lejos t_giro = Poco t_tras = Mucho

Ángulo = Medio

Área = Cerca t_giro = Normal t_tras = Normal

Ángulo = Medio

Área = Muy cerca t_giro = Mucho t_tras = Poco

Ángulo = Grande

Área = Lejos t_giro = Poco t_tras =Mucho

Ángulo = Grande

Área = Cerca t_giro = Normal t_tras = Normal

Ángulo = Grande

Área = Muy cerca t_giro = Mucho t_tras = Poco

5. LOCALIZACIÓN Y MAPEO SIMULTÁNEO (SLAM)

En esta sección se explica el diseño y puesta a punto del segundo

prototipo construido. Este prototipo utiliza el sensor Kinect y el

sistema operativo para robótica ROS, para resolver el problema de

mapeo y localización simultánea, cuya solución tradicional utiliza

sensores de distancia laser y encoders rotativos.

5.1. Definición del problema

SLAM, del inglés Simultaneous Localization And Mapping, es

una técnica usada por robots y vehículos autónomos para

construir un mapa de un entorno desconocido en el que se

encuentra, a la vez que estima su trayectoria al desplazarse dentro

de este entorno. Dicho de otra manera, el SLAM busca resolver

los problemas que plantea el colocar un robot móvil en un entorno

y posición desconocidos, y que él mismo sea capaz de construir

incrementalmente un mapa consistente del entorno al tiempo que

utiliza dicho mapa para determinar su propia localización. Este

mapa obtenido puede ser usado posteriormente para realizar tareas

de navegación autónoma.

Modelo del estado. La configuración de un robot móvil se

describe por 6 variables, 3 variables de traslación en el plano

cartesiano y 3 variables de rotación con respecto a estos ejes. Sin

embargo, la mayoría de aplicaciones de robótica móvil puede ser

modelada en 2D, por lo que el estado actual del robot puede ser

definido mediante las coordenadas (x,y), y la orientación respecto

al eje z.

Page 20: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 20

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Modelo control. Para definir el vector de control se pueden tomar

dos aproximaciones. La primera consiste en elaborar un control

PID (Proporcional integral Derivativo) que permita controlar el

vehículo dada una velocidad lineal y angular de entrada. De este

modo el vector de control Ut estaría definido por estos dos

valores.

Si no se cuenta con un driver para enviar este tipo de comandos a

las ruedas del robot, se puede optar por la segunda opción que

consiste en tomar los datos directamente del sensor de odometría

e interpretar el cambio de posición registrado, como una orden de

control. Este tipo de acercamiento será el usado en este caso.

Modelo sensor. Para el problema de SLAM, el sensor más común

es un sensor laser de distancia. Este sensor puede ser modelado

por una serie de parámetros que caractericen el rango y alcance de

la medida.

Los parámetros fundamentales definidos en ROS para este tipo de

medida son: ángulo mínimo y máximo de la muestra tomada, y la

sensibilidad de esta medida, alcance mínimo y máximo del laser y

el tiempo entre medidas.

Como en este problema no se cuenta con un sensor laser, lo que se

hace es tomar la imagen de profundidad del Kinect (obtenido

mediante algoritmos de visón estéreo), y mediante un algoritmo,

se convierte esta medida en medidas falsas tipo laser. Este proceso

de conversión se explica en las secciones siguientes.

5.2. Plataforma construida

Antes de construir la plataforma, se deben considerar que sensores

se van a utilizar, la alimentación que requieren y la unidad de

procesamiento empleada.

Unidad de procesamiento. Para llevar a cabo el proceso de

localización y mapeo se requiere una unidad de procesamiento

potente, pues los algoritmos involucrados en este son muy

complejos para tarjetas pequeñas como un Arduino o sistemas

embebidos como la BeagleBoard Xm. Por lo tanto se selecciona

un computador portátil HP, con sistema operativo Ubuntu 12.04.

El programa utilizado para este fin es el sistema operativo para

robótica (ROS) desarrollado por Willow Garage, el cual permite

ejecutar todos los procesos en paralelo, y por medio de nodos

independientes. La distribución seleccionada para este caso es

Groovy, pues presenta gran compatibilidad con varios paquetes de

ROS y tiene muy buena estabilidad (en cuanto al soporte de los

archivos y la documentación asociada).

Sensores. Como se mencionó en la sección 5.1, se requieren dos

tipos de sensores, uno para estimar el estado del robot

(odometría), y otro para sensar el entorno y construir el mapa.

Para la odometría se seleccionan dos sensores. El primero se

conoce como una unidad de medición inercial de 6 grados de

libertad, que consta de un giróscopo y un acelerómetro de 3 ejes.

Con este se puede estimar la orientación del robot de forma

precisa por medio de cuaterniones (Grisetti, 2009).

Page 21: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 21

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

El sensor elegido es de referencia ADXL 345 para el acelerómetro

e ITG 3200 para el giróscopo. La tarjeta se muestra en la Figura

22.

Figura 22. IMU 6DOF de SparkFun Electronics

Sin embargo con este sensor solo se tiene una medida precisa de

la rotación. El segundo sensor seleccionado para completar la

medida de odometría es el Kinect, que mediante algoritmos de

flujo óptico puede determinar el desplazamiento relativo de la

cámara. El procedimiento para esto se explica en la sección 5.3, y

el Kinect se muestra en la Figura 23.

Figura 23. Sensor Kinect de Microsoft

Este mismo sensor es el utilizado para obtener las medidas falsas

de laser, con lo cual se cumplen los requisitos planteados.

Actuadores. Para la locomoción de la plataforma se seleccionan

dos servomotores de rotación continua Parallax. Estos servos

presentan un torque elevado y pueden ser manipulados

directamente por la tarjeta de control, Arduino Mega, sin

necesidad de usar puente H o batería externa.

Adicionalmente, se requiere de un Joystick que permita operar a

distancia el robot durante el proceso de mapeo. Para este fin se

utiliza un DualShock 3 de Sony.

La plataforma, con todos los sensores y dispositivos montados, se

muestra en la Figura 24.

Figura 24. Robot móvil, con los sensores instalados para SLAM

Page 22: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 22

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

5.3. Sistemas de localización

En esta sección se describen los métodos de adquisición de datos

para estimar la posición del robot. Primero se describirá el

proceso para adquirir la posición mediante algoritmos de visión, y

posteriormente se discute de forma breve las características de

comunicación con la IMU y el Arduino Mega.

Odometría visual. La odometría visual es el proceso de

determinar información de posición y orientación usando

secuencias de imágenes para estimar la distancia recorrida.

Permite realizar navegación de forma más exacta, especialmente

para robots móviles desplazándose en superficies irregulares.

Las primeras etapas para estimar odometría mediante algoritmos

de visión son la adquisición de las imágenes y el procesamiento

preliminar (como suavizado y filtrado).

Posteriormente se deben obtener las características más relevantes

de la imagen. Para esto se pueden emplear operadores especiales

como SIFT (Scale Invariant Feature Tranform) o SURF (Speeded

Up Robust Features). Este último se prefiere en varias

aplicaciones debido a que presenta un desempeño mucho más

óptimo y es de libre uso (mientras que el primero requiere licencia

para ser usado).

Con estas características se puede construir el flujo óptico

mediante el algoritmo de Lucas-Kanade, que asume que el flujo

de un pixel es uniforme en su vecindad, y con esto resuelve la

ecuación del flujo óptico definida en Lee Yee (2009).

Una vez construido el flujo, se elabora un histograma con las

velocidades obtenidas y se eliminan los datos marginales, con el

fin de eliminar la influencia del ruido. Por último se aplica un

filtro de Kalman para estimar de forma correcta el estado. Este

filtro se va a describir en la sección 5.4.

Unidad de medida inercial. Para tomar los datos de la IMU

mostrada en la Figura 22, se usa una tarjeta Arduino Mega.

Mediante el protocolo I2C se envían comandos a la tarjeta y esta

envía las medidas del acelerómetro y el giróscopo. Estas medidas

son enviadas en gravedades y en º/s, por lo que deben ser

procesadas para pasarlas a m/s2 y rad/s.

Creando un nodo de Arduino en ROS se pueden enviar todos

estos datos al computador, en donde se forma posteriormente el

mensaje adecuado.

5.4. Filtros bayesianos

Un filtro bayesiano es una red bayesiana dinámica cuya estructura

básica se muestra en la Figura 25. El filtro consiste en dos pasos

básicos: uno de predicción en el cual se estima el siguiente estado

más probable dado el estado actual y la orden de control

ejecutada, P(st|st-1,ut). El segundo paso es una actualización que

consiste en multiplicar la predicción del paso anterior, por la

probabilidad de hacer una observación con el sensor laser en el

estado actual, P(zt|st).

Page 23: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 23

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Estos pasos de predicción y actualización se desarrollan de forma

distinta depende del tipo de filtro. En esta sección se explican los

conceptos básicos de los filtros usados. Primero se explica el filtro

de Kalman extendido que se utiliza para filtrar las medidas de los

sensores de odometría, y el filtro de partículas en su formulación

más general. Posteriormente se explica una modificación de este

último que puede ser empleada para realizar tanto localización

como mapeo de forma simultánea.

Figura 25. Esquema general de un filtro bayesiano

Filtro de Kalman extendido (EKF). La idea general de un filtro de

Kalman es modelar todas las variables de forma continua, y

asociar a estas una distribución normal de probabilidad. Para

realizar la estimación y la actualización de los estados se plantean

sistemas lineales en función de los estados anteriores, las acciones

de control y las medidas tomadas. A estas ecuaciones se adicionan

vectores de ruido que modelen la incertidumbre de sensores y

actuadores.

Las ecuaciones son de la forma:

(2)

donde xt es el estado actual, xt-1 es el estado anterior, zt es la

medida, ut es la acción de control, y es la incertidumbre en

el control y la medida respectivamente.

Sin embargo, asumir que las transiciones y medidas son funciones

lineales no es aplicable a muchas situaciones prácticas. Por esta

razón se plantea el filtro de Kalman extendido que generaliza el

conjunto de ecuaciones (2), a un sistema no lineal, tal como se

muestra en el sistema de ecuaciones (3), dado por:

(3)

donde g y h son funciones no lineales.

En este caso el EKF va a ser usado para acoplar las medidas

provenientes de la odometría visual y la IMU, con el fin de

conseguir una estimación corregida, menos vulnerable al ruido de

cada sensor por separado. Su implementación en ROS se explica

en la sección 5.5.

Filtro de partículas. El filtro de partículas es una alternativa de

implementación no-paramétrica de un filtro bayesiano. En este

Page 24: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 24

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

caso la probabilidad a posteriori se aproxima usando un número

limitado de parámetros.

La idea de este algoritmo es aplicar el filtro de Bayes de forma

discreta. Como entrada al algoritmo se debe dar un vector de

partículas, cada una definida por una muestra y un peso.

De forma iterativa se obtienen muestras a partir de la distribución

de probabilidad P(st|st-1,ut), y una vez obtenida la muestra se le

asigna un peso en base a la probabilidad de que se pueda dar ese

estado, según la distribución P(zt|st).

Una vez se obtienen todas las partículas, estas se vuelven a

muestrear en función de su peso, y se crea un nuevo conjunto.

Este proceso se repite hasta lograr la convergencia de las

partículas, punto en el cual el robot se ha localizado a si mismo.

De forma intuitiva lo que hace el filtro es estimar varios posibles

estados dada una acción de control determinada y un estado

actual, y después determinar cuales de estas medidas son más

acertadas de acuerdo a la medida realizada por el sensor laser.

Filtro de partículas Rao-Blackwell. La idea básica del algoritmo

consiste en aplicar las ideas desarrolladas en los filtros de

partículas, y aplicarlas al problema del SLAM.

Lo que se busca es encontrar la distribución dada por

(4)

donde m es el mapa de ocupación que se busca, x, z y u son

iguales a como se definieron en la ecuación (2), es decir el estado,

medida y control. Sin embargo en este caso se tiene en cuenta

todo el historial de variables en vez de solo la inmediatamente

anterior, esto es, no se hace la suposición de invariancia en el

tiempo de Markov (Koller, 2013).

La simplificación de Rao-Blackwell convierte la expresión dada

en (4) al producto dado por (5). Este producto plantea que primero

se estima la trayectoria realizada dado todo el historial de medidas

y acciones de control ejecutadas, y posteriormente estima el mapa

dada esa trayectoria.

(5)

Este algoritmo se implementa en ROS mediante el nodo Open

SLAM. Se pueden buscar dos alternativas de ejecución: hacerlo en

tiempo real donde cada paso de predicción y actualización se

repite varias veces de forma iterativa, y otra opción en la que se

guardan todas las acciones de control, medida y trayectoria, y se

estima el mapa en un solo paso. Estas opciones se exploran en la

sección 5.5.

5.5. Implementación en ROS

Una vez definidas las ideas centrales de los algoritmos

implementados, se procede a montar todo el sistema usando ROS.

A continuación se explican los detalles más relevantes de la

implementación de cada uno de los nodos.

Tele operación. Para hacer la tarea de mapeo se debe manejar el

carro de forma remota usando un dispositivo de control manual.

Page 25: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 25

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

En este caso se uso un mando de PlayStation 3, el DUALSHOCK

3.

El nodo de teleoperación recibe mensajes del joystick y los mapea

a una orden de velocidad angular y lineal. Estas velocidades son

enviadas al Arduino Mega mediante un nodo serial, y en este se

diseña una función que recibe el mensaje y los convierte en

órdenes para los motores, los cuales desplazan la plataforma

móvil. Con un adaptador BlueTooth 2.0, se logra que este mando

sea inalámbrico.

Nodo EKF. Este nodo recibe como entrada el mensaje de

odometría proveniente del Kinect (obtenido como se explico en la

sección 5.3), y el mensaje tipo Imu, proveniente del sensor del

mismo nombre.

Para construir este último mensaje se debe enviar por separado el

vector de aceleración, velocidades angulares y cuaterniones

provenientes del Arduino. Una vez están en el computador, se

convierten por medio de otro nodo a la sintaxis propia del

mensaje tipo Imu. Esto se debe hacer así, pues el tipo de mensaje

deseado es muy largo para ser enviado por la interfaz establecida

entre ROS y la tarjeta Arduino.

La salida de este nodo entrega la transformación de coordenadas

del eje de odometría al eje base. El significado de estos ejes será

explicado finalizando esta sección.

Conversión del mapa de profundidad a laser. Antes de comenzar

el proceso del SLAM, se debe convertir la información de

profundidad proveniente del Kinect, a un mensaje tipo laser. Esta

conversión se logra con el nodo llamado

depthimage_to_laserscan, que toma como entrada la imagen de

profundidad y da como salida la medida deseada, tal como se

muestra en la Figura 26.

Figura 26. Medida laser obtenida a partir de la imagen de

profundidad del Kinect

Nodo Open SLAM. Antes de lanzar el nodo de SLAM se deben

realizar algunas transformaciones de coordenadas adicionales

entre el eje base y el eje de referencia de la cámara, pero primero

se va a explicar el significado de dichos ejes.

Page 26: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 26

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Cuando se trabaja robótica móvil se pueden definir varios ejes

coordenados que sirven como referencia. El primero es el eje del

mapa que es del tipo mundo (es decir, se encuentra fijo en la

tierra). La posición del robot, relativa al eje mundo no diverge al

pasar el tiempo, pero se actualiza en pasos discretos, en base a las

medidas que provienen de los sensores. Debido a esto es una

buena referencia para realizar localización global, pero no es útil

para planear acciones a corto plazo.

El siguiente eje es el de odometría, que también es del tipo

mundo. Este eje obtiene su información a partir de las medidas de

los sensores, por lo tanto tiende a divergir con el paso del tiempo

(por el ruido presente en estos). Sin embargo la actualización del

estado del robot con el tiempo se hace de forma continua, por lo

que es útil para planear a corto plazo, más no para hacer

localización global.

Otro eje de gran importancia es el base, que se encuentra adherido

a la plataforma móvil. Este eje sirve como referencia para saber la

orientación y distancia de la plataforma móvil con respecto a los

otros dos ejes.

Para poder ejecutar el algoritmo de SLAM se deben tener las

transformaciones entre estos ejes. La transformación entre el eje

de odometría y base es entregada por el nodo EKF, y la

transformación entre la referencia de la cámara y el eje base se

hace manualmente midiendo en la plataforma la distancia entre el

Kinect y el centro del robot. La última transformada entre el eje

del mapa y el de odometría es el que entrega el nodo del SLAM,

tras ser lanzado con la teleoperación y la medida del laser

habilitadas.

Visualización RVIZ. Con el fin de visualizar todos los

procedimientos realizados se lanza la aplicación de ROS Rviz.

En esta se pueden visualizar varios gráficos que permiten

comprender mejor el proceso. El primero de estos es el diagrama

de ejes, que muestra la relación de transformación explicada en la

sección anterior. Este se presenta en la Figura 27. También se

pueden visualizar el mapa obtenido mediante SLAM (ver Figura

28) y los nodos y sus conexiones (ver Figura 29).

Figura 27. Diagrama de transformaciones entre ejes coordenados

Page 27: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 27

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Figura 28. Mapa de ocupación obtenido

Figura 29. Nodos lanzados para el SLAM

6. CONCLUSIONES

Durante el desarrollo de proyectos de ingeniería se deben tener

presente todas las posibles fuentes de error, y solucionar los

problemas de una manera eficiente, teniendo en cuenta que la

solución puede ser abordada desde otras disciplinas que no

siempre están relacionadas con las que se estudiaron en el

pregrado.

El uso de algoritmos de aprendizaje capaces de solucionar los

problemas planteados como el reconocimiento de números y el

control del robot móvil para llegar a la celda de parqueo, permiten

elaborar aplicaciones de ingeniería con cierto grado de

inteligencia, capaces de tomar decisiones de forma autónoma sin

necesidad de programar un sin número de reglas puntuales que

debe obedecer el robot móvil sin darle espacio a la incertidumbre,

tal como se hace en la programación tradicional.

El uso de herramientas como ROS permite construir aplicaciones

de robótica complejas, e integrar medidas de sensores de forma

fácil e intuitiva, a pesar de que su curva inicial de aprendizaje es

elevada.

Problemas como SLAM donde se trabaja en un ambiente

desconocido y estocástico, son los más interesantes en robótica,

pues tienen más aplicaciones a ambientes reales. Sin embargo, los

problemas en ambientes controlados también son de gran

importancia pues permiten plantear modelos del sensor que

pueden ser adaptados posteriormente a una aplicación real.

Page 28: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 28

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

Las plataformas embebidas como la BeagleBoard xM permiten

desarrollar aplicaciones usando sensores de mayor complejidad a

los que pueden ser trabajados con otras opciones de menor gama

como el Arduino, aunque este último es ideal para diseñar

controles de baja exigencia computacional, y tiene la ventaja de

permitir manipular los actuadores de forma directa.

El uso de redes bayesianas para problemas de clasificación

presenta ventajas respecto a otras técnicas de tipo “caja negra”

como las SVM y las redes neuronales, en cuanto permiten no solo

aprender de los datos obtenidos, sino además de la experiencia de

un experto en el tema abordado.

Las redes bayesianas dinámicas permiten realizar predicciones en

tiempo real para problemas que involucran sistemas variables en

el tiempo. Tal es el caso del filtro bayesino que permite corregir

las medidas en sensores y actuadores en tiempo real, a la vez que

puede predecir la distribución de variables desconocidas como el

mapa en SLAM.

REFERENCIAS

Aby, P.K.; Jose, A.; Dinu, L.D.; John, J.; Sabarinath, G.; Implementation and

optimization of embedded Face Detection system, Signal Processing,

Communication, Computing and Networking Technologies (ICSCCN), 2011. Arduino Main Board (2012). Arduino Uno. En línea,consulta 2013-03-

03,http://arduino.cc/en/Main/arduinoBoardUno

Bradsky, G. Learning OpenCV. O’Reilly, 2008. Chen, B.; Hoberock, L.L.; , "Machine vision recognition of fuzzy objects using a

new fuzzy neural network," Robotics and Automation, 1996.

Dynamo (2012). Plataforma todo terreno. En línea,consulta 2013-03-07, http://www.dynamoelectronics.com/components/com_virtuemart/shop_image/

product/todoterreno2.JPG

F.G Rossomando, C. Soria, R. Carelli.;, "Algoritmo compensador neural discreto de dinámica en robots móviles usando filtro de Kalman extendido" Instituto

de Automática, Facultad de Ingenieria, Universidad Nacional de San Juan,

Av. San Martin 1112, Marzo 2012, doi: 10.1109/ICSCCN.2011.6024553 Gardeazabal, D.; Ponomaryov, V.; Chairez, I, Fuzzy control for obstacle avoiding

in mobile robots using stereo vision algorithms, Electrical Engineering

Computing Science and Automatic Control (CCE). Grisetti, G; Stachniss, C; Burgard, W. Improved Techniques for Grid Mapping

with Rao-Blackwellized Particle Filters, 2009, University of Freiburg.

Gupta, M.M.; Fuzzy neural networks in computer vision," Neural Networks, 1989. IJCNN.

Koller, D. Probabilistic Graphical Models. En línea, consultado en 2013-08-07, www.coursera.org.

Lee Yee Siong; Mokri, S.S.; Hussain, A.; Ibrahim, N.; Mustafa, M.M., "Motion

detection using Lucas Kanade algorithm and application enhancement," Electrical Engineering and Informatics, 2009.

LiquidWare (2012). BeagleBoard xM. En línea,consulta 2013-03-

07,https://www.liquidware.com/shop/show/BB-XM/BeagleBoard+XM Marsland, Stephen. Machine Learning: An algorithmic perspective (2009). CRC

Press, USA.

Poudel, P.; Shirvaikar, M.; Optimization of computer vision algorithms for real time platforms, System Theory (SSST), 2010.

RestrepoAndrés, Jhony A. Cardona, Lucas F. López.; Control difuso para el

parqueo en reversa de un vehículo terrestre no articulado, Escuela de ingeniería (UPB), 2010.

ShenKhangTeoh; VooiVoon Yap; Chit Siang Soh; Sebastian, P.; Implementation

and optimization of human tracking system using ARM embedded platform, Intelligent and Advanced Systems (ICIAS), 2012.

Sutton, Richard. Reinforcement Learning (1998). The MIT Press. Cambridge.

Testfreaks (2012). Logitech C170. En línea,consulta 2013-03-07, http://www.testfreaks.es/webcams/logitech-c170/

Thrun, S. Probabilistic Robotics. 2008, Stanford University.

Page 29: (a) Robot Movil Guiado Con Vision Visbot 1026

González et al. (2013) 29

Facultad de Ingeniería Eléctrica y Electrónica Universidad Pontificia Bolivariana

AUTORES

Johny Alexander VARELA OSORIO, nace el

21 de agosto de 1988. Tecnólogo en

Telecomunicaciones (2009). En el 2009

comienza sus estudios de ingeniería

electrónica en la Universidad Pontificia

Bolivariana, en el año 2012 labora en la

empresa SMDigital en el cargo de

programador durante 9 meses. Actualmente es

egresado no graduado de la UPB y forma parte del semillero de

investigación en automática y diseño (A+D) de la UPB.

Juan Camilo GONZÁLEZ VÉLEZ, egresado

no graduado de Ing, eléctrica y electrónica en

la Universidad Pontificia Bolivariana,

egresado del Colegio Corazonista de

Medellín.

Iván Darío MORA OROZCO, docente titular

de la Facultad de Ingeniería Eléctrica y

Electrónica de la UPB. Magíster en

Automática con énfasis en robótica. Su

principal línea de trabajo es la Mecatrónica y

ha desarrollado trabajos en el área de control

de movimiento de robots manipuladores,

robótica móvil y visión artificial.

Actualmente es el Coordinador del Semillero

en Automática y Diseño A+D.