UNIVERSIDAD CATÓLICA DEL NORTE FACULTAD … r José Gallardo 24-12-15 13:18 Comentario [1]: APOYADA...

67
UNIVERSIDAD CATÓLICA DEL NORTE FACULTAD DE INGENIERÍA Y CIENCIAS GEOLÓGICAS DEPARTAMENTO DE INGENIERÍA DE SISTEMAS Y COMPUTACIÓN APLICACIÓN DE ROS PARA LA NAVEGACION REACTIVA DE UN ROBOT MOVIL MEDIANTE UN ANILLO ULTRASONICO Y UNA BALIZA LASER: UN ESTUDIO COMPARATIVO Memoria para optar al Título de Ingeniero de Ejecución en Computación e Informática JUAN LUIS ERRICKSON VARGAS Profesor Guía: Dr. José Gallardo Antofagasta, Chile 2015 José Gallardo 24-12-15 13:11 Eliminado: ENTRE José Gallardo 24-12-15 13:13 Eliminado: EN UN ROBOT MOVIL UTILIZANDO ROS

Transcript of UNIVERSIDAD CATÓLICA DEL NORTE FACULTAD … r José Gallardo 24-12-15 13:18 Comentario [1]: APOYADA...

UNIVERSIDAD CATÓLICA DEL NORTE

FACULTAD DE INGENIERÍA Y CIENCIAS GEOLÓGICAS

DEPARTAMENTO DE INGENIERÍA DE SISTEMAS Y COMPUTACIÓN

APLICACIÓN DE ROS PARA LA NAVEGACION REACTIVA DE UN

ROBOT MOVIL MEDIANTE UN ANILLO ULTRASONICO Y UNA

BALIZA LASER: UN ESTUDIO COMPARATIVO

Memoria para optar al Título de Ingeniero de Ejecución en Computación e Informática

JUAN LUIS ERRICKSON VARGAS

Profesor Guía: Dr. José Gallardo

Antofagasta, Chile

2015

José Gallardo� 24-12-15 13:11Eliminado: ENTRE

José Gallardo� 24-12-15 13:13Eliminado: EN UN ROBOT MOVIL UTILIZANDO ROS

2

NO HAY REFERENCIAS FORMALES A LA BIBLIOGRAFIA

AMPLIAR INFORMACION SOBRE EL SENSOR LASER (DETALLES TECNICOS)

DEFINIR DE MEJOR MANERA LAS METRICAS EN ESCENARIOS IDENTICOS

EL INFORME NO ES UN COMPLEMENTO DEL ANTEPROYECTO, POR TANTO NO UTILIZAR VERBOS EN FUTURO, EJ, SE IMPLEMENTARA…., ETC.

José Gallardo� 28-12-15 12:42Eliminado: V

i

TABLA DE CONTENIDO

Página

ÍNDICE DE FIGURAS ......................................................................................... IV  

ÍNDICE DE TABLAS ............................................................................................ V  

NOMENCLATURA .............................................................................................. VI  

GLOSARIO……………………………………………………………………………VII  

RESUMEN……………………………………………………………………………..IX  

CAPÍTULO I   INTRODUCCIÓN ........................................................................ 1  

1.1.  Justificación ............................................................................................... 1  

1.2.  Objetivos ................................................................................................... 2  1.2.1.   Objetivo general .......................................................................... 2  1.2.2.   Objetivos específicos .................................................................. 2  

1.3.  Descripción ................................................................................................ 3  

1.4.  Resultados esperados ............................................................................... 4  

1.5.  Metodología ............................................................................................... 4  

1.6.  Recursos necesarios ................................................................................. 5  1.6.1.   Recursos de hardware ................................................................ 5  1.6.2.   Recursos de software ................................................................. 5  1.6.4.   Recursos humanos ..................................................................... 6  1.6.5.   Recursos de información ............................................................ 6  

1.7.  Contenido de la memoria .......................................................................... 6  

CAPÍTULO II   ESTADO DEL ARTE ................................................................... 8  

2.1.  Marco Teórico ........................................................................................... 8  2.1.1.   Robótica Móvil ............................................................................ 8  2.1.2.   Navegación reactiva ................................................................... 9  

2.2.  ROS (Sistema Operativo Robótico) .......................................................... 9  2.2.1.   Componentes centrales ............................................................ 10  2.2.1.1.   Comunicación e Infraestructura ............................................... 10  

UnknownCódigo de campo cambiado ... [1]

UnknownCódigo de campo cambiado ... [2]

UnknownCódigo de campo cambiado ... [3]

UnknownCódigo de campo cambiado ... [4]

UnknownCódigo de campo cambiado ... [5]

UnknownCódigo de campo cambiado ... [6]

UnknownCódigo de campo cambiado ... [7]

José Gallardo� 24-12-15 13:25Eliminado: 2

UnknownCódigo de campo cambiado ... [8]

José Gallardo� 24-12-15 13:25Eliminado: 2

UnknownCódigo de campo cambiado ... [9]

José Gallardo� 24-12-15 13:25Eliminado: 2

UnknownCódigo de campo cambiado ... [10]

José Gallardo� 24-12-15 13:25Eliminado: 3

UnknownCódigo de campo cambiado ... [11]

José Gallardo� 24-12-15 13:25Eliminado: 4

UnknownCódigo de campo cambiado ... [12]

José Gallardo� 24-12-15 13:25Eliminado: 4

UnknownCódigo de campo cambiado ... [13]

José Gallardo� 24-12-15 13:25Eliminado: 4

UnknownCódigo de campo cambiado ... [14]

José Gallardo� 24-12-15 13:25Eliminado: 5

UnknownCódigo de campo cambiado ... [15]

José Gallardo� 24-12-15 13:25Eliminado: 5

UnknownCódigo de campo cambiado ... [16]

José Gallardo� 24-12-15 13:25Eliminado: 6

UnknownCódigo de campo cambiado ... [17]

José Gallardo� 24-12-15 13:25Eliminado: 6

UnknownCódigo de campo cambiado ... [18]

José Gallardo� 24-12-15 13:25Eliminado: 6

UnknownCódigo de campo cambiado ... [19]

José Gallardo� 24-12-15 13:25Eliminado: 8

UnknownCódigo de campo cambiado ... [20]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [21]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [22]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [23]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [24]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [25]

José Gallardo� 24-12-15 13:25

ii

2.2.1.1.1.   Traspaso de mensajes anónimos ......................................... 10  2.2.1.1.3.   Llamadas a procedimiento remoto ....................................... 11  2.2.1.1.4.   Sistema de parámetros distribuidos ..................................... 12  2.2.1.2.   Características específicas de los robots ................................ 12  2.2.1.2.1.   Formato de mensajes estándar para robots ......................... 12  2.2.1.2.6.   Pose, estimación de localización, cartografía y navegación 15  2.2.1.3.   Herramientas ........................................................................... 16  2.2.1.3.1.   Línea de comandos .............................................................. 16  2.2.1.3.2.   RVIZ ...................................................................................... 16  2.2.1.3.3.   RQT ...................................................................................... 17  

2.4.  Turtlebot .................................................................................................. 20  2.4.1.   Hardware .................................................................................. 20  2.4.2.   Software .................................................................................... 21  

2.5.  Hokuyo láser ........................................................................................... 21  

2.6.  Arduino .................................................................................................... 22  

CAPÍTULO III   DISEÑO DE CONFIGURACIONES DE ROBOT ...................... 23  

3.1.  Anillo Ultrasónico ..................................................................................... 23  

3.2.  Baliza laser .............................................................................................. 26  

CAPÍTULO IV   IMPLEMENTACIÓN DE LOS ALGORITMOS ......................... 27  

4.1.  Algoritmo de desplazamiento del robot ................................................... 28  

4.2.  Algoritmo de comunicación Arduino ........................................................ 30  

CAPÍTULO V   COMPARACIÓN DE LAS CONFIGURACIONES .................... 31  

5.1.  Métricas ................................................................................................... 31  5.1.1.   Cantidad de choques ................................................................ 31  5.1.2.   Cantidad de veces que se debió corregir el robot .................... 31  

5.2.  Obtención de métricas ............................................................................ 32  

CAPÍTULO VI   CONCLUSIONES .................................................................... 35  

6.1.  Cumplimiento de los objetivos ................................................................. 35  

6.2.  Trabajo futuro .......................................................................................... 37  

BIBLIOGRAFÍA 38  

UnknownCódigo de campo cambiado ... [26]

José Gallardo� 24-12-15 13:25Eliminado: 10

UnknownCódigo de campo cambiado ... [27]

José Gallardo� 24-12-15 13:25Eliminado: 11

UnknownCódigo de campo cambiado ... [28]

José Gallardo� 24-12-15 13:25Eliminado: 12

UnknownCódigo de campo cambiado ... [29]

José Gallardo� 24-12-15 13:25Eliminado: 12

UnknownCódigo de campo cambiado ... [30]

José Gallardo� 24-12-15 13:25Eliminado: 12

UnknownCódigo de campo cambiado ... [31]

José Gallardo� 24-12-15 13:25Eliminado: 15

UnknownCódigo de campo cambiado ... [32]

José Gallardo� 24-12-15 13:25Eliminado: 15

UnknownCódigo de campo cambiado ... [33]

José Gallardo� 24-12-15 13:25Eliminado: 16

UnknownCódigo de campo cambiado ... [34]

José Gallardo� 24-12-15 13:25Eliminado: 16

UnknownCódigo de campo cambiado ... [35]

José Gallardo� 24-12-15 13:25Eliminado: 17

UnknownCódigo de campo cambiado ... [36]

José Gallardo� 24-12-15 13:25Eliminado: 19

UnknownCódigo de campo cambiado ... [37]

José Gallardo� 24-12-15 13:25Eliminado: 19

UnknownCódigo de campo cambiado ... [38]

José Gallardo� 24-12-15 13:25Eliminado: 20

UnknownCódigo de campo cambiado ... [39]

José Gallardo� 24-12-15 13:25Eliminado: 20

UnknownCódigo de campo cambiado ... [40]

José Gallardo� 24-12-15 13:25Eliminado: 21

UnknownCódigo de campo cambiado ... [41]

José Gallardo� 24-12-15 13:25Eliminado: 22

UnknownCódigo de campo cambiado ... [42]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [43]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [44]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [45]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [46]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [47]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [48]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [49]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [50]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [51]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [52]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [53]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [54]

José Gallardo� 24-12-15 13:25

UnknownCódigo de campo cambiado ... [55]

José Gallardo� 24-12-15 13:25

iii

ANEXO A CÓDIGO NAVEGACIÓN CON LASER ............................................. 40  

ANEXO B CÓDIGO NAVEGACIÓN ANILLO ULTRASÓNICO .......................... 46  

ANEXO C CÓDIGO PROGRAMA ARDUINO .................................................... 52  

UnknownCódigo de campo cambiado

José Gallardo� 24-12-15 13:25Eliminado: 38

