(a) robot movil guiado con vision visbot 1026
Post on 28-Nov-2015
53 Views
Preview:
TRANSCRIPT
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
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
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
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.
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)
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.
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
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.
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
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.
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.
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
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).
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
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).
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.
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
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
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.
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).
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
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).
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
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.
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.
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
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.
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.
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.
top related