Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica

Página creada Enrique Planells
 
SEGUIR LEYENDO
Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica
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
Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica
Í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
Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica
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
Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica
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
Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica
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
Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica
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
Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica
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
Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica
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
Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica
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
Auto localización de robots móviles y modelado del entorno mediante visión estereoscópica
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