Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica
←
→
Transcripción del contenido de la página
Si su navegador no muestra la página correctamente, lea el contenido de la página a continuación
Proyecto final de carrera: Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica Realizado por: Carlos Ezquerra Cerdán Director de proyecto: Miguel Ángel García García Año 2006 Ingeniería informática Unsiversidad Rovira i Virgili
Índice 1. Introducción ……………………………………………. 2 2. Objetivos del proyecto ……………………………………………. 4 3. Especificaciones ……………………………………………. 5 3.1 Hardware: ……………………………………………. 5 3.1.1 Robot Pioneer ……………...……………………. 5 3.1.2 Cámara Digiclops ………………………………...… 7 3.1.3 Conexión blue-tooth ……………...……………………. 8 4. Diseño general …………………………………………… 10 5. Movimiento inteligente del robot explorador …………………… 12 5.1 Introducción. …………………………………………… 12 5.2 Objetivos …………………………………………… 12 5.3 Diseño …………………………………………… 12 5.3.1 Mapa de decisiones ..….……………………………... 13 5.4 Implementación …………………………………………… 15 5.5 Entorno de trabajo …………………………………………… 16 5.6 Pruebas y resultados. …………………………………………… 16 5.7 Problemáticas detectadas y soluciones propuestas ……………. 26 5.8 Conclusiones. …………………………………………… 30 6. Auto localización del robot explorador …………………………………… 31 6.1 Introducción …………………………………………… 31 6.2 Objetivos …………………………………………… 32 6.3 Algoritmo slam3D …………………………………………… 33 6.4 Diseño …………………………………………… 37 6.5 Entorno de pruebas …………………………………………… 38 6.6 Implementación en el robot …………………………………… 38 6.7 Evaluación del algoritmo en el robot explorador ……………. 40 6.8 Conclusiones ………………………………………….... 71 7. Desarrollo del proyecto …………………………………………... 72 8. Conclusiones …………………………………………... 73 9. Recursos utilizados …………………………………………... 74 10. Manual de uso. …………………………………………... 75 1
1 Introducción Hoy en día el uso de robots está ampliamente extendido, de manera que encontramos desde robots artificieros hasta robots exploradores, pasando por la infinidad de tipos de robots que podemos encontrar, tales como los brazos articulados. En este proyecto nos centraremos en los robots exploradores. Los robots exploradores son aquellos que disponen de algún mecanismo de visión, ya sea por medio de cámaras o sensores, que les permiten explorar un entorno desconocido sin colisionar con los distintos obstáculos que se pueden encontrar en el terreno. Un ejemplo claro de robots exploradores son los robots Oportunity y Spirit de la Mars Exploration Rover (MER) Misión. Estos robots fueron enviados por la NASA en el año 2003 al planeta Marte para realizar un estudio de su superficie geológica. En nuestro caso, para implementar el proyecto, hemos elegido el robot explorador Pioneer P2AT mostrado en la figura 1. Fig. 1 El robot Pioneer P2AT es un robot explorador que cuenta con un anillo de 8 sensores de ultrasonidos para localizar los obstáculos, pero en nuestro caso se ha decidido que la exploración no se hará usando los sensores de ultrasonidos, sino que lo haremos mediante una cámara de visión estéreo. La cámara elegida para el caso es la cámara digiclops, mostrada en la figura 2. Fig. 2 2
La cámara dispone de 3 objetivos, por lo que podremos realizar imágenes en 3 dimensiones en las que podremos identificar la posición exacta de un punto de la imagen respecto donde estamos nosotros. Una vez tenemos definido que es un robot explorador y elegido el robot adecuado para la puesta en práctica de nuestro proyecto, veremos el apartado de la auto localización del robot. Como ya sabemos, la auto localización de un robot es muy importante. Dado que en entornos desconocidos puede que no dispongamos de GPS1, por ejemplo en otro planeta que no sea la tierra, necesitaremos un sistema de auto localización del robot, de manera que podamos saber en cada momento en la posición en la que está. De los elementos de los que disponemos con los que podríamos hacer una auto localización eficiente del robot tendremos los sensores de las ruedas del robot y la cámara. Desechamos el uso de los sensores de las ruedas por el grado de error que tienen y el que podrían tener dependiendo del terreno en el que se moviera el robot y nos quedamos con la cámara. Para la auto localización se utilizará un algoritmo de auto localización mediante la comparación de imágenes de una cámara de visión estéreo. Dicho algoritmo ha sido cedido para su uso por el Dr.Miguel Ángel García García. Por lo tanto, en este proyecto trataremos el algoritmo de movimiento del robot, el algoritmo de auto localización y los errores y problemas con los que nos podemos encontrar en ambos algoritmos. 1 Global Positioning System: sistema de localización por medio de más de 24 satélites que mediante ondas de radio indican al receptor su longitud, latitud y altitud en cualquier lugar de la tierra. Nótese que éste sistema sólo es útil en la tierra dada la posición de los satélites. 3
2. Objetivos del proyecto El objetivo principal del proyecto es la programación, evaluación e integración de los algoritmos de movimiento del robot, así como la integración y evaluación del algoritmo de auto localización del robot. Para conseguir estos objetivos deberemos definir una serie de objetivos a cumplir en cada una de las partes en las que podemos dividir este proyecto. Estos objetivos que debemos marcar son: 1. Estudio y comprensión de las librerías de movimiento del robot. 2. Programación, integración en el robot y evaluación del algoritmo implementado, viendo las limitaciones de éste y buscando soluciones satisfactorias para ellas. 3. Integración del algoritmo de auto localización con el programa de movimientos del robot. 4. Evaluación del algoritmo de auto localización en diferentes entornos. Éstos son los objetivos que deberemos cumplir en éste proyecto. 4
3 Especificaciones Los elementos utilizados en el proyecto han sido: 1. Robot Pioneer P2AT 2. Cámara Digiclops 3. Librerías Aria, Digiclops y Triclops 4. Conexión blue-tooth entre PC y Robot. A continuación comentaremos cada uno de éstos elementos. 3.1 Hardware 3.1.1 Robot Pioneer El robot seleccionado para el proyecto es el Pioneer P2AT. (Figuras 1 y 3). Fig. 3 El robot Pioneer P2AT es un robot todo terreno muy versátil, con software compatible con todos los MobileRobots2, elegido por gran parte de las empresas que requieren un robot de alto rendimiento con un grado alto de personalización. Fácil de usar y con gran poder es un robot excepcional para su uso en el exterior. El Pioneer P2AT ofrece la opción de utilizar un computador incorporado en el mismo robot, con lo que se podrá utilizar y programar con los programas y lenguajes convencionales y ya no se deberá programar directamente sobre el microcontrolador. Además dispone de conexión ethernet y otras funciones autónomas. En nuestro caso además se le han añadido los conectores usb para conectar el emisor/receptor de blue- tooth y de una tarjeta firewire para la conexión de la cámara. 2 MobileRobots es la gama de robots móviles de la empresa ActiveMedia Robotics. 5
El Pioneer P2AT dispone de ruedas gigantes, que le permiten superar gran cantidad de obstáculos, además de motores que le permiten alcanzar una velocidad de 0.8 metros por segundo y cargar más de 30 Kg. El robot Pioneer P2AT combinado con la librería Aria es capaz de: Vagar de forma aleatoria. Ser conducido mediante un joystick o teclado. Planear caminos. Mostrar un mapa de su sonar. Localizarse usando el sonar. Comunicar la información de control y los sensores. Simular mediante el simulador Saphira el funcionamiento del robot. El robot Pioneer P2AT está indicado para: Mapeado de terrenos. Navegación. Monitorización. Reconocimiento. Visión. Manipulación. Cooperación y otros comportamientos. La distribución de los ejes de coordenadas del robot la podemos ver en la figura 4. Fig. 4 Se ha podido comprobar que el robot tiene errores tanto en el desplazamiento como en el giro, de manera que se ha medido un desplazamiento de 50 cm. dando como resultado un desplazamiento de sólo 46.5 cm. Por lo tanto los movimientos del robot de cara a la auto localización se usarán sólo de forma orientativa para mirar que se realiza la auto localización de forma correcta. 6
3.1.4 Cámara Digiclops La cámara elegida para su integración con el robot ha sido la cámara Digiclops (figura 5), fabricada por Point Grey Resesarch. La cámara Digiclops de visión estéreo es un dispositivo sensorial que permite la captura de imágenes en 3 dimensiones en tiempo real, para aplicaciones como medida, modelado VRML, robots móviles, etc. Digiclops es una cámara calibrada que proporciona imágenes estéreo al software Triclops, que será el encargado de extraer la información de dichas imágenes. Digiclops es un revolucionario sistema de visión que combina las imágenes estéreo en 3D con la tecnología de las cámaras digitales. La cámara Digiclops realiza imágenes de alta calidad, con excelente calibración de la cámara, transmisión de imágenes digitales y configuración de los múltiples sensores. La combinación de sus características convierte a la cámara Digiclops en la cámara ideal para cualquier aplicación que requiera de un sistema de visión en 3 dimensiones. Fig. 5 Especificaciones: – Tres objetivos Sony ICX084. – Sensor de imagen de alta definición con píxeles cuadrados. – Formato VGA (640 x 480) – Búsqueda progresiva. – Iluminación mínima: 6 Lux – Lentes optimizadas para mejorar la visualización. – Alimentación: 12V 400mA proporcionada por cable firewire. 7
Para tratar las imágenes 3D y obtener la información de ellas lo hacemos como se ve en la figura 6. La posición X, Y, Z de un punto en la escena puede ser determinada por medio de la triangulación de los puntos en la escena. Fig. 6 La triangulación la realizaremos entre los puntos Pl, Pr y Pt obtenidos por la cámara de la izquierda, la de la derecha y la de arriba respectivamente bh y bv son las líneas horizontales y verticales del desplazamiento de la cámara. F es la longitud local de las cámaras. 3.1.3 Conexión blue-tooth Para la conexión entre nuestro PC y el PC interno del robot se utilizará una conexión mediante ondas de las conocidas como blue-tooth. Para la configuración de la conexión blue-tooth en entorno de desarrollo Linux se utilizarán los paquetes bluez-utils y bluez-pan. Una vez instalados los paquetes se deberá configurar la conexión para que cuando se conecte por medio del blue-tooth se configure de forma automática la conexión con la dirección IP seleccionada, que en nuestro caso será 10.0.0.1 para el servidor y 10.0.0.2 para el cliente. Por último deberemos activar el demonio pand seleccionando el tipo adecuado de servicio, ya sea servidor o cliente. Para el servidor deberemos escribir: Pand –listen –role GN Para el cliente el comando es: Pand –search –role PANU –service GN Con esto, por medio de una conexión ssh, nos podremos conectar al PC interno del robot desde nuestro PC. 8
Deberemos tener en cuenta las limitaciones de la conexión blue-tooth, de manera que si se utilizan comandos que requieran la transferencia de gran cantidad de información o ventanas gráficas se colgará la conexión, con lo que se requerirá el reinicio de los equipos que estén conectados. Por lo tanto, no mostraremos en tiempo real de forma gráfica los pasos que sigue el robot, sino que se guardará en un fichero de movimientos que puede ser consultado en cualquier momento. 9
4.Diseño general Para el diseño general de la aplicación crearemos diferentes módulos que serán utilizados desde un programa principal por medio de llamadas a sus funciones. De esta manera dividiremos los módulos en 2 tipos: Módulos de movimiento del robot. Módulos de auto localización del robot. El módulo de movimiento del robot contiene todos aquellos módulos que se utilizan para la conexión del robot, conexión de la cámara y decisiones de movimientos. El módulo de auto localización engloba todos los módulos del algoritmo Slam3D junto con el módulo que realiza la llamada a éste, que será el que se comunique con el programa principal. (diagrama 7). Movimi Programa ento? principal Módulo de conexión con auto localización Módulo de Módulo de auto movimientos localización Fig. 7 El robot generará diferentes archivos para su consulta. Éstos se eliminarán en cada movimiento para evitar la sobresaturación del disco y la degradación de su sistema de ficheros. Estos archivos son: Fichero_movimientos Æ en él se guardarán todos los movimientos hechos por el robot. Este archivo no se borrará y podrá ser consultado en cualquier momento, ya que se abre, se escribe y se cierra para cada uno de los movimientos que se realiza. 10
Puntos_sensor Æ fichero de puntos que muestra el mapa que ha creado el robot para decidir si girar a la izquierda, a la derecha o seguir recto. Este fichero se sobrescribirá en cada movimiento. Out*.ppm Æ foto que se realiza antes de cada movimiento. El archivo se borrará después de cada movimiento y auto localización para impedir que se sature el disco. Out*.pts Æ fichero de puntos extraídos de la fotografía. Igual que el anterior se borrará después de realizar el movimiento y la auto localización. c0, c1, d0, d1, e0, e1 Æ ficheros utilizados para la auto localización. En ellos tenemos los puntos identificados en las imágenes, los emparejamientos entre los puntos y los puntos que quedan después de la filtración de puntos incorrectos. Estos archivos se eliminarán después de hacer cada auto localización. Para evitar que se borren los archivos, ya que puede ser que nos interese consultarlos, se ha diseñado el programa de manera que tengamos 2 posibles modos de ejecución. En el modo guiado el robot preguntará al usuario si desea realizar el siguiente movimiento antes de borrar los ficheros, de manera que antes de realizar el movimiento el usuario podrá recuperar toda la información. En el modo no guiado el robot explorará sin consultar al usuario y borrará o sobrescribirá los ficheros en cada uno de los movimientos. En nuestro caso, y dado que queremos evaluar el correcto funcionamiento de los programas, utilizaremos el modo guiado. El programa principal será el encargado de establecer el modo de funcionamiento del programa, realizará las conexiones con el robot y con la cámara, hará la fotografía y extraerá los puntos de ella por medio de llamadas a las funciones de la librería triclops. Una vez tengamos la fotografía con sus puntos definidos llamará al módulo de movimientos para que decida que movimiento realizar, al módulo de auto localización y finalmente a la librería Aria para realizar el movimiento adecuado con el robot. En cada uno de los apartados del proyecto veremos más a fondo el diseño de estos módulos. 11
5. Movimiento inteligente del robot explorador 5.1 Introducción Un robot explorador es aquel que se programa para la exploración de entornos desconocidos y que cuenta con diferentes sensores o sistemas de visión que le permiten explorar el entorno. En los robots exploradores es básico encontrar un movimiento que, además de no colisionar con los obstáculos, permita explorar todo el terreno en el menor tiempo posible. Basándonos en esto trabajaremos para conseguir explorar todo el terreno, sin que se produzcan colisiones con obstáculos. Para la exploración del terreno se dispone de un robot Pioneer P2AT dotado de un anillo de 8 sensores de ultrasonidos y una cámara de visión estéreo Digiclops. Combinando ambas tecnologías conseguiremos el movimiento propuesto. 5.2 Objetivos Los objetivos que se han marcado en este apartado del proyecto son: Implementar un algoritmo de decisión de movimiento en el robot explorador, mediante el sistema de visión de la cámara, con la finalidad de que se explore de forma correcta un entorno desconocido. Evaluar dicho algoritmo para comprobar su correcto funcionamiento tanto en casos de uso normal como en los casos más extremos. Buscar soluciones a los problemas que se puedan encontrar para todos los casos y así conseguir el algoritmo correcto. Identificar los mínimos locales y solucionarlos. Identificar las limitaciones del algoritmo de movimiento. 5.3 Diseño Como se ha comentado con anterioridad, en este apartado se mostrará es diseño del módulo de movimientos del robot explorador. El módulo de movimientos del robot explorador se compone de los siguientes módulos: Módulo funciones_robot Æ En él se encuentran las funciones de inicialización y movimientos del robot. Módulo cámara Æ en él encontramos las funciones para inicializar y finalizar la cámara. 12
Módulo movimientos Æ en él encontramos las funciones para detectar si puede haber colisión con algún obstáculo y la decisión del movimiento a realizar. Módulo sensores Æ módulo para tratar los sensores de ultrasonidos del robot. Todos estos módulos serán llamados directamente por el programa principal, y como ya hemos visto antes generarán una serie de ficheros para poder comprobar y consultar la correcta realización del movimiento. Además se ha definido la estructura punto, con la que trabajarán algunos módulos, que contendrá toda la información relacionada a un punto de la imagen. 5.3.1 Mapa de decisiones Para decidir el movimiento adecuado a realizar por el robot, a partir de la imagen con sus puntos encontrados, el robot construye un mapa con los puntos encontrados a una cierta altura. Para construir este mapa se buscará entre todos los puntos encontrados en la imagen, si hay alguno que esté a una distancia menor de la distancia que nos vamos a mover. En nuestro caso hemos añadido una distancia de seguridad a esa distancia. Si encontramos algún punto a menor distancia que la determinada como distancia de colisión, haremos un corte horizontal de los obstáculos a la altura del punto encontrado. En el caso en el que no encontremos ningún punto susceptible de colisión se elegirá una fila, que en nuestro caso será la que ocupa la posición 125, cercana al centro de la imagen. Por lo tanto, se guardarán todos los puntos de la imagen que estén a la altura deseada (en píxeles). Una vez guardados los puntos se procederá a trabajar con ellos para encontrar la mejor opción de giro. Dado que éste sistema sólo será correcto cuando trabajemos con obstáculos en forma de polígonos tales como cubos, rectángulos, etc., se ha añadido otro mapa, que se creará plasmando en el suelo todos los obstáculos, de manera que quedaría el mapa como si viéramos los obstáculos desde una vista aérea. Por medio de los 2 mapas conseguiremos encontrar la mejor opción de giro. Un ejemplo de mapa, visto con el programa gnuplot, se puede ver en la figura 8. 13
Fig. 8 Éste es un ejemplo de mapa con el que nos podríamos encontrar. El eje vertical muestra los metros a los que se encuentra el punto en cuestión y el eje horizontal el píxel de la imagen en el que se encuentra dicho punto. Como ya hemos dicho antes la altura se fija a un punto, que éste será el de colisión con el objeto, en el caso en el que haya posible colisión, o el de la mitad de la imagen en el caso en el que no la haya. Los puntos que encontramos a distancia 0 no es que el robot está tocando contra ellos, sino que son puntos que no se han podido detectar con la cámara, por lo que los tomaremos como espacio libre. Se ha decidido que el robot seguirá recto si no hay peligro inminente de colisión y queda espacio por explorar. Con que queda espacio para explorar queremos decir que no se encuentra con que la mayoría de puntos encontrados se encuentran a una distancia menor de 2 metros y el robot, aunque siguiera hacia delante, no podría pasar por ninguno de los espacios libres, por lo que es inútil seguir hacia delante y ya se da la superficie por explorada. En este caso realizaremos un movimiento aleatorio, que en este caso hemos decidido que será girar hacia la izquierda. Si encontramos un obstáculo con el que tenemos una posible colisión giraremos hacia el lado en el que el robot tenga mayor espacio libre y que quepa el robot por él. En el caso en el que no quepa por ninguno de los lados el robot girará a la izquierda por defecto para evitar colisionar con el obstáculo. 14
Por último, para detectar y salir de un mínimo local se han creado las funciones que cuando detectan una secuencia de giros izquierda-derecha-izquierda o derecha- izquierda-derecha giran 50 grados en intervalos de 5 grados para no perder la auto localización. Con esto conseguiremos salir del mínimo local de forma satisfactoria. 5.4 Implementación Se han creado las siguientes funciones dentro de los módulos: • Módulo de funciones_robot: o robotInitialize Æ inicializa la conexión con el robot y el propio robot. o robotForward Æ mueve el robot hacia delante tantos centímetros como se indique por parámetro. o robotRight Æ gira el robot hacia la derecha tantos grados como se indique por parámetro. o robotLeft Æ gira el robot hacia la izquierda tantos grados como se indique por parámetro. o robotClose Æ para el robot y la conexión con su microcontrolador • Módulo de cámara: o cameraInitialize Æ inicializa la cámara y su conexión. o cameraClose Æ cierra la conexión con la cámara. • Módulo de movimientos: o busca_direccion Æ busca la dirección hacia la que debe girar el robot para evitar los obstáculos. o Collision Æ devuelve si hay posible colisión del robot con algún obstáculo. • Módulo sensores: o busca_colision Æ devuelve si hay una posible colisión en el próximo movimiento usando los sensores para comprobarlo. o busca_mayor_distancia Æ devuelve el número del sensor de ultrasonidos que está más lejano a un obstáculo. o busca_menor_distancia Æ devuelve el número del sensor de ultrasonidos que está más próximo a un obstáculo. 15
5.5 Entorno de trabajo El entorno de trabajo con el que trabajará en el robot explorador es un sistema operativo linux Red Hat 7.3, en el que programaremos los algoritmos en lenguaje C ayudándonos de las librerías: - Aria Æ funciones de movimiento del robot y uso de los ultrasonidos para mirar la distancia correcta a los obstáculos. - Digiclops Æ funciones para la captación de imágenes por medio de la cámara. - Triclops Æ funciones para la captación de imágenes 3D y de puntos en ellas por medio de la cámara de visión estéreo. En cuanto al entorno de pruebas en el que se encuentra el robot es el laboratorio de robótica, en el cual encontraremos diferentes obstáculos tales como sillas, mesas y armarios para comprobar el correcto funcionamiento del algoritmo de decisión de movimientos. 5.6 Pruebas y resultados Se han realizado diversas pruebas para comprobar el funcionamiento correcto del programa que controla el movimiento del robot. Las pruebas se han realizado con la cámara sólo y con la cámara y los ultrasonidos de forma simultánea. Los resultados que hemos obtenido son los siguientes: - Prueba 1 Dejamos al robot vía libre por delante, de manera que debería avanzar sin problemas al no detectar obstáculos a menos de 2 metros. Trabajará con la siguiente foto: 16
Esta es la foto realizada por la cámara digiclops y para decidir el siguiente movimiento a realizar buscará si hay algún punto menor a la distancia de colisión y los que haya a menos de 2 metros. El mapa que crea el robot a partir de la foto es: Si nos fijamos en la escala inferior, vemos que en el mapa se distingue en el rango [0-50] la silla más cercana por la parte de la izquierda, en el rango [50-100] se identifican las dos sillas más lejanas. Del 100 al 250 se cogería todo como camino libre, ya que todos los puntos encontrados están a distancia mayor de 2 metros y para acabar en el rango [250-300] se detecta el armario. Dado todo esto, el robot ve que delante de él no hay obstáculos y no se puede explorar puntos a distancia mayor de 2 metros, por lo que decide seguir recto. - Prueba2 En esta prueba se ha querido comprobar que el giro a la derecha se realiza de forma correcta cuando encontramos un obstáculo a la izquierda, el robot puede colisionar con él y tiene espacio hacia la derecha para seguir explorando, por lo que deberá girar hacia este lado para seguir explorando. La foto que trataremos es la siguiente: 17
Como podemos observar en la foto la caja que tenemos a la izquierda impediría que el robot siguiera recto, ya que se produciría la colisión contra ella. El mapa que genera el robot a partir de la foto es: En el mapa podemos observar que la cara de la caja que mira hacia el robot no la puede detectar, ya que no hay suficiente iluminación para captar los puntos. Sin embargo si que capta los del lateral de la caja, que es el intervalo [90-100]. El robot decidirá seguir hacia la derecha porque la zona libre hacia la izquierda es mayor, que es el intervalo [100-245]. En el caso en el que hubiera un obstáculo en éste rango el robot podría decidir girar hacia la izquierda lo que podría provocar la colisión contra la caja. 18
En el apartado de problemas y soluciones se ha propuesto y puesto en práctica la solución para casos como éstos. Aunque en este caso en particular comprobamos que el robot lo haría de forma correcta y giraría hacia la derecha. - Prueba 3 En este caso tenemos el obstáculo en el lado derecho, por lo que queremos comprobar que el robot gira de forma correcta hacia la izquierda al detectar el obstáculo y el espacio libre del que se dispone hacia la izquierda. La foto con la que tratamos es: Como podemos observar en este caso el espacio libre queda hacia la izquierda y la iluminación de la caja es mejor, por lo que el robot debería detectar puntos de la caja. Esto lo podremos ver en el siguiente mapa: 19
El robot consigue detectar algunos de los puntos de la caja, aunque en el rango [200- 300] no encuentre ningún punto. Gracias a los puntos detectados el robot podrá girar de forma correcta hacia la izquierda, aunque nos podríamos encontrar con el mismo problema que en la prueba anterior si en la zona de la izquierda tuviéramos algún obstáculo que sí se detectase. - Prueba 4 En esta prueba se ha querido comprobar que funciona de forma correcta la exploración de zonas en las que no podemos explorar más, es decir, que el robot no cabe físicamente por ninguno de los lados, ya que en ambos hay obstáculos. Si miramos la foto a tratar veremos este hecho: 20
En este caso la caja tapa los posibles huecos por los que podría pasar el robot. Esto se ve en el siguiente mapa: En el mapa podemos observar como el robot detecta las sillas en la zona izquierda y a la derecha detecta el armario, por lo que es físicamente imposible que el robot quepa por los espacios que quedan disponibles, de manera que el robot decidirá hacer un giro estático (sin ir hacia delante) hacia la izquierda, con la finalidad de acabar encontrando un espacio libre por el que seguir explorando. Éste movimiento se realizará todas las veces que sean necesarias hasta encontrar un espacio libre por el que pasar el robot. - Prueba 5 En esta prueba se volverá a evaluar el giro hacia la izquierda al haber peligro de colisión si seguimos recto. La diferencia con el caso anterior en el que evaluábamos el mismo caso es que en este caso hemos probado con una caja con diferentes colores, por lo que se detectarán los puntos de la caja. Esta podría ser una solución a los problemas vistos en las pruebas anteriores, aunque no sería efectiva, ya que necesitaremos obstáculos con diferentes puntos susceptibles de ser captados por la cámara. La foto que tratáremos es: 21
Si vemos el mapa generado por el robot comprobaremos que la cantidad de puntos captados por la cámara es sustancialmente más grande. Como se puede observar en este caso se detectan prácticamente todos los puntos de la caja, por lo que el robot no tiene problema alguno para decidir hacia el lado al que debe girar y éste es hacia la izquierda. - Prueba 6 En esta prueba se ponen los obstáculos a más de 2 metros, distancia que se ha considerado suficiente como para afirmar que nos debemos acercar más a los obstáculos para poder explorarlos de forma correcta. En la foto podemos observar que el obstáculo está en una posición lo suficientemente lejana. 22
El mapa que genera el robot a partir de la foto y sus puntos detectados es: En el podemos observar que los puntos que se captan son lejanos o no se captan, por lo que el robot decidirá seguir recto con la finalidad de acercarse más a los obstáculos y hacer la exploración de forma correcta. - Prueba 7 En este caso se ha querido ver el caso que tendríamos en el caso en el que nos encontrásemos con un obstáculo lejano (con el que no tendremos problemas de colisión, ya que está por encima de los 50 cm. que nos moveremos) y nos acercaremos 50 cm., que como ya hemos dicho con anterioridad realmente serán 46.5 cm. La primera imagen que tenemos es: 23
Con su mapa de puntos: Se observa que no hay problemas de colisión y no detectamos todo el espacio cubierto, de manera que nos acercaremos más al obstáculo y seguidamente decidiremos hacia donde debemos girar. La imagen que se obtiene después de avanzar 46.5 cm. es: 24
Y su mapa de puntos es: Como podemos observar en este caso el obstáculo ya se detecta en una zona de posible colisión (50 cm. más una pequeña distancia de seguridad) por lo que el robot en este caso decidirá girar hacia la izquierda, que es el lado por el que encontramos mayor distancia libre. - Prueba 8 Por último comprobaremos uno de los errores que era previsible que sucediese, que es el caso en el que un obstáculo esté tan cerca que la cámara sea incapaz de captar sus puntos, por lo que el robot previsiblemente decidiría seguir recto con lo que se 25
produciría la colisión segura. Éste caso nos dará paso a la sección de las soluciones propuestas para que no ocurran este tipo de cosas. En la imagen se puede apreciar que el obstáculo está tan cercano al robot que no se pueden distinguir los puntos. La zona azul es toda un obstáculo. El mapa de puntos generado es: Por lo que podemos ver en el mapa no se detecta ningún punto y aquellos que se detectan lejanos (a más de 2 metros) se producen por la reflexión de la luz en la caja. Este pequeño grupo de puntos se puede ver en la parte derecha de la imagen. El robot decide seguir recto y se produce la colisión contra el obstáculo. 26
5.7 Problemáticas detectadas y soluciones propuestas Como se ha visto en las pruebas de movimiento hay casos en el que la cámara no es suficiente para detectar un obstáculo cercano. Una posible solución ya se ha dado antes, utilizando sólo obstáculos de los cuales la cámara sea capaz de identificar puntos, pero como ya se ha dicho, la solución no es buena, ya que en la mayoría de los casos en los que se utilice un robot explorador no se podrá elegir el color y la fisonomía de los obstáculos. Pongamos como ejemplo un robot explorador en la superficie de Marte. Los obstáculos que encontrará en la superficie marciana serán en su mayoría rocas de diferentes colores y formas y, evidentemente, no se podrá elegir las formas ni los colores. Con todo lo visto tenemos un problema de difícil solución, ya que sólo utilizando la cámara será muy difícil, por no decir imposible, captar los puntos de los obstáculos muy cercanos. La solución que se propone y se ha puesto en práctica es utilizar la medición de distancia por ultrasonidos aprovechando que el robot Pioneer dispone de ella. 5.7.1 Medición de distancias mediante ultrasonidos Los ultrasonidos son una onda acústica cuya frecuencia está por encima del límite perceptible por el oído humano (aproximadamente 20 Khz.). Muchos animales como los delfines y los murciélagos lo utilizan de forma parecida al radar en su orientación. Nosotros los utilizaremos de la misma forma que los animales para decidir si hay obstáculo o no lo hay. Basándonos en el tiempo que tarda la señal en ir desde el emisor hasta el objeto obstáculo y volver rebotada desde éste hasta el receptor y conociendo la velocidad del sonido podemos calcular con suficiente precisión y exactitud la distancia entre el objeto y nuestros receptores. Para explicarlo de forma correcta explicaremos las bases físicas que lo explican: • Los ultrasonidos son antes que nada sonido, exactamente igual que los que oímos normalmente, salvo que tienen una frecuencia mayor que la máxima audible por el oído humano. Ésta comienza desde unos 16 Hz y tiene un límite superior de aproximadamente 20 Khz., mientras que nosotros vamos a utilizar 27
sonido con una frecuencia de 40 Khz. A este tipo de sonidos es a lo que llamamos Ultrasonidos. • El sonido se desplaza en el aire a una velocidad de 340 m/s a una temperatura de 20º C, con una variación térmica de 0.6 m/s por cada grado centígrado. Así, por ejemplo, a 30º C de temperatura del aire, la velocidad del sonido es de 340 m/s + (0.6 m/s/º C * 10º C) = 346 m/s (Intervienen otros parámetros pero que vamos a dejar de lado en este trabajo por complicarnos excesivamente sin aportarnos mayor resolución) • La distancia d recorrida por un móvil es directamente proporcional a la velocidad v de éste y al tiempo t empleado en ello. Podemos escribirlo como una fórmula en la sencilla forma: d=v*t dónde d es la distancia recorrida en metros, v la velocidad en metros por segundo y t el tiempo en segundos. Esta misma relación la podemos escribir de otra forma que nos relacione el tiempo con las otras variables, estableciendo que el tiempo t que tarda un móvil en recorrer una distancia d es inversamente proporcional a la velocidad v del mismo e directamente proporcional a la distancia d a recorrer: t=d/v dónde t el tiempo en segundos, v la velocidad en metros por segundo y d es la distancia en metros. • Si deseamos medir una distancia usando los ultrasonidos tenemos que emitir un pulso ultrasónico breve, esperar que llegue hasta el obstáculo a medir, se refleje en éste y vuelva hasta nuestro dispositivo sensor, midiendo entonces el tiempo t que ha tardado en hacer todo el trayecto de ida y vuelta mediante nuestro microcontrolador PIC. Conociendo la velocidad v a que se ha desplazado nuestra onda tal como hemos visto, podemos fácilmente calcular según lo expresado en el punto anterior la distancia d entre el sensor y el objeto. 28
• Por ejemplo: Un objeto situado a 15 cm. de nuestro sensor, con una temperatura del aire de 20º C, debe emitir un eco tras nuestro pulso que debe tardar en llegar t = (0.15 m / 340 m/s) * 2 = 0.000882 segundos (o escrito de otra forma 882 uS, microsegundos) Nota el detalle de que multiplicamos por 2 el tiempo empleado debido a que el sonido debe ir y volver reflejado desde el objeto, por lo que recorre 2 veces la distancia que separa al sensor del objeto. 5.7.2 Puesta en práctica de los ultrasonidos Con lo visto en el apartado anterior podemos estar seguros de medir la distancia al obstáculo de forma correcta, pero no queremos dejar de lado la cámara para realizar esta función, dado que hemos comprobado en las pruebas que excepto para algunos casos aislados la edición de las distancias por medio de la cámara funciona de forma correcta. Por esto se ha decidido utilizar los 2 métodos de forma simultánea. Para esto le daremos prioridad a la cámara, de manera que cuando la cámara decida que no hay obstáculo y por lo tanto podemos seguir recto activaremos los ultrasonidos para comprobar que realmente no hay peligro de colisión. En el caso en el que los ultrasonidos detectaran un peligro inminente de colisión pasaría a tener el control del robot el módulo de los ultrasonidos durante el siguiente movimiento. El módulo de ultrasonidos controla el movimiento del robot de la forma siguiente: El robot dispone de 8 emisores y receptores de ultrasonidos dispuestos en la parte delantera del robot tal como muestra la figura siguiente. 29
Miraremos cual es el emisor/receptor que nos da una distancia más pequeña al obstáculo. esto se hará de forma ponderada teniendo en cuenta la posición de los emisores de ultrasonidos. Debemos anotar que es diferente que el emisor 0 nos de una distancia menor a 20 cm., con lo que no habría problema de colisión, en cambio si el emisor/receptor 3 diera una distancia menor a 20 cm. habría un riesgo de colisión elevado. Por lo tanto, para el emisor/receptor 3 y 4 tendremos una distancia para una posible colisión mayor que de los demás emisores/receptores (60 cm.), para 2, 1, 5, y 6 una distancia de 20 cm. y finalmente para 0 y 7 una distancia de 11 cm., que es el grosor de las ruedas. Una vez hemos detectado posible colisión por parte de uno o más emisores/receptores miraremos el de menor distancia, y por lo tanto, sabremos hacia que lado está el objeto más próximo con el que tenemos riesgo de colisión. Si el de menor distancia es 1, 2 ó 3 giraremos hacia la derecha. En cambio si es 4, 5 ó 6 giraremos hacia la izquierda. Debemos anotar que el giro se realiza de forma estática, es decir, que como hemos visto, nuestro robot tiene 3 grados de libertad en X, Z y YAW (giro en Y), por lo tanto podremos hacer el giro sin cambiar la Z. esto se traduce en que aunque hubiese 2 o más emisores/receptores que detectaran colisión, cada uno que hiciese girar a un lado (uno a izquierda y el otro a la derecha) no colisionaríamos con el obstáculo al elegir uno de los lados, ya que no variaremos nuestra Z. Una vez seleccionado el movimiento por parte de los ultrasonidos ya le podremos devolver el control al módulo de control por cámara. 30
5.8 Conclusiones Se ha realizado, por medio de un algoritmo de captación de puntos, un algoritmo para el movimiento de un robot explorador. Sobre el podremos sacar las siguientes conclusiones: El algoritmo funciona de forma correcta para gran cantidad de los casos, en el que el algoritmo elige de forma correcta si girar hacia el lado derecho o el lado izquierdo. El algoritmo de captación de puntos identificativos por medio de la cámara tiene diversas limitaciones, de manera que en algunos casos provoca que el algoritmo del movimiento del robot no funcione de la forma adecuada. Las limitaciones consisten en que la cámara es incapaz de captar puntos de obstáculos muy próximos a ella así como también es incapaz de captar puntos de superficies lisas y sin cambios de color. Para subsanar estas limitaciones se ha recurrido al uso de los emisores/receptores de ultrasonidos de los que dispone el robot. De esta forma daremos prioridad a lo seleccionado por la cámara, pero en el caso en el que la cámara diga que se puede avanzar recto recurriremos a los ultrasonidos para comprobar que lo que decía el algoritmo de movimiento por medio de la cámara es correcto. En el caso en el que no sea correcto el módulo de ultrasonidos pasará a tener el control del movimiento del robot durante ese movimiento. Se ha tenido en cuenta la posibilidad de obstáculos móviles para evitar que el robot en movimiento colisione contra ellos. Se ha buscado una solución satisfactoria al problema que nos encontramos cuando el robot se encuentra en un mínimo local, de manera que se podrá salir del mínimo local sin que el robot pierda su auto localización. Se ha comprobado y demostrado el funcionamiento correcto del algoritmo de movimiento por medio de diferentes pruebas e imágenes. Con todo lo visto podremos afirmar que el algoritmo de movimiento del robot funciona de forma correcta, tal como se había marcado en los objetivos, que por lo tanto se han cumplido. 31
6. Auto localización del robot explorador 6.1 Introducción Una vez visto el correcto funcionamiento del movimiento del robot explorador pasamos al apartado de la auto localización del robot. Este apartado tiene una gran importancia en el mundo de la robótica móvil, ya que en gran cantidad de casos es vital conocer la posición real en la que se encuentra el robot. Pongamos como ejemplo otra vez un robot explorando la superficie del planeta Marte. En la superficie de dicho planeta a parte de encontrar rocas también encontraremos arena, en la que el robot podría embarrancar provocando, al realizar diferentes movimientos, que los sensores del robot informen de que el robot se ha movido cuando realmente el robot no se ha movido y sus ruedas han derrapado sobre la arena. Además, como ya hemos visto con anterioridad, los movimientos realizados por el robot mediante sus sensores no son exactos (nótese que se movía 46.5 cm. cuando realmente se le había dicho que se moviera 50 cm.) por lo que esa pequeña inexactitud que tienen multiplicado por la gran cantidad de movimientos que realizará el robot se transformará en un desfase bastante grande. Para evitar estas inexactitudes hemos decidido dotar al robot explorador de un algoritmo de auto localización. Dicho algoritmo ha sido realizado íntegramente por el Dr. Miguel Ángel García, profesor de la universidad Rovira i Virgili, y que ha cedido el uso de dicho algoritmo para poder realizar este proyecto. El algoritmo de auto localización utilizado es el slam3D, que utiliza una cámara con visión estero, como la que se dispone en el robot, para realizar su auto localización por medio de la comparación de las fotografías hechas por la cámara. Vista la importancia de la auto localización del robot, integraremos el algoritmo de auto localización en el robot con la finalidad de evaluar si es viable utilizar dicho algoritmo en robots exploradores así como comprobar el funcionamiento de dicho algoritmo en diferentes ambientes y en las circunstancias más extremas. 32
6.2 Objetivos El objetivo principal de éste apartado del proyecto es integrar el algoritmo de auto localización dado en el robot explorador, así como la evaluación de dicho algoritmo en cuanto a su correcto funcionamiento. Por lo tanto, los objetivos marcados para este apartado son: Integración correcta del algoritmo de auto localización con el algoritmo de movimiento del robot realizado en el apartado anterior. Evaluación de dicho algoritmo para comprobar el correcto funcionamiento de éste con un robot explorador. Comprobar e identificar las limitaciones del algoritmo, así como encontrar posibles soluciones a dichas limitaciones. 33
6.3 Algoritmo slam3D El algoritmo de auto localización utilizado en el proyecto es el algoritmo slam3D. Éste algoritmo se basa en la comparación de diversas fotografías conseguidas mediante una cámara de visión estéreo para saber cual es el movimiento que se ha realizado. El funcionamiento del algoritmo es el siguiente: Se realizan 2 fotografías consecutivas habiendo un movimiento entre ellas 2. En el caso en el que no hubiese ningún movimiento entre ellas el algoritmo debería devolver un desplazamiento igual a 0. Se identifican puntos representativos en dichas fotografías. Se identifican los puntos que son iguales pero que tienen un desplazamiento entre ellos. Se filtran los emparejamientos de puntos producidos por el ruido. Se calcula la distancia entre los puntos cogiendo todos los puntos y haciendo una ponderación. Veamos como funciona el algoritmo por medio de un ejemplo: Realizamos las fotografías e identificamos los puntos representativos en ellas: Primera imagen: Segunda imagen: 34
Como podemos ver en las imágenes ya se ha hecho el emparejamiento de puntos. Nótese en la parte superior de la imagen los puntos mal emparejados producidos por el ruido. A continuación filtraremos los emparejamientos incorrectos, de manera que las imágenes que tendremos serán: Primera imagen: Segunda imagen: 35
En estas imágenes se puede identificar como se han eliminado de forma correcta los emparejamientos producidos por el ruido. Por último haremos otra filtración y calcularemos la distancia que se ha movido el robot haciendo la ponderación de los enlaces, con lo que las imágenes que nos quedarán serán: Primera imagen: Segunda imagen: Con lo que ya podremos calcular la distancia. En este caso nos habíamos movido 50 centímetros en dirección hacia delante (eje Z positivo del robot). Debemos tener en cuenta que nos hemos movido 50 cm. según los sensores del robot, que como ya se ha dicho antes, tienen un error bastante grande. El resultado obtenido por medio del algoritmo de auto localización es: Translation -0.006932 -0.005879 0.402671 Pitch(X) 0.312178 Yaw(Y) -0.172794 Roll(Z) -0.040578 Error 59.177221 36
Viendo los campos del resultado podemos ver que tenemos ciertos errores de cálculo, pero que los errores son bastante pequeños. En los campos Translation tenemos: -0.006932 Æ desplazamiento en el eje X del robot. Éste desplazamiento es de 6 milímetros, por lo que lo podremos considerar despreciable. -0.005879 Æ desplazamiento en el eje Y del robot. Igual que en el caso anterior se puede considerar despreciable, ya que es de sólo 5 milímetros. 0.402671 Æ desplazamiento en el eje Z del robot. En él se puede apreciar el movimiento realizado, que es de 40 cm. hacia delante. Mediante una cinta métrica se ha medido el desplazamiento real del robot, que ha sido de 43 cm., por lo que el algoritmo da un valor bastante aproximado. Pasamos a ver los giros que ha habido en los ejes: Pitch 0.312178 Æ giro que ha habido en el eje X. El valor de 0.3 grados que nos devuelve el algoritmo es un pequeño error, aunque parte de éste está producido por la imprecisión del robot, que al producirse un movimiento en uno de los ejes se puede producir pequeños movimientos en los otros. Yaw -0.172794 Æ giro que ha habido en el eje Y. Tenemos un caso similar al caso anterior, en el que se produce un pequeño error por imprecisiones en el robot. Roll -0.040578 Æ giro que ha habido en el eje Z. En éste caso el error es muy pequeño, tan sólo de 0.04 grados, por lo que se considerará despreciable. Con esto hemos visto el funcionamiento del algoritmo a evaluar. 37
6.4 Diseño El diseño de este apartado del proyecto se divide en 2 partes diferenciadas: - Módulo de auto localización, que permite la llamada del programa principal al programa slam3D. - Programa slam3D. Dado que en este proyecto no se ha diseñado ni implementado el programa slam3D no hablaremos del diseño de éste módulo. Sí que hablaremos sin embargo del módulo que nos permite hacer las llamadas al programa slam3D. El programa slam3D tiene un fichero de configuración en el que le tenemos que pasar las 2 imágenes que se tratarán para emparejar los puntos. Dicho fichero, llamado sequence, deberá ser modificado en cada uno de los movimientos que realiza el robot. Estas modificaciones se harán desde el módulo autolocation de nuestra implementación. Una vez realizados los cambios necesarios, deberemos llamar al programa slam3D, que imprimirá en el fichero de movimientos el movimiento que se ha realizado. Como una decisión de diseño también se ha tenido que tomar que si un fichero de puntos contiene 0 puntos, es decir, que el robot no ha sido capaz de identificar ningún punto de la imagen, ese fichero no se deberá pasar al programa de auto localización, por lo que realizaremos el siguiente movimiento y calcularemos la auto localización de 2 movimientos, siendo conscientes de que podemos encontrar un error algo más grande que el que encontraríamos si hiciésemos un solo movimiento. Esto se debe a que no tiene sentido pasarle al algoritmo de auto localización un fichero vacío, ya que no conseguirá emparejar ningún punto. 38
6.5 Entorno de pruebas Las pruebas se han querido realizar en 2 tipos de entornos. El primero elegido es el laboratorio de robótica, en el que encontramos diferentes tipos de obstáculos, de manera que se puede comprobar el funcionamiento correcto para cuando previsiblemente encontraremos gran cantidad de puntos, debido a la gran cantidad de obstáculos diferentes con los que nos encontraremos. El problema con el que nos podremos encontrar aquí es que el robot no distingue puntos de las patas de las sillas, ya que éstas son cromadas y reflejan la luz. Otro problema con el que nos podemos encontrar es que el robot se acerque tanto a una pared o un armario que no pueda distinguir ningún punto, ya que la superficie es homogénea. En este caso el problema de la colisión está solucionado dado que se utilizarán los ultrasonidos, pero se puede perder la auto localización correcta si en pocos movimientos no encontramos una fotografía en la que podamos distinguir y emparejar puntos. El segundo entorno de pruebas elegido ha sido el pasillo exterior del laboratorio. En este entorno se captan mejor los puntos gracias a la luz. En él no tenemos más obstáculos que la barandilla y las paredes, por lo que a priori debería funcionar el algoritmo de forma correcta. Se ha comprobado que el algoritmo funciona de forma correcta en ambos escenarios, tal como mostraremos en el apartado de pruebas. 6.6 Implementación en el robot Dado que el algoritmo slam3D estaba implementado en C para Linux ya no será necesario implementarlo. Lo que si será necesario será integrarlo en el robot junto al programa que controla los movimientos. Dado que para realizar la auto localización necesitaremos 2 imágenes se deberá realizar 2 imágenes antes de realizar la auto localización. Esto puede provocar algunos problemas, ya que deberemos hacer la fotografía, acto seguido haremos la auto localización y después se le preguntará al usuario si quiere realizar el movimiento, pero el movimiento se realizará sobre la fotografía que se ha tomado antes de la auto localización y dado que el proceso de auto localización es lento (en torno a 30 segundos) el entorno podría haber cambiado si disponemos de diversos obstáculos móviles. Dado que en los entornos que se desea explorar con el robot no disponemos de gran cantidad de obstáculos móviles obviaremos este posible problema. Además, como se ha comentado en el apartado anterior, se ha dotado al robot de un sistema de 39
También puede leer