UnknownCódigo de campo cambiado

José Gallardo� 24-12-15 13:25Eliminado: 44

UnknownCódigo de campo cambiadoJosé Gallardo� 24-12-15 13:25Eliminado: 50

iv

ÍNDICE DE FIGURAS

 Figura 1.1 Anillo ultrasónico y baliza laser, respectivamente .............................. 1  

Figura 1.2 Actividades del proyecto ..................................................................... 3  

Figura 2.1 Diagnósticos para robot .................................................................... 15  

Figura 2.2 RQT_GRAPH muestra relaciones de nodos en un programa en

ejecución. ........................................................................................................... 17  

Figura 2.3 RQT_PLOT grafica tópicos en directo .............................................. 18  

Figura 2.4 abanico de acción de la baliza láser ................................................. 22  

Figura 3.1 PING))) de Parallax ........................................................................... 24  

Figura 3.2 Soporte protector de PING))) ............................................................ 24  

Figura 3.3 Protectores con sensores montados en el robot .............................. 25  

Figura 4.1 Vista superior de turtlebot con sensores ultrasónicos ...................... 27  

Figura 4.2 Conexión de los sensores con Arduino. ........................................... 28  

Figura 5.1 Triángulo formado en la medición laser ............................................ 33  

Figura 5.2 Sensor ultrasónico sin detectar objeto. ............................................. 33  

UnknownCódigo de campo cambiado ... [56]

José Gallardo� 24-12-15 13:25Eliminado: 3

UnknownCódigo de campo cambiado ... [57]

José Gallardo� 24-12-15 13:25Eliminado: 15

UnknownCódigo de campo cambiado ... [58]

José Gallardo� 24-12-15 13:25Eliminado: 17

UnknownCódigo de campo cambiado ... [59]

José Gallardo� 24-12-15 13:25Eliminado: 18

UnknownCódigo de campo cambiado ... [60]

José Gallardo� 24-12-15 13:25Eliminado: 21

UnknownCódigo de campo cambiado ... [61]

José Gallardo� 24-12-15 13:25Eliminado: 23

UnknownCódigo de campo cambiado ... [62]

José Gallardo� 24-12-15 13:25Eliminado: 23

UnknownCódigo de campo cambiado ... [63]

José Gallardo� 24-12-15 13:25Eliminado: 24

UnknownCódigo de campo cambiado ... [64]

José Gallardo� 24-12-15 13:25Eliminado: 26

UnknownCódigo de campo cambiado ... [65]

José Gallardo� 24-12-15 13:25Eliminado: 27

UnknownCódigo de campo cambiado ... [66]

José Gallardo� 24-12-15 13:25Eliminado: 32

UnknownCódigo de campo cambiado ... [67]

José Gallardo� 24-12-15 13:25Eliminado: 32

v

ÍNDICE DE TABLAS

Tabla 1-1 Recursos Humano del Proyecto .......................................................... 6  

Tabla 5-1 Tabla con conteo de métricas ............................................................ 32  

José Gallardo� 24-12-15 13:25Eliminado: 6

UnknownCódigo de campo cambiadoJosé Gallardo� 24-12-15 13:25Eliminado: 31

vi

NOMENCLATURA

CDPAS: Catálogo Digital de Patrones de Adquisición de Software.

GUI: Interfaz gráfica de usuario, del inglés, graphical user interface.

HZ: Hertz.

IDE: Ambiente de desarrollo integrado, del inglés, Integrated Development

Environment.

IDL: Lenguaje de descripción de interfaz, del inglés, Interface Description

Language.

IMU: Unidad de Medición Inercial, del inglés, Inertial Measurement Unit.

ROS: Sistema Operativo Robótico, del inglés, Robot Operating System.

SDK: Kit de desarrollo de software, del inglés, software development kit.

URDF: Unified Robot Descripción Format.

XML: Lenguaje de marcas extensible, del inglés, eXtensible Markup Language.

vii

GLOSARIO

Algoritmos: Es un conjunto prescrito de instrucciones o reglas bien definidas,

ordenadas y finitas que permite realizar una actividad mediante pasos

sucesivos que no generen dudas a quien deba realizar dicha actividad.

Arquitectura: Representación ordenada y estructurada de información apoyada

Cinemática: Parte de la mecánica que trata del movimiento en sus condiciones

de espacio y tiempo, sin tener en cuenta las causas que lo producen.

Dinámica: Parte de la mecánica que trata del movimiento en sus condiciones

de espacio y tiempo, sin tener en cuenta las causas que lo producen.

Framework: Es un conjunto estandarizado de conceptos, prácticas y criterios

para enfocar un tipo de problemática particular que sirve como referencia, para

enfrentar y resolver nuevos problemas de índole similar.

Hardware: Conjunto de elementos físicos o materiales que constituyen una

computadora o un sistema informático.

Middleware: Es un software que asiste a una aplicación para interactuar o

comunicarse con otras aplicaciones, o paquetes de programas, redes, hardware

y/o sistemas operativos.

Multiplataforma: Es un atributo conferido a programas informáticos o métodos

y conceptos de cómputo que son implementados e interoperan en múltiples

plataformas informáticas

Open source: Tipo licencia de software sobre la cual el código es distribuido,

modificado, y mejorado libremente.

Sensor: Es un dispositivo capaz de detectar magnitudes físicas o químicas,

llamadas variables de instrumentación, y transformarlas en variables eléctricas.

José Gallardo� 24-12-15 13:15Eliminado: e

José Gallardo� 24-12-15 13:17Eliminado: r

José Gallardo� 24-12-15 13:18Comentario [1]: APOYADA POR QUÉ

José Gallardo� 24-12-15 13:19Comentario [2]: ES LO MISMO DE CINEMÁTICA?, SIN DUDA NO

José Gallardo� 24-12-15 13:19Eliminado: e

José Gallardo� 24-12-15 13:19Eliminado: e

José Gallardo� 24-12-15 13:19Eliminado: e

José Gallardo� 24-12-15 13:20Eliminado: t

José Gallardo� 24-12-15 13:20Eliminado: e

viii

Sistema Operativo: Conjunto de órdenes y programas que controlan los

procesos básicos de una computadora y permiten el funcionamiento de otros

programas.

Software: Conjunto de programas y rutinas que permiten a la computadora

realizar determinadas tareas.

ix

RESUMEN

La robótica móvil actualmente se encuentra presente en la mayor parte de las

industrias, universidades y hasta en los hogares, por esto es que la humanidad

sigue con las investigaciones sobre este tema tan importante. Es por esto que

en la presente tesis, se abordaran temas de la robótica móvil y temas afines al

desarrollo de la misma.

El tema a tratar es la comparación del desempeño de dos configuraciones de

Robot QUE FUNCIONAN UTILIZANDO COMO DISPOSITIVO DE

PERCEPCIÓN DESU MEDIO EXTERNO, un anillo de sensores ultrasónicos Y

una baliza laser, EL RESULTADO DE LA NAVEGACION DEL ROBOT MOVIL

APOYADO POR ESTOS DIFERENTES TIPOS DE DISPOSITIVOS DE

PERSEPCION DEBE SER EVALUADO

Para facilitar el desarrollo de investigaciones se generó ROS, el cual es un

sistema operativo para robots, esto quiere decir que una cantidad elevada de

dispositivos robóticos son compatibles con él, para así poder usar el mismo

programa al cambiar dispositivos de un robot o para agilizar el desarrollo del

mismo ya que no se debe preocupar de los driver y de la comunicación inter

dispositivos, ya que ROS provee esos tópicos.

Actualmente ROS, se encuentra inserto en diversas investigaciones alrededor

del mundo y está en la vanguardia de la investigación universitaria, he allí la

importancia en la profundización en un tema tan importante como este.

jgallardo� 25-12-15 12:34Eliminado: D

José Gallardo� 24-12-15 13:22Eliminado: entre ellas

José Gallardo� 24-12-15 13:22Eliminado: versus

José Gallardo� 24-12-15 13:23Eliminado: entre ellas se deberá comparar los resultados posterior a la ejecución y funcionamiento de las mismas en torno al programa.

jgallardo� 25-12-15 12:35Eliminado: S

jgallardo� 25-12-15 12:37Comentario [3]: NO ES ASI, JUSTAMENTE CUANDO SE DISEÑA UN NOEVO ROBOT, PARA UTILISAR LOS PROGRAMAS DE LAS LIBRERIAS DE ROS, SE DEBEN DESARROLLAR LOS DRIVER QUE PERMITAN A ROS RECONOCERLO COMO DISPOSITIVO COMPATIBLE

1

CAPÍTULO I INTRODUCCIÓN

Las aplicaciones de la robótica móvil se han incrementado en lugares donde

hay necesidad de productividad en masa o donde las tareas necesitan ser

repetitivas y donde el entorno donde el robot desempeñará sus tareas no es

conocido en su totalidad. El uso de este tipo de robots se destaca en la

construcción, la industria nuclear y medicina entre otras.

Actualmente los robots se clasifican en distintos grupos, uno de ellos, es

relevante para el presente trabajo, el uso de robots móviles, principalmente el

robot diferencial. Este robot tan versátil se compone de un cuerpo, donde puede

tener su unidad de procesamiento u otros objetos que pueden facilitar las tareas

que necesita realizar. Además se compone de dos ruedas principales, las

cuales sirven para su desplazamiento y una tercera que se utiliza como pivote,

para tener una base donde puede apoyarse.

La importancia de la presente tesis es de poder comprender cÓmo funciona y

cÓmo desarrollar correctamente UN APLICACIÓN PARA CONTROLAR UN

ROBOT MOVIL UTILIZANDO LOS PROGRAMAS DE la librería ROS, esto para

poder a futuro desarrollar aplicaciones MAS COMPLEJAS, y de mayor aporte a

LA COMUNIDAD CIENTÍFICA.

jgallardo� 25-12-15 12:40Eliminado: o

jgallardo� 25-12-15 12:40Eliminado: o

jgallardo� 25-12-15 12:39Eliminado: con

jgallardo� 25-12-15 12:42Eliminado: mejores

jgallardo� 25-12-15 12:42Eliminado: con mayor dificultad

jgallardo� 25-12-15 12:42Eliminado: la sociedad

1

1.1. Justificación

LA IMPORTANCIA DEL DESARROLLO DEL PRESENTE ESTUDIO, ES LA

UTILIZACION DE ROS PARA EVALUAR DIFERENTES CONFIGURACIONES

DEL ROBOT XXXX, DE MANERA TAL DE PODER EVALUAR LA CALIDAD DE

LA NAVEGACIÓN EN FUNCION DE DOS DISPOSITIVOS DE PERCEPCION

DE DIFERENTES CARACTERISTICAS Y DIFERENTE COSTE, una con un

anillo de sensores ultrasónicos y otra con una baliza laser, como se muestran

en la Figura 1.1. Para realizar esto se deberá profundizar en el uso de ROS

(Robot Operating System), el cual facilita la interacción de bajo nivel con el

hardware y facilita la programación.

Figura 1.1 Anillo ultrasónico y baliza laser, respectivamente

Por lo tanto el objetivo de la presente tesis será de trabajar con ROS, el cual se

instalará en la distribución de Linux, Ubuntu.

He aquí la importancia de la presente tesis ya que los resultados podrían ser

muy distantes a los obtenidos, con tan solo agregar algunas variantes como las

imperfecciones del suelo o la rugosidad de las superficies o en caso contrario

jgallardo� 25-12-15 12:43Eliminado: La realización

jgallardo� 25-12-15 12:48Eliminado: de este proyecto de tesis, es de realizar una comparación en la ejecución de tos configuraciones del robot TurtleBot

jgallardo� 25-12-15 12:49Comentario [4]: CUALES

2

comprobar que la simulación obtuvo los resultados esperados en un ambiente

real.

1.2. Objetivos

A continuación se presenta el objetivo general y aquellos específicos del trabajo

de tesis.

1.2.1. Objetivo general

Realizar una comparación en la navegación reactiva entre una configuración del

robot TurtleBot con un anillo de sensores ultrasónicos y otra con una baliza

laser. Esto se realizará con el uso de ROS, lo que facilitará la implementación

del algoritmo de control.

1.2.2. Objetivos específicos

• Estudiar y profundizar el uso que se le puede dar a ROS junto al robot

TurtleBot.

• Diseñar e implementar las configuraciones de un robot con anillo

ultrasónico y otra con baliza laser.

• Implementar algoritmos haciendo uso de ROS.

• Comparar los resultados de la navegación autónoma reactiva de ambas

configuraciones.

3

1.3. Descripción

Para la realización del trabajo de titulación se han determinado las siguientes

actividades, como se muestran en la Figura 1.2.

Figura 1.2 Actividades del proyecto

A continuación se explica cada una de las actividades de la Figura 1.3:

Investigación sobre ROS: es necesario un estudio previo del funcionamiento

de ROS, de su estructuración y comportamiento.

Diseño e implementación de algoritmos en el robot: se necesita diseñar y

configurar la estructura del robot, situando sensores en lugares específicos de

Éste para que así pueda detectar objetos que no se encontraban a su alcance.

Implementar algoritmos de control: con las configuraciones de las estructuras

de los robots ya desarrolladas, se procede al diseño e implementación del

algoritmo de control, el cual permitirá que el robot pueda eludir objetos de

manera correcta.

Inves'gación  sobre  ROS  

Diseño  e  implementación  de  las  configuraciones  

del  robot    

Implementar  algoritmos  de  

control  

Compara'va  en  la  navegación  del  

robot  

jgallardo� 25-12-15 12:50Eliminado: de

jgallardo� 25-12-15 12:51Eliminado: e

4

Comparativa en la navegación del robot: para realizar la comparación entre

los algoritmos de control, se tomó la cantidad de objetos colisionados con el

robot durante todo su trayecto.

1.4. Resultados esperados

Se espera al finalizar el trabajo de tesis analizar y descubrir cuál de las

configuraciones se desempeña mejor en las mismas condiciones de ambiente y

mismo algoritmo implementado Y ADICIONALMENTE.

• Tener un amplio conocimiento del uso del sistema ROS.

• Poseer una configuración de robot que sea capaz de eludir eficazmente

los obstáculos.

1.5. Metodología

Investigación sobre ROS: se INVESTIGARA la documentación necesaria de

ROS para poder utilizarla de buena manera en el desarrollo de la misma.

Diseño e implementación de algoritmos en el robot: se agregaran los

componentes necesarios a la plataforma TurtleBot y probarlos para su buen

desempeño.

Implementar algoritmos de control: una vez ensamblados, se procederá a

desarrollar los algoritmos de control en el lenguaje c++ e implementarlos en

cada uno de los robots.

Comparativa en la navegación del robot: con los algoritmos implementados y

desarrollados, se evaluará según los parámetros cuál de las dos

configuraciones es más precisa.

jgallardo� 25-12-15 12:52Eliminado: leerá

5

1.6. Recursos necesarios

Se presenta a continuación la clasificación de los recursos estimados que se

utilizarOn durante todo el desarrollo del trabajo de tesis.

1.6.1. Recursos de hardware

Para el desarrollo de las plataformas robóticas se dará uso a dos robot

TurtleBot, los cuales se encuentran disponibles en el departamento, para una

de las configuraciones se usaran siete sensores ultrasónicos PING y conectores

para los mismos, una tarjeta Arduino, la cual se encargara de enviar la

información de los sensores al computador central. Para la plataforma con la

baliza laser solo se usara un láser Hokuyo urg-04lx, que también se encuentra

disponible en el laboratorio.

Para la implementación de algoritmos en el robot, se utilizará un computador

personal provisto por el estudiante, de esta forma se facilitará el uso del mismo

fuera del laboratorio.

1.6.2. Recursos de software

En el desarrollo del trabajo de tesis, se utilizará mayoritariamente software de

código libre, como:

• Sublime text, el cual es un editor de código multiplataforma que puede

soportar múltiples lenguajes.

• ROS el cual es un framework utilizado para el desarrollo de aplicaciones

robóticas, de este modo se libera el uso de licencias especiales.

jgallardo� 25-12-15 12:55Comentario [5]: NO ES UN ANTEPROYECTO, LA TESIS YA TERMINO, NO OUEDE REDACTAR EN FUTURO

jgallardo� 25-12-15 12:53Eliminado: á

jgallardo� 25-12-15 12:53Comentario [6]: NO ES FUTURO, ES PASADO

jgallardo� 25-12-15 12:54Comentario [7]: USARON

jgallardo� 25-12-15 12:54Comentario [8]: PASADO NO FUTURO

jgallardo� 25-12-15 12:55Comentario [9]: IDEM,

6

1.6.4. Recursos humanos

Se muestra en la Tabla 1-1 los recursos humanos asociados al proyecto.

Tabla 1-1 Recursos Humano del Proyecto

Nombre Rol Institución

Juan Errickson Vargas Estudiante Memorista Universidad Católica

del Norte José Gallardo Arancibia Profesor Guía

1.6.5. Recursos de información

Se utilizÓá como base Del estudio la documentación de ROS, la cual se

encuentra disponible en línea, además de los manuales del hardware a utilizar.

1.7. Contenido de la memoria

El documento se estructura en ocho capítulos y cuatro anexos:

• CAPÍTULO I: Introducción. Se presenta el trabajo de tesis a desarrollar,

justificación, objetivos, descripción, resultados esperados, metodología, y

recursos necesarios estimados.

• CAPÍTULO II: Estado del arte. Conceptos asociados a la robótica móvil y

la navegación reactiva, también se comenta sobre los aspectos técnicos

de hardware y software relacionados al trabajo tesis.

• CAPÍTULO III: Diseño de configuraciones de robot. Se exponen las dos

configuraciones propuestas y como deberán componerse para un

adecuado funcionamiento de cada uno de ellos.

• CAPÍTULO IV: Implementación de los algoritmos. Se definen los

algoritmos en la presente tesis, los que incluyen el algoritmo de

jgallardo� 25-12-15 12:56Eliminado: utilizará

7

desplazamiento y el algoritmo del funcionamiento del comunicador

Arduino.

• CAPÍTULO V: Comparación de las configuraciones. En este apartado, se

explican las métricas, se explica su obtención y se realiza la comparación

y el análisis de los datos.

• CAPÍTULO VI: Conclusiones. Síntesis del trabajo realizado, objetivos

alcanzados, aportes generales, y trabajo futuro.

• ANEXO A: Código implementado en el uso de la baliza laser,

comentando los detalles de su funcionamiento.

• ANEXO B: Código implementado en el uso del anillo de sensores

ultrasónicos, comentando los detalles de su funcionamiento.

• ANEXO C: Código utilizado en la comunicación de los sensores a ROS

mediante Arduino, con la documentación necesaria.

8

CAPÍTULO II ESTADO DEL ARTE

2.1. Marco Teórico

La robótica es una ciencia presente en la humanidad desde la antigüedad, la

cual ha evolucionado en el tiempo. En este apartado se profundizará en la

robótica móvil, en la navegación reactiva y el funcionamiento de ROS.

2.1.1. Robótica Móvil

En la actualidad, según su morfología, los robots se pueden clasificar en cuatro

tipos: Robot industrial, Robot móviles, Androides y Zoomórficos. Cuando un

robot puede desplazarse autónomamente o no por cualquier medio, se habla de

robótica móvil, este tipo de robots pueden desplazarse gracias a su morfología

la cual puede poseer, ruedas, patas, propulsores, hélices entre otros, además

de poseer un sistema de suministro energético propio, ya sea por

almacenamiento en baterías o paneles solares. Aunque estas características

les permiten moverse de forma autónoma, esto por sí solo no es suficiente para

desplazarse, requieren poseer sensores externos que les permitan observar su

entorno y algoritmos que conformen su lógica interna (Ruiz de Garibay Pascual,

2007).

Los robots móviles pueden operar en diversos ambientes, algunos peligrosos

para el humano. Realizando tareas repetitivas que requieren precisión y

apoyando las tareas de búsqueda y rescate así como también sirviendo a

personas con capacidades disminuidas (Ruiz de Garibay Pascual, 2007).

Las principales líneas investigativas en robótica móvil se centran en mejorar los

diseños físicos, estudiando los componentes, la cinemática y dinámica para

aprovechar de mejor manera las fuerzas intrínsecas, mejorar la gestión

9

energética, algoritmos que permitan la toma de decisiones inteligentes y

utilización de sensores tanto para la navegación como para la medición de

factores ambientales (Ruiz de Garibay Pascual, 2007).

Como los robots móviles operan en un ambiente de alta complejidad, se ha

recurrido a la utilización de técnicas de control más avanzadas, que le

posibilitan trabajar en condiciones de imprecisión e incertidumbre, reaccionando

de forma rápida frente a los obstáculos, y también poder definir, de manera

autónoma sub tareas que contribuyan a alcanzar su objetivo primario

2.1.2. Navegación reactiva

La navegación reactiva, tiene una relación directa de las entradas de los

sensores con la salida de sus actuadores, sin que exista un bloque de

planificación, este paradigma puede resumirse en una relación bilateral entre

percibir – actuar. La gran ventaja que presenta esta navegación es su rápida

respuesta frente a su entorno y los cambios que hay en él (ambiente dinámico).

2.2. ROS (Sistema Operativo Robótico)

ROS (XXXXXX) el sistema operativo robótico, con sus siglas en inglés, es un

framework muy flexible para el desarrollo de proyectos robóticos, es una

colección de herramientas, bibliotecas y convenciones LAl cual tiene como

objetivo simplificar la tarea de crear comportamientos complejos y robustos para

una amplia gama de plataformas robóticas.

La estructura del sistema ROS fue desarrollada de manera modular y muy

distribuidos todos sus componentes, para así lograr que los usuarios puedan

utilizar tanto o tan poco de ROS como deseen. Esto sirve PARA que los

programas puedan ser más livianos al sacar los componentes que no se utilicen

en un desarrollo.

jgallardo� 25-12-15 13:01Eliminado: e

jgallardo� 25-12-15 13:01Eliminado: a

10

La misma cualidad apoya a que una gran cantidad de usuarios en la comunidad

se conviertan en contribuyentes al sistema, aportando paquetes al ecosistema

de ROS apoyando así tanto proyectos industriales o nuevos algoritmos.

2.2.1. Componentes centrales

Si bien no podemos proporcionar una lista exhaustiva de lo que hay en el

ecosistema ROS, podemos identificar algunas de las partes centrales de ROS y

hablar de su funcionalidad, las especificaciones técnicas y de calidad con el fin

de darle una mejor idea de lo que ROS puede contribuir a su proyecto.

2.2.1.1. Comunicación e Infraestructura

En la capa más baja, ROS ofrece una interfaz de traspaso de mensajes que

proporciona comunicación entre procesos y que comúnmente se conoce como

un middleware.

El middleware ROS ofrece estas instalaciones:

• publicación/suscripción para traspaso de mensajes anónimos

• grabación y reproducción de mensajes

• petición/respuesta de llamadas a procedimiento remoto

• sistema de parámetros distribuidos

2.2.1.1.1. Traspaso de mensajes anónimos

Un sistema de comunicación es a menudo una de las primeras necesidades

que surgen en la aplicación de una nueva aplicación de robot. El sistema de

mensajería construido y testeado de ROS ahorra tiempo mediante la gestión de

los detalles de la comunicación entre nodos distribuidos a través del mecanismo

anónimo de publicación/suscripción. Otra ventaja de utilizar un mensaje del

sistema que pasa, es que obliga a implementar interfaces claras entre los

nodos en el sistema, mejorando así la encapsulación y la promoción de la jgallardo� 25-12-15 13:03Eliminado: te

11

reutilización de código. La estructura de estas interfaces de mensajes se define

en el mensaje de IDL (Interface Description Language).

Los nodos se comunican entre sí mediante la publicación de mensajes a los

tópicos. Un mensaje es una estructura de datos simple, que comprende los

campos con tipo. Se admiten tipos primitivos estándar (enteros, punto flotante,

booleanos, etc.), así como los arreglos de tipos primitivos. Los mensajes

pueden incluir estructuras anidadas arbitrariamente y matrices (muy similar a

las estructuras en C).

2.2.1.1.2. Grabación y reproducción de mensajes

Debido a que el sistema de publicación/suscripción es anónimo y asincrónico,

los datos pueden ser capturados y reproducen fácilmente sin cambios en el

código. Digamos que SE tiene una tarea que lee datos de un sensor, y está

desarrollando Tarea B que procesa los datos producidos por el Grupo A. ROS

hace que sea fácil de capturar los datos publicados por el Grupo A en un

archivo, y luego volver a publicar los datos A presentar en un momento

posterior. La abstracción de paso de mensajes permite LA Tarea B sea

agnósticA con respecto a la fuente de los datos, que podría ser de tareas A o el

archivo de registro. Este es un patrón de diseño de gran alcance que puede

reducir significativamente el esfuerzo de desarrollo y promover la flexibilidad y

modularidad en su sistema.

2.2.1.1.3. Llamadas a procedimiento remoto

La naturaleza asincrónica de la petición y respuesta de mensajería funciona

para muchas necesidades de comunicación en robótica, pero a veces se quiere

interacciones sincrónicas petición y respuesta entre los procesos. El middleware

ROS proporciona esta capacidad usando los servicios. Al igual que los tópicos,

los datos que se envían entre los procesos en una llamada de servicio se

definen con el mismo sencillo mensaje de IDL.

jgallardo� 25-12-15 13:04Eliminado: s

jgallardo� 25-12-15 13:04Eliminado: de la

jgallardo� 25-12-15 13:05Eliminado: o

jgallardo� 25-12-15 13:06Comentario [10]: REDACTAR DE UNA MANERA MAS CLARA Y EXTENSA

12

2.2.1.1.4. Sistema de parámetros distribuidos

El middleware ROS también proporciona una forma en la que las tareas de

compartir información de configuración a través de un almacén global de

valores. Este sistema le permite modificar fácilmente los parámetros de tarea, e

incluso permite que las tareas puedan cambiar la configuración de otras tareas.

2.2.1.2. Características específicas de los robots

Además de los componentes del middleware central, ROS proporciona

bibliotecas para especificaciones de robot comunes y herramientas que harán

que UN robot esté en funcionamiento rápidamente. Éstas son sólo algunas de

las capacidades del robot específico que ROS proporciona:

• Formato de mensajes estándar para robots

• Biblioteca de Geometría para Robot

• Idioma de la Descripción del Robot

• Llamadas apropiadas a procedimientos remotos

• Diagnóstico

• Pose, estimación de localización, cartografía y navegación

2.2.1.2.1. Formato de mensajes estándar para robots

Tras años de distribución y desarrollo de la comunidad SE ha dado lugar a un

conjunto de formatos de mensaje estándar, los cuales cubren la mayor parte de

los casos de uso común en la robótica. Hay definiciones de mensajes para

conceptos geométricos como poses, trasformaciones y vectores; para sensores

cámaras, IMU (Unidad de Medición Inercial del inglés Inertial Measurement

Unit) y el láser: y para los datos de navegación como odometría, rutas y mapas;

entre muchas otras. Mediante el uso de estos mensajes estándar en su

aplicación, el código desarrollado se puede interoperar sin problemas con el

jgallardo� 25-12-15 13:08Eliminado: su

jgallardo� 25-12-15 13:09Eliminado: n

13

resto del ecosistema ROS, desde herramientas de desarrollo para las

bibliotecas de las capacidades de robot.

2.2.1.2.2. Biblioteca de Geometría para Robot

Un reto común en muchos proyectos de robótica es mantener un seguimiento

de dónde están las diferentes partes del robot con respecto a otras. Por

ejemplo, si se necesita combinar los datos de una cámara con los de un láser,

lo que SE necesita saber ES en qué lugar se encuentra cada sensor, en un

marco de referencia común. Este problema es especialmente importante para

robots humanoides con muchas partes móviles. SE Aborda este problema en

ROS con la biblioteca tf, la cual no perderá de vista ninguna parte móvil del

sistema robótico.

Diseñado Y pensando en la eficacia, la biblioteca tf se ha utilizado para la

administración de los datos de transformación de coordenadas para robots con

más de un centenar de grados de libertad y las tasas de actualización de

cientos de hz (Hertz). La biblioteca tf permite definir las transformaciones

estáticas, tales como una cámara que está fijadA a una base móvil y las

transformaciones dinámicas, tales como un conjunto en un brazo robótico. La

biblioteca tf también maneja el hecho de que los productores y consumidores

de esta información se pueden distribuir a través de la red, y el hecho de que la

información se actualiza a diferentes velocidades.

2.2.1.2.3. Idioma de la Descripción del Robot

Otro problema común DE LA robótica QUE ROS soluciona, es cómo describir

UN robot de forma legible por máquina. ROS proporciona un conjunto de

herramientas para describir y modelar UN robot para que pueda ser entendido

por el resto de su sistema ROS, incluyendo la librería tf, robot_state_publisher y

rviz. El formato para la descripción de UN robot en ROS es URDF (Unified

Robot Descripción Format), que consiste en un documento XML en el que EL

jgallardo� 25-12-15 13:10Eliminado: son

jgallardo� 25-12-15 13:10Eliminado: las

jgallardo� 25-12-15 13:11Eliminado: A

jgallardo� 25-12-15 13:11Eliminado: mos

jgallardo� 25-12-15 13:11Eliminado: o

jgallardo� 25-12-15 13:12Eliminado: que la

jgallardo� 25-12-15 13:12Eliminado: su

jgallardo� 25-12-15 13:13Eliminado: tu

jgallardo� 25-12-15 13:13Eliminado: su

jgallardo� 25-12-15 13:14Comentario [11]: DEBE PERSONALIZAR LA DESCRIPCION, Parece una traducción o copia de un manual

jgallardo� 25-12-15 13:14Eliminado: usted

14

USUARIO describe las propiedades físicas de SU robot, de la longitud de las

extremidades y tamaños de ruedas para la ubicación de los sensores y de la

apariencia visual de cada parte del robot.

Una vez definido de esta manera, el robot se puede utilizar fácilmente con la

librería del tf, dictada en tres dimensiones para una buena visualización, y se

utiliza con los simuladores y los planificadores de movimiento.

2.2.1.2.4. Llamadas apropiadas a procedimientos remotos

Mientras que los tópicos (publicación/suscripción anónima de mensajes) y

servicios (llamadas a procedimiento remoto) cubren la mayoría de los casos de

uso de la comunicación en la robótica, a veces se necesita para iniciar un

comportamiento de búsqueda de metas, monitorear su progreso, capaz de

anticiparse a lo largo del camino, y recibir una notificación cuando se ha

completado. ROS proporciona acciones para este propósito. Acciones son

como los servicios, salvo que puedan informar sobre los progresos antes de

devolver la respuesta final, y se puede interrumpir por quien le llama. Así, por

ejemplo, puede instruir a su robot para desplazarse a algún lugar, monitorear su

progreso en su intento de llegar allí, detener o redirigirlo a lo largo del camino, y

que le digan cuando ha tenido éxito (o fracaso). Una acción es un concepto

poderoso que se utiliza en todo el ecosistema de ROS.

2.2.1.2.5. Diagnóstico

ROS proporciona una forma estándar para producir, recopilar y agregados

diagnósticos acerca de su robot de forma que, a simple vista, se puede ver

rápidamente el estado de su robot y determinar la forma de abordar los

problemas que se presenten como se ve en la Figura 2.1.

jgallardo� 25-12-15 13:14Eliminado: su

jgallardo� 25-12-15 13:16Comentario [12]: ¿?

15

Figura 2.1 Diagnósticos para robot

2.2.1.2.6. Pose, estimación de localización, cartografía y navegación

ROS también proporciona algunas "baterías incluidas" las que ayudan a

empezar a trabajar en algunos proyectos de robótica. Hay paquetes de ROS

que resuelven problemas de robótica básicas como la estimación de la pose,

localización en un mapa, la construcción de un mapa, e incluso la navegación

móvil.

Ya sea que un ingeniero busque para hacer una investigación y un desarrollo

rápido, algún investigador de robótica con ganas de conseguir su investigación

realizada en el momento oportuno, o un aficionado que quiera aprender más

acerca de la robótica, estas ayudas facilitaran a hacer más, con menos

esfuerzo.

jgallardo� 25-12-15 13:17Comentario [13]: MEJORAR CALIDAD DE LA IMAGEN

jgallardo� 25-12-15 13:17Comentario [14]: ¿?

16

2.2.1.3. Herramientas

Uno de los rasgos más característicos de ROS es el poderoso conjunto de

herramientas de desarrollo. Estas herramientas apoyan la introspección, la

depuración, el trazado, y visualizar el estado del sistema que se está

desarrollando. El mecanismo de publicación/suscripción subyacente permite

introspección espontáneamente a los datos que fluyen a través del sistema, por

lo que es fácil de comprender y depurar problemas que se produzcan. Las

herramientas de ROS se aprovechan de esta capacidad de introspección a

través de una extensa colección de utilidades de línea de gráficas y de

comandos que simplifican el desarrollo y depuración.

2.2.1.3.1. Línea de comandos

ROS puede utilizar 100% sin la necesidad de una GUI (Interfaz gráfica de

usuario traduciendo sus siglas en ingles). Todas las herramientas de

funcionalidad del núcleo y de introspección, se puede acceder por una las más

de 45 herramientas de línea de comandos. Hay comandos para lanzar grupos

de nodos; introspección tópicos, servicios y acciones; datos de grabación y

reproducción; y una serie de otras situaciones.

2.2.1.3.2. RVIZ

Tal vez ES la herramienta más conocida en ROS, rviz la cual proporciona

propósitos generales, la visualización tridimensional de muchos tipos de datos

del sensor y cualquier robot URDF-descrito.

RVIZ puede visualizar muchos de los tipos de mensajes comunes previstos en

ROS, como escáneres láser, nubes de puntos tridimensionales, y las imágenes

de la cámara. También utiliza la información de la biblioteca tf para mostrar

todos los datos de los sensores en un sistema de coordenadas común de su

elección, junto con una representación tridimensional de su robot. Visualización

jgallardo� 25-12-15 13:19Comentario [15]: ¿?

17

de todos sus datos en la misma aplicación no sólo se ve impresionante, pero

también le permite ver rápidamente lo que ve a su robot, e identificar

problemas, como desajustes de sensores o inexactitudes modelo de robot.

2.2.1.3.3. RQT

ROS ofrece rqt, un marco basado en Qt para el desarrollo de interfaces gráficas

para los robots. SE puede crear interfaces personalizadas ensamblando y

configurando la extensa biblioteca de plugins RQT en pestañas, pantalla

dividida y otros diseños. También puede introducir nuevos componentes de la

interfaz de escribir sus propios plugins RQT.

El rqt_graph plugin proporciona la introspección y la visualización de un sistema

de ROS en directo, que muestran los nodos y las conexiones entre ellos, y lo

que le permite fácilmente depuración y entender su sistema de funcionamiento

y cómo se estructura, tal como muestra la Figura 2.2.

Figura 2.2 RQT_GRAPH muestra relaciones de nodos en un programa en ejecución.

jgallardo� 25-12-15 13:20Comentario [16]: MEJORAR REDACCION

jgallardo� 25-12-15 13:21Eliminado: P

18

Con la rqt_plot plugin, se puede monitorear codificadores, tensiones, o cualquier

cosa que se pueda representar como un número que varía con el tiempo. El

plugin rqt_plot le permite elegir el backend de trazado (por ejemplo, matplotlib,

Qwt, pyqtgraph) que mejor se adapte a sus necesidades, como se ve en la

Figura 2.3.

Figura 2.3 RQT_PLOT grafica tópicos en directo

Para el seguimiento y el uso de tópicos, usted tiene la rqt_topic y rqt_publisher

plugins. El primero le permite supervisar e introspección de cualquier cantidad

de tópicos que se haya publicado dentro del sistema. Este último le permite

publicar sus propios mensajes a cualquier tópico, lo que facilita la

experimentación ad-hoc con el sistema.

Para el registro y reproducción de datos, ROS utiliza el formato bag. Los

archivos bag se pueden crear y acceder de forma gráfica a través del plugin

jgallardo� 25-12-15 13:22Comentario [17]: ADAPTAR LA REDACCION, NO ES UNA VENTA DE PRODUCTO NI COPIA DE UN MANUAL

19

rqt_bag. Este plugin puede registrar los datos de los bag, llevarlo de vuelta a los

tópicos seleccionados de un bag, y visualizar el contenido de un bag,

incluyendo la visualización de imágenes y de trazado de los valores numéricos

en el tiempo.

20

2.4. Turtlebot

¿Qué es un turtlebot? Turtlebot kit de robot personal con el software de código

abierto de bajo costo. Con turtlebot, se es capaz de programar un robot que

puede navegar dentro de su casa, ver en 3D, y tiene suficiente potencia para

crear aplicaciones interesantes.

2.4.1. Hardware

Con respecto a su hardware incluye una base iClebo Kobuki, la cual es una

base de investigación móvil de bajo costo diseñado para la educación y la

investigación sobre el estado del arte de la robótica. Con un funcionamiento

continuo en mente, Kobuki ofrece fuentes de alimentación para un ordenador

externo, así como sensores adicionales y actuadores. Su odometría de alta

precisión, con un giroscopio calibrado de fábrica, permite una navegación

precisa.

Con respecto a su autonomía, cuenta con una batería de entre 4 y 5 horas lo

cual tiene una importancia muy grande, ya que permite trabajar un largo tiempo

sin preocuparse de la carga de la batería.

La base Kobuki no puede hacer nada por sí mismo, para que pueda tan solo

moverse, necesita alguna unidad de procesamiento, esto puede ser un

notebook u otra tarjeta de cómputo.

Esta plataforma también incluye un sensor Kinect de Microsoft, esta es muy

importante para el robot, ya que provee la posibilidad de tener visión en 3D, ya

que este sensor funciona con una cámara normal y sensor de profundidad.

Además este robot incluye una variedad de plataformas donde se montan los

dispositivos externos, las cuales vienen con sus respectivos diseños para su

creación si se necesitasen más.

jgallardo� 25-12-15 13:24Eliminado: de trabajo

21

2.4.2. Software

Para el desarrollo de aplicaciones posee una SDK para el mismo, está

disponible tanto para Windows como para Linux, además posee un nodo en

ROS eL que es capaz de trabajar eficazmente con este robot, especialmente se

tendrá un enfoque importante en ROS, ya que será el utilizado en este trabajo.

El nodo en ROS, además de servir para implementar códigos propios, trae una

variada muestra de ejemplos, donde se puede aprender las cosas que es capaz

de realizar y aprender de las mismas para trabajos futuros

Cabe destacar que el proyecto es de código abierto, por lo tanto cada uno

puede generar sus propios drivers para el desarrollo de cada proyecto con los

dispositivos que se quieran.

2.5. Hokuyo láser

En especial se utilizó el láser modelo URG-04LX el cual es un sensor de

escaneo de área. La fuente de luz del sensor es un láser infrarrojo de 785nm de

longitud de onda con la clase 1 de seguridad láser. El área de exploración es de

240º un semicírculo con una distancia máxima de radio de 4000mm, como se

ve en la Figura 2.4. El ángulo de paso es 0.36º y el sensor calcula la distancia

en todos los puntos (683 pasos). Diámetro del haz láser es inferior a 20 mm en

2000 mm con la máxima 40mm a los 4000mm.

jgallardo� 25-12-15 13:25Eliminado: n

22

Figura 2.4 abanico de acción de la baliza láser

Principalmente de medición de la distancia se basa en el cálculo de la diferencia

de fase del haz, debido a lo cual es posible obtener una medición estable con

influencia mínima de color y reflectancia del objeto.

2.6. Arduino

Arduino es una plataforma de prototipos de código abierto basado en hardware

y software fácil de usar. Las placas Arduino son capaces de leer la luz en un

sensor, un botón presionado, o un mensaje de Twitter y lo convierten en una

salida, la activación de un motor, encender un LED, publicar algo en línea. Para

ello se utiliza el lenguaje de programación de Arduino (basado en Wiring), y el

software de Arduino (IDE), basado en Processing.

23

CAPÍTULO III DISEÑO DE CONFIGURACIONES DE ROBOT

Dentro del trabajo de tesis realizado se ha definido la robótica móvil como “…un

robot puede desplazarse autónomamente o no por cualquier medio…”. Se

considera un robot móvil según esta descripción el robot TurtleBot, ya que

posee ruedas para desplazarse por suelo e indoor.

Cuando se habla del diseño de configuraciones de robot, se tiene en

consideración que una plataforma robótica, para el presente caso el kit de

desarrollo turtlebot, será el seleccionado para el trabajo, esto ya que por su

versatilidad y fácil implementación en la librería ROS, acelera todo trabajo.

Las configuraciones del robot son las siguientes:

• Anillo ultrasónico: anillo de sensores ultrasónicos que rodea el robot

• Baliza laser: sensor laser que gira para realizar mediciones en su

entorno

Arduino

3.1. Anillo Ultrasónico

Como su nombre lo dice es un anillo, pero para el caso actual solo es medio

circulo, en este se situaron 7 sensores PING))). El sensor PING es un sensor

especializado en medir la distancia a los objetos que se encuentran frente a él,

su alcance es entre 2 cm y 3 mt, trabaja realizando mediciones ultrasónicas por

lo tanto funciona bien en cualquier condición lumínica.

Como se puede ver en la Figura 3.1, el sensor posee 3 pines, donde el de la

izquierda se debe conectar a tierra, el del centro se debe conectar a una fuente

de alimentación de +5VDC y el tercer pin es el de señal, es el que recibe la

instrucción de funcionar para medir las distancias.

jgallardo� 25-12-15 13:29Comentario [18]: ¡?

24

Figura 3.1 PING))) de Parallax Para darle soporte al sensor y poder montarlo en el robot, se debió colocar en

un soporte protector como se ve en la Figura 3.2, así impidiendo su movimiento

al momento de desplazar al robot de su posición

Figura 3.2 Soporte protector de PING)))

25

Los sensores se montaron en el robot tal como muestra la Figura 3.3

Figura 3.3 Protectores con sensores montados en el robot

Para que el robot pueda obtener los datos de cada uno de los sensores, se

debió utilizar una placa Arduino, la cual sirvió como medio de comunicación

entre la unidad de procesamiento central y los sensores.

Gracias a que ROS es un sistema de código abierto y Arduino una placa de

código y hardware abierto, existe una librería de desarrollo de ROS orientada a

Arduino, esta se encarga de realizar publicaciones mediante tópicos, los cuales

se pueden leer desde cualquier aplicación corriendo en ROS, en el Anexo C se

encuentra el código documentado para su mejor comprensión.

26

Una vez implementado el programa que publica las mediciones del anillo, se

creó el programa que lee esos datos y genera la respuesta a dichas acciones.

Para esto se debió utilizar un lector de tópicos, el cual se gatilla cada vez que

se publica una lectura de datos, esto ayuda a que el programa corra con fluidez.

3.2. Baliza laser

La baliza es un sensor laser que gira con cierta velocidad y se encarga de

realizar mediciones en su entorno, entregando así un vector con las distancias

de los objetos en su entorno.

Este sensor provee con la detección de objetos que se encuentran de 3cm a

4mt, que es muy similar a las magnitudes entregadas por el sensor ultrasónico.

El vector de respuesta es de 683 valores, cada medición se realiza con un

ángulo de 0,36 grados.

La conexión del láser al computador central se realiza por conexión USB directa

y la alimentación eléctrica, se realiza mediante el cable RS-232C, el cual se

encuentra conectado a la plataforma Kobuki del turtlebot, que lo alimenta con

+5VDC y un máximo de 1A.

Las mediciones las entrega a través de un tipo datos de sensores laser, que

entrega los valores leídos, los ángulos de lectura y otros parámetros no

relevantes para el trabajo.

Como los laser Hokuyo ya poseen su propia SDK dentro de ROS, la publicación

de los datos, se realiza de manera automática, por lo tanto el programa solo

debe leer los datos.

27

CAPÍTULO IV Implementación de los algoritmos

El algoritmo, se basa en la acción reacción, de ahí el nombre reactivo, es decir

para que se mueva deben ocurrir diversas condiciones. El algoritmo es igual

para ambas configuraciones, en el caso de la baliza laser, se dividió en zonas

para simular un anillo laser. La separación de los sensores ultrasónicos se

puede observar en la Figura 4.1, los cuales están enumerados del 1 al 7.

Figura 4.1 Vista superior de turtlebot con sensores ultrasónicos

28

Para la implementación del algoritmo en Arduino, se debió realizar la conexión

entre sensores y Arduino, que se puede evidenciar en la Figura 4.2.

Figura 4.2 Conexión de los sensores con Arduino.

4.1. Algoritmo de desplazamiento del robot

A continuación se detalla el funcionamiento del algoritmo, esto es independiente

del sensor a utilizar:

• Si todos los sensores muestran distancias mayores a 50 cm, se avanza

en línea recta.

• Si se detecta obstáculo con alguno de los 7 sensores y se puede girar

o Si se detecta un obstáculo en el sensor 4 (frente al robot)

29

§ Si la distancia del sensor 5 es mayor al 3, quiere decir que

el objeto se encuentra más cerca del sensor 3, por lo tanto

se avanza girando a la izquierda

§ Si el 3 es mayor al 5, caso contrario se avanza girando a la

derecha.

§ Si resultasen iguales, se repite el proceso pero con los

sensores 6 y 2, pero ahora se gira en la dirección contraria

del objeto más próximo.

o Si el sensor 1 o 2 muestra un objeto, se gira avanzando levemente

a la izquierda.

o Si el sensor 3 muestra un objeto se gira en su propio eje a la

izquierda.

o Si el sensor 5 se encuentra con un objeto, se gira a la derecha.

o Si los sensores 6 o 7 muestran un objeto, se avanza girando a la

derecha.

• En el caso que se detecte el objeto por más de un sensor a la vez

o Si el objeto está a la derecha y se puede girar, se gira a la

izquierda

o Si el objeto está a la izquierda y se puede girar, se gira a la

derecha

o En caso contrario, se verifica para que lugar está la mayor parte

del objeto y se gira en sentido contrario constantemente por unos

segundos.

• Se puede producir un movimiento denominado “pinponeo” que se puede

generar en ciertas instancias por el robot con algunos giros, es decir, si

gira a la derecha y después a la izquierda y lo repite, se queda atrapado

en un ciclo constante y se queda en un pinponeo constante. Para ello se

cuenta cada vez que gira a la derecha o izquierda sin haber avanzado en

30

línea recta, si se pinponea más de 4 veces, se obliga al robot a avanzar

un poco para que pueda salir de ese estado.

• Finalmente se realiza el movimiento solicitado mediante un publicador,

que se encarga de decirle a la base turtlebot, en qué sentido debe girar o

avanzar.

4.2. Algoritmo de comunicación Arduino

Para el programa del Arduino, el cual se encarga de publicar a ROS los datos

de los sensores ultrasónicos, la lógica es la siguiente:

• En primer lugar se inicializan las variables de publicación, donde se

indica que se publicarÁ un arreglo de 7 posiciones.

• Dentro del loop, el que se encarga de funcionar constantemente, SE

almacena EL valor de cada PING en el arreglo, llamando a la función que

calcula la distancia

o Para calcular la distancia, en primer lugar se declara el

TERMINAL del PING como una salida de datos en el que se envía

un pulso bajo para limpiar la señal, 2 milisegundos después se

envía una señal alta posterior a ello se mide el tiempo que demora

en retornar el ultrasonido al sensor y se calcula la distancia a cm.

• Luego de leer los 7 sensores se publica a ROS el arreglo de datos,

donde estará listo para su lectura.

NADA DEL LASER?????????????

jgallardo� 25-12-15 18:48Eliminado: ros

jgallardo� 25-12-15 18:48Eliminado: a

jgallardo� 25-12-15 18:49Eliminado: cada

jgallardo� 25-12-15 18:49Eliminado: pin

31

CAPÍTULO V Comparación de las configuraciones

5.1. Métricas

Para realizar la comparación entre ambas configuraciones hace falta definir

métricas para la decisión de cuál de las configuración de robot es mejor EN

CUANTO A QUÉ, para ello se tendrán en cuenta los siguientes tópicos

• Cantidad de choques

• Cantidad de veces que se debió corregir manualmente el robot

5.1.1. Cantidad de choques

La cantidad de choques se contabilizo manualmente, para cada robot por

separado se contó cuantas veces se interceptó con algún objeto del laboratorio,

esto sirve para saber si el algoritmo funciona mejor evadiendo obstáculos con el

láser o con el anillo de sensores ultrasónicos, ya que en un ambiente real, se

espera que un robot avance fluidamente sin tener que pasar por la colisión con

obstáculos, los cuales podrían dañar física o afectar la navegación autónoma

del mismo.

5.1.2. Cantidad de veces que se debió corregir el robot

Esta métrica sirve para medir la cantidad de veces que el robot se queda

atrapado en algún lugar del laboratorio. Esto es ya que si el robot se llegase a

quedar atrapado en su recorrido, representa que el sensor realizo una mala

medida y no detecto algún objeto. Un ejemplo de esto puede ser una esquina,

en las esquinas si el robot llega, detectara objetos al frente, a la izquierda y a la

derecha, siendo que en la lógica del algoritmo se tienen en cuenta estos casos,

jgallardo� 25-12-15 18:54Comentario [19]: ES EL ESCENARIO EXACTAMENTE EL MISMO?, POR EJEMPLO UN LABERINTO SERÍA EL MISMO ESCENARIO, PERO NO OTRO PUES LOS DESPLAZAMIENTOS PUEDEN SER DIFERENTES

jgallardo� 25-12-15 18:52Comentario [20]: DEFINIR METRICAS MAS ACADÉMICAS

jgallardo� 25-12-15 18:53Comentario [21]: COLICIONES ES UN TERMINO MAS ACADÉMICO

jgallardo� 25-12-15 18:55Comentario [22]: ESTO NO DEPENDE DEL ALGORITMO DE CONTROL???

32

la mala lectura por parte de los sensores, podría provocar que el algoritmo falle

igualmente. Un caso más complejo es encontrarse en un callejón angosto y sin

salida, donde tendría la misma situación pero con menos espacio para

maniobrar.

5.2. Obtención de métricas

Para la medición, se ejecutó el algoritmo en cada robot por 5 minutos y se

observó su funcionamiento, donde se contó la cantidad de choques y la

cantidad de correcciones de recorrido que debió aplicársele a cada uno, en la

tabla 5.1 se puede observar los datos obtenidos en ambos recorridos.

Tabla 5-1 Tabla con conteo de métricas

Robot Choques Corregir

Anillo Ultrasónico 6 3

Baliza laser 1 0

De la tabla, se puede extraer que la baliza laser navegó mejor con el algoritmo,

ya que chocó menos y no se le debió corregir la navegación ya que no se

quedó atrapado en ningún lugar.

Se puede obtener de la tabla 5.1, que ambos sensores al tener funcionamientos

de manera casi igual, siguen siendo distintos y con una precisión distinta, en el

caso de la baliza, al hacer la separación en 7 sensores, se puede deducir que

cada uno de ellos mide las distancias en todo su espectro, es decir que como el

láser tiene un rango de acción de 240° al dividirlo entre 7 se obtiene 34°

aproximadamente, el paso entre lectura y lectura es de 0,36° lo que nos genera

95 lecturas, además se tiene que el algoritmo solo considera a los objetos que

se encuentran a una distancia máxima de 50 centímetros, utilizando el teorema

del coseno al triángulo formado por estos valores tal como se ve en la figura

33

5.1, se obtiene que el objeto más pequeño que se podría observar es de un

grosor de 0,314 centímetros, teniendo en cuenta esto, la mayor parte de las

cosas en el laboratorio, por no decir todo, tiene un grosor mayor a los 3

milímetros, por ende el láser detectara a la gran mayoría de los objetos en el

laboratorio.

Figura 5.1 Triángulo formado en la medición laser

Con respecto al sensor ultrasónico presenta problemas en cierta lectura de

objetos, unO de ellos es que la superficie a medir debe estar en un ángulo no

mayor a 45 grados desde la perpendicular al objeto, por lo tanto podría no

detectar algunos objetos, como se ve en la Figura 5.2.

Figura 5.2 Sensor ultrasónico sin detectar objeto.

jgallardo� 25-12-15 18:57Eliminado: a

34

35

CAPÍTULO VI CONCLUSIONES

uN robot móvil autónomo hoy en día, se puede utilizar en todo ámbito, desde la

ayuda humanitaria, por ejemplo en el desminado de minas anti personales, o en

la domótica, en este ámbito son robots que ayudan a las tareas domésticas, o

en empresas, donde pueden transportar materiales que sean nocivos para los

seres humanos. Si bien son ámbitos muy distintos, todos se encuentran

centrados en que necesitan robots que sean capaces de desplazarse y Y CON

CAPACIDAD DE detección Y EVASION de objetos en un entorno cerrado de

manera autónoma.

La evasión de obstáculos autónoma no es nada trivial, esto dependerá de la

complejidad del algoritmo de control, esto puede variar de un control reactivo a

algo más complejo como puede ser el control a través de detección de patrones

mediante redes neuronales u otro método más complejo.

La complejidad del desarrollo del trabajo no radicó en la complejidad del

algoritmo, si no en el buen uso de ROS, el cual al ser usado como un

middleware, abstrae todo el código relacionado con el hardware del robot, lo

que facilitó mucho el desarrollo del algoritmo de control.

El autoaprendizaje y autoconocimiento respecto a las fortalezas y habilidades

blandas promovidas por la Universidad en conjunto con la entrega de

conocimientos técnicos, se vieron reflejados durante todo el desarrollo e

implementación del trabajo desarrollado.

6.1. Cumplimiento de los objetivos

En relación al objetivo general del trabajo de tesis, el cuaL indicaba "Realizar

una comparación en la navegación reactiva entre una configuración del robot

TurtleBot con un anillo de sensores ultrasónicos y otra con una baliza laser.

jgallardo� 25-12-15 18:57Eliminado: El uso del

jgallardo� 25-12-15 18:59Con formato: español

jgallardo� 25-12-15 19:00Eliminado: n

36

Esto se realizará con el uso de ROS", se definieron los siguientes objetivos

específicos, detallando el cumplimiento alcanzado en cada uno de ellos.

• Objetivo 1: "Estudiar y profundizar el uso que se le puede dar a ROS

junto al robot TurtleBot". Dentro del marco teórico se realizó un estudio

de la documentación de ROS y TurtleBot, teniendo así un vasto

conocimiento de cómo se comporta el robot y los diversos sensores al

conectarse a ROS.

• Objetivo 2: "Diseñar e implementar las configuraciones de un robot con

anillo ultrasónico y otra con baliza laser". Posterior al estudio dentro del

marco teórico, se presentARON dos diseños de las configuraciones

PARA EL robot, uno con los sensores ultrasónicos en forma de anillo en

torno a la plataforma del robot, para la transmisión de datos a la unidad

de procesamiento se implementó el uso de una tarjeta Arduino para la

adquisición de datos, tal como se expuso en el Capítulo III y el diseño

con láser QUE se instaló en el centro de la plataforma.

• Objetivo 3: "Implementar algoritmos haciendo uso de ROS".

En este punto se detallaron todas las actividades propias del desarrollo

del algoritmo de control, para ello se hizo uso de los conocimientos

adquiridos con el objetivo 1.

• Objetivo 4: “Comparar los resultados de la navegación autónoma

reactiva de ambas configuraciones”

Con los algoritmos ya montados, se procedió a realizar la comparación

entre los resultado, esto mediante las métricas planteadas.

jgallardo� 25-12-15 19:01Eliminado: ó

37

6.2. Trabajo futuro

Como trabajo futuro, se puede generar algoritmos más complejos, de forma que

la navegación sea más eficiente que con una navegación reactiva, esto se

podría realizar mediante algoritmos que utilicen redes neuronales, o control

difuso.

Sin duda, el algoritmo desarrollado ha cumplido con éxito los objetivos

planteados, por lo tanto la base del algoritmo, que es la conexión de sensores a

ROS y la publicación desde ROS al robot, por lo tanto se podría implementar

los algoritmos complejos sobre esa base, lo que facilita el desarrollo del control

eficiente.

38

Bibliografía

[1] ROS.ORG, «ROS,» 2015. [En línea]. Available:

http://www.ros.org/.

[2] Yujinrobot, «KOBUKI | kobuki|waiterbot|shooter,» Yujinrobot,

[En línea]. Available: http://kobuki.yujinrobot.com/. [Último

acceso: 2015].

[3] Open Source Robotics Foundation, Inc., «TurtleBot,» [En

línea]. Available: http://www.turtlebot.com/. [Último acceso:

2015].

[4] HOKUYO AUTOMATIC CO., LTD. All Rights Reserved,

«Scanning range finder URG-04LX | Photo sensor |

PRODUCTS | HOKUYO AUTOMATIC CO.,LTD.,» [En línea].

Available: http://www.hokuyo-

aut.jp/02sensor/07scanner/urg_04lx.html. [Último acceso:

2015].

[5] Parallax Inc., «PING-Sensor-Product-Guide-v2.0.pdf,» [En

línea]. Available:

https://www.parallax.com/sites/default/files/downloads/28015-

PING-Sensor-Product-Guide-v2.0.pdf. [Último acceso: 2015].

[6] A. &. B. I. Gersnoviez, CONTROLADOR PARA

NAVEGACIÓN REACTIVA EVITANDO OBSTÁCULOS

39

MEDIANTE TÉCNICAS NEURO-FUZZY, 2008.

[7] P. R. C. H. &. C. T. E. Medina Varela, OPERACIÓN DE

SISTEMAS AGV (VEHÍCULOS GUIADOS

AUTOMATIZADOS) CON FLUJO ESTATICO, Pereira ,

Colombia, 2009.

[8] A. S. L. C. &. R. M. H. Pedroza Reyes, Control de un

Vehiculo Guiado Automaticamente (AGV)., Aguascalientes,

Mexico., 2007.

[9] J. Ruiz de Garibay Pascual, Robótica: Estado del arte., 2007.

[10] J. &. S. R. Ruiz Del Solar, Introducción a la robótica..

40

ANEXO A Código navegación con laser

#incluye <stdlib.h>

#incluye <time.h> // Librería de ROS #include "ros/ros.h" //Librería para los movimientos de la base Kobuki #include "geometry_msgs/Twist.h" //Clase de mensajes para lectura de laser #include "sensor_msgs/LaserScan.h" //Publicador, encargado de publicar valores de movimiento para el nodo de la base ros::Publisher pub; //Velocidad de desplazamiento de la base float speed = .18; //Velocidad de giro float turn = .5; //Variables para orientación float x = 0; float th = 0; //Variables para movimiento del robot float target_speed = 0; float target_turn = 0; float control_speed = 0; float control_turn = 0; //Movimientos relacionados al robot //la lista siguiente muestra cada uno /* 0: detener 1: avanzar 2: avanzar a la derecha 3: avanzar a la izquierda 4: girar derecha 5: girar izquierda */ int movimiento = 1; int movimientos[6][2] = {{0, 0}, {1, 0}, {1, -1}, {1, 1}, {0, -1}, {0, 1}}; //Flag para saber si el robot debe girar o no bool deboGirar = false; //Contador de giros del robot int giros = 0; //Cuando Gira izquierda o gira derecha, se utilizara para evitar pinponeo del robot

jgallardo� 25-12-15 18:59Eliminado: include

jgallardo� 25-12-15 18:59Eliminado: include

41

int pinPon = 0; /* * Método que a partir del valor de la variable "movimiento", * realiza el movimiento del robot */ static void mover() { x = movimientos[movimiento][0]; th = movimientos[movimiento][1]; target_speed = speed * x; target_turn = turn * th; control_speed = target_speed; control_turn = target_turn; geometry_msgs::Twist twist; //Como el movimiento del robot es solo en 2 dimensiones, se manipulan // la x lineal y z angular. twist.linear.x = control_speed; twist.linear.y = 0; twist.linear.z = 0; twist.angular.x = 0; twist.angular.y = 0; twist.angular.z = control_turn; //Se publica en ROS el movimiento del robot pub.publish(twist); } /* * Suma la cantidad de obstaculos en el vector de obstaculos */ int sumaObstaculos(int obs[6]){ int suma = 0; for(int i = 0; i < 6; i++){ suma = suma + obs[i]; } return suma; } /** * Calcula la suma de los 'hexantantes' de la derecha **/ int sumaDerecha(int obs[6]){ int suma = 0; for(int i = 0; i < 3; i++){ suma = suma + obs[i]; } return suma; } /* * Calcula para que dirección debe girar el robot, a partir de los * obstaculos detectados. */

42

void seDebeGirar(int obstaculos[6]) { if(!deboGirar){ pinPon++; if(sumaDerecha(obstaculos)>sumaObstaculos(obstaculos) - sumaDerecha(obstaculos)) { movimiento = 5; deboGirar = true; } else { movimiento = 4; deboGirar = true; } } } /* * Trigger que se ejecuta al recibir una lectura del laser */ void scanValues(const sensor_msgs::LaserScan::ConstPtr& scan_msg)// laser) { int obstaculos [6] = {0,0,0,0,0,0}; //Se pausa la ejecución durante 15 milisegundos ros::Rate loopRate(15); //Es el tamaño del vector de lectura del laser. int tamanio = scan_msg->ranges.size(); //Contador de bloques, los cuales son 6 int bloque = 1; //Se recorre todo el vector de puntos menos la primera lectura y la última for(int i = 1; i < tamanio - 1; i++) { //Si i supera al i hexante if (i >= tamanio / 6 * bloque) { //Se avanza el bloque bloque = bloque + 1; } //Si el valor de lectura es menor a 50 cm y mayor a 25 y si la // medición pertenece al i bloque if(scan_msg->ranges[i] > 0.25 and scan_msg->ranges[i] < 0.5 and i < tamanio / 6 * bloque) { //Se marca que en el bloque existe un obstáculo obstaculos[bloque-1] = 1; } } //Se calcula la cantidad de obstaculos detectados int sumObstaculos = sumaObstaculos(obstaculos);

43

//Si la variable pinpon es mayor a 4, es decir si el robot a girado de // izquierda a derecha o viceversa, sin avanzar. if(pinPon > 4) { //Se setea la variable pinpon a 0 pinPon = 0; //Se cambia el valor de movimiento a 0, para forzar a avanzar al robot movimiento=1; } else { //Si no hay obstaculos se avanza if(sumObstaculos == 0){ movimiento = 1; pinPon = 0; deboGirar = false; } //Si hay 1 obstáculo en algún lugar y no se debe girar. else if(sumObstaculos == 1 && !deboGirar) { //Solo hay un obstáculo en algún 'hexante', se procede con el // movimiento respectivo. if(obstaculos[0] == 1) { movimiento = 3; ROS_INFO("3 del numero 0"); } else if(obstaculos[1] == 1) { movimiento = 3; ROS_INFO("3 del numero 1"); } //Se gira a la derecha y se incrementa en 1 la variable pinpon else if(obstaculos[2] == 1) { movimiento = 4; pinPon++; } //Se gira a la izquierda y se incrementa en 1 la variable pinpon else if(obstaculos[3] == 1) { movimiento = 5; pinPon++; } else if(obstaculos[4] == 1) { movimiento = 2; }

44

else if(obstaculos[5] == 1) { movimiento = 2; } } //Si hay mas de 1 obstáculo else { //Si el total de obstaculos es de la derecha y además no se debe girar if(sumaDerecha(obstaculos) == sumObstaculos && !deboGirar) { movimiento = 5; pinPon++; } //Si el total de obstaculos es de la izquierda y además no se debe girar else if(sumObstaculos - sumaDerecha(obstaculos) == sumObstaculos && !deboGirar) { movimiento = 4; pinPon++; } //Si no se sabe en que sector están la mayor cantidad de obstaculos else { //Se debe girar a la izquierda o derecha seDebeGirar(obstaculos); } } } //Si debe girar, se incrementa la cantidad de giros if(deboGirar) { giros++; } //Si la cantidad de giros es mayor a 15, se da media vuelta if(giros > 15) { deboGirar=false; //Gira en la dirección con mayor cantidad del obstaculos seDebeGirar(obstaculos); //Se setea a 0 la cantidad de giros giros = 0; } //Se llama a la operación mover, la que funciona de acuerdo a las // acciones medidas por el controlador del sensor mover(); //Se llama a dormir el proceso loopRate.sleep(); }

45

//Método inicial del programa int main(int argc, char **argv) { //Se inicia el topico de "mover_laser" ros::init(argc, argv, "mover_laser"); //Mensaje de que inicia el programa std::cout << "Comenzando…" << std::endl; //Se instancia un nodo de ayuda ros::NodeHandle n; //Se llama al publicador del robot Kobuki pub = n.advertise<geometry_msgs::Twist>("/cmd_vel_mux/input/teleop",1); //Espera de 15 milimetros ros::Rate loopRate(15); //Se crea un suscriptor del tópico scan, el cual es publicado por el // nodo Kobuki y llama al metodo scanValues cada 1 publicacion ros::Subscriber subs = n.subscribe("scan", 1, scanValues); //Se mantiene en loop el programa hasta que se cancele por consola ros::spin(); return 0; }

46

ANEXO B Código navegación anillo ultrasónico

#include <stdlib.h> #include <time.h> //Libretita de ROS #include "ros/ros.h" //Librería para los movimientos de la base Kobuki #include "geometry_msgs/Twist.h" //Clase de mensajes para lectura de rango #include "sensor_msgs/Range.h" #include <ros/time.h> //Clase de mensajes para un arreglo de números flotantes #include <std_msgs/Float64MultiArray.h> //Publicador, encargado de publicar valores de movimiento para el nodo de la base ros::Publisher pub; //Velocidad de desplazamiento de la base float speed = .18; //Velocidad de giro float turn = .5; float x = 0; float th = 0; float status = 0; float count = 0; float acc = 0.1; float target_speed = 0; float target_turn = 0; float control_speed = 0; float control_turn = 0; //Movimientos relacionados al robot //la lista siguiente muestra cada uno /* 0: detener 1: avanzar 2: avanzar a la derecha 3: avanzar a la izquierda 4: girar derecha 5: girar izquierda */ int movimiento = 1; int movimientos[6][2] = {{0, 0}, {1, 0}, {1, -1}, {1, 1}, {0, -1}, {0, 1}};

47

//Flag para saber si el robot debe girar o no bool deboGirar = false; //Contador de giros del robot int giros = 0; //Cuando Gira izquierda o gira derecha, se utilizara para evitar pinponeo del robot int pinPon = 0; /* * Método que a partir del valor de la variable "movimiento", * realiza el movimiento del robot */ static void mover() { x = movimientos[movimiento][0]; th = movimientos[movimiento][1]; target_speed = speed * x; target_turn = turn * th; control_speed = target_speed; control_turn = target_turn; geometry_msgs::Twist twist; //Como el movimiento del robot es solo en 2 dimensiones, se manipulan // la x lineal y z angular. twist.linear.x = control_speed; twist.linear.y = 0; twist.linear.z = 0; twist.angular.x = 0; twist.angular.y = 0; twist.angular.z = control_turn; //Se publica en ROS el movimiento del robot pub.publish(twist); } /* * Suma la cantidad de obstaculos en el vector de obstaculos */ int sumaObstaculos(int obs[6]){ int suma = 0; for(int i = 0; i < 6; i++){ suma = suma + obs[i]; } return suma; } /* * Calcula la suma de los 'hexantantes' de la derecha */ int sumaDerecha(int obs[6]){ int suma = 0; for(int i = 0; i < 3; i++){ suma = suma + obs[i]; } return suma;

48

} /* * Calcula para que dirección debe girar el robot, a partir de los * obstaculos detectados. */ void seDebeGirar(int obstaculos[6]) { if(!deboGirar){ pinPon++; if(sumaDerecha(obstaculos)>sumaObstaculos(obstaculos) - sumaDerecha(obstaculos)) { movimiento = 5; deboGirar = true; } else { movimiento = 4; deboGirar = true; } } } /* * Trigger que se ejecuta al recibir una publicación del Arduino */ void scanValues(const std_msgs::Float64MultiArray::ConstPtr& scan_msg) { int obstaculos [7] = {0,0,0,0,0,0,0}; //Se pausa la ejecución durante 15 milisegundos ros::Rate loopRate(15); //Es el tamaño del vector de lectura. int tamanio = 7; //Contador de bloques, los cuales son 7 int bloque = 1; //Se recorre todo el vector de puntos menos la primera lectura y la última for(int i = 0; i < tamanio; i++) { //Si el valor de lectura es menor a 50 cm if(scan_msg->data[i] < 50) { //Se marca que en el bloque existe un obstáculo obstaculos[i] = 1; } } //Se calcula la cantidad de obstaculos detectados int sumObstaculos = sumaObstaculos(obstaculos); //Si la variable pinpon es mayor a 4, es decir si el robot a girado de // izquierda a derecha o viceversa, sin avanzar. if(pinPon > 4)

49

{ //Se setea la variable pinpon a 0 pinPon = 0; //Se cambia el valor de movimiento a 0, para forzar a avanzar al robot movimiento=1; } else { //Si no hay obstaculos se avanza if(sumObstaculos == 0){ movimiento = 1; pinPon = 0; deboGirar = false; } //Si hay 1 obstáculo en algún lugar y no se debe girar. else if(sumObstaculos == 1 && !deboGirar) { //Solo hay un obstáculo en algún 'heptante', se procede con el // movimiento respectivo. if(obstaculos[3] == 1) { if(scan_msg->data[4]>scan_msg->data[2]) { movimiento = 3; } else if(scan_msg->data[4]<scan_msg->data[2]) { movimiento = 2; } else { if(scan_msg->data[5]>scan_msg->data[1]) { movimiento = 3; } else if(scan_msg->data[5]<scan_msg->data[1]) { movimiento = 2; } } } else if(obstaculos[2] == 1) { movimiento = 5; pinPon++; } else if(obstaculos[1] == 1) { movimiento = 3; } else if(obstaculos[0] == 1)

50

{ movimiento = 3; } else if(obstaculos[4] == 1) { movimiento = 4; pinPon++; } else if(obstaculos[5] == 1) { movimiento = 2; } else if(obstaculos[6] == 1) { movimiento = 2; } } //Si hay mas de 1 obstáculo else { //Si el total de obstaculos es de la derecha y además no se debe girar if(sumaDerecha(obstaculos) == sumObstaculos && !deboGirar) { movimiento = 5; pinPon++; } //Si el total de obstaculos es de la izquierda y además no se debe girar else if(sumObstaculos - sumaDerecha(obstaculos) == sumObstaculos && !deboGirar) { movimiento = 4; pinPon++; } //Si no se sabe en que sector están la mayor cantidad de obstaculos else { //Se debe girar a la izquierda o derecha seDebeGirar(obstaculos); } } } //Si debe girar, se incrementa la cantidad de giros if(deboGirar) { giros++; } //Si la cantidad de giros es mayor a 15, se da media vuelta if(giros > 15) { deboGirar=false;

51

//Gira en la dirección con mayor cantidad del obstaculos seDebeGirar(obstaculos); //Se setea a 0 la cantidad de giros giros = 0; } //Se llama a la operación mover, la que funciona de acuerdo a las // acciones medidas por el controlador del sensor mover(); //Se llama a dormir el proceso loopRate.sleep(); } //Método inicial del programa int main(int argc, char **argv) { //Se inicia el topico "ultrasonico" ros::init(argc, argv, "ultrasonico"); //Mensaje de que inicia el programa std::cout << "Comenzando…" << std::endl; //Se instancia un nodo de ayuda ros::NodeHandle n; //Se llama al publicador del robot kobuki pub = n.advertise<geometry_msgs::Twist>("/cmd_vel_mux/input/teleop",1); //Espera de 15 milímetros ros::Rate loopRate(15); //Se crea un suscriptor del tópico rangos, el cual es publicado por el // nodo Arduino y llama al método scanValues cada 1 publicación ros::Subscriber subs = n.subscribe("rangos", 1, scanValues); //Se mantiene en loop el programa hasta que se cancele por consola ros::spin(); return 0; }

52

ANEXO C Código programa Arduino

#include <ros.h>

#include <ros/time.h>

//Clase de mensajes para un arreglo de números flotantes

#include <std_msgs/Float64MultiArray.h>

//Nodo de ayuda

ros::NodeHandle nh;

//Arreglo donde se publicarán los datos de cada sensor

std_msgs::Float64MultiArray rangos;

//Instancia del publicador, con nombre rangos

ros::Publisher rangos_pub("rangos", &rangos);

//Se declara el nombre del publicador

char frameid[] = "/rangos";

long duration;

/*

*Método que obtiene la distancia del sensor al objeto

* recibe el parámetro del pin de Arduino al que se

* conectó el sensor

*/

float getRange_Ultrasound(int pin_num)

53

{

//Se declara el puerto como salida de datos

pinMode(pin_num, OUTPUT);

//Se manda un pulso bajo al pin

digitalWrite(pin_num, LOW);

//Pausa de 2 milisegundos

delayMicroseconds(2);

//Se manda un pulso alto al pin

digitalWrite(pin_num, HIGH);

//Pausa de 10 milisegundos

delayMicroseconds(10);

//Se manda un pulso bajo al pin

digitalWrite(pin_num, LOW);

//Se declara el puerto como entrada de datos

pinMode(pin_num, INPUT);

//Se calcula el tiempo en que demora en llegar el pulso

duration = pulseIn(pin_num, HIGH);

//Se transforma la duración a centímetros

return duration/29/2;

}

//Inicializa el funcionamiento de Arduino

void setup()

54

{

//Inicio del nodo

nh.initNode();

//Nombre del nodo

rangos.layout.dim->label = "rangos";

//Dimensión del arreglo a traspasar

rangos.layout.dim->size = 7;

//Tamaño de los datos a almacenar

rangos.data = (float *)malloc(sizeof(float)*7);

//Dimensión del arreglo

rangos.data_length = 7;

//Se traspasa el nodo al publicador

nh.advertise(rangos_pub);

}

//Variable para comparar el tiempo de ejecución

long range_time;

//Método que se ejecuta siempre

void loop()

{

//Si el tiempo actual es mayor al tiempo almacenado

if ( millis() >= range_time ){

55

//Por cada sensor, se calcula la distancia y se

// guarda en la posición correspondiente

rangos.data[0]= getRange_Ultrasound(2);

rangos.data[1]= getRange_Ultrasound(3);

rangos.data[2]= getRange_Ultrasound(4);

rangos.data[3]= getRange_Ultrasound(5);

rangos.data[4]= getRange_Ultrasound(6);

rangos.data[5]= getRange_Ultrasound(7);

rangos.data[6]= getRange_Ultrasound(8);

//Se publica el arreglo

rangos_pub.publish(&rangos);

//Guarda el tiempo actual más 50 milisegundos

range_time = millis() + 50;

}

//Se avisa su publicacion

nh.spinOnce();

}