ROBOT CADDIE (ROCA)
Transcript of ROBOT CADDIE (ROCA)
1
ROBOT CADDIE
(ROCA)
Andrea Patricia Diaz B.
Trabajo de grado para optar por el título de
Ingeniera Electrónica
Director
Ing. Francisco Carlos Calderón Bocanegra M.Sc.
Asesor
Ing. Kamilo Andrés Melo Becerra, PhD.
PONTIFICIA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE ELECTRÓNICA
2013
2
3
PONTIFICIA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERIA
DEPARTAMENTO DE INGENIERIA ELECTRONICA
RECTOR
DECANO ACADEMICO
DECANO DEL MEDIO
DIRECTOR DE CARRERA
DIRECTOR DE PROYECTO
P. JOAQUIN EMILIO SANCHEZ, S.J
ING. JORGE LUIS SANCHEZ, M.Sc
P. SERGIO BERNAL RESTREPO, S.J
ING. JAIRO ALBERTO HURTADO, PhD
ING. FRANCISCO CALDERÓN, M.Sc
4
ARTÍCULO 23 DE LA RESOLUCION No. 13 DE JUNIO DE 1946
“La universidad no se hace responsable de los conceptos emitidos por sus alumnos en sus
proyectos de grado. Solo velará porque no se publique nada contrario al dogma y la moral
católica y porque los trabajos no contengan ataques o polémicas puramente personales. Antes
bien, que se vea en ellos el anhelo de buscar la verdad y la justicia”.
5
AGRADECIMIENTOS
Mi objetivo personal al iniciar mis estudios universitarios consistía en que una vez concluidos
mis estudios sería capaz de llevar a la realidad muchos proyectos e ideas que había desarrollado
durante mi vida, basada en las necesidades que había identificado en diferentes entornos. La
carrera de ingeniería electrónica me brindó las herramientas teóricas y prácticas básicas para el
desarrollo de prototipos de nuevos productos, este fue mi principal objetivo al iniciar mis
estudios universitarios y puedo decir con seguridad que no solamente me ayudó a volver
tangibles mis ideas, sino también me permitió ser más perceptiva con mi entorno, ayudándome
a generar más ideas innovadoras y creativas.
6
Contenido
1. INTRODUCCIÓN ...............................................................................................................8
2. MARCO TEÓRICO .............................................................................................................9
2.1 Descripción general del proyecto .................................................................................9
2.2 Calibración de la cámara ............................................................................................12
2.2.1 Modelo de una cámara ........................................................................................12
2.2.2 Parámetros extrínsecos e intrínsecos de la cámara ..............................................12
2.3 Corrección de perspectiva ..........................................................................................14
2.3.1 Transformaciones geométricas ...........................................................................14
2.3.2 Transformación afín ...........................................................................................14
2.3.3 Transformación de perspectiva ó homografía .....................................................16
2.4 Identificación de objetos por colores ..........................................................................17
2.5 Identificación del robot y la pelota .............................................................................20
2.5.1 Proyección para objetos en diferentes planos .....................................................23
2.6 Corrección del direccionamiento ................................................................................24
2.7 Generación de trayectoria ...........................................................................................36
2.7.1 Distancias entre cada par de nodos .....................................................................36
2.7.2 Posibles secuencias para realizar el trayecto .......................................................36
2.7.3 Secuencia correspondiente al menor recorrido ...................................................39
2.8 Seguimiento de la trayectoria .....................................................................................40
2.8.1 Espacio de configuración ....................................................................................42
2.8.2 Robots móviles ...................................................................................................43
3. ESPECIFICACIONES .......................................................................................................44
3.1 Limitaciones de hardware .......................................................................................44
3.2 Diagrama de flujo ...................................................................................................44
4. DESARROLLO .................................................................................................................46
4.1 Tecnología utilizada ...................................................................................................46
4.2 Descripción del diagrama de flujo ..............................................................................47
5. ANÁLISIS DE RESULTADOS .........................................................................................51
5.1 Modelo a escala ..........................................................................................................51
5.2 Linealización de variables ..........................................................................................52
5.3 Identificación del robot y las pelotas ..........................................................................52
5.4 Escenario de pruebas ..................................................................................................55
7
5.5 Un producto ................................................................................................................56
5.5.1 Viabilidad como producto ..................................................................................56
5.5.2 Desarrollos futuros .............................................................................................58
6. CONCLUSIONES .............................................................................................................59
7. BIBLIOGRAFÍA Y FUENTES DE INFORMACIÓN .......................................................61
8. ANEXOS ...........................................................................................................................62
Funciones de Opencv .............................................................................................................62
Anexo 1: Definición de la función WarpAffine ..................................................................62
Anexo 2: Definición de la función FindHomography .........................................................62
Anexo 3: Definición de la función WarpPerspective ..........................................................62
Anexo 4: Definición de la funcion Get2D ..........................................................................63
Hardware y Software ..............................................................................................................63
Anexo 5: ROS ....................................................................................................................63
Anexo 6: iRobot Create ......................................................................................................67
Anexo 7: OpenCV ..............................................................................................................68
Anexo 8: IP Webcam .........................................................................................................69
Anexo 9: Escritorio remoto ................................................................................................69
Contenido del CD-ROM
- Informe Final
- Artículo IEEE
- Artículo de IFES-ACOFI
- Software
- Análisis de viabilidad
8
1. INTRODUCCIÓN
En algunos deportes tales como el tenis la pelota no dura mucho tiempo en juego, ya que esta
puede caer en cualquier parte del campo deportivo, el recolectar las pelotas detiene la partida y
causa cansancio extra en el jugador, como solución a esta molestia surgió una persona
encargada de recolectar las pelotas del campo a cambio de una remuneración económica, un
caddy actualmente cobra seis mil pesos por una hora de servicio.
El servicio de caddie en países del primer mundo, es costoso y solamente se ofrece para la clase
alta en clubes privados. En Colombia una persona que juegue una hora diariamente y pague
servicio de caddy, llegará a gastar más de dos millones de pesos al año.
En casas privadas con cancha de tenis propia, es muy difícil conseguir una persona que se
encargue de recolectar las pelotas, ya que no es rentable para un caddie esperar a que un solo
cliente requiera de sus servicios.
Se propuso un robot caddy el cual localiza hasta tres pelotas en el campo, el recorrido que
realiza será en el cual recorra la menor distancia. Se aclara que el robot que se implemento será
un prototipo de lo que podría llegar a ser un Robot Caddie como producto.
El sistema es capaz de identificar el robot y las pelotas, generar una trayectoria y realizar el
recorrido. El objetivo principal fue la implementación de un sistema de recolección de pelotas
de tenis sobre media cancha de tenis utilizando visión artificial y una plataforma robótica
comercial.
La visualización de la pelota se realiza por medio de la cámara ubicada en la parte posterior a la
línea de servicio. Se propuso media cancha, ya que la implementación sobre una cancha
completa requeriría de dos plataformas robóticas móviles y dos cámaras. Además la
implementación de ambas medias canchas sería la misma.
El sistema es capaz de localizar hasta tres pelotas de tenis en el campo utilizando visión por
computador. Se debe identificar la posición y orientación del robot móvil en la cancha, para
seguidamente diseñar un algoritmo que a partir de la ubicación de la pelota y el robot, planifique
una ruta de navegación y la estrategia de aproximación hacia la pelota.
El objetivo general del trabajo de grado es la implementación de un sistema de localización de
pelotas de tenis sobre media cancha de tenis utilizando visión artificial y una plataforma
robótica comercial.
Objetivos específicos:
Localizar hasta 3 pelotas de tenis en el campo utilizando visión por computador.
Identificar la posición y orientación del robot móvil en la cancha, utilizando visión por
computador.
Diseñar un algoritmo que a partir de la ubicación de la pelota y el robot, planifique una
ruta de navegación.
Implementar un algoritmo que planifique la estrategia de aproximación
Implementación de los algoritmos en una plataforma robótica comercial.
9
2. MARCO TEÓRICO
2.1 Descripción general del proyecto
El siguiente diagrama de bloques corresponde a una representación resumida del proyecto
implementado:
Diagrama de bloques 2.1- 1
10
Esta descripción no incluirá una explicación teórica, ya que esta es incluida más adelante, en el
siguiente capítulo, esta descripción permitirá al lector un entendimiento global sobre el
proyecto.
En el primer bloque, Imagen homografía, el sistema realiza la adquisición de la imagen,
seguidamente se aplican los parámetros de calibración de la cámara para corregir distorsiones
generadas por el sistema físico y finalmente se obtiene la homografía o corrección de
perspectiva que corresponderá a la vista de pájaro del campo.
Imagen 2.1- 1
En el bloque, selección de colores, el usuario selecciona los parámetros de entrada del sistema,
los cuales corresponderán a las esquinas de la cancha, y el color de las pelotas, y las marcas
sobre el robot.
Imagen 2.1- 2
En el bloque reconocimiento de las pelotas y el robot, se encuentran las coordenadas centrales
de cada una de las pelotas, y de la marca central del robot, utilizando el color que de cada objeto
que se encontró en el bloque anterior.
Imagen 2.1- 3
11
A continuación el bloque generación de la secuencia de las coordenadas para el trayecto, recibe
las coordenadas de las pelotas y de la posición del robot, y retorna una matriz en la cual se
encuentra el recorrido que se debe ejecutar.
Imagen 2.1- 4
En el diagrama de bloques se observa la condición i < Numero de pelotas, donde el valor inicial
de i será 0. Los siguientes bloques que se explicaran a continuación serán ejecutados por el
sistema hasta que las pelotas sean localizadas y el robot llegue hasta cada una de las pelotas.
El bloque hallar distancia en centímetros entre la posición actual y destino, encuentra la
distancia en centímetros entre la posición actual y destino.
Imagen 2.1- 5
A continuación el sistema evalúa si alcanzo o no la pelota, si no, el sistema prosigue a realizar la
corrección de dirección, en la cual busca que el robot se encuentre en dirección hacia la posición
destino o la siguiente pelota.
Imagen 2.1- 6
En el bloque avance en línea recta, el sistema evalúa la distancia actual y destino, y según esta
distancia se recorre la distancia correspondiente.
Imagen 2.1- 7
Este procedimiento se repite hasta que el robot haya alcanzado cada una de las pelotas.
12
2.2 Calibración de la cámara
2.2.1 Modelo de una cámara
La visión comienza con la detección de luz, cuando la luz choca a un objeto, gran parte de la luz
es absorbida, y la que no lo es, es percibida como color. El modelo de una cámara de pinhole
(agujero de alfiler) es una pared imaginaria con un pequeño agujero en el centro que bloquea
todos los rayos excepto aquellos rayos que pasan a través del agujero. En la práctica se utiliza
un lente para obtener más luz, así que ahora se debe trabajar con un modelo no tan simple y
tomando en cuenta la distorsión.
En el modelo físico de pinhole un punto es proyectado en una superficie, la imagen proyectada
en el plano de imagen esta siempre enfocada, y la distancia focal es un parámetro que relaciona
el tamaño de la imagen con la distancia del objeto. En el modelo de pinhole la distancia focal es
la distancia de la apertura del pinhole hasta la pantalla. Este modelo fue propuesto por Alhacén
en 987 d.C.
La calibración de la cámara se realiza mediante una corrección matemática de las desviaciones.
Es importante ya que relaciona las medidas de la cámara con las medidas reales del mundo
tridimensional, la relación entre los pixeles (unidad natural de la cámara) y los metros,
centímetros o milímetros, (unidades del mundo físico).
El proceso de calibración de la cámara nos da el modelo de la geometría de la cámara y el
modelo de distorsión de los lentes. Estos modelos nos darán los parámetros intrínsecos. El
modelo de distorsión de lentes deriva del modelo propuesto por Fryer y Brown. [4]
Con diferentes imágenes de un mismo tablero de ajedrez realiza la calibración de la cámara, el
sistema debe encontrar los valores de la matriz de parámetros intrínsecos y de la matriz de
coeficientes de distorsión, la matriz de parámetros intrínsecos de la cámara permite transformar
coordenadas 3D a 2D. [4]
2.2.2 Parámetros extrínsecos e intrínsecos de la cámara
Las ecuaciones Ecuación 2.2-1 y Ecuación 2.2-2 se obtienen del modelo del pinhole, donde
y es la coordenada del pixel en que representa una coordenada en del
mundo real, es la distancia focal en y es la distancia focal en y, la distancia focal es la
distancia entre la pantalla donde se refleja la imagen y el pinhole. Y y es un posible
desplazamiento del centro de coordenadas en la proyección de la pantalla. Con las ecuaciones
Ecuación 2.2-1 y Ecuación 2.2-2 se obtiene la Ecuación 2.2-3 correspondiente a la matriz de
parámetros intrínsecos [4].
Ecuación 2.2-1
Ecuación 2.2-2
13
Ecuación 2.2-3
Los lentes de las cámaras al no ser perfectos, introducen distorsión radial y tangencial. La
distorsión radial surge como resultado de la forma de los lentes, mientras que la distorsión
tangencial surge del proceso de ensamble de la cámara. La distorsión radial es muy baja en el
centro de la imagen y aumenta hacia la periferia. En la práctica, esta distorsión es pequeña y
puede ser caracterizada por los primeros términos de la expansión de series de Taylor alrededor
de r=0. El término se utiliza solo cuando la cámara posee demasiada distorsión.
Ecuación 2.2-4
Ecuación 2.2-5
Donde y es la nueva posición corregida y y son la posición original del
punto distorsionado.
La distorsión tangencial se debe a defectos de fabricación debido a que el lente no está
exactamente paralelo al plano de la imagen. Se tienen dos nuevos parámetros, y .
Ecuación 2.2-6
Ecuación 2.2-7
En total son cinco coeficientes de distorsión. Todos estos parámetros son incluidos en la matriz
de coeficientes de distorsión. Esta es una matriz de 5 x 1.
Ecuación 2.2-8
Donde corresponde a los coeficientes de distorsión.
14
2.3 Corrección de perspectiva
2.3.1 Transformaciones geométricas
La manipulación de imágenes se puede dar de diferentes maneras incluyendo el cambio de
tamaño uniforme y no uniforme (warping). Las funciones que pueden encoger, estirar y/o rotar
imágenes son llamadas transformaciones geométricas. Para áreas planas hay dos tipos de
transformaciones geométricas: transformaciones afines y transformaciones de perspectiva ó
homografías. [4]
2.3.2 Transformación afín
Cualquier paralelogramo ABCD en un plano puede ser mapeado a otro paralelogramo
A’B’C’D’ por medio de una transformación afín. Si el área de los paralelogramos es diferente
de cero la transformada afín será definida por solo tres de los vértices de estos.
Imagen 2.3-1. Transformación afin
Una transformada afín ( Imagen 2.3-1) puede convertir un rectángulo a un paralelogramo, esta
transformada puede comprimir, rotar y/o escalar, pero siempre debe mantener los lados de la
imagen paralelos.
Esta transformación está basada en una matriz de 2 por 3, como se observa en la Ecuación 2.3-4.
Una transformación afín es cualquier transformación que pueda ser expresada por la
multiplicación de dos matrices seguida por la suma de un vector (Ecuación 2.3-2).
Ecuación 2.3-1
Ecuación 2.3-2
Ecuación 2.3-3
Ecuación 2.3-4
Ecuación 2.3-5
15
Donde:
Transformada
Coordenada en x original
Coordenada en y original
Parámetros de rotación
Parámetros de desplazamiento
Cada imagen posee cuatro esquinas, o cuatro puntos en , como se observa en la Imagen 2.3-
2. Solo tres de estos cuatro son necesarios, ya que con tres puntos se puede resolver el sistema
de ecuaciones.
Imagen 2.3-2. Transformación afin
La Ecuación 2.3-5 muestra la ecuación general para cualquiera de los puntos. La Ecuación 2.3-
6 muestra el sistema de ecuaciones para cada una de las coordenadas de los tres puntos.
Así que .
Ecuación 2.3- 6
Finalmente se tiene un sistema de 6 ecuaciones con 6 incógnitas:
Ecuación 2.3- 7
Trabajando con transformadas afines pueden surgir dos tipos de situaciones, el primero es en el
cual se tiene una imagen la cual se quiere transformar, y en el segundo se tiene una lista de
puntos para los cuales se desea estimar el resultado de la transformación.
La librería utilizada para el procesamiento de imágenes es OpenCV, esta es una librería libre
para desarrollos de visión artificial. OpenCV posee varias funciones para encontrar la matriz de
transformación afín esta se llama cvWarpAffine(), la cual se define en el Anexo 1. [4]
16
2.3.3 Transformación de perspectiva ó homografía
Las transformaciones de perspectiva (Imagen 2.3-3) ofrecen más flexibilidad, ya que pueden
convertir un rectángulo a trapezoide, como los paralelogramos son también trapezoides, las
transformadas afines puedes ser consideradas como un subconjunto de las transformadas de
perspectiva. Esta es una transformación basada en una matriz de 3 por 3 [4].
Imagen 2.3-3. Transformación de perspectiva
La matriz es de la forma .
Ecuación 2.3- 8
Ecuación 2.3- 9
Dividiendo por , y por se obtiene la Ecuación 2.3- 10.
Ecuación 2.3- 10
A diferencia de la transformada afín donde se tenía un sistema de seis ecuaciones y seis
incógnitas, tomando solo tres de los cuatros puntos, la transformada de perspectiva utiliza los
cuatro puntos para resolver el sistema de ecuaciones. Así que . De la Ecuación 2.3-
10 se puede llegar a la Ecuación 2.3- 11 y Ecuación 2.3- 12.
Ecuación 2.3- 11
Ecuación 2.3- 12
Con la Ecuación 2.3- 11 y Ecuación 2.3- 12 se llega a un sistema con ocho ecuaciones y ocho
incógnitas que se observa en las Ecuaciones 2.3- 13.
17
Ecuaciones 2.3- 13
Una homografía planar es un mapeo proyectivo de un plano a otro. Este mapeo se expresa en
términos de una multiplicación matricial. La función cvFindHomography de OpenCV toma una
lista de coordenadas y devuelve la matriz de la homografía de estas coordenadas. Se necesita un
mínimo de cuatro puntos. Esta función se describe en el Anexo 2.
OpenCV también posee una función para transformadas de perspectiva, esta función se llama
cvWarpPerspective(), homologa a la función cvWarpAffine() utilizada para transformadas
afines, tiene los mismos argumentos con la diferencia de que ahora la matriz es de 3 por 3. Esta
función se describe en el Anexo 3. [4]
La corrección de distorsión y transformación de perspectiva que se explicaron en detalle en los
numerales 2.2 y 2.3, se utilizan en la implementación del primer bloque (Imagen 2.1- 1), que
corresponde a imagen homografía.
2.4 Identificación de objetos por colores
El ser humano es capaz de reconocer un objeto por su forma y color, de igual manera lo puede
hacer un sistema de visión artificial. Los objetos tienen colores que los caracterizan, y con los
cuales su identificación en el entorno se facilita. La iluminación ambiente modifica el color de
los objetos, dificultando así el reconocimiento de los mismos a diferentes horas del día.
En el procesamiento de imágenes se utiliza normalmente el espacio de color RGB (rojo, verde y
azul) para representar el color de un pixel. El modelo RGB permite representar una amplia gama
de colores por medio de un arreglo o matriz de uno por tres, en este modelo la luz roja, verde y
azul se suman para producir un color específico.
El modelo RGB suma los tres haz de luz (Imagen 2.4- 1) para obtener el espectro final del color.
Con una intensidad cero para cada una de las tres componentes se obtiene el color negro, ya que
este representa la ausencia de luz. Y el blanco se obtiene con suma de los tres colores.
18
Cuando una de las componentes tiene una mayor intensidad, el color se aproxima al color de
esta componente, y cuando dos componentes tienen una alta intensidad se obtiene un color
secundario.
Imagen 2.4- 1 Modelo de Color RGB, tomado de [8]
En el procesamiento digital de imágenes cada pixel es representado en la memoria del
computador como valores binarios de las componentes rojo, verde y azul. Hay diferentes
maneras de representar esta tripleta, la notación digital utiliza 8 bits por canal, así cada
componente de la tripleta se representa de 0 a 28-1, es decir de 0 a 255. Siendo 255 la mayor
intensidad y 0 la menor.
La tripleta de componentes RGB se representa de la siguiente manera: [Rojo, Verde, Azul]. La
representación para obtener los colores primarios es:
Rojo: [255, 0, 0]
Verde: [0, 255, 0]
Azul: [0, 0, 255]
Representación para colores secundarios:
Cian: [0, 255, 255]
Magenta: [255, 0, 255]
Amarillo: [255, 255, 0]
Representación si se obtiene intensidad máxima o mínima en todas las componentes:
Negro: [0, 0, 0]
Blanco: [255, 255, 255]
Las diferentes combinaciones de valores que se pueden obtener en la tripleta generan diferentes
colores, de esta manera se puede representar cualquier color que se encuentre en la naturaleza.
La dirección, la intensidad y el color de la luz de ambiente influyen en el aspecto del objeto de
interés. Los cambios en la iluminación global son con frecuencia un reto en las escenas al aire
libre. Si se toma una foto de un campo de fútbol de pasto sintético a diferentes horas del día, las
componentes RGB de la cancha pueden variar drásticamente, la componente verde será la de
mayor intensidad todo el tiempo, pero los valores de la tripleta tendrán variaciones
considerables.
19
Imagen 2.4- 2. Fotografía tomada a las 11AM. Con obstrucción parcial de nubes
Imagen 2.4- 3. Fotografía tomada a las 4PM
Como se observa en las Imagen 2.4- 2 y la Imagen 2.4- 3 el color puede variar con la
iluminación solar, si se compara el valor RGB de un pixel que pertenece al suelo, a la marca
roja o azul sobre el robot de la Imagen 2.4- 2 con el valor RGB de cualquiera de los
mencionados en un diferente momento, se observa que este valor tiene variaciones en todas sus
componentes.
Valores RGB para la Imagen 2.4- 2:
Marca Central: [108, 108, 224]
Marca Frontal: [224, 167, 52]
Superficie: [106, 126, 161]
Valores RGB para la Imagen 2.4- 3
Marca Central: [133, 113, 202]
Marca Frontal: [233, 192, 40]
Superficie: [142, 136, 137]
La intensidad solar no permanece constante durante largos periodos de tiempo, pero si se
tomasen dos fotos de un mismo objeto con un pequeño lapso de tiempo entre las capturas de
estas dos fotos hay gran probabilidad de que el valor RGB del pixel no tenga una gran
variación. Las nubes pueden crear sombras momentáneas que pueden generar cambios abruptos
en los valores RGB de un pixel de un objeto.
20
Las transformaciones de perspectiva también pueden generar cambios en los valores RGB, al
estirar una imagen se puede observar que los colores pierden intensidad, disminuyendo así los
valores RGB de la tripleta.
Para reconocer un color se debe tener un patrón de comparación, este patrón sería una tripleta
RGB, este patrón es tomado en un momento , al realizar las comparaciones en momentos
posteriores , los valores RGB tendrán variaciones muy pequeñas, considerando
que la diferencia de tiempos entre cada uno de estos muy pequeña, no siendo mayor de 20
minutos la diferencia de tiempo entre el ultimo tiempo a comparar (mayor n) y el primero donde
se tomo el patrón de muestra RGB ( .
OpenCV posee la función cv.Get2D, con la cual se encuentra en valor RGB de un pixel en una
determinada coordenada, esta función se describe en el Anexo 4.
El sistema implementado posee una interfaz sencilla que permite al usuario ingresar los colores
de cada uno de los objetos. El bloque Seleccionar colores (Imagen 2.1- 2), se encarga de establecer
el color base de cada uno de los objetos.
2.5 Identificación del robot y la pelota
Los sistemas robóticos pueden utilizar marcas de colores para identificar su posición y dirección
actual además de otros objetos en el entorno, las marcas poseen características que un robot es
capaz de reconocer a través de su sistema sensorial. Estas pueden tener distintas formas como
rectángulos, círculos y cuadrados, y estar acompañadas de información adicional como códigos
de barras y colores. Una marca representa una posición fija y conocida respecto del sistema de
referencia, que permite al robot localizarse en el entorno.
En el entorno se pueden encontrar marcas naturales, como una mesa, silla o cualquier objeto que
sea parte de este entorno estructurado de manera natural, también hay marcas artificiales estas
están diseñadas, y se disponen en el entorno específicamente para facilitar el proceso del
localización del robot.
Las marcas anteriormente explicadas son marcas pasivas, estas marcas no son emisoras. Las
marcas activas se basan en la medición de las direcciones de incidencia de tres o más marcas
emisoras. En la mayoría de los casos estas marcas están constituidas por paneles luminosos,
transmisores de radio frecuencia, LEDS infrarrojos, etc.
En el momento de reconocer las marcas en el entorno se pueden presentar oclusiones parciales,
debido a la obstrucción en la visión por causa de otro objeto, o por la intensidad de la luz en el
lugar que puede dificultar la visualización de la marca. Un sistema de visión artificial también
debe ser capaz de identificar marcas ante la presencia de varias de estas del mismo tipo.
A cada pixel de una fotografía lo caracteriza un valor de RGB que define el color de este, así
que una marca es la unión de varios pixeles que posean el mismo color. Sin embargo la
iluminación ambiente no permite que una marca, sin importar su forma geométrica, posea un
color constante, ya que el reflejo de la luz sobre esta puede ocasionar que unas partes se vean
más claras u oscuras que otras.
Un objeto plano de plástico con incidencia de luz sobre éste puede tener un amplio rango de
valores para cada una de las componentes de la tripleta RGB, con una tolerancia para cada valor
se puede hallar un mayor número de pixeles que pertenezcan a este objeto.
Cuando se poseen diferentes marcas de diferentes colores, para facilitar su reconocimiento e
identificación es importante que los colores de estas marcas estén claramente diferenciados
21
entre sí, así que los valores de cada una de las componentes de la tripleta RGB de una de las
marcas difieren en gran magnitud con cada una de las componentes de las otras marcas.
En la Imagen 2.5-1 se observa un entorno sencillo con pocos objetos donde se observa una
plataforma móvil con dos marcas para la identificación de su posición y dirección.
Imagen 2.5-1. Plataforma móvil con marcas para la identificación de su posicion y dirección.
En cualquier entorno estructurado se pueden encontrar objetos con una misma función, o del
mismo tipo. Por ejemplo en una oficina se pueden encontrar repetidamente varias marcas
naturales como lo son mesas o varias sillas.
Suponiendo el entorno que se observa en la Imagen 2.5- 2, donde se observan cuatro diferentes
tipos de objetos, cada uno identificado con un color claramente diferenciado de los otros, se
pueden identificar cuatro tipos de objetos, donde las azules y verdes se encuentran
repetidamente en el entorno.
Imagen 2.5- 2. Diferentes tipos de objetos en un mismo entorno
Cada una de las marcas del robot es un conjunto de pixeles que se encuentran dentro de un
rango determinado, donde el color de solo uno de los pixeles pertenecientes a la marca
seleccionado previamente es el punto de referencia para determinar el rango de tolerancia.
Una sola marca, como la que se observa en la Imagen 2.5- 3, es un conjunto de coordenadas o
pixeles con valor RGB que se encuentren dentro del rango, sin tomar en cuenta que estos sean
pixeles adyacentes. Esto se puede hacer si y solo si se tiene la seguridad de que solo hay una
marca de este tipo.
Imagen 2.5- 3. Una sola marca u objeto
22
La posición de una marca, está dada por el punto medio de ésta sin importar su estructura
geométrica y suponiendo que esta es plana. Una vez se tiene el conjunto de coordenadas se
encuentra en promedio de las coordenadas y que se encuentren en el umbral de color. Este
será el punto medio del objeto. Así para la Imagen 2.5- 3 el cálculo sería de la siguiente manera:
Ecuación 2.5- 1
Ecuación 2.5- 2
Donde y corresponden a la posición del pixel medio en y en . es el número de
coordenadas que cumplen con la condición o que se encuentra en el rango o umbral de color.
y corresponden a las coordenadas en y de los pixeles que se encuentran en el umbral del
color respectivamente. Y es el número total de pixeles se encuentran en el rango
establecido o umbral.
Cuando se tienen varias marcas de un mismo tipo, como las marcas azules y verdes de la
Imagen 2.5- 2, no se puede tomar un único grupo de coordenadas, y encontrar el promedio. Se
debe tomar en cuenta la adyacencia entre coordenadas. De esta manera se establece una
distancia en pixeles, la cual debe ser aproximadamente igual a la distancia entre los pixeles con
mayor distancia que se encuentran dentro de una misma marca.
Si se encuentra más de una marca del mismo tipo, se realiza un barrido de coordenadas o pixeles
y se almacenan aquellas que su tripleta de valores RGB se encuentre en el rango establecido,
estas coordenadas son almacenadas en diferentes grupos según sus adyacencias, de tal manera el
número de grupos de coordenadas será igual al número de marcas del mismo tipo.
En la Imagen 2.5- 4 se observa una imagen de 20 x 15 pixeles, con tres marcas en el entorno,
todas del mismo tipo. Se deben almacenar las coordenadas en tres grupos según sus
adyacencias, el almacenamiento consiste en la sumatoria en tres diferentes grupos de las
coordenadas y , y una variable contadora para cada una de las marcas. Para varias marcas de
un mismo tipo también se debe encontrar el promedio o punto medio.
Imagen 2.5- 4. Varios objetos de un mismo tipo en el entorno
En la Imagen 2.5- 4 el área de cada uno de los objetos es de 4 x 4 pixeles así que si un pixel es
adyacente a otro por otro por una distancia de 4 ó menos pixeles en y en . Si un pixel se
23
encuentra a 4 menos pixeles y de otro pixel, significa que pertenecen al mismo grupo de
coordenadas u objeto.
2.5.1 Proyección para objetos en diferentes planos
Imagen 2.5- 5
El robot iRobot Create tiene una altura de 8.9 cm, debido a esto es necesario proyectar las
marcas de este que se encuentran en un plano superior al suelo. Se utiliza el modelo que se
observa en la Imagen 2.5-5.
Donde:
: Altura del trípode
: Proyección de la altura del trípode en el borde de la cancha
Altura del robot
: Distancia entre el trípode y la cancha
: Pixel posición en de la marca del robot, .
: Distancia entre la posición de marca encontrada ( y la coordenada real según la
proyección.
Se recuerda al lector que los pixeles aumentan de izquierda a derecha, siendo el punto el
pixel 720 en el eje coordenado
Suponiendo que se encontró la posición de la marca roja del robot y esta se encuentra en el pixel
( el pixel en corresponderá a se necesita hallar , para así hallar la verdadera
posición de en el plano .
Ecuación 2.5- 3
Donde , corresponde a la coordenada real en el plano de .
Esta proyección se realiza solamente para las coordenadas en de las dos marcas sobre el robot.
24
El análisis teórico explicado en detalle en este capítulo, es implementado en el sistema en el
bloque reconocimiento de las pelotas y el robot (Imagen 2.1- 3), este bloque toma el color de
referencia de cada objeto, y retorna la posición de cada pelota y del robot.
2.6 Corrección del direccionamiento
Un robot posee una posición y una dirección hacia la cual se encuentra dirigido, una sola marca
sobre un robot nos puede dar la posición pero no es suficiente para determinar la dirección, con
dos marcas se puede encontrar la posición y determinar la posición como se observa en la
Imagen 2.6- 1.
Imagen 2.6- 1. Plataforma móvil con marcas para la identificación de su posicion y dirección.
Se puede observar en la Imagen 2.6- 1 que la marca verde que se encuentra en centro determina
la posición central del robot, y la marca azul la dirección. Cada marca y pelota se caracteriza por
una coordenada o posición del pixel en la imagen adquirida del entorno, el pixel que se
encuentra en el centro de la pelota o marca determina la posición de éste.
El robot busca estar en dirección hacia la pelota, mientras que éste no se encuentre en dirección
hacia la pelota gira hacia la derecha o izquierda dependiendo de la posición de la pelota y se
detiene cuando el robot finalmente se encuentre visualizando frontalmente la pelota.
Cada pelota y las dos marcas se representan por tres puntos en el plano, cuando el robot se
encuentra en dirección hacia la pelota, los tres puntos son colineales, de tal manera si el robot no
se encuentra en dirección a la pelota éste debe girar hasta que los tres puntos sean colineales.
Dos puntos son colineales si pertenecen a la misma recta, las dos marcas sobre el robot lo son
siempre, así que el robot debe alienar sus marcas con la pelota.
Con dos puntos se puede hallar una recta, como las dos marcas sobre el robot siempre son
colineales y pertenecen a una misma recta, con estos dos puntos se halla la recta de la siguiente
manera:
Dada la ecuación general de la recta:
Ecuación 2.6- 1
Y la pendiente:
Ecuación 2.6- 2
Donde y son las coordenadas de las marcas que se encuentran sobre el robot.
25
La recta divide el plano en dos semiplanos, al evaluar un determinado punto en la ecuación de la
recta se identifica a cuál de los dos semiplanos pertenece el punto. Así que evaluando el punto
que corresponde a la posición de la pelota en la ecuación de la recta que se encontró con los
puntos que pertenecían a las marcas sobre el robot, se podrá determinar la dirección de giro del
robot.
Ecuación 2.6- 3
Donde es la coordenada de posición de la pelota, y la coordenada de la
posición de la marca sobre el robot que permite determinar la dirección de este. El punto de
intercepción con el eje y siempre será igual a 0.
Si evaluando cada una de las variables en la ecuación se obtiene un valor igual a 0 significa que
el punto es colineal, como se observa en la Ecuación 2.6- 4.
Ecuación 2.6- 4
Si al evaluar cada una de las variables en la ecuación se obtiene un valor mayor o menor a 0
significa que el punto no es colineal, es decir que no pertenece a la recta. Así que si el valor que
se obtiene es positivo (para el caso de la Imágenes 2.6- 2 b.), el punto evaluado pertenece al
semiplano inferior, y si es negativo al semiplano superior.
Ecuación 2.6- 5
Ecuación 2.6- 6
Así con la Ecuación 2.6- 5 y Ecuación 2.6- 6 se puede determinar la dirección de giro del robot.
Imágenes 2.6- 2. Sentido de giro según el semiplano donde se encuentre la pelota
Sin embargo la ecuación de la recta no especifica la dirección del robot, o hacia donde esta esté
orientado, esto es importante ya que si se observa la Imágenes 2.6- 2 c., donde el robot se
encuentra en dirección opuesta a su destino, este igualmente giraría hacia el lado derecho, pero
girar hacia este lado no sería la respuesta correcta, ya que claramente es más corto si este gira
hacia la izquierda.
26
Así que para solucionar este problema se debe tomar en cuenta la coordenada en x de cada una
de las marcas del robot, de esta manera se puede conocer la dirección del robot, si la coordenada
en x de la marca de dirección (marca azul) es mayor que la marca central, significa que el robot
se encuentra en dirección hacia la derecha (Imagen 2.6-3), y si la coordenada en x de la marca
central del robot es mayor que la coordenada en x de la marca de dirección, significa que el
robot se encuentra en dirección hacia la izquierda (Imagen 2.6-4).
Imagen 2.6-3. Robot en direccion hacia la derecha
Imagen 2.6-4. Robot en direccion hacia la izquierda
Para el caso de la Imágenes 2.6- 2 a. no importa la dirección de giro ya que el ángulo es el
mismo en cualquiera de los dos sentidos.
Para asegurar mayor eficiencia en la implementación del proyecto, no se utiliza cero como
punto de referencia, sino se le da un rango de error, en este caso se considera que el robot se
encuentra colineal a la pelota si se encuentra entre 20 y -20.
Las ecuaciones serían de la siguiente manera:
Si > y girar hacia la derecha
Si > y girar hacia la izquierda
Si > y ir hacia adelante
Si < y girar hacia la izquierda
Si < y girar hacia la derecha
Si < y ir hacia adelante
Si = girar hacia la derecha
Ecuación 2.6- 7
27
Si
Ecuación 2.6- 8
Donde ( , ) es la coordenada destino que corresponde a la pelota que se va a
recolectar.
Una vez se sabe hacia qué dirección el robot debe girar y suponiendo que el robot gira con
velocidad constante, se puede determinar el tiempo de giro, primero se debe hallar el ángulo que
debe girar, este ángulo se puede hallar ya que se tienen 4 puntos, cada par de puntos pertenece a
una recta, la primera recta está dada por las dos marcas del robot , y la segunda entre la
pelota y la marca central del robot .
Se necesita que el sistema éste centrado en , dado que la intersección de las dos rectas
anteriormente mencionadas no está en , se encuentra una nueva coordenada para cada una
de las variables cumpla la condición anteriormente mencionada, se realizan las siguientes
operaciones:
Ecuaciones 2.6- 9
Con la siguiente ecuación se puede encontrar en ángulo entre las dos rectas en radianes.
Ecuación 2.6- 10
Finalmente se convierte en ángulo hallado en radianes a grados.
Ecuación 2.6- 11
Suponiendo que la velocidad de giro del robot es constante, y que para realizar un giro de 90°
tarda 1.3 segundos:
Ecuación 2.6- 12
Donde es el tiempo de giro según el ángulo calculado y es el angulo en grados.
28
A continuación se evaluará la dirección de giro para cuatro posibles casos, si se desea obtener el
tiempo de giro se debe calcular la Ecuación 2.6- 12.
Imagen 2.6- 5. Caso 1
Ecuaciones 2.6- 13
Se evalúa la coordenada de cada una de las pelotas para determinar el semiplano al que
pertenece y así mismo la dirección de giro.
29
Pelota 1
(
Como es menor que 0 se realiza el giro hacia la izquierda.
Pelota 2
(
Como es mayor que 0 se realiza el giro hacia la derecha.
Pelota 3
(
Como es menor que 0 se realiza el giro hacia la izquierda.
Pelota 4
(
Como es mayor que 0 se realiza el giro hacia la derecha.
30
Imagen 2.6- 6. Caso 2
Ecuaciones 2.6- 14
Se evalúa la coordenada de cada una de las pelotas para determinar el semiplano al que
pertenece y así mismo la dirección de giro.
31
Pelota 1
(
Como es menor que 0 se realiza el giro hacia la derecha.
Pelota 2
(
Como es mayor que 0 se realiza el giro hacia la izquierda.
Pelota 3
(
Como es menor que 0 se realiza el giro hacia la derecha.
Pelota 4
(
Como es mayor que 0 se realiza el giro hacia la izquierda.
32
Imagen 2.6- 7. Caso 3
Ecuaciones 2.6- 15
Se evalúa la coordenada de cada una de las pelotas para determinar el semiplano al que
pertenece y así mismo la dirección de giro.
33
Pelota 1
(
Como es menor que 0 se realiza el giro hacia la derecha.
Pelota 2
(
Como es mayor que 0 se realiza el giro hacia la derecha.
Pelota 3
(
Como es menor que 0 se realiza el giro hacia la izquierda.
Pelota 4
(
Como es mayor que 0 se realiza el giro hacia la izquierda.
34
Imagen 2.6- 8. Caso 4
Ecuaciones 2.6- 16
Se evalúa la coordenada de cada una de las pelotas para determinar el semiplano al que
pertenece y así mismo la dirección de giro.
35
Pelota 1
(
Como es menor que 0 se realiza el giro hacia la izquierda.
Pelota 2
(
Como es mayor que 0 se realiza el giro hacia la izquierda.
Pelota 3
(
Como es menor que 0 se realiza el giro hacia la derecha.
Pelota 4
(
Como es mayor que 0 se realiza el giro hacia la derecha.
En este capítulo se explico en detalle como mediante la colinealidad de las marcas del robot y el
punto destino el robot es capaz de identificar el sentido de giro. Por medio del bloque corrección
de dirección (Imagen 2.1- 6), el robot busca estar encaminado hacia el punto destino.
36
2.7 Generación de trayectoria
2.7.1 Distancias entre cada par de nodos
Dados dos puntos y en , se puede hallar la distancia entre estos de la siguiente manera:
Ecuación 2.7- 1
Con esta ecuación se halla la distancia entre cada par de nodos, considerándose como nodos el
robot y las pelotas. En la Imagen 2.7- 1 se observan las seis distancias que se deben hallar:
Imagen 2.7- 1
2.7.2 Posibles secuencias para realizar el trayecto
El robot será capaz de de localizar hasta tres pelotas que se encuentren en la cancha. De esta
manera el robot y las tres pelotas representaran los nodos del grafo. El robot comenzará y
finalizará su recorrido en el mismo punto, así tras localizar las pelotas regresará a su posición
inicial. En la Tabla 2.7- 1 se observan los posibles recorridos que puede ejecutar el robot, hay 6
diferentes secuencias posibles.
Secuencia 1 0 1 2 3 0
Secuencia 2 0 3 2 1 0
Secuencia 3 0 1 3 2 0
Secuencia 4 0 2 3 1 0
Secuencia 5 0 2 1 3 0
Secuencia 6 0 3 1 2 0
Tabla 2.7- 1
En las Imágenes 2.7- 2 se observan cada una de las secuencias de recorrido vistas anteriormente
en la Tabla 2.7- 1. El recorrido total ( ) en cada secuencia es:
Secuencia 1:
Ecuación 2.7- 2
37
Secuencia 2:
Ecuación 2.7- 3
Secuencia 3:
Ecuación 2.7- 4
Secuencia 4:
Ecuación 2.7- 5
Secuencia 5:
Ecuación 2.7- 6
Secuencia 6:
Ecuación 2.7- 7
Se puede apreciar que para cada distancia:
Ecuaciones 2.7- 8
38
Secuencia 1.
Secuencia 2.
Secuencia 3.
Secuencia 4
Secuencia 5.
Secuencia 6.
Imágenes 2.7- 2
39
Así que se puede reducir el numero de posibles secuencia de recorrido de seis a tres ya que:
Ecuación 2.7- 9
Así mismo el recorrido total 3 será igual al 4, y el 5 al 6. Se tomarán así solamente los
recorridos 1, 3 y 5.
2.7.3 Secuencia correspondiente al menor recorrido
Una vez se hallan las distancias entre cada par de nodos, y se tienen las posibles secuencias de
recorrido, se procede a calcular la distancia total recorrida en cada una de las tres secuencias. Se
encuentra la menor entre las 3 distancias, y la secuencia correspondiente a esta será la que
utilizará el robot para su recorrido.
En este capítulo se analizaron las posibles secuencias del robot, y finalmente se mostró la
manera de obtener el menor trayecto de recorrido. En el bloque generación de la secuencia de
las coordenadas para el trayecto (Imagen 2.1- 4), se puede observar que las entradas de este
bloque corresponde a la ubicación de las pelotas y el robot, y la salida es un matriz con la
secuencia del trayecto a seguir.
40
2.8 Seguimiento de la trayectoria
Una vez el robot realiza la corrección en su dirección y se encuentra orientado hacia la próxima
pelota, calcula la distancia entre su posición actual y la posición de la próxima pelota a recoger,
y se dirige en línea recta hacia su próximo destino durante un tiempo que depende de la
distancia entre el robot y la pelota.
Suponiendo que la velocidad del robot es lineal. Se obtiene la siguiente tabla de distancia contra
tiempo:
Distancia (m) Tiempo (s)
0,2 0,434
0,5 1,085
0,8 1,736
1,0 2,170
1,5 3,255
2,0 4,340
3,0 6,510
Tabla 2.8- 1
Gráfica 2.8- 1
La distancia calculada por el sistema es en centímetros. Cuando el robot se encuentra a una
distancia menor a un metro de su destino, calcula el tiempo exacto de aproximación:
Ecuación 2.8- 1
Donde corresponde al tiempo de aproximación, es la distancia en centímetros entre
la coordenada actual y la coordenada destino y es el tiempo que tarda el robot en recorrer 1
metro, este tiempo equivale a 2.17 segundos.
La división entre 100 se realiza para pasar la distancia encontrada en centímetros a metros.
0,0
0,5
1,0
1,5
2,0
2,5
3,0
3,5
0 1 2 3 4 5 6 7
Dis
tan
cia (
m)
Tiempo (s)
41
Cuando se encuentra a una distancia mayor a 3 metros, el robot seguirá una trayectoria en línea
recta recorriendo 2 m que equivalen a un recorrido de 4.34 segundos.
Si no, si éste se encuentra a una distancia mayor a 2 metros el robot seguirá una trayectoria en
línea recta recorriendo 1.3 m que equivalen a un recorrido de 2.821 segundos.
Y si la distancia es menor a 1.5, el robot realizará el cálculo del tiempo de recorrido en línea
recta.
Imagen 2.8- 1
Imagen 2.8- 2
Imagen 2.8- 3
Para encontrar la distancia actual (del robot) y de la posición destino, el sistema usa el bloque
hallar distancia en centímetros entre la posición actual y destino (Imagen 2.1- 5). Seguidamente en
el bloque avance en línea recta (Imagen 2.1- 7), el sistema evalúa la distancia actual y destino, y
según esta distancia se recorre la distancia correspondiente.
42
El iRobot Create posee dos encoders (Anexo 6). Los encoders son sensores que miden las
revoluciones de un eje, permitiendo mediciones más exactas para la localización del robot.
Estos sensores no fueron usados en esta implementación debido a que la precisión de los
encoders del iRobot Create no es buena a comparación del robot Roomba, esto se debe también
a que el iRobot Create es un robot de gama económica. La localización de la ubicación del robot
se realizó enteramente por medio de procesamiento de imágenes con OpenCV.
2.8.1 Espacio de configuración
Para planificar la ruta a seguir de un robot es necesario tener la posición del robot. Se debe
especificar la posición del robot en cada punto. La configuración de un sistema robótico es la
especificación completa de la posición de cada punto del sistema. El espacio de configuración
de un sistema robótico es el espacio de todas las posibles configuraciones del sistema. Así una
configuración es simplemente un punto en el espacio de configuración. Los grados de libertad
de un sistema robótico es el número mínimo de parámetros que se necesitan para especificar una
configuración.
Imagen 2.8- 1. Espacio de Configuración
En la Imagen 2.8- 1 se observa el espacio de configuración donde el robot se puede desplazar
fácilmente debido a la ausencia de obstáculos. La localización del robot la define el centro de
este , si se conoce el radio del robot, se puede determinar de la configuración
el conjunto de puntos ocupados por el robot. Con la notación se hará referencia a este
conjunto de puntos.
43
Ecuación 2.8- 2
Para un robot circular el espacio de configuración puede ser representado en una vez el
sistema coordenadas se haya definido. Se observa que el sistema robótico posee tres grados de
libertad, ya que puede desplazarse en dirección y del sistema de coordenadas, y también
puede girar sobre su propio eje (orientación).
2.8.2 Robots móviles
La llanta ha sido el mecanismo de locomoción más utilizado en robots móviles y vehículos.
Normalmente no es una preocupación el balance en los robots móviles ya que están diseñados
para que en todo momento todas las ruedas estén en contacto con el suelo. Se encuentran
muchas posibles configuraciones y clasificaciones para las ruedas de los robots, se pueden
clasificar según el número de ruedas que estos posean, el número de ruedas afecta la cinemática
del robot. Otra manera de clasificación según la disposición de las ruedas en robots móviles es
en diferencial, síncrono, tipo triciclo y tipo carro.
Un sistema diferencial está compuesto por dos ruedas y un eje común, donde cada rueda se
controla independientemente. Es uno de los sistemas o esquemas más sencillos, puede
desplazarse en línea recta, arco y girar sobre su propio eje. Utiliza una o dos ruedas adicionales
para mantener el balance, estas formas tienen diferentes nombres dependiendo de las ruedas por
ejemplo: Con tres ruedas se denominan triángulo, este esquema puede presentar problemas de
estabilidad y con cuatro ruedas se conoce como diamante. Para que el movimiento sea recto se
requiere que las ruedas vayan a la misma velocidad.
En la Imagen 2.8- 2 se observa un sistema robótico diferencial, con 3 ruedas o triangulo. Es un
sistema de dos ruedas diferenciales centradas con un tercer punto de contacto para mayor
estabilidad y control.
Imagen 2.8- 2. Robot diferencial
Los robots diferenciales poseen restricciones holonómicas, sus grados de libertad desacoplados,
se puede desacoplar la posición de orientación rotando sobre su propio eje.
En el Anexo 6 se puede encontrar más información sobre plataformas móviles diferenciales.
44
3. ESPECIFICACIONES
3.1 Limitaciones de hardware
1) Clima: no funciona con lluvia
2) Iluminación: en ambientes muy oscuros o en superficies que reflejen demasiada luz no
se garantiza correcto funcionamiento. No es aconsejable trabajar tampoco en áreas con
sombra parcial.
3) Zonas limítrofes de la cancha no son procesadas por el sistema: debido a la posición en
la que se encuentra la cámara, cuando el robot se encuentra en los límites de la cancha,
las marcas del robot que se encuentran sobre un plano superior al suelo pueden no ser
tomadas en cuenta debido a la corrección de perspectiva realizada por el sistema. Si un
objeto se encuentra muy cerca de los bordes laterales o superior, y no se encuentra en el
plano del suelo (Z=0), se perderá la información de la imagen. Así que se recomienda
escoger un área mayor a la cancha o superficie donde se desea operar el robot.
4) Batería, el robot prototipo es controlado por un portátil el cual posee actualmente una
batería interna que es capaz de funcionar durante máximo dos horas, una vez el
computador portátil se descargue, el robot ya no recibirá más ordenes así que se
detendrá. La batería del robot tiene una mayor duración, de aproximadamente 6 horas
en funcionamiento.
5) Terreno, se recomienda terrenos planos, sin grandes grietas donde el robot se pueda
quedar atascado, ya que el prototipo se basa en la plataforma robótica comercial iRobot
Create y cuenta con sus mismas limitaciones.
3.2 Diagrama de flujo
A
B
C
D
F
E
G
45
H
I
J
K
L
M
N
O
O
P
Q
O
R
S
T
U
V
W
X
Y
Z
46
El anterior corresponde al diagrama de flujo base para la implementación del código del sistema
Robot Caddie. Este podría verse como una versión extendida del diagrama de bloques explicado
en el capítulo 2.1.
La explicación detallada de este diagrama de flujo se encuentra en el capitulo 4.2.
4. DESARROLLO
4.1 Tecnología utilizada
Imagen 4.1- 1. Implementación
El proyecto fue implementado en la plataforma comercial iRobot Create de la empresa iRobot,
este se puede programar por medio de ROS, esta es una librería que permite desarrollar
aplicaciones robóticas. El robot se comunica hacia uno de los puertos USB del computador, por
donde es capaz de recibir información de sus sensores, y enviar órdenes a sus motores.
El dispositivo utilizado para la obtención de imágenes es un celular con sistema operativo
Android, un Samsung Galaxy S3, el cual utiliza la aplicación gratuita IP Webcam para
transmitir la imagen desde el celular hacia el computador que manipula el robot con ROS. Esta
transmisión fue realizada por medio de una conexión de área local inalámbrica utilizando un
router portátil el cual tiene como fuente de alimentación el computador que manipula al robot,
esta alimentación utiliza dos puertos USB del equipo. El router y el computador utilizan un
cable de red para conectarse.
Las conexiones descritas anteriormente expuestas se observan en la Imagen 4.1- 1. El
computador posee conexión cableada hacia el router y el robot, y la comunicación entre el
computador y el celular se realiza inalámbricamente utilizando el router.
En los anexos se podrá ver en detalle el software y hardware utilizado en la implementación.
ROS (Anexo 5) se encarga de controlar el robot irobot Create (Anexo 6). OpenCV (Anexo 7)
47
realiza el procesamiento de la imagen adquirida por medio del celular Samsung Galaxy
utilizando la aplicación IP Webcam (Anexo 8). Finalmente para dar una orden externa de inicio
se utiliza escritorio remoto (Anexo 9), para así manipular el computador que controla el robot
utilizando sistema operativo Linux desde otro computador también conectado a la red local.
4.2 Descripción del diagrama de flujo
El diagrama de bloques descrito en el capítulo 3.2 describe un sistema en el cual siempre se
deben ingresar las esquinas de la cancha, y se deben establecer los colores de las marcas y las
pelotas de manera manual.
Para mayor eficiencia en el desarrollo de las pruebas y también pensando en cómo funcionaría
este realmente como producto, se desarrollo una interfaz sencilla, al inicializar el sistema este
pregunta que datos de entrada se desean ingresar, si no se desea ingresar alguno o los dos
(cuatro puntos y colores), el sistema toma los últimos datos ingresados por el usuario
anteriormente. En la Imagen 4.2-1 se observan las opciones que muestra el sistema al correr el
programa.
Imagen 4.2- 1. Pantalla inicial tras ejecutar el código
Así que el diagrama de bloques (capitulo 3.2), supone que el usuario selecciono la opción
número 4, en la cual el usuario desea ingresar los puntos de las esquinas y los colores de las
marcas y pelotas (todos los parámetros de entrada).
Inicialmente el sistema realiza la homografía de la imagen capturada (A). El sistema toma una
fotografía del entorno actual por medio de la aplicación IP Webcam, esta imagen es calibrada,
en este punto se deben ingresar manualmente las esquinas de las cancha, solo si el usuario
seleccionó anteriormente la opción 1 o 3. De los contrario, el sistema utilizará las últimas
ingresadas por el usuario. Con estas cuatro coordenadas el sistema encuentra la matriz de
homografía (o transformación de perspectiva), y la aplica a la imagen, de esta manera se obtiene
una imagen con una vista superior del área o vista de pájaro.
El bloque establecer colores (B) recibe la imagen a la cual se aplicó la homografía. Si el usuario
seleccionó la opción 2 o 4, el usuario deberá seleccionar los colores de cada una de las marcas y
una pelota. Aparecerán diferentes ventanas las cuales se cerraran secuencialmente, estas
ventanas mostraras imágenes con la homografía aplicada donde se tendrán que seleccionar
pixeles correspondientes a cada marca del robot y de una de las pelotas. Primero se mostrará
una ventana llamada marca frontal, en la cual se debe hacer clic sobre cualquier punto
perteneciente a la marca, una vez se haya seleccionado, aparecerá una nueva ventana del mismo
tamaño que la anterior donde todos aquellos pixeles que se encuentren en el mismo rango del
pixel seleccionado aparecerán en blanco y los demás en negro, como se muestra en la Imagen
4.2- 2. De esta manera se puede verificar que el pixel seleccionado pertenece a la marca
señalada, en la ventana marca frontal el usuario puede seleccionar varias veces el pixel
perteneciente a la marca frontal, una vez considere que la selección es correcta debe presionar
enter. La verificación se realiza por medio de una segunda ventana binaria, donde se mostraran
48
en color blanco los pixeles de la imagen que pertenezcan a la marca señalada. Tras esta
selección, estas dos primeras ventanas se cierran automáticamente, y se abre una nueva ventana
para la marca central, en la cual se repite el mismo procedimiento anteriormente descrito
(Imagen 4.2- 3), y finalmente se realiza el mismo procedimiento para las pelotas (Imagen 4.2-
4).
Imagen 4.2- 2. Selección de la marca central del robot (marca para posición)
Imagen 4.2- 3. Selección de la marca frontal del robot (marca para dirección)
Imagen 4.2- 4. Selección de cualquier pelota en el campo
Una vez se tienen los colores o arreglo RGB de las marcas y las pelotas, se realiza el
reconocimiento de las pelotas y el robot (marcas) (C), este procedimiento se explica en detalle
en 2.4. Este bloque entrega al sistema la posición central de las pelotas, la marca central del
robot y el número de pelotas encontrado.
Seguidamente el bloque de generación de la secuencia de coordenadas para el trayecto (D), se
encarga de realizar un matriz de N x 2, donde N es el número de pelotas + 2. Siendo la primera
y última coordenada la posición e inicial y final del robot respectivamente, la cual es la misma.
49
Tabla 4- 1
Imagen 4.2- 5. Secuencia de recorrido para el robot
es la coordenada de la posición del robot. , y son las coordenadas de las pelotas.
En la matriz se muestra el orden en el cual el robot debe realizar el recorrido. Comenzando por
su posición inicial, recolecta la pelota 1, 2, 3 y finalmente regresa a su posición inicial.
En este punto el sistema posee la posición actual del robot, las pelotas, y conoce el recorrido que
debe realizar. Así que el sistema evalúa el primer recorrido a realizar, que corresponde al
recorrido entre Ro (posición inicial del robot) y P1 (posición de la primera pelota a recolectar),
Ro R1 (F). Así que la primera posición destino corresponde a P1.
El sistema encuentra la distancia en centímetros entre la posición actual del robot y la posición
destino (G). Si esta distancia es menor a 10 centímetros, significa que la posición central del
robot está a menos de 10 centímetros de la pelota, por lo tanto ya la alcanzó.
Imagen 4.2- 6. Distancia entre la pelota y el robot
Si la distancia es mayor a 10 centímetros (H), el robot aún no ha alcanzado la pelota, así que
procede a encontrar las dos marcas sobre este, por medio del bloque Reconocimiento de la
posición del Robot (I), seguidamente en el bloque corrección de dirección (J), la variable
dirección toma valor de ‘a’ (avanzar hacia adelante), ‘i’ (girar hacia la izquierda) ó ‘d’ (girar
hacia la derecha), dependiendo del cálculo realizado con las marcas del robot y la pelota o
posición destino.
Si la dirección encontrada es diferente de ‘a’ (K), éste realiza la corrección de dirección hasta
que finalmente la dirección sea igual a ‘a’. Cuando la dirección es diferente de ‘a’, el sistema
50
calcula el tiempo de giro según el ángulo entre el robot y la pelota (L), seguidamente procede a
realizar el giro durante el tiempo calculado (M), en la última dirección encontrada (‘i’ o ‘d’). Se
realiza el reconocimiento de las marcas del robot (N) para obtener la nueva dirección en la que
se encuentra el robot y luego se recalcula la dirección en la cual se realiza la corrección de
dirección (O). Este procedimiento lo repite hasta que la dirección que encuentra es igual a ‘a’.
Imagen 4.2- 7. Sistema no colineal
Cuando el robot finalmente se encuentra en dirección hacia la pelota o posición destino, calcula
la distancia en centímetros entre la posición actual y destino (P), y dependiendo de esta distancia
realiza un recorrido en línea recta de 2 metros (R) si la distancia es mayor 3 metros (Q); si la
distancia está entre 1.5 y 3 metros (S), realiza un trayectoria en línea recta durante 1.3 metros
(T). Y finalmente si la distancia es menor a 1.5 metros, calcula el tiempo de aproximación a la
pelota (U), suponiendo una velocidad lineal, luego realiza el recorrido según el tiempo
calculado (V).
Tras realizar el recorrido en línea recta para aproximarse a la pelota, se realiza el
reconocimiento de las dos marcas sobre el robot nuevamente (W), y se halla la distancia en
centímetros entre la posición actual y destino (X). Seguidamente se vuelve a la validación de
distancia mayor o menor a 10 cm (H).
Cuando la distancia es menor a 10 centímetros (el robot ya alcanzo la pelota) se imprime el
mensaje fin pelota (Y), y se continua con el siguiente recorrido, P1 P2, recorrido desde la
posición de la pelota 1, hacia la posición de la pelota 2. De esta manera se realiza el recorrido:
P2 P3 y P3Ro. Una vez el robot regresa a su posición inicial, el programa finaliza (Z).
51
5. ANÁLISIS DE RESULTADOS
5.1 Modelo a escala
Para facilitar la realización de pruebas se propuso un modelo a escala del escenario real.
Imagen 5- 1. Area real de un campo de tenis
En la Imagen 5- 1 se observan las medidas reales para media cancha de tenis y las pelotas, esta
será el área máxima en la cual opera el robot. Para esta área la cámara realiza capturas a la
máxima resolución posible, , que es igual a MP, que corresponde a la
máxima resolución permitida por la cámara del celular que se está utilizando.
Para facilitar el desarrollo de las pruebas se realiza un modelo a escala, el cual permite trabajar
en un área menor, con capturas de cámara en menor resolución. Si se trabaja con un resolución
de , que equivale a MP, el area total del modelo a escala seria de
(Imagen 5- 2).
Imagen 5- 2. Modelo a escala de una cancha de tenis
La cámara se localizará en el centro del lado más largo para garantizar que este lado equivalga a
960 pixeles. La pelota de tenis será reemplazada por una pelota de caucho (saltarina), una pelota
de tenis tiene un diámetro de 6.5 cm y una pelota de caucho 2 cm.
Debido a que no se puede realizar un modelo a escala del robot, las marcas que hay sobre este
serán reducidas en escala también, en el modelo real, el área superior circular total de robot es
de , cada una de las marcas tendrá un área máxima de . El modelo a
52
escala propuesto es 3.4 veces más pequeño que el real, así que cada marca sobre el robot en el
modelo a escala tendrá una área máxima de . Actualmente se utilizan dos marcas
cada una con un área de que corresponde a un rectángulo de por .
El suelo en cual se realizaron las pruebas fue un suelo de baldosa pequeña que se puede
observar en la Imagen 2.4- 2 y la Imagen 2.4- 3. Este suelo tenia pequeños desniveles para el
control de aguas de lluvia. Esta superficie pertenece a una terraza en un sexto piso,
frecuentemente habían fuertes corrientes de aire que hacían mover al trípode.
5.2 Linealización de variables
Tras realizar varias mediciones de distancia contra tiempo con el robot iRobot Create, se llega a
la conclusión de que se puede tomar aproximar a un sistema lineal en el cual el robot es capaz
de recorrer un metro en línea recta en 2.17 segundos. De la misma manera encontró que para
realizar un giro de 90⁰ tarda 1.3 segundos.
Por lo tanto:
Ecuación 5- 1
Ecuación 5- 2
Donde es la velocidad en linea recta y es la velocidad angular.
5.3 Identificación del robot y las pelotas
En la Imagen 5.3- 1 se observa el modelo a escala, en esta pantalla el sistema solicita al usuario
ingresar manualmente las esquinas que delimitarán el área de operación del robot.
Imagen 5.3- 1
En las imágenes a continuación se observa la transformación de perspectiva u homografía ya
aplicada. Se pueden observar tres imágenes binarias, en las cuales se muestran en color blanco
los objetos del entorno identificados por el sistema que pertenecen a las pelotas o a las marcas.
53
En la Imagen 5.3- 2 Se solicita al usuario seleccionar una de las pelotas.
Imagen 5.3- 2
Seguidamente el sistema solicita seleccionar la marca central (Imagen 5.3- 3) y frontal (Imagen
5.3- 4) del robot, de esta manera será capaz de ubicar estas marcas durante todo el recorrido,
debido a que el sistema guarda en memoria el valor RGB que se seleccionó.
Imagen 5.3- 3
Imagen 5.3- 4
54
Esta es la ubicación inicial del robot y las pelotas en centímetros:
Resultados Teóricos
Coordenada x (cm) Coordenada y (cm)
Ro (Robot) 23 285
P1 (Pelota 1) 111 94
P2 (Pelota 2) 248 49
P3 (Pelota 3) 211 245
Ro (Robot) 23 285 Tabla 5.3- 1
A continuación se observa la ubicación para cada uno de los puntos encontrados por el sistema:
Imagen 5.3- 5
Se recuerda al lector que el arreglo que se observa es de la forma:
Tabla 5.3- 2
En la siguiente tabla se observa la distancia equivalente en centímetros para cada una de las
coordenadas.
Resultado Prácticos
Pixel x Pixel y Distancia x (cm) Distancia y (cm)
Ro 63 641 22,96875 284,8888889
P1 306 210 111,5625 93,33333333
P2 680 113 247,9166667 50,22222222
P3 580 554 211,4583333 246,2222222
Ro 63 641 22,96875 284,8888889 Tabla 5.3- 3
Finalmente en la siguiente tabla se puede observar la distancia en centímetros que hay entre el
punto calculado por el sistema y la ubicación real:
55
Diferencia
Coordenada x (cm) Coordenada y (cm)
Ro 1,03125 -0,888888889
P1 -1,5625 1,666666667
P2 1,083333333 -2,222222222
P3 -1,458333333 -1,222222222
Ro 1,03125 -0,888888889 Tabla 5.3- 4
5.4 Escenario de pruebas
Así que con las velocidades anteriormente halladas y suponiendo un sistema lineal, se plantea el
escenario de pruebas 1 que corresponde a la Imagen 5.4- 1, en este escenario de pruebas el robot
se encuentra dentro del campo de juego, y hay 3 pelotas en el campo.
Las pelotas y el robot poseen las siguientes posiciones en pixeles:
Se tienen las siguientes distancias en centímetros:
193.45 cm
En la siguiente tabla se encuentran los tiempos teóricos y prácticos
Tiempos Teórico Práctico
Tiempo de giro de (aprox. 0) 0 0
Tiempo de trayectoria en línea recta de 5.14 s 37 s
Tiempo de giro de (105º) 1.57 s 12 s
Tiempo de trayectoria en línea recta de 2.08 s 3 s
Tiempo de giro de (29º) 0.44 s 10 s
Tiempo de trayectoria en línea recta de 2.32 s 3 s
Tiempo de giro de (99º) 4.19 s 11 s
Tiempo de trayectoria en línea recta de 6.48 s 11 s
Tiempo total teórico = 17,26
Tiempo total práctico = 87 s
56
Imagen 5.4- 1
Se puede observar que hay una gran diferencia de tiempos entre el cálculo teórico y resultado
práctico, esto se debe a que en el cálculo teórico no se toman en cuenta los detenimientos para
corregir la dirección. Este cálculo supone que la trayectoria del robot es perfectamente recta, y
no como pasa en la práctica en donde se requieren varias correcciones de dirección. El mayor
tiempo práctico se dio en d1, esto se debió a que la distancia (237.26 cm) requería realizarse en
tres tramos, retrasando así el sistema debido a la captura y procesamiento de las de imágenes
adicionales.
En el CD se encuentra el video correspondiente al escenario analizado anteriormente, el nombre
del video es Video 1.
5.5 Un producto
5.5.1 Viabilidad como producto
Se realizó un estudio sobre la viabilidad de este proyecto como producto, en colaboración con la
Universidad Complutense de Madrid, este análisis se encuentra en detalle la carpeta Viabilidad
como producto, que se encuentra en el CD presentado para el trabajo de grado.
Basado en el comportamiento de cinco diferentes empresas españolas en el sector de la robótica,
se realizó un diagnóstico del mercado tomando como referencia el comportamiento de estas
empresas en los últimos cuatro años. Con esta información fueron hallaron los ratios de rotación
los cuales miden los rendimientos originados por los activos que obtiene en un período una
entidad.
57
Se propone una sociedad limitada, con un aporte inicial de 40000 euros, en la cual el valor
unitario del producto para venta al público es de 600 euros.
Este valor unitario de 600 euros, supone una implementación sobre el iRobot Create, el cual
tiene un valor de 200 euros aproximadamente. El valor unitario podría disminuir si se fabricarse
un robot con solamente los sensores necesarios para la implementación, ya que el iRobot
Create, tiene varios sensores que debido a su baja sensibilidad no pueden ser usados en el
desarrollo del proyecto.
Se establece un valor de ventas requeridas, en función de gastos de personal y según la
retribución económica que se estima para cada socio. Basado en esto y en el comportamiento de
los compradores en los diferentes tiempos del año se propuso un estimado de ventas.
En la siguiente gráfica se observa la evolución de las cifra de ventas desde el año 2012 hasta el
año 2014, siendo siempre las ventas requeridas menores a las ventas estimadas, para lograr un
equilibrio en la empresa.
Gráfica 5.5- 1
Se realizó una estimación de los activos corrientes (Comprende el dinero y otros recursos y
derechos que razonablemente se espera convertir en efectivo, consumir o vender en un periodo
que no exceda de un año) y pasivos corrientes (Son todas las obligaciones, apreciables en
dinero, a cargo de la empresa, las cuales deberán cancelarse en un plazo no mayor de un año, o
dentro del periodo contable).
Y finalmente se realizó el presupuesto de financiación de la empresa basándose en el capital
social, dotación de reservas, volumen de reservas, fondos propios, subvenciones y financiación
externa. Tras el análisis financiero se logra llegar a un endeudamiento de cero, en el año 2014.
0
50.000
100.000
150.000
200.000
250.000
300.000
350.000
400.000
450.000
2012 2013 2014
Evolución de las cifra de ventas
Ventas requeridas Ventas estimadas
58
5.5.2 Desarrollos futuros
El proyecto de grado presentado es un prototipo de lo que podría llegar a ser un producto algún
día. Si este llegase a ser un producto, podría:
Tener diferentes modos de operación:
o Entrenamiento: En este modo recoge una gran cantidad de pelotas que se
encuentran fuera y dentro del área de la cancha, se pueden implementar
algoritmos que permitan identificar las áreas en donde se encuentran las
mayores concentraciones de pelotas según los eventos pasados. Este modo sería
capaz de recolectar las pelotas mientras el jugador este jugando.
o Partido: En este modo el robot recorre las trayectorias a una mayor velocidad en
solamente el área de juego (la cancha), recolectando un máximo de dos pelotas
en cada trayectoria, este número es la cantidad de servicios reglamentarios por
cada pelota en juego. Ya que la mayoría de las pelotas estarán en la parte frontal
de la cancha, cerca de la malla.
Implementación de robótica cooperativa. En cualquiera de los dos modos descritos
anteriormente se podrían utilizar varios robots que se encuentren operando en
diferentes áreas de la cancha, para así llegar a tener un mayor cubrimiento del
campo de juego y tener un producto más eficiente.
El robot adquirido (iRobot Create), posee muchos sensores que no fueron utilizados, para el
desarrollo como producto de este proyecto se podría diseñar un robot desde la parte mecánica, el
cual posea las solamente las características necesarias.
Una interfaz amigable al usuario y visualmente agradable, que permita ingresar parámetros para
el funcionamiento del sistema.
59
6. CONCLUSIONES
El software abierto para el libre desarrollo, permite desarrollar productos innovadores e impulsa el avance
tecnológico en diferentes áreas, ya que al ser gratuito tiene mayor fuerza de investigación y desarrollo.
Tanto ingenieros como entusiastas son capaces de desarrollar productos y servicios por medio del
software libre, esta es una herramienta muy valiosa para la creación de nuevas empresas con base
tecnológica, debido a que se elimina el pago de licencias. La librería de código abierto OpenCV para visión artificial, puede ser utilizada con diferentes lenguajes
de programación (C, C++, java y python). OpenCV cuenta con una gran comunidad de usuarios, por lo
tanto se encuentran muchas ideas y mejoras disponibles, la mayoría de desarrollos encontrados utilizan
C++. El lenguaje de programación que se utilizó en este trabajo de grado fue python, inicialmente se
programó la parte correspondiente a visión artificial en C++, pero debido a que ROS solamente permite
su manejo con python, se determinó realizar el desarrollo completo del trabajo de grado en python.
Python permite una mayor simplicidad con respecto a C++, las principales ventajas fueron la eliminación
de la declaración de variables, el permitir obtener diferentes valores de salida en una sola función sin
tener estos que estar dentro de un arreglo matricial y la organización del código, ya que no se requiere el
uso de llaves sino se utiliza la indentación, lo cual permite seguir el flujo del programa de una manera
más sencilla. El uso de ROS (Sistema Operativo Robótico) como herramienta para el control de la plataforma móvil
entorpeció el inicio del trabajo de grado, debido a su complejo modo de operación. Anteriormente en un
proyecto basado en el robot iRobot Create utilizando Matlab como herramienta de programación, se
evidenció una interfaz más sencilla, y que permitía un rápido entendimiento en su manejo. Sin embargo,
una vez se entiende la arquitectura de grafos de ROS, se puede manipular sin mayores complicaciones. Las comunidades de desarrolladores de OpenCV y ROS fueron una gran ayuda en el desarrollo del
proyecto. En repetidas ocasiones, preguntas relacionadas a la programación del open source y debates
específicos de éste proyecto en foros web, fueron muy oportunos para la solución de errores y
replanteamiento de ideas, pues se recibió una rápida retroalimentación por parte de esta comunidad que
desinteresadamente brinda ideas y enseña. Esta útil herramienta, fue la solución a los varios
estancamientos en los que el proyecto cayó durante la implementación. Actualmente formo parte de esta
comunidad que coopera en búsqueda de un más rápido desarrollo tecnológico, razón por la cual dejo
manuales y valiosa documentación sobre ROS en los anexos, los cuales pueden ser consultados para
realizar desarrollos en ROS por parte de nuevos usuarios.
La transmisión de imágenes por medio de una red local IP entorpece la continuidad de la operación del
robot, ya que cada vez que el sistema está capturando una imagen el sistema se detiene. Para reducir el
tiempo en el cual el sistema esté transmitiendo la imagen, se redujo la resolución de la imagen al mínimo
posible (0.7 megapíxeles). Sin embargo esto tiene un costo en el procesamiento de imágenes, ya que se
pierde precisión en los cálculos. La solución a este problema es el desarrollo de un sistema embebido el
cual no transmita una imagen inalámbricamente sino solamente los comandos hacia el robot, esta
implementación eliminaría la utilización del router, permitiría la manipulación de imágenes con mayor
resolución y agilizaría la continuidad de la operación del robot.
El celular utilizado tiene los recursos suficientes para procesar la imagen. Si el procesamiento se realizara
en el celular no sería necesario trasmitir imágenes sino solamente la información necesaria para el
funcionamiento del robot (dirección y tiempo de avance o giro).
Los cambios en la iluminación global son con frecuencia un reto en las escenas al aire libre. La
dirección, intensidad y el color de la luz ambiente influyen en el reconocimiento de los objetos. Para
contrarrestar cambios muy bruscos en la iluminación, el sistema permite cambiar el patrón de color cada
vez que se considere necesario, sin necesidad de modificar el código (por medio de la interfaz). También
permite cambiar las pelotas por otras de diferente color y/o cambiar las marcas sobre el robot. El robot iRobot Create es una plataforma comercial robótica que posee varios sensores los cuales
permiten implementaciones en robótica móvil muy completas. Sin embargo para esta implementación no
se utilizaron estos sensores, debido a que ninguno de estos sensores era lo suficientemente sensible para
detectar la colisión con una de las pelotas. Los encoders tampoco fueron utilizados en esta
60
implementación debido a que la precisión de estos no es buena, esto se debe a que el iRobot Create es una
plataforma robótica comercial económica y no posee la precisión necesaria.
El desarrollo del proyecto como producto es viable. Tras realizar el análisis financiero del producto, se
llega a la conclusión de que se necesita una gran inversión inicial para continuar con la investigación y
desarrollo de este. Sin embargo esta cantidad puede ser retribuida en los siguientes tres años a la
inversión. Ser capaz de inventar e innovar no es suficiente, la capacidad de reconocer una necesidad en el
entorno es una ventaja, pero saber vender una idea y llevarla al mercado es la clave del éxito.
61
7. BIBLIOGRAFÍA Y FUENTES DE INFORMACIÓN
[1] Choset H. et al, “Principles of Robot Motion”, MIT Press, 2005.
[2] Collazo Cuevas José Iván, , Gorrostieta Hurtado Efrén, Jesús Carlos Pedraza Ortega, Ubaldo
Geovanni Villaseñor Carrillo, Rubén Alejandro Romero Torrez, Marco Antonio González
Aguirre, “Modelación de un Robot Móvil de Dos Ruedas con Tracción Diferencial”, 8º
Congreso Nacional de Mecatrónica, Noviembre 26 y 27, 2009. Veracruz, Veracruz.
[3] Comunidad de desarrolladores informáticos, Información sobre OpenCV, python y ROS.
<http://stackoverflow.com>
[4] Gary Bradski E Adrian Kaehler, “Learning OpenCV, Computer Vision with the OpenCV
library”, O’Reilly 2008
[5] Identificación de objetos, <http://es.wikipedia.org/wiki/Seguimiento_de_objetos>
[6] Jhonny A. Valencia, Alejandro Montoya, Luis Hernando Rios, M. Sc., “Modelo cinemático
de un robot móvil tipo diferencial y navegación A partir de la estimación odométrica”, Scientia
et Technica Año XV, No 41, Mayo de 2009. Universidad Tecnológica de Pereira. ISSN 0122-
1701.
[7] J. Ruiz Del Solar, R. Salazar, Universidad de chile, “Robots Móviles”,
<http://robotica.li2.uchile.cl/EL63G/capitulo4.pdf>
[3] Stuart J. Russell, Peter Norvig, “Inteligencia Artificial: Un Enfoque Moderno”, Prentice
Hall, 2004.
[8] Modelo de color RGB, <http://en.wikipedia.org/wiki/RGB_color_model>
[9] Thrun, Sebastian. Burgard, “Probabilistic Robotics”, Wolfram. Fox, Dieter.
[10] Universidad de Brown, Pagina web del grupo de investigación de robótica. <http://brown-
robotics.org/wp/>
[11] Universidad Javeriana, Wiki de OpenCV, <http://opencvjaveriana.wikispaces.com>
[12] Wasik, Z., Saffiotti, A., “Robust color segmentation for the RoboCup domain, Pattern
Recognition, 2002. Proceedings. 16th International Conference on (Volume:2 ), Page(s):651 -
654 vol.2
[13] Wiki de ROS, Robot Operating System. <http://www.ros.org/wiki/>
[14] Willow garage, Documentación de OpenCV, <http://opencv.willowgarage.com>
62
8. ANEXOS
Funciones de Opencv
Anexo 1: Definición de la función WarpAffine
Void cvWarpAffine(
const CvArr* src,
CvArr* dst,
const CvMat* map_matrix,
int flags = CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS,
CvScalar fillval = cvScalarAll(0)
);
Definición de la función cv.WarpAffine
Donde scr and dst son matrices o imágenes. Map_matrix es la matriz de dos por tres
anteriormente definida. Flags controla el método de interpolación y configuración, y fillval
selecciona el color con el cual se va a rellenar la imagen.
Anexo 2: Definición de la función FindHomography
Void cvFindHomography(
const CvMat * src_points,
const CvMat * dst_points,
cvMat* homography
);
Definición de la función cv.FindHomography
SrcPoints y dstPoints son arreglos de matrices de cuatro por dos, srcPoints son las cuatro
coordenadas origen (corresponde a las cuatro esquinas de la cancha seleccionadas en la imagen
original que está en perspectiva) y dstPoints son las cuatro coordenadas destino (corresponden a
las nuevas cuatro coordenadas de las esquinas para lograr un plano 2D del área de cancha
seleccionada). Y homography es una matriz de tres por tres donde se almacenara la matriz de
transformación.
Anexo 3: Definición de la función WarpPerspective
Void cvWarpPerspective(
const CvArr* src,
CvArr* dst,
const CvMat* map_matrix,
int flags = CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS,
CvScalar fillval = cvScalarAll(0)
);
Definición de la función cv.WarpPerspective
Src es la imagen de entrada en 3D (foto original), dst es la imagen de salida, la cual es un plano
en 2D donde se aplica la transformación, y map_matrix es la matriz de transformaciones que se
obtuvo anteriormente de la función cvFindHomography.
63
Anexo 4: Definición de la funcion Get2D
cvGet2D(
const CvArr* Image,
Int row x,
Int col y
);
Definición de la función cv.Get2D
Hardware y Software
Anexo 5: ROS
Robot Operating System, ofrece las librerías y herramientas necesarias para el desarrollo de
aplicaciones robóticas. En la wiki de ROS se encuentra la información necesaria desde cómo se
utilizan los comando en el terminal hasta como crear los paquetes. Proporciona abstracción de
hardware, controladores de dispositivos, bibliotecas, visualizadores, paso de mensajes, gestión
de paquetes y más. ROS está bajo licencia de código abierto (open source), licencia BSD.
Está basado en una arquitectura de grafos donde el procesamiento toma lugar en los nodos que
pueden recibir, mandar y multiplexar mensajes de sensores, control, estados, planificaciones y
actuadores, entre otros. La librería está orientada para un sistema UNIX, Ubuntu (Linux).
La universidad de Brown desarrolló varios drivers, la última versión se llama electric, pero se
utilizará una versión anterior que si estable, ésta se llama diamondback.
Esta es la instrucción para su instalación:
sudo apt-get install ros- diamondback-brown-drivers
Este contiene los siguientes paquetes: gscam, irobot_create_2_1, pcl_filter, rosbridge y
teleop_twist_keyboard. Donde irobot_create_2_1 es el driver para el Irobot create y
teleop_twist_keyboard tiene los paquetes necesarios para realizar la teleoperación del robot por
teclado.
Manejo básico de ROS
Crear el espacio de trabajo en ROS
Para confirmar que el paquete se ha instalado:
echo $ROS_PACKAGE_PATH
Debe mostrarse la localización del paquete:
/home/your_user_name/fuerte_workspace/sandbox:/opt/ros/fuerte/share:/opt/ros/fuerte/stacks
64
Navegando en ROS
Packages: Los paquetes son el nivel más bajo de la organización de software de ROS. Pueden
contener cualquier cosa: librerías, herramientas, ejecutables, etc.
Manifest: Es una descripción de un paquete. Su función más importante es definir dependencias
entre paquetes.
Stacks: Son colecciones de paquetes que forman una librería de nivel superior.
Stack Manifest: Estos son como los manifiestos normales, pero para los stacks.
Un paquete es un directorio con un archivo manifest.xml.
Un stack es un directorio con un archivo stack.xml.
Rospack y Rosstack
Permiten obtener información de los packages y stacks. A continuación se observa la función de
búsqueda (find) para paquetes y stacks.
$ rospack find [package_name]
$ rosstack find [stack_name]
Ejemplo:
$ rospack find roscpp
Mostrará lo siguiente:
YOUR_INSTALL_PATH/share/roscpp
ó,
/opt/ros/fuerte/share/roscpp
65
Roscd
Permite cambiar el directorio directamente a un stack o paquete (ó a un subdirectorio de
estos).
$ roscd [locationname[/subdir]]
Ejemplo:
$ roscd roscpp
Para verificar que se encuentra en el direcctorio del paquete roscpp:
$ pwd
Usted verá:
YOUR_INSTALL_PATH/share/roscpp
Las herramientas de ros, como roscd solo podrán encontrar paquetes que se listen en el
directorio $ROS_PACKAGE_PATH.
Para ver lo que se en cuentra en el directorio $ROS_PACKAGE_PATH:
$ echo $ROS_PACKAGE_PATH
Casos especificos para roscd
Roscd sin ningún argumento nos lleva a nuestro $ROS_WORKSPACE
$ roscd
$ pwd
Aparecerá:
/home/user/fuerte_workspace
Roscd log nos llevará a la carpeta donde ROS almacena los archivos de registro (log files).
$ roscd log
66
Rosls
Lista los elementos encontrados en un package o stack por su nombre en vez de por la ruta del
paquete.
$ rosls [locationname[/subdir]]
Ejemplo:
$ rosls roscpp_tutorials
Aparecerá:
bin cmake manifest.xml srv
Con la tecla Tab se puede completar el nombre del paquete o stack, aparecerán las opciones
existentes.
Creación de un paquete en ROS
Roscreate
Todos los paquetes de ROS contienen archivos similares:
Manifest
CMakeLists.txt
Mainpage.dox
Makefiles.
La función roscreate-pkg facilita la creación de paquetes, ya que crea los archivos
automáticamente. Para crear un paquete en el directorio actual se utiliza el siguiente comando:
$ roscreate-pkg [package_name]
También se pueden especificar las dependencias del paquete:
$ roscreate-pkg [package_name] [depend1] [depend2] [depend3]
Tras crear un paquete el siguiente comando actualiza los cambios efectuados al directorio para
así poderlo encontrar seguidamente:
$ rospack profile
Dependencias de primer orden
Para ver las dependencias de primer orden de un paquete se utiliza el siguiente comando:
67
$ rospack depends1 [package_name]
Dependencias indirectas
Para ver las dependencias indirectas de un paquete se utiliza el siguiente comando:
$ rospack depends [package_name]
Anexo 6: iRobot Create
iRobot Create es un robot fabricado por iRobot que se basa en la plataforma Roomba y se
introdujo en 2007. Sin embargo, iRobot Create está diseñado expresamente para el desarrollo de
la robótica. En lugar del sistema aspiradora del Roomba, el iRobot Create incluye una bodega
de carga, que alberga un puerto de 25 pines que se puede utilizar para la entrada y salida digital
y analógica, programable por medio del software ofrecido por iRobot. El Create también posee
un puerto serial a través del cual los datos del sensor se reciben y también se realizan las
órdenes a los motores. El iRobot Create es también programable por medio de ROS utilizando
el puerto serial.
Sensores
Los sensores en un sistema móvil robótico permiten a un robot entender el entorno que lo rodea.
Le permiten saber dónde está, las condiciones físicas a las que se enfrenta, donde se encuentran
los objetos con los que se puede interactuar, entre otros.
Los sensores son la interfaz perceptual entre el robot y su entorno. Los sensores externos, como
las cámaras son observadores verídicos del entorno. Los sensores internos pertenecen al sistema
móvil robótico, como sensores de desnivel y bumpers.
Imagen 4.1- 2
68
En la Imagen 4.1-2 se observan los sensores del robot iRobot Create, los sensores de desnivel
permiten al robot identificar pendientes abruptas, como escaleras. Los sensores de caída
informan al sistema si alguna de las llantas, se encuentra en un nivel inferior con respecto a las
otras. Los bumpers que se encuentran en la parte superior se encargan de amortiguar y proteger
al vehículo en caso de colisión, cada uno de los bumpers identifica el punto frontal de colisión.
Los encoders son sensores que miden las revoluciones de un eje, permitiendo mediciones más
exactas para la localización del robot. Y el sensor de pared indica si hay o no una pared a su
alrededor.
Estos sensores anteriormente mencionados son las entradas del sistema, estos generan salidas
digitales, 0 ó 1, verdadero o falso según el caso. Por ejemplo si el robot al desplazarse no
encuentra un desnivel en el entorno genera una salida de falso o 0 para la variable
correspondiente al sensor de desnivel, en el momento de encontrar un desnivel en su camino
generara una salida de true o 1.
Si el espacio de configuración es una cancha de tenis, con medidas preestablecidas no es
necesario realizar un mapeo mientras que el robot navega por el entorno, ya que el entorno es
totalmente conocido (un rectángulo) y no se encuentran obstáculos además del jugador (quién
no será tomado en cuenta en la implementación de este proyecto). Debido a que se posee una
cámara externa la cual proporciona la posición actual del robot, no es necesario utilizar técnicas
más complejas de localización en el entorno.
Modelo cinemático de un robot diferencial
Las siguientes son las ecuaciones cinemáticas basadas en el punto central del robot:
Al integrar las anteriores ecuaciones en un periodo de tiempo t se obtiene la posición y
orientación del robot .
Anexo 7: OpenCV
Es una librería libre de visión artificial. Su publicación se da bajo licencia BSD, que permite
que sea usada libremente para propósitos comerciales y de investigación.
Open CV es multiplataforma, existiendo versiones para GNU/Linux, Mac OS X y Windows.
Contiene más de 500 funciones que abarcan una gran gama de áreas en el proceso de visión,
como reconocimiento de objetos (reconocimiento facial), calibración de cámaras, visión estéreo
y visión robótica. Se pueden utilizar diversos lenguajes de programación como: C++, C, Python
y Java.
69
Anexo 8: IP Webcam
Es una cámara que emite las imágenes directamente a la red (Intranet o internet) sin necesidad
de un ordenador. En este caso la cámara IP será un dispositivo con sistema operativo Android el
cual permite descargar aplicaciones gratuitas de cámaras IP, como IP webcam, la cual permite
enviar a una dirección IP especifica una imagen o video.
Imagen 4.2- 8
Anexo 9: Escritorio remoto
Un escritorio remoto es una tecnología que permite a un usuario trabajar en una computadora a
través de su escritorio gráfico desde otro dispositivo terminal ubicado en otro sitio u cualquier
otro punto.
TightVNC y x11vnc
El escritorio remoto utiliza una conexión local, sin salida a internet.
Desde Linux se debe iniciar el servidor x11vnc con el siguiente repositorio.
$ x11vnc -forever
Desde Windows se debe instalar TightVNC versión 1.3.10 para compatibilidad con el sistema
Operativo usado, Linux Kubuntu 11.04.