Académique Documents
Professionnel Documents
Culture Documents
ESTADO DE PUEBLA
___________________________________________________________
(NOMBRE DE LA ESCUELA)
Facultad de Electrnica
Facultad de Electrnica
Tesis
TITULO DE LA TESIS
Construccin de un Mapa del Entorno y
Navegacin de un Robot Mvil Autnomo
Trabajo de Investigacin
que para obtener el Ttulo de
Presenta
AlfredoPresenta:
Alvarado Lepe
Colocar en
este lugar, el Nombre
Asesor
Alfredo del
de laalumno
Asesor tesisLepe
Alvarado
logotipo de la
escuela en
caso de Dr. HctorAsesor
SimndeVargas
la tesis:
Martnez
existir.
ANEXO B4
Dr. Hctor Simn Vargas Martnez
Puebla, Pue., Mxico Junio de 2014
Puebla, Pue., MxicoJunio de 2014 (mes)
Juniode
de(ao)
2014
52
Agradecimientos
En primera instancia, le agradezco a mi familia el apoyo moral y econmico que me brindaron
a lo largo de toda la licenciatura, desde que ingrese a esta carrera hasta la consecucin de la
misma, la cual se ve representada con la elaboracin de la presente tesis.
En segunda instancia, le agradezco al equipo de trabajo del Laboratorio de Control y Robti-
ca de la UPAEP, y en especial a mi asesor el doctor Hctor Simn Vargas Martnez, por
brindarme los medios, tanto tecnolgicos como acadmicos, para concluir satisfactoriamente
los objetivos de este proyecto.
En tercera y ltima instancia, quiero agradecer a la Universidad Popular Autnoma del Esta-
do de Puebla (UPAEP) por permitirme hacer uso de sus instalaciones y equipo, especcamente
hablando de los laboratorios de la Facultad de Electrnica y la biblioteca, durante los meses
invertidos en la realizacin de este trabajo de investigacin.
III
Resumen
Para que cualquier vehculo o robot mvil pueda ser considerado autnomo debe ser capaz de
navegar sobre su entorno. La presente tesis expone la integracin e implementacin de uno de los
mtodos de navegacin ms utilizados en el campo de la robtica, el cual debido a su precisin y
dinamismo puede ser adaptado a cualquier tipo de vehculo terrestre que se desee automatizar.
Cabe mencionar que se ajustaron varios parmetros de los algoritmos de este mtodo y, adems,
se realizaron algunas mejoras en la transformacin de coordenadas, todo para obtener mejores
resultados al utilizarlo en el robot de servicio Donaxi@HOME.
La navegacin aqu expuesta puede resumirse en cuatro amplias etapas: Percepcin, Lo-
calizacin, Planicacin y Control de Movimiento. Adems, antes de poder implementarla se
requiere de un mapa del entorno de desenvolvimiento del autmata, el cual debe ser elaborado
previamente por dicho robot haciendo uso del algoritmo de SLAM. Est ltima parte, a diferen-
cia de la navegacin que es completamente autnoma, necesita de un operador humano y slo
se hace una vez durante todo el proceso.
Tambin, el proyecto aqu descrito requiere de una amplia gama de dispositivos electrnicos,
tales como son: un telmetro lser, un giroscopio, una palanca de mando (joystick), dos servomo-
tores con sus respectivos codicadores rotativos incrementales y un controlador DMC-40x0. Sin
embargo, una ventaja respecto a este punto es el hecho de que las conexiones a las fuentes de ali-
mentacin, los interruptores de encendido y apagado, as como toda la infraestructura mecnica
del robot, fueron proporcionadas por el Laboratorio de Control y Robtica de la UPAEP.
Por otro lado, para que la tarea de comunicar cada sensor y actuador entre s por medio
de un ordenador fuese completada, result necesaria la creacin e implementacin de varios
programas, escritos con los lenguajes C++ y Python, encargados de comunicar y procesar los
datos adquiridos y transmitidos, y estos a su vez requirieron de protocolos para enlazarse entre
s, mismos que fueron proporcionados por la plataforma ROS, la cual tiene un captulo completo
dedicado ella.
En conclusin, la siguiente tesis constituye una alternativa interesante para todos aquellos
que deseen automatizar algn vehculo mvil, ya que a partir de esta misma, Donaxi@HOME,
un robot de servicio diseado para asistir a las personas de la tercera y discapacitados, fue
capaz de realizar un mapa aproximado de su entorno, localizarse dentro de l y navegar ade-
cuadamente y de manera completamente autnoma a cualquier objetivo pedido dentro de su
medio de interaccin.
V
Abstract
For any vehicle or mobile robot can be considered autonomous must be able to navigate on their
environment . This project exposes the integration and implementation of one of the most used
navigation methods in the eld of robotics, which due to its precision and dynamism can be
adapted to any type of land vehicle that you want to automate. It is noteworthy that several
algorithm parameters of this method were adjusted and, moreover, some improvements were
made on the coordinate transformation. These modications were made to get better results in
the service robot Donaxi@HOME.
The navigation process exposed here can be summarized in four broad stages: Perception,
Location, Planning, and Motion Control. Also, before you can implement the navigation, it
requires a map of the robot's environment, which must be previously prepared by this one
using the SLAM algorithm. The map construction, unlike the navigation that is a completely
autonomous process, requires a human operator and is done only once.
Also, this project requires a wide range of electronic devices such as: a laser rangender, a
gyroscope, a joystick, two servo motors with their respective incremental rotary encoders, and
a DMC- 40x0 controller. However, an advantage on this part is the fact that the connections to
power supplies , switches on and o, as well as all the mechanical infrastructure of the robot,
were provided by the Laboratory of Control and Robotics of UPAEP.
On the other hand , to complete the task of communicating each sensor and actuator together
using a computer, were necessary the creation and implementation of various programs. These
nodes, which were written in the C++ and Python code, are the responsible of communicate
and process data acquired and transmitted by the electronic devices, and at the same time, they
required protocols to link to each other. These protocols are provided by the ROS environment,
which has a full chapter dedicated to explain it.
In conclusion, the thesis is interesting for all the people who want to automate a moving
vehicle, being Donaxi@HOME, a service robot designed to assist senior and disabled persons,
the living proof of the results of this researching. This robot is able to perform a rough map of
its environment, localize itself within it, and navigate properly and autonomously to reach any
navigation target given by an user.
VII
ndice general
Agradecimientos III
Resumen V
Abstract VII
ndice general IX
ndice de guras XIII
1. Motivos, objetivos y organizacin de la tesis 1
1.1. Motivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3. Introduccin a la navegacin 15
3.1. Percepcin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2. Localizacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3. Planicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
IX
X NDICE GENERAL
7. Pruebas y resultados 59
7.1. Generacin de mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.1.1. Estructura y funcionamiento del arreglo . . . . . . . . . . . . . . . . . . . 59
7.1.1.1. Roslaunch del arreglo . . . . . . . . . . . . . . . . . . . . . . . . 60
7.1.1.2. Nodos pendientes . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.1.1.2.1. Nodo joy_node . . . . . . . . . . . . . . . . . . . . . . 61
7.1.1.2.2. Nodo teleop_joy . . . . . . . . . . . . . . . . . . . . . . 62
7.1.1.2.3. Nodo map_saver . . . . . . . . . . . . . . . . . . . . . 62
7.1.1.3. Operacin en conjunto . . . . . . . . . . . . . . . . . . . . . . . 63
7.1.2. Pruebas realizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.1.2.1. Generacin del mapa a velocidad baja . . . . . . . . . . . . . . . 64
7.1.2.2. Generacin del mapa a velocidad media . . . . . . . . . . . . . . 64
7.1.3. Mejoras implementadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.2. Navegacin en el mapa generado . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.2.1. Estructura y funcionamiento del arreglo . . . . . . . . . . . . . . . . . . . 66
7.2.1.1. Roslaunch del arreglo . . . . . . . . . . . . . . . . . . . . . . . . 67
7.2.1.2. Nodos pendientes . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.2.1.2.1. Nodo maestro . . . . . . . . . . . . . . . . . . . . . . . 69
7.2.1.2.2. Nodo dinamic_goal . . . . . . . . . . . . . . . . . . . . 70
7.2.1.2.3. Nodo cancel_goal . . . . . . . . . . . . . . . . . . . . . 70
7.2.1.2.4. Nodo map_server . . . . . . . . . . . . . . . . . . . . . 71
7.2.1.3. Operacin en conjunto . . . . . . . . . . . . . . . . . . . . . . . 71
7.2.2. Pruebas realizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.2.2.1. Navegacin basada en mapa a velocidad baja . . . . . . . . . . . 73
7.2.2.2. Navegacin basada en mapa a velocidad media . . . . . . . . . . 73
7.2.3. Mejoras implementadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
XIII
XIV NDICE DE FIGURAS
1.1. Motivos
Desde su creacin en 1999 dentro del Departamento de Ingenieras (antes Departamento de Sis-
temas) de la Universidad Popular Autnoma del Estado de Puebla, el Laboratorio de Control y
Robtica se ha encargado investigar y desarrollar prototipos tecnolgicos, centrndose principal-
mente en el rea de la robtica de servicio. Desde robots telederigidos (controlados por Internet)
y limpiadores de playa hasta autmatas creados con nes mdicos, en el laboratorio se han de-
sarrollado y presentado mltiples proyectos tanto en concursos nacionales como internacionales,
habindose obtenido resultados importantes en la mayora de estos.
1
2 CAPTULO 1. MOTIVOS, OBJETIVOS Y ORGANIZACIN DE LA TESIS
1.2. Objetivos
Esta tesis tiene como objetivo principal permitirle al robot de servicio Donaxi@HOME ser
capaz de realizar las siguientes dos tareas:
2. Navegar de manera adecuada hacia cualquier objetivo que el usuario le solicite, siempre y
cuando dicho robot haya generado un mapa de su ambiente previamente.
Para que el autmata pueda cumplir con estas encomiendas, a su vez se requiere de lo
siguiente:
Tener nociones bsicas acerca de los sistemas operativos basados en LINUX, especca-
mente Ubuntu 12.04 LTS, ya que son los que mejor funcionan con el entorno ROS.
Comprender la manera en que operan los sensores que utiliza el robot para poder, en
segunda instancia, adquirir datos a partir de estos y procesarlos.
Comprender la manera en que operan el controlador y los motores usados por el robot
para poder, en segunda instancia, comunicarse con el primero y controlar y monitorizar el
movimiento de los segundos.
Realizar el trabajo de software pertinente para enlazar todos los procesos necesarios para
la ejecucin de ambas tareas.
Esta diseado para ser lo menos pesado posible, por lo que el cdigo escrito en ROS puede
utilizarse con otros marcos de software para robot. Ha sido integrado exitosamente con
OpenRAVE, Orocos y Player[1].
Sus libreras estn diseadas de tal forma que resultan fciles de comprender y poseen
interfaces limpias para el usuario[1].
1 Un sistema metaoperativo es una plataforma que se construye y ejecuta sobre un sistema operativo
completo[2].
2 El software de cdigo abierto es aquel que puede ser utilizado libremente, ser intercambiado y compartido
(sufriendo modicaciones o sin ser alterado) por cualquier persona. Es distribuido bajo licencias de carcter libre
denidas por The Open Source Initiative[3].
3 La llamada a procedimiento remoto (en ingls RPC) es un protocolo que permite a un programa de ordenador
ejecutar cdigo en otra computadora remota sin tener que preocuparse por las comunicaciones entre ambas
mquinas. De esta manera el programador no tiene que estar pendiente de las comunicaciones, estando stas
encapsuladas dentro de las RPC. Estos protocolos son muy utilizados dentro del paradigma cliente-servidor.[4]
5
6 CAPTULO 2. ROS: LA ARQUITECTURA BASE DEL ROBOT DONAXI@HOME
3. A nivel comunitario.
Metapaquetes: Son paquetes especializados que slo sirven para representar un grupo
de otros paquetes relacionados. Ms comnmente se utilizan como un lugar reservado
compatible para colecciones de programas ( stacks ) convertidos utilizando la herramienta
rosbuild [5].
Maniestos de paquetes: Son los archivos llamados package.xml existentes dentro los
paquetes de ROS cuya misin es proporcionar metadatos acerca de estos, lo cual incluye:
su nombre, su versin, su descripcin, informacin sobre su licencia, sus dependencias y
alguna que otra metainformacin como es el caso los paquetes que han sido exportados[5].
Para saber ms acerca de estos maniestos, se recomienda leer la documentacin REP-
0127 disponible en lnea[7].
2.2. CONCEPTOS IMPORTANTES 7
Tipos de mensajes (msg): Su funcin es denir las estructuras de datos para los men-
sajes enviados a travs de ROS. Se ubican en las carpetas llamadas msg existentes dentro
de los paquetes y se identican de otros archivos mediante la terminacin .msg [5].
Tipos de servicios (srv): Su funcin es denir las estructuras para solicitud y recepcin
de datos requeridas por los servicios que proporciona ROS y pueden crearse dentro del
mismo. Se ubican en las carpetas llamadas srv existentes dentro de los paquetes y se
identican de otros archivos mediante la terminacin .srv [5].
Nodos: Son los procesos que realizan la computacin dentro de ROS. Debido a que dicha
plataforma metaoperativa est diseada para ser modular en una escala de grano no; un
sistema de control para un robot comprende generalmente muchos nodos. Por ejemplo, un
nodo controla un telmetro de lser, otro controla los motores de las ruedas, uno ms lleva
a cabo la localizacin, otro ms realiza planicacin de trayectoria, un ltimo proporciona
una vista grca del sistema y as sucesivamente. Un proceso de este tipo est escrito con el
roscpp (utilizada para lenguaje C++)
uso de una biblioteca de cliente de ROS, tales como
o rospy (usada en Python)[5]. Para invocar un nodo independiente sobre la terminal de
Linux, basta con tener un roscore activo (se explicar ms adelante) y usar la siguiente
sintaxis: rosrun nombre_paquete nombre_nodo
5
Servidor de parmetros: Permite que los datos sean almacenados mediante una clave
en una ubicacin central. Actualmente forma parte del maestro[5].
Mensajes: Los nodos se comunican entre s mediante el paso de mensajes. Estos ltimos
son simplemente estructuras de datos, donde cada una comprende campos de un tipo
especco. Se admiten los tipos primitivos estndar (entero, coma otante, booleanos,
etc), as como los arreglos de tipos primitivos. Los mensajes pueden incluir estructuras
y arrays anidados arbitrariamente, guardando cierta similitud con lo que ocurre en las
estructuras ( Struct ) del lenguaje C[5].
4 Un sistema de control de versiones (en ingls VCS) o sistema de control de revisiones es una combinacin
de tecnologas y prcticas para el seguimiento y el control de cambios realizados a los archivos de un proyecto.
Los sistemas VCS suelen implementarse en el cdigo fuente y la documentacin del software fabricado. Son muy
utilizados en la creacin y el desarrollo de las pginas web.[8]
5 Sin terminacin en caso de haber sido creado en c++ y con terminacin .py en caso de ser un programa de
python.
8 CAPTULO 2. ROS: LA ARQUITECTURA BASE DEL ROBOT DONAXI@HOME
Contenedores (bags): Son un tipo de archivo diseado para guardar y reproducir datos
de mensajes de ROS. En consecuencia, son un mecanismo importante para el almace-
namiento de datos que pueden ser difciles de recoger, pero son necesarios para desarrollar
y probar algoritmos. Un ejemplo de este tipo de informacin es aquella que proviene de
los sensores conectados al robot[5].
A modo de resumen, la gura 2.1 muestra una comunicacin entre dos nodos de ROS.
Se puede apreciar la invocacin de un servicio y la utilizacin de un tpico que permite el
intercambio de informacin entre un publicador y un suscriptor.
Galapagos, etc. [6]) juegan un papel similar al de las distribuciones de Linux (Ubuntu, Fe-
dora, etc.): hacen ms fcil la instalacin de una coleccin de software y tambin mantienen
versiones consistentes en un conjunto de aplicaciones[5].
Repositorios: ROS se basa en una red federada de repositorios de cdigo, en los que
diferentes instituciones puedan desarrollar y lanzar sus propios componentes de software
para robots[5].
Wiki de ROS (ROS Wiki): Es el foro virtual ms importante que existe para documen-
tar informacin acerca de ROS. Cualquier persona puede inscribirse creando una cuenta,
contribuir con su propia documentacin, proporcionar correcciones o actualizaciones, es-
cribir tutoriales y ms[5].
Sistema de boletos para errores: Es una herramienta creada para los usuarios de ROS,
la cual les permite que, en caso de que estos encuentren un error dentro de dicha plataforma
o en algn software relacionado a la misma, puedan reportarlo adecuadamente[9].
a) Herramienta roslaunch.
b) Paquete rosbag.
c) Aplicacin rqt_graph.
d) Visor rviz.
A lo largo de la presente tesis se presentan varias imgenes que muestran los resultados
obtenidos en las pruebas realizadas con el robot Donaxi@HOME. Dichas ilustraciones fueron
obtenidas, en su mayora, gracias a las elementos c) y d) de la lista anterior.
10 CAPTULO 2. ROS: LA ARQUITECTURA BASE DEL ROBOT DONAXI@HOME
comn empleada tanto con record como con play en el presente proyecto.
La sintaxis bsica del comando record es la siguiente: rosbag record -O /ruta/archivo.bag
/topico1 /topico 2 (...) [13], donde los tres puntos signican que se pueden realizar suscrip-
ciones a cualquier cantidad de tpicos.
En la gura 2.2 se muestra una ventana tpica de rqt_graph. Los recuadros representan
tpicos y los valos representan nodos. Se puede ver claramente que el elemento rojo, donde se
haya posicionado el cursor, representa a un tpico que esta siendo publicado por dos nodos (en
azul) y, al mismo tiempo, un tercero (en verde) se esta subscribiendo al mismo.
Para visualizar nicamente la interaccin entre nodos basta con hacer un ajuste en el men
que aparece en la esquina superior izquierda del panel, justo en donde apunta el cursor, de esta
forma los tpicos aparecern sobre las lneas que unen a dichos nodos. Todo se muestra en la
gura 2.3.
La ventaja que ofrece la conguracin de rqt_graph mostrada en la imagen 2.3 con respecto
a la vista en el diagrama 2.2 es que, al seleccionar un nodo, no slo cambian de color los tpicos
asociados a este, sino que adems se iluminan los nodos que publican dichos tpicos, lo que
proporciona un mejor entendimiento del proceso analizado. Esto se muestra en la gura 2.4.
12 CAPTULO 2. ROS: LA ARQUITECTURA BASE DEL ROBOT DONAXI@HOME
1. Comunicar la informacin proveniente de los sensores con el formato adecuado como sera,
por ejemplo, utilizar el tipo de dato escaneo lser (laser scan) para transmitirle a rviz la
lectura homnima[15].
Todo lo anterior convierte a rviz en un poderoso instrumento, ideal para entender aplicaciones
de depuracin. Al igual que todas las aplicaciones incorporadas a ROS es de cdigo abierto[15].
En la gura 2.5 se muestra una ventana del visor anteriormente descrito, el cual es utilizado
para entender el accionar de un robot diseado por Willow Garage.
Introduccin a la navegacin
Se le llama navegacin al conjunto de mtodos y tcnicas usados para dirigir el curso de un
robot mvil a medida que ste atraviesa su entorno. Se dice que un robot ha logrado navegar
exitosamente a un destino pedido, si se desplaza hacia l sin perderse y sin chocar ni con
obstculos jos, ni con otros mviles que eventualmente puedan aparecer en el camino[16].
La navegacin es una tarea muy compleja pero puede dividirse en cuatro amplias etapas que
sern denidas brevemente a largo de este captulo y sern retomadas y analizadas a detalle en
captulos posteriores, enfocando cada una de ellas al robot Donaxi@HOME, autmata para
el cual fue realizada la presente tesis:
1. Percepcin.
2. Localizacin.
3. Planicacin.
4. Control de movimiento.
3.1. Percepcin
Muy estrechamente ligada a la autonoma de un robot est la capacidad de percibir el entorno
y actuar sobre el mismo. Por medio de los sensores el robot obtiene datos sobre su entorno
sensado) y luego los procesa para su utilizacin (interpretacin). De esta forma, los sensores
(
representan para el robot la fuente de datos sobre los cambios tanto en su entorno (distancias a
objetos, luz ambiental) como en s mismo (nivel de las bateras, consumo de los motores, pulsos
de codicadores, etc.)[17].
Acorde a lo dicho en el prrafo anterior, la percepcin del robot puede denirse como
el conjunto de modelos de medicin del entorno, los cuales describen el proceso de formacin
por el cual las mediciones de los sensores se generan en el mundo fsico. Dependiendo del sensor
utilizado sern las especicaciones del modelo a implementar[18].
3.2. Localizacin
En trminos de robtica, se dice que un vehculo o autmata es capaz de realizar el proceso de
localizacin si puede encontrarse as mismo dentro de una regin determinada. Esta es la tarea
ms importante en el desarrollo de la navegacin.
Actualmente los robots mviles pueden realizar esta tarea de diversas maneras, las cuales se
pueden clasicar en tres categoras de la siguiente forma:
15
16 CAPTULO 3. INTRODUCCIN A LA NAVEGACIN
3.3. Planicacin
De forma genrica, el problema de planicacin de movimientos consiste en llevar un
cuerpo, desde una conguracin inicial hasta otra nal dentro del espacio de conguraciones
18 CAPTULO 3. INTRODUCCIN A LA NAVEGACIN
tencin de leyes de control que permitan estabilizar el vehculo sobre un punto de trabajo
(condiciones nominales de funcionamiento), anulando el efecto de las perturbaciones (problema
de regulacin), o bien hacer que el vehculo siga de forma autnoma una trayectoria de referen-
cia. En este segundo caso, se distingue entre el seguimiento de postura, en el cual se debe seguir
la trayectoria en el tiempo de una postura de referencia ref = (x, y, )ref , constituida por la
posicin y la orientacin, o bien slo el seguimiento en el tiempo de una posicin de referencia
ref = (x, y)ref [25].
Las caractersticas del robot mvil son importantes, es decir, dependiendo del tipo de aut-
mata a controlar variaran las tcnicas de control utilizadas[25]. Siendo la habilidad para moverse
o locomocin[19] la principal facultad de a considerar dentro de un robot para implementar
alguna tcnica de control para su movimiento, resulta necesario mencionar a continuacin una
categorizacin de acuerdo a esta.
Los robots mviles se pueden clasicar por su medio de movimiento o tipo de locomocin en
tres categoras: por ruedas [Muir et al., 1992], por patas [Todd, 1985] y por orugas [Grasnoik
et al., 2005]. Cabe sealar que aunque la locomocin por patas y orugas han sido ampliamente
estudiadas, el mayor desarrollo se presenta en los Robots Mviles con Ruedas (RMR).
Dentro de los atributos ms relevantes de los RMR, destacan su eciencia en cuanto a energa
en supercies lisas y rmes, a la vez que no causan desgaste en la supercie donde se mueven
y requieren un nmero menor de partes y menos complejas, en comparacin con los robots de
patas y de orugas, lo que permite que su construccin sea ms sencilla[26].
Dentro de los RMR, categora a la que pertenece Donaxi@HOME, a su vez existen di-
ferentes conguraciones cinemticas las cuales dependen principalmente de la aplicacin hacia
donde va enfocado el robot, no obstante, de manera general se presentan a continuacin las seis
ms comunes:Ackerman, triciclo clsico, traccin diferencial, skid steer, sncrona y
traccin omnidireccional[26].
Dependiendo de la conguracin cinemtica que los conformen, los robots mviles con ruedas
utilizan cuatro tipos de ruedas para su locomocin [Goris, 2005], estas son: convencionales,
tipo castor, ruedas de bolas y omnidireccionales[26] (ver gura 3.3).
Desplazamiento diferencial.
Desplazamiento omnidireccional.
20 CAPTULO 3. INTRODUCCIN A LA NAVEGACIN
Percepcin y localizacin en el
robot Donaxi@HOME
Para que el robot Donaxi@HOME lograr la tarea de navegar en un ambiente plano fue necesario
que cumpliera exitosamente con las cuatro etapas expuestas en el captulo anterior de forma
ordenada. En este apartado se detallan las primeras dos fases, las cuales son percepcin y
localizacin.
A continuacin se describe como se incorporo cada una de ellas dentro del robot Donaxi@HOME.
Telmetro lser.
Giroscopio electrnico.
1 Colimado signica "en una sola direccin ", ya que todas las ondas emitidas por un lser estn casi paralelas y
por tanto no hay divergencia en el haz de luz, por lo que permanece invariable an despus de largos recorridos[28].
21
22 CAPTULO 4. PERCEPCIN Y LOCALIZACIN EN EL ROBOT DONAXI@HOME
usados para el mismo propsito, la velocidad de muestreo es seis veces ms lenta en comparacin
con la velocidad de la luz[29].
En el caso de los robots autnomos, los sensores de este tipo actan como sus " ojos",
permitindoles a estos guiarse para evitar obstculos y, posteriormente con ayuda de su software,
planicar rutas y trayectorias.
Para obtener mediciones angulares con respecto a un eje de rotacin es posible utilizar un
giroscopio y realizar una integracin discreta. Sin embargo, el efecto de deriva inherente a este
sensor hace que el valor de salida en una posicin estable se desplace, perdiendo toda la referencia
y obteniendo una lectura errnea del ngulo[32].
Existen dos tipos bsicos de codicadores rotativos: Los incrementales y los absolutos. La
versin incremental mide la velocidad de rotacin y puede inferir la posicin relativa. Por su parte
los modelos absolutos miden directamente la posicin angular y puede inferir la velocidad[17].
Donaxi@HOME utiliza dos codicadores rotativos incrementales, cada uno
El robot
acoplado a su respectivo motor, los cuales, en conjunto con elgiroscopio mencionado en el
apartado anterior, constituyen la odometra del robot de servicio desarrollado en la presente
tesis.
Las caractersticas tcnicas de los motores, y por ende de los encoders integrados a estos,
utilizados en este autmata se mencionan a detalle en el captulo 6.
1. Generacin de mapa.
Cada uno cuenta con sus respectivos nodos de percepcin, los cuales sern abordados en esta
seccin.
spatial.
spatial_client.
motor_gen_mapa.
odom_tf.
hokuyo_node.
Aunque el programa descrito en esta seccin sufri algunas modicaciones para cumplir
satisfactoriamente las necesidades de este proyecto, el original puede encontrarse en Internet
[34].
1. Se calcula el tiempo que dura la ejecucin de cada ciclo de instrucciones con la siguiente
ecuacin: dt = current_time last_time, donde current_time el tiempo al inicio de
cada ciclo y last_time tiempo al nal de cada ciclo. Las unidades de dt se convierten a
segundos (s).
2. Empleando la ecuacin delta_th = vth dt, donde vth es la velocidad angular dada en /s,
por lo que delta_th lleva grados( ) como unidades.
3. Como no existe tal cosa como el reposo absoluto, el giroscopio nunca nos arroja valores
de cero en vth, por lo que establece la condicin de que s vth > 0.5, entonces th =
th + delta_th. De esta forma cuando se detecten velocidades angulares signicativas, el
ngulo de rotacin obtenido se ir incrementando.
4. En este paso ya se tiene un valor provisional del ngulo de rotacin del robot, sin embargo,
debido a las vibraciones causadas por el movimiento y al efecto de deriva inherente del
sensor, mencionado previamente en este captulo, entre otros factores, se obtienen datos
errneos. Para corregir este problema se emplea el ltro de Kalman una herramienta
matemtica que permite estimar variables de un amplio rango de procesos, utilizando
dos etapas: prediccin y correccin del valor[32]. Utiliza el teorema de Bayes de
probabilidad y asume que la variable a la que se le va aplicar, que en este caso es th,
forma parte de un sistema dinmico lineal[18]. Debido a que el objetivo de esta tesis no es
explorar a fondo la implementacin de este mtodo, slo se muestra un pequeo diagrama
que lo resume en la gura 4.8.
Cabe mencionar que en el tpico pos se comunican tres valores: la velocidad angular vth, la
posicin angular th_kalman y la bandera k.
Aunque el programa aqu descrito fue modicado casi en su totalidad, el original puede
encontrarse en la red [34].
Como se menciono en el prrafo previo, este nodo adems de ser receptor tambin es publi-
cador, sin embargo, que datos publica? La respuesta a esta pregunta viene dada en el siguiente
algoritmo:
= 600 000 cuentas, por lo la velocidad deseada de un motor se obtendra con la ecuacin
velocidadcuentas/s
velocidadm/s = 600000 .
2. Teniendo en cuenta que hay dos motores, denominados como y y z, se debern realizar
dos ecuaciones, una para cada uno, las cuales quedarn de la siguiente forma: vely =
velycuentas/s velzcuentas/s
600000 y velz =
600000 . Ntese el signo menos en la primera frmula, esto se
debe a la forma en como estn montados los impulsores en el robot, situacin que ser
explicada a fondo en el captulo 6.
4. Como tambin es necesario conocer la velocidad angular del mvil, simplemente se hace
uso de la velocidad de giro del eje z recibida del tpico pos de spatial_client y se multiplica
por 1: vel_angular = vel_giroeje_z . El signo menos de la ecuacin anterior se debe
a que el giroscopio fue montado boca arriba en el robot.
Figura 4.11: Movimiento del robot Donaxi@HOME en el espacio. Las lineas rojas re-
presentan el trayecto recorrido y los sistemas de referencia etiquetados como /odom, /base_link
y /laser corresponden a la posicin del origen del mundo, del centro de gravedad del robot y del
telmetro lser respectivamente
Antes de desglosar al algoritmo que compone a este nodo, resulta necesario mencionar algunos
conceptos fsicos sobre los cuales se cimentan las funciones de transformacin aqu empleadas.
La cinemtica es el clculo que describe el efecto de las acciones de control en la conguracin
de un robot. La conguracin de un robot mvil rgido es comnmente descrita a partir de seis
coordenadas cartesianas (x, y, z) y sus tres ngulos de Euler (alabeo,
variables, sus tres
cabeceo, guiada) relativos a un sistema de referencia externo[18].
En ROS existen una serie de herramientas que permiten denir la posicin de un sistema
de referencia, o frame en ingls, a partir de las seis variables anteriormente mencionadas. Esto
resulta especialmente til en el caso de autmatas que poseen mltiples partes mviles (ver gura
4.12). Tomando esto en consideracin, el programa odom_tf funciona de la siguiente manera:
Figura 4.12: Robot con mltiples partes mviles, y por ende, varios frames [36]
1. Primero se dene la ubicacin del lser con respecto al centro de gravedad del robot,
asignndole un valor esttico a cada una de las seis variables mencionadas con anterioridad:
x = 0.18 m, y = 0.0 m, z = 0.34 m, alabeo = 0.0 rad, cabeceo = 0.0 rad y guiada = 0.0
rad (medidas reales de Donaxi@HOME). Al frame padre o parent frame que corresponde
al centro de gravedad del robot se le nombr base_link, mientras que al frame hijo o
child frame se le llam laser. Las posiciones de los frames se ilustran en la gura 4.11.
2. Se toman las velocidades lineal y angular del tpico cmd_vel2 y se nombran como vx y
30 CAPTULO 4. PERCEPCIN Y LOCALIZACIN EN EL ROBOT DONAXI@HOME
4. Se implementan las siguientes ecuaciones para obtener las coordenadas en el plano carte-
siano, a partir de las velocidades suministradas: x = (vx cos(th) vy sin(th)) dt,
y = (vx sin(th) + vy cos(th)) dt y th = vth dt. Donde x, y y th corresponden
respectivamente a los incrementos en las coordenadas x e y y en el ngulo .
5. Para que la posicin y orientacin en el plano se vayan incrementando cada vez que se
ejecute un ciclo se utilizan las siguientes frmulas: x = x+x, y = y +y y th = th+th.
6. Posteriormente, se utiliza una funcin de ROS que permite obtener a los tres ngulos
espaciales de Euler a partir de un ngulo planar dado. Esta transformacin se realiza
a partir de th, donde tanto el dato de entrada como los tres de salida vienen dados en
radianes (rad).
7. Por ltimo, de la misma forma que en el primer paso, se dene la ubicacin del centro de
gravedad del robot con respecto al origen del mundo, siendo ahora el frame hijo base_link
(mencionado anteriormente) y el frame padre odom que corresponder al origen del mun-
do. De esta forma las seis variables quedaron de la siguiente manera: x = x m, y = y m y
z = 0.0 m; y alabeo, cabeceo y guiada con los valores obtenidos en el paso 6.
Publicar la informacin anteriormente obtenida con los tipos de datos adecuados en los
tpicos odom y tf, dar como resultado a lo observado en la gura 4.11.
El programa aqu mostrado fue desarrollado a partir de dos tutoriales de ROS que explican
paso a paso como realizar este proceso, los cuales se citan en las referencias [37] y [38].
Figura 4.13: Perl de puntos generado por el telmetro lser montado en el robot
Donaxi@HOME. El sistema de referencia etiquetado como /laser es el origen de la lectura
El arreglo de puntos en 2D generado por el nodo hokuyo_node es publicado sobre ROS por
medio del tpico scan, como se muestra en la imagen 4.14.
Este bloque de cdigo, el cual fue ntegramente utilizado sin recibir ninguna modicacin,
se encuentra en Internet [39].
spatial.
spatial_client.
motor_formula.
odom_tf.
hokuyo_node.
32 CAPTULO 4. PERCEPCIN Y LOCALIZACIN EN EL ROBOT DONAXI@HOME
2. Movimiento.
3. Reobservacin o corroboracin de la primera observacin.
La frmula anterior es la base de funcionamiento del Online SLAM. Sin embargo, cuando se
desea estimar toda una trayectoria conformada por varios estados y al mapa mismo, se requiere
del algoritmo Full SLAM, denido por: P (x1:t |u1:t , z1:t ).
La combinacin de los algoritmos anteriores junto con la implementacion del ltro de
Kalman extendido (EKF), una versin ms compleja del ltro mencionado en el aparta-
do nodo spatial_client explicado en este captulo, para ajustar la estimacin del estado xt
componen alSLAM Gmapping.
SLAM Gmapping es probablemente el algoritmo de SLAM ms utilizado actualmente
que, adems de haber sido implementado en Donaxi@HOME, es utilizado por el robot PR2
(gura 4.21) elaborado por Willow Garage. Para ms informacin acerca de los diferentes tipos
de SLAM (incluyendo los aqu descritos) y temas relacionados consultar las referencias [18] y
[41].
Este algoritmo puede resolver el problema de la localizacin global y el llamado dilema del
36 CAPTULO 4. PERCEPCIN Y LOCALIZACIN EN EL ROBOT DONAXI@HOME
robot secuestrado2 de una manera muy robusta y eciente (Thrun et al, 2000;. Fox, Thrun,
Burgard, y Dellaert, 2001). Uno de los problemas del AMCL es que funciona bien con los mapas
en los que no hay incertidumbre, es decir, cuando se le proporciona al robot un mapa exacto
del entorno. Por esta razn suelen haber dicultades cuando se utiliza en el mundo real [42].
El AMCL es una versin extendida del algoritmo de localizacin de Monte Carlo (Monte
Carlo Localization abreviado como MCL), siendo la principal diferencia entre estos el hecho
de que el segundo no es capaz de resolver el dilema del robot secuestrado [42]. Debido a que
este ltimo escenario no es abordado en la presente tesis, en esta seccin slo ser explicada la
versin ms simple de dicho algoritmo, es decir, el MCL.
En robtica probabilstica un concepto clave es la conabilidad. Un robot no conoce
su propia pose (posicin y postura), ya que no puede ser medida directamente. En lugar de
ello, el autmata debe deducirla a partir de los datos proporcionados por el o los mapas de su
entorno y sus sensores. En consecuencia, dicho robot distingue de su verdadero estado a partir
de su conviccin interna o el conocimiento que tenga de este ltimo. El MCL representa la
conabilidad ( belief o bel) de este estado bel(xt ) utilizando una nube de partculas donde
xt es el estado del autmata en el tiempo t [42].
El MCL se compone fundamentalmente de los siguientes cinco elementos:
El ltro de Bayes
El ltro de partculas
Un modelo de movimiento
Un modelo sensorial
Este proceso es recursivo (se aplica repetidas veces[19]) y tiene dos pasos esenciales:
El ltro de partculas es una variante del ltro de Bayes basada en la obtencin muestras a partir
de este ltimo. La idea clave de este proceso consiste en la representacin de la conabilidad
bel(xt ), tambin representada como X , a partir de un conjunto de muestras extrado de bel(xt1 ).
Las muestras de una distribucin son llamadas partculas y se indican con la siguiente notacin:
[1] [2] [M ]
Xt = xt , xt , ..., xt [42].
[m]
En esta ltima ecuacin, cada partcula xt (donde 1 m M ) es una hiptesis acerca
de cual puede ser el verdadero estado del mundo en el tiempo t y Xt representa al conjunto
de todas esas partculas (compuesto de M elementos). Debido a que este ltro tiene como
[m]
nalidad aproximar la conabilidad bel(xt ) a partir de Xt , la frmula xt p(xt |z1:t , u1:t ) es
perfectamente vlida [42].
Al igual que en el ltro de partculas existe una etapa de prediccin utilizada en el modelo
de movimiento. Este modelo p(x|ut , xt1 ) proporciona la probabilidad de encontrar la pose del
robot x despus de realizar el comando de movimiento ut teniendo en cuenta que la pose inicial
de dicho autmata fue xt1 [42]. En la gura 4.23 se muestra una visualizacin de este modelo.
38 CAPTULO 4. PERCEPCIN Y LOCALIZACIN EN EL ROBOT DONAXI@HOME
Figura 4.23: El modelo de movimiento. Las distribuciones posteriores de la pose del robot
al desplazarse son ilustradas por la lnea continua. [42]
Existen dos modelos probabilsticos de movimiento especcos p(xt |ut , xt1 ), ambos para
robots mviles que funcionan en el plano [42]:
2. El segundo asume que ut es proporcionado por datos odomtricos [42]. Este suele usarse
en escenarios reales, por lo que fue el modelo implementado en Donaxi@HOME.
El modelo sensorial devuelve la probabilidad de una medicin real dados la pose de una partcula
y un mapa. En otras palabras, calcula la probabilidad de obtener una lectura a partir de un
sensor en funcionamiento cuando el robot se encuentra en una posicin hipottica. Este modelo
se ocupa de la incertidumbre inherente asociada a mediciones de dicho transductor [42].
Figura 4.24: Las cuatro distribuciones que componen al modelo sensorial [42]
3: for m=1 to M do
4:
[m]
xt = sample_motion_model(ut , x[m]
t1 )
5: wt
[m]
= measurement_model(zt , x[m]
t , m)
[m] [m]
6: X t = X t + (xt , wt )
7: endfor
8: for i=1 to M do
[i]
9: draw i with probability wt
[i]
10: add xt to Xt
11: endfor
12: return Xt
A continuacin se brinda una breve descripcin lnea por la lnea de este algoritmo.
40 CAPTULO 4. PERCEPCIN Y LOCALIZACIN EN EL ROBOT DONAXI@HOME
1. Se declara el algoritmo MCL como una funcin dependiente de cuatro variables: el conjunto
de posibles estados del mundo en un tiempo a priori (Xt1 ), los controles que rigen el
movimiento del robot en el tiempo actual (ut ), las lecturas del telmetro lser en el tiempo
actual (zt ) y la variable m que representa a los datos del mapa.
2. La conabilidad del estado del robot (X t ) y el conjunto de posibles estados del mundo
(Xt ), ambos en el tiempo actual, se inicializan en cero.
3. Se inicializa el ciclo de repeticin for, donde la variable m se itera desde uno hasta el
nmero total de posibles estados del mundo (M ).
[m]
4. El estado estimado del mundo nmero m en el tiempo actual (xt ) se iguala al valor del
modelo de partculas de movimiento dependiente del control de movimiento (ut ) y
el estado a priori del mundo nmero
[m]
m (xt1 ).
9. Se dibuja cada partcula o posible estado del mundo (i) con una probabilidad de certeza
[i]
igual al factor de importancia (wt ).
[i]
10. Se agrega el valor de xt a la variable Xt .
11. Termina el ciclo de repeticin for.
12. Termina la funcin del algoritmo MCL, la cual devuelve el valor de Xt .
Captulo 5
Planicacin de trayectorias en el
robot Donaxi@HOME
Con el objetivo de que el robot Donaxi@HOME realizara la tarea de planicar trayectorias
hacia un objetivo especicado a travs de un mapa previamente generado (descrito en el captulo
move_base, el cual pertenece al repositorio de navegacin (Navigation
4) se utiliz el paquete
Stack) que viene incluido dentro la distribucin ROS Groovy Galapagos.
El paquete move_base permite implementar acciones que, dado un objetivo en el mundo,
tengan la funcin de llegar a este con una base mvil. Dentro de este paquete existe un nodo
del mismo nombre, el cual cuenta con dos planicadores de trayectorias (planners), uno a nivel
global y otro a nivel local, y dos mapas de costos (costmaps), uno para cada planicador[43].
El nodo move_base es uno de los componentes principales del repositorio de navegacin[43],
por lo cual es bastante complejo. Con el objetivo de explicar su funcionamiento de la mejor
manera posible, este programa fue dividido en tres niveles de accin que sern descritos a
continuacin:
41
42 CAPTULO 5. PLANIFICACIN EN EL ROBOT DONAXI@HOME
la composicin de un potencial atractivo a (q), que atrae al robot a la posicin destino, y otro
repulsivo r (q) que lo hace alejarse de los obstculos, es decir: (q) = a (q) + r (q) [44].
La fuerza articial F (q) que afecta el vehculo en la posicin q , por el potencial articial (q)
se dene como: F (q) = (q) [44].
Al igual que la la funcin potencial, la fuerza articial es el resultado de la suma de una
fuerza de atraccin Fa (q), proveniente de la posicin destino , y otra fuerza de repulsin Fr (q)
debidas a los obstculos del entorno de trabajo: F (q) = Fa (q) + Fr (q) [44].
El problema con este tipo de mtodos viene de la aparicin de mnimos locales, es decir,
lugares que no son la posicin destino en los cuales el potencial resulta nulo. Una situacin de
este tipo puede hacer que el robot quede atrapado en una posicin que no sea la de destino, o
bien, debido a la naturaleza discreta del mtodo girar alrededor de ella [44].
El nodo move_base es una variante bastante robusta del planicador de campos potenciales
aqu expuesto.
Este programa interacta a travs de ROS con la ayuda de varias instrucciones, las cuales
pueden clasicarse en las siguientes seis categoras:
Servicios.
Parmetros.
5.2. INTERACCIN CON EL ENTORNO ROS 43
move_base/goal : Por este tpico se reciben metas que se desean alcanzar en el mundo.
Los mensajes aqu recibidos son del tipo move_base_msgs/MoveBaseActionGoal [43].
move_base/cancel : Por este tpico se reciben solicitudes para cancelar metas espec-
cas. Los mensajes aqu recibidos son del tipo actionlib_msgs/GoalID [43].
Este nodo tambin enva informacin empleando dicha librera publicando los siguientes
tpicos:
5.2.4. Servicios
Los servicios que utiliza el nodo move_base para comunicarse a travs de ROS son los siguientes:
5.2.5. Parmetros
Para que el nodo move_base opere apropiadamente, necesita de varios parmetros que sirvan
como guas para la realizacin de sus funciones. A continuacin se presenta una lista de todos
ellos:
costmap_2d.
nav_core.
base_local_planner.
navfn.
clear_costmap_recovery.
rotate_recovery.
1. Los obstculos fuera de una regin especicada por el usuario sern borrados del mapa
del robot[43].
4. La base mvil girar sobre si misma una vez ms para corroborar su posicin[43].
Las principales aportaciones que se incorporaron al proyecto tienen que ver con la dinmica
del envo de objetivos y el perfeccionamiento en la ejecucin de los mismos, ms no en la tarea
de planicacin como tal. Esto ser explicado a profundidad en el captulo 7.
Captulo 6
1 El momento de torsin (del ingls torque ) o par sobre un objeto se dene como el producto de la fuerza
aplicada a dicho cuerpo por la distancia ms corta entre la lnea de accin de dicha fuerza y el eje de rotacin
del mismo elemento, es decir, = F r sen(). Mientras mayor sea el par aplicado sobre una pieza, su velocidad
angular cambiar con mayor rapidez. Sus unidades son N m en el sistema internacional y lb pie en el sistema
ingls, aunque en algunas hojas de datos se utilizan unidades de masa por distancia[46].
49
50 CAPTULO 6. CONTROL DE MOVIMIENTO EN EL ROBOT DONAXI@HOME
Responde a la inercia con un momento de torsin alto, lo que permite una rpida acelera-
cin y una gran capacidad de respuesta en aplicaciones punto a punto[47].
2 La
Asociacin Nacional de Fabricantes Elctricos, NEMA por sus siglas en ingls, es una asociacin interna-
cional de equipos elctricos y fabricantes de imgenes mdicas. Adems de ser lderes en ventas a nivel mundial,
NEMA proporciona un foro para el desarrollo de: los estndares tcnicos que se encuentran dentro de los princi-
pales intereses de la industria y los usuarios, la promocin de las polticas industriales sobre asuntos legislativos
y reglamentarios, y la recoleccin, anlisis y difusin de datos de la industria a nivel global[49].
6.1. MOTORES Y CODIFICADORES ROTATIVOS UTILIZADOS 51
Opera a temperaturas que van desde -20 C hasta 100 C[47].
Puede ser almacenado en temperaturas que van desde -40 C hasta 125 C[47].
3 Cogging es un trmino utilizado para describir a la velocidad angular no uniforme. Se reere a la rotacin
cuando esta se produce en forma de tirones o incrementos en lugar de hacerlo realizando un movimiento suave.
Este efecto se hace evidente a bajas velocidades. Cuanto menor sea el nmero de bobinas en un motor, mayor
ser la presencia de dicho efecto.[51]
4 El pulso indexado, a menudo tambin llamado pulso Z o pulso de marcador, de un codicador incremental
ptico es una seal digital que sucede una vez por cada revolucin del actuador acoplado. Se utiliza como un
nmero de vericacin de seales incrementales[52].
52 CAPTULO 6. CONTROL DE MOVIMIENTO EN EL ROBOT DONAXI@HOME
En la fotografa 6.4 se puede observar una toma del robot Donaxi@HOME, ligeramente
levantado del piso visto desde atrs, donde se aprecia claramente la distribucin que tienen los
motores motores con sus respectivas transmisiones. Cada actuador tiene una etiqueta con una
letra: Y corresponde al actuador izquierdo, mientras que X al derecho. Ambos dispositivos estn
encontrados entre s, es decir, si X e Y rotan hacia el mismo sentido, el autmata girar sobre
su propio eje, y si lo hacen en sentidos opuestos, dicho mvil se desplazar linealmente hacia el
frente o en reversa.
Cabe mencionar que los movimientos descritos en el prrafo anterior fueron expuestos de
manera ideal, ya que en la realidad siempre existir un cierto desfase debido a los problemas
mecnicos inherentes del robot aqu expuesto (mencionados en el primer captulo de la tesis).
Por ltimo, debido a la forma en que se realizaron las conexiones de los actuadores hacia el
controlador, en los programas que interactan con dichos impulsores, se utilizan las variables Y
y Z para representar a los motores Y y X respectivamente.
6.2. CONTROLADOR EMPLEADO 53
Tiene una memoria que admite hasta 2 000 lneas de 80 caracteres cada una. Es capaz de
almacenar 510 variables, as como un total de 30 arreglos de hasta 16 000 elementos cada
uno [53].
a) Comunica posiciones de hasta 32 bits ( 2.15 mil millones de cuentas por movimiento;
regreso automtico; movimientos sin lmite en las modalidades manuales y vectoriales
[53].
Posee entradas y salidas dedicadas por eje de movimiento. Cada eje representa un motor
a controlar [53].
Establece la comunicacin con los motores a pasos que gobierna a una frecuencia mxima
de 6 MHz [53].
Sintaxis: RS;
SH (Servo Here): Le indica al controlador que utilice la posicin actual del motor
como la posicin inicial para la recepcin de comandos, adems habilita el control de los
servomotores pasados como argumentos para esta instruccin [54].
Sintaxis: SH YZ;
Sintaxis: AC 100000;
Sintaxis: DC 100000;
6.3. NODOS DE CONTROL 55
Sintaxis: JG,100000,100000;
TV (Tell Velocity): Devuelve la velocidad real del eje pasado como argumento (en
cuentas/s), de acuerdo a lo que indica el codicador rotativo en el momento en que se
pregunta. El valor devuelto incluye el signo, el cual depender del sentido de rotacin del
motor [54].
Sintaxis: TV Y;
Sintaxis: PR,100000,100000;
SP (Speed): Establece la velocidad de giro para uno o varios ejes cuando estos realicen
movimientos independientes, tales como los indicados en los comandos PR y JG. Si se
indican valores negativos como argumentos de este comando, estos sern tomados como
absolutos [54].
Sintaxis: SP,100000,100000;
AM (After Move): Acta como un punto de partida, ya que se utiliza para sincronizar las
acciones realizadas por los motores. Su funcin principal consiste en impedir la ejecucin
de nuevos comandos hasta que se complete el movimiento que este siendo realizado por los
ejes indicados como parmetros. Se recomienda usar esta instruccin despus de cualquier
encomienda que implique un desplazamiento por parte de los actuadores [54].
Sintaxis: AM YZ;
Sintaxis: ST YZ;
Y y Z para
En la sintaxis de los comandos descritos anteriormente, se utilizaron las variables
ejes de movimiento o motores a controlar (homnimas a las usadas en el
representar dos
robot Donaxi@HOME) y el nmero 100 000 como un valor arbitrario de cuentas a considerar,
esto nicamente para ejemplicar el funcionamiento de estas instrucciones.
Los dos programas mencionados en el prrafo anterior tienen una doble funcin, ya que
tambin se desempean como nodos de percepcin como fue explicado en el cuarto apartado
de esta tesis, sin embargo, en la presente seccin sern desarrollados desde el punto de vista del
control de movimiento.
3. El tpico cmd_vel, proveniente del nodo teleop_joy que ser explicado en el captulo 7,
comunica nmericamente la posicin que adquiere una palanca de mando (joystick)
conectada a la computadora. A partir de esto, se establecen condiciones para que, depen-
diendo de hacia donde se mueva dicho dispositivo, una variable a adquiera valores enteros.
Esto queda establecido de la siguiente manera:
7. Por ltimo, antes de cerrar el ciclo de repeticin de este nodo, se establece una condicin
de paro para los motores la cual es muy simple: si m = 1, entonces los motores se detienen;
de lo contrario, la ejecucin del cdigo continua normalmente.
a) Se sabe que las velocidades lineal y angular de un robot con desplazamiento diferen-
cial se obtienen a partir de las siguientes frmulas respectivamente: vlineal = vd+vi
2 y
vdvi
vangular = D . Donde vd y vi representan a las velocidades de los motores derecho e
izquierdo vistos desde la parte trasera del autmata y D es la distancia entre las ruedas
unidas a los ejes de dichos actuadores.
58 CAPTULO 6. CONTROL DE MOVIMIENTO EN EL ROBOT DONAXI@HOME
Retomando lo mencionado en el cuarto captulo de la presente tesis, los dos nodos de con-
trol expuestos en este captulo son programas originales realizados exclusivamente para este
proyecto.
Captulo 7
Pruebas y resultados
Como ya fue mencionado en captulos anteriores, en el robot Donaxi@HOME se utilizaron
dos arreglos de nodos: generacin de mapa y navegacin en el mapa generado, los cuales sern
descritos a lo largo de la presente seccin en funcin de sus caractersticas y el trabajo realizado
entorno a estos.
Resumiendo lo dicho en el prrafo previo, cada arreglo se dividir en las siguientes etapas:
1. Estructura y funcionamiento.
2. Pruebas realizadas.
3. Mejoras implementadas.
Figura 7.1: Arreglo de nodos generacin de mapa con sus respectivos tpicos
59
60 CAPTULO 7. PRUEBAS Y RESULTADOS
La herramienta record requiere saber la ruta y el nombre del archivo .bag a generar, as
como los tpicos de los que va a obtener la informacin a guardar (ver diagrama 7.2).
joy_node
teleop_joy
map_saver
sensor_msgs/Joy,
2. Convierte la informacin adquirida en el paso previo, la cual es del tipo
al formato geometry_msgs/Twist. Dentro de la lgica de ROS, esto equivale a transformar
magnitudes sensoriales a velocidades, un proceso necesario para que posteriormente los
nodos de control, mencionados en el captulo 6, puedan hacer su trabajo.
3. Publica los datos obtenidos a travs del tpico cmd_vel.
En la gura 7.6, que es un fragmento de la imagen 7.1, se muestran las ramicaciones del
presente nodo.
parmetro[55], el cual fue explicado en el nodo odom_tf como uno de los parmetros que
denen la orientacin de un robot.
Negacin (negate): Permite invertir las regiones blancas por las opacas o las regiones li-
bres por las ocupadas y vicebersa en el mapa cuando este parmetro es habilitado. La inter-
pretacin de los umbrales anteriormente descritos no se ve afectada por esta condicin[55].
Para que este nodo pueda funcionar necesita suscribirse al tpico map que comunica un tipo
de dato nav_msgs/OccupancyGrid [55].
6. Por ltimo, en cuanto el usuario considera que se tiene un mapa completo del medio, se
invoca, usando la terminal, al programa map_saver, mismo que genera una imagen de
dicho mapa y un archivo denominado mapa.yaml con todas sus caractersticas, mismos
que son guardados en el directorio que el usuario especique por medio de la ya mencionada
terminal. Para poder monitorear todo el proceso es altamente recomendable que el visor
rviz se mantenga activo en todo momento, razn por la cual se invoca desde el inicio por
medio de la utilidad roslaunch.
Sin embargo, a pesar de que con el aumento de la velocidad de los motores se obtuvieron
los benecios anteriormente mencionados, subsistieron algunas limitaciones y surgieron otras
nuevas. La siguiente lista muestra las ms relevantes:
El manejo del robot sigue siendo tedioso debido a las pausas entre movimientos.
Los giros del robot producidos a alta velocidad producen vibraciones en el mismo. Esto
provoca que la calidad del mapa se reduzca y la integridad del autmata se vea compro-
metida.
Todo estos cambios se ven reejados en la signicativa reduccin del tamao de las bolsas de
datos (.bag), construidas con la herramienta rosbag, mismas que disminuyeron aproximadamente
un cincuenta por ciento en pruebas posteriores. En otras palabras, tomando en cuenta que el
tamao de estos archivos es proporcional al tiempo de grabacin que guardan, se puede armar
que el tiempo de generacin del mapa se redujo a la mitad.
En resumen, las tres principales mejoras obtenidas en la generacin del mapa fueron las
siguientes:
Figura 7.8: Arreglo de nodos navegacin en el mapa generado con sus respectivos tpicos
La herramienta record requiere saber la ruta y el nombre del archivo .bag a generar, as
como los tpicos de los que va a obtener la informacin a guardar (ver diagrama 7.9).
maestro
dinamic_goal
cancel_goal
map_server
Tomando como apoyo a la imagen 7.11, es posible describir las funciones del presente pro-
grama de la siguiente manera:
Al presionar el botn Ubicar, las coordenadas escritas en los cheros de texto (x, y, )
son publicadas a travs del tpico chatter. Los datos aqu comunicados corresponden al
tipo geometry_msgs/Twist, una estructura de seis elementos donde tres de ellos (linear.x
(posicin en x), linear.y (posicin en y) y angular.z (orientacin)) adquieren el valor de
dichos cheros y los restantes (linear.z, angular.x y angular.y ) se quedan en ceros.
5. En cuanto el objetivo es enviado, se activa una espera la cual no termina hasta que el ob-
jetivo sea completado o desechado. Mientras este retardo se encuentra en funcionamiento,
se comunica el mensaje Enviando objetivo a partir del tpico conrma.
6. Se establece una condicional la cual dice lo siguiente:
1. Se suscribe al tpico alto y en cuanto recibe cualquier cadena de caracteres a partir este
ltimo, se ejecuta el resto del algoritmo.
2. Por medio del cliente de acciones simples, el presente nodo activa la funcin stopTrack-
ingGoal, cuya misin es indicarla a move_base que deje de monitorear los objetivos que
le han sido encomendados.
3. Por ltimo, recurriendo nuevamente al cliente de acciones simples, este programa le solicita
a move_base la cancelacin de todos los objetivos en progreso. Sin la ejecucin del paso
2, esto ltimo es imposible de realizar.
Aunque el presente nodo fue modicado casi en su totalidad, es una variante de otro programa
de ROS disponible en lnea [57].
2. El nodo dinamic_goal procesa las coordenadas del tpico chatter y las enva por medio
de un servicio a move_base. Tambin es el responsable de originar los mensajes de alerta
publicados en el tpico conrma.
3. Los nodos spatial y spatial_client, as como el programa hokuyo_node, realizan las mismas
funciones que en el arreglo generacin de mapa.
4. El nodo move_base realiza las mismas funciones que los programas joy_node y teleop_joy
en el arreglo anterior, ya que se encarga de enviarle las velocidades, en forma de porcentaje,
al nodo de control de la presente conguracin a travs del tpico cmd_vel. Aunque la
tarea aqu mencionada es el resultado nal de la toma de decisiones que conlleva el proceso
de navegacin, existe todo un arsenal de procesos intermedios antes de llegar a dicha
resultante, mismos que pueden ser visualizados por medio de rviz ; los ms importantes se
muestran en la gura 7.12, fragmento de la gura 7.8, aunque la lista completa de dichos
procesos fue mencionada en el captulo 5.
8. Por ltimo, en el nodo record se guarda la informacin publicada por los tpicos tf, scan,
particlecloud, map y los mostrados en la gura 7.12. Esta grabacin se hace para poder
analizar el comportamiento de la navegacin con respecto al mapa y el entorno.
Breve incremento del nmero de errores de percepcin por parte de los sensores con res-
pecto a los acontecidos en la prueba anterior.
En la gura 7.13 se muestra una prueba de navegacin completa realizada a velocidad media.
Se pueden apreciar todos los elementos que intervienen en esta tarea, desde la interfaz con las
coordenadas ingresadas con el usuario hasta los movimientos (echas naranjas) que realizo el
robot para alcanzar el objetivo deseado, adems de los obstculos (nubes azules) detectados en
el mapa.
Figura 7.13: Prueba completa de navegacin basada en mapa realizada a velocidad a media
esta versin del programa con respecto a otras anteriores son mayores que las limitaciones que
acarrea.
A pesar de que las pruebas realizadas en el arreglo navegacin en el mapa generado estn
enfocadas en la modicacin de su nodo de control, las principales mejoras obtenidas se hallan
en los nodos maestro, dinamic_goal y cancel_goal. Esto se debe a que la interfaz con el usuario
junto con sus respectivas ramicaciones, las cuales en conjunto le permiten a este ltimo controlar
completamente y de manera intuitiva el proceso de navegacin, son la parte ms atractiva del
proyecto.
En la siguiente lista se enumeran las mejoras conseguidas al desarrollar e implementar el
mtodo de navegacin descrito en la presente tesis.
Se resaltan los elementos uno y tres de la lista, debido a que estos puntos equivalen a
innovaciones del presente proyecto con respecto a otros sistemas que emplean una navegacin
de este tipo.
Captulo 8
8.1. Conclusiones
La elaboracin de la presente tesis implico una inversin considerable de tiempo, dinero y es-
fuerzo, la cual, afortunadamente, rindi frutos importantes, tanto para el laboratorio de Control
y Robtica como para su realizador. La siguiente es una lista de los principales logros obtenidos:
77
78 CAPTULO 8. CONCLUSIONES Y TRABAJO A FUTURO
Implementacin del algoritmo de Dijkstra. Si se tiene una base de datos con dos
o ms objetivos, es posible conectarlos entre s para simplicar an ms el proceso de
generacin de trayectorias. El algoritmo de Dijkstra, el cual bastante popular en el mundo
de la robtica, est diseado precisamente para elegir la mejor ruta cuando se tienen varios
puntos enlazados entre s.
Incorporar nuevos sensores. El telmetro lser, como cualquier sensor de luz en general,
tiene dicultades para detectar reas demasiado opacas donde la luz simplemente no se
reeja. Debido a que este dispositivo representa la mayor parte de la visin del robot
en general, la incorporacin de sensores diferentes, como sonares o ultrasnicos, con sus
respectivos procesos de software pueden contribuir a la disminucin o incluso la eliminacin
de errores de este tipo.
8.2. TRABAJO A FUTURO 79
Nodo spatial_client
81
82 APNDICE A. NODO SPATIAL_CLIENT
#include <ros/ros.h>
#include <stdio.h>
#include <stdlib.h>
#include <sstream>
#include <phidget21.h>
#include <geometry_msgs/Twist.h>
#include "phidgets/spatial_params.h"
//c_str() -> convierte una cadena a un arreglo de caracteres que podemos manejar
//atoi -> Convierte un arreglo de caracteres en un nmero entero
//atof -> convierte un arreglo de caracteres a un nmero real (double)
double vth=0.0,vlineal=0.0;
//string w;
float R=0.03;
float qangulo = 0.001; //data sheet
float qderiva = 0.003;
float Pk0_00 = 1;
float Pk0_01 = 0;
float Pk0_10 = 0;
float Pk0_11 = 1;
//
while(n.ok()){
//Kalman
//PREDICCION
//estimacin apriori del sistema ###
float angulo_estk1=angulok0+(dt*gyrok0)-(derivak0*dt);
float deriva_estk1=derivak0;
//actualizacion ##
gyrok0 = vth;
//CORRECCION ###
//ganancia de Kalman ###
angulok0 = Xk1_0;
derivak0 = Xk1_1;
//Actualizacion ##
Pk0_00 = Pk1_00;
Pk0_01 = Pk1_01;
Pk0_10 = Pk1_10;
Pk0_11 = Pk1_11;
if(abs(Xk1_0)>15)
{
pos.angular.x=1.0;
th=0.0;
//k=1;
}
else pos.angular.x=0.0;
pos.angular.y=Xk1_0;
pos.angular.z=vth;
pos_pub_.publish(pos);
last_time = current_time;
r.sleep();
}
}
Apndice B
Nodo motor_gen_mapa
85
86 APNDICE B. NODO MOTOR_GEN_MAPA
// NODO MOTOR
//
//-------------------------------------------------------------//
//Cabeceras e inclusin de libreras
//---------------------------------------------------------------//
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
#include <iostream>
#include "mensajes.h"
#include "/home/alfredo/catkin_ws/src/motor/include/dmclnx.h"
//---------------------------------------------------------------//
//---------------------------------------------------------------//
//Declaracion de variables globales
//---------------------------------------------------------------//
//Agregar la declaracin de las variables de mensajes (envo y recepcin) propias del nodo
double m=0.0, m2=0.0;
int a=0;
long rc = 0; /* Return code */
int fInMotion = 1; /* Motion complete flag */
char buffer[32] = ""; /* Response from controller */
HANDLEDMC hdmc = -1; /* Handle to controller */
CONTROLLERINFO controllerinfo; /* Controller information structure */
string Cad_Motor;
int bandDiag=0;
//---------------------------------------------------------------//
//
//
//
//---------------------------------------------------------------//
void PrintError(long rc)
{
//---------------------------------------------------------------//
// Inicializa el Controlador DMC-4040 por puerto Ethernet
// IP = "192.168.1.104"
// IMPORTANTE: Cargar el archivo de calibracin donde estn todos
// los parmetros para los motores y dems.
//---------------------------------------------------------------//
int Inicializa_DMC()
{
ROS_INFO("INICIALIZA DMC ......");
memset(&controllerinfo, '\0', sizeof(controllerinfo));
controllerinfo.cbSize = sizeof(controllerinfo);
controllerinfo.usModelID = MODEL_2100;
controllerinfo.fControllerType = ControllerTypeEthernet;
controllerinfo.ulTimeout = 1000;
controllerinfo.ulDelay = 5;
strcpy(controllerinfo.hardwareinfo.socketinfo.szIPAddress, "192.168.0.30");
controllerinfo.hardwareinfo.socketinfo.fProtocol = EthernetProtocolTCP;
DMCInitLibrary();
rc = DMCOpen(&controllerinfo, &hdmc);
ROS_INFO("Abrir el DMC ...... %ld", rc);
if (rc)
{
ROS_INFO("ERROR DMC ......");
PrintError(rc);
return 1;
}
ROS_INFO("DMC OK!! ......");
return -1;
//---------------------------------------------------------------//
int Cierra_DMC()
{
return 0L;
}
void aviso(const geometry_msgs::Twist::ConstPtr& avi)
{
m=avi->angular.x;
m2=avi->angular.z;
}
}
//---------------------------------------------------------------//
//Funcin Principal
//---------------------------------------------------------------//
int main(int argc, char **argv)
{
//Apertura del canal de recepcin de mensajes del maestro, el nombre cambia dependiendo del nodo
float vely=0.0, velz=0.0, vellin=0.0, velang=0.0;
string comando;
if(!(rc=Inicializa_DMC())) {
ROS_INFO("No Encontr el Controlador = %d", rc);
return -1;
}else {
rc = DMCCommand(hdmc, "RS;", buffer, sizeof(buffer));
usleep(900000);
ROS_INFO("Ejecuto RS .....%d", rc);
88 APNDICE B. NODO MOTOR_GEN_MAPA
comando = "PR,"+convertInt(0)+",-"+convertInt(0);
rc = DMCCommand(hdmc, (char *)comando.c_str(), buffer, sizeof(buffer));
rc = DMCCommand(hdmc, "BG YZ;", buffer, sizeof(buffer));
fInMotion = 1;
Vel_X=0.0;
Vel_Y=0.0;
ros::Publisher vel_pub_;
vel_pub_ = nh.advertise<geometry_msgs::Twist>("cmd_vel2", 100);
geometry_msgs::Twist vel;
ros::Subscriber sub = nh.subscribe<geometry_msgs::Twist>("cmd_vel", 1000, VelocidadMotores);
ros::Subscriber sub2 = nh.subscribe<geometry_msgs::Twist>("pos", 10, aviso);
//Ciclo de trabajo del programa
while (ros::ok())
{
rc = DMCCommand(hdmc, "TV Y;", buffer, sizeof(buffer));
vely=-atoi(buffer)/600000.0;
rc = DMCCommand(hdmc, "TV Z;", buffer, sizeof(buffer));
velz=atoi(buffer)/600000.0;
vellin=(vely+velz)/2.0;
vel.linear.x=vellin;
vel.angular.x= -m2*(PI/180.0);
if(vellin==0.0)
{
switch(a)
{
case 0:
Vel_X=0.0;
Vel_Y=0.0;
comando = "PR,"+convertInt(VEL_CONST*Vel_X)+",-"+convertInt(VEL_CONST*Vel_Y);
rc = DMCCommand(hdmc, (char *)comando.c_str(), buffer, sizeof(buffer));
rc = DMCCommand(hdmc, "BG YZ;", buffer, sizeof(buffer));
break;
case 1:
Vel_X=-1.0;
Vel_Y=-1.0;
comando = "SP,"+convertInt(VEL_CONST2*Vel_X)+",-"+convertInt(VEL_CONST2*Vel_Y);
rc = DMCCommand(hdmc, (char *)comando.c_str(), buffer, sizeof(buffer));
comando = "PR,"+convertInt(VEL_CONST*Vel_X)+",-"+convertInt(VEL_CONST*Vel_Y);
rc = DMCCommand(hdmc, (char *)comando.c_str(), buffer, sizeof(buffer));
rc = DMCCommand(hdmc, "BG YZ;", buffer, sizeof(buffer));
//rc = DMCCommand(hdmc, "AM YZ;", buffer, sizeof(buffer));
break;
case 2:
Vel_X=1.0;
Vel_Y=1.0;
comando = "SP,"+convertInt(VEL_CONST2*Vel_X)+",-"+convertInt(VEL_CONST2*Vel_Y);
rc = DMCCommand(hdmc, (char *)comando.c_str(), buffer, sizeof(buffer));
comando = "PR,"+convertInt(VEL_CONST*Vel_X)+",-"+convertInt(VEL_CONST*Vel_Y);
rc = DMCCommand(hdmc, (char *)comando.c_str(), buffer, sizeof(buffer));
rc = DMCCommand(hdmc, "BG YZ;", buffer, sizeof(buffer));
//rc = DMCCommand(hdmc, "AM YZ;", buffer, sizeof(buffer));
break;
case 3:
Vel_X = -1;
Vel_Y = 1;
comando = "JG,"+convertInt(VEL_CONST2*Vel_X)+",-"+convertInt(VEL_CONST2*Vel_Y);
rc = DMCCommand(hdmc, (char *)comando.c_str(), buffer, sizeof(buffer));
rc = DMCCommand(hdmc, "BG YZ;", buffer, sizeof(buffer));
89
break;
case 4:
Vel_X = 1;
Vel_Y = -1;
comando = "JG,"+convertInt(VEL_CONST2*Vel_X)+",-"+convertInt(VEL_CONST2*Vel_Y);
rc = DMCCommand(hdmc, (char *)comando.c_str(), buffer, sizeof(buffer));
rc = DMCCommand(hdmc, "BG YZ;", buffer, sizeof(buffer));
break;
}
}
ros::spinOnce();
loop_rate.sleep();
}
Cierra_DMC();
}
Apndice C
Nodo motor_formula
91
92 APNDICE C. NODO MOTOR_FORMULA
// NODO MOTOR
//
//----------------------------------------------------------//
//Cabeceras e inclusin de libreras
//---------------------------------------------------------------//
#include <boost/math/special_functions/round.hpp>
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
#include <iostream>
#include "mensajes.h"
#include "/home/alfredo/catkin_ws/src/motor/include/dmclnx.h"
//---------------------------------------------------------------//
//---------------------------------------------------------------//
//Declaracion de variables globales
//---------------------------------------------------------------//
//Agregar la declaracin de las variables de mensajes (envo y recepcin) propias del nodo
double m2=0.0;
//---------------------------------------------------------------//
//
//
//
//---------------------------------------------------------------//
void PrintError(long rc)
{
//---------------------------------------------------------------//
// Inicializa el Controlador DMC-4040 por puerto Ethernet
// IP = "192.168.1.104"
// IMPORTANTE: Cargar el archivo de calibracin donde estn todos
// los parmetros para los motores y dems.
//---------------------------------------------------------------//
int Inicializa_DMC()
{
ROS_INFO("INICIALIZA DMC ......");
memset(&controllerinfo, '\0', sizeof(controllerinfo));
controllerinfo.cbSize = sizeof(controllerinfo);
controllerinfo.usModelID = MODEL_2100;
controllerinfo.fControllerType = ControllerTypeEthernet;
controllerinfo.ulTimeout = 1000;
controllerinfo.ulDelay = 5;
strcpy(controllerinfo.hardwareinfo.socketinfo.szIPAddress, "192.168.0.30");
controllerinfo.hardwareinfo.socketinfo.fProtocol = EthernetProtocolTCP;
DMCInitLibrary();
93
//---------------------------------------------------------------//
int Cierra_DMC()
{
return 0L;
}
if (vel->linear.x==0.0) {
Vel_X=boost::math::iround(vi*VEL_CONST2);
Vel_Y=boost::math::iround(vd*VEL_CONST2);
}
else{
Vel_X=-1*boost::math::iround(vd*VEL_CONST2);
Vel_Y=-1*boost::math::iround(vi*VEL_CONST2);
}
}
void aviso(const geometry_msgs::Twist::ConstPtr& avi)
{
m2=avi->angular.z;
}
//---------------------------------------------------------------//
//Funcin Principal
//---------------------------------------------------------------//
int main(int argc, char **argv)
{
//Apertura del canal de recepcin de mensajes del maestro, el nombre cambia dependiendo del nodo
string comando;
float vely=0.0, velz=0.0, vellin=0.0, velang=0.0;
if(!(rc=Inicializa_DMC())) {
ROS_INFO("No Encontr el Controlador = %ld", rc);
return -1;
94 APNDICE C. NODO MOTOR_FORMULA
}else {
rc = DMCCommand(hdmc, "RS;", buffer, sizeof(buffer));
usleep(900000);
ROS_INFO("Ejecuto RS .....%ld", rc);
fInMotion = 1;
ros::Publisher vel_pub_;
vel_pub_ = nh.advertise<geometry_msgs::Twist>("cmd_vel2", 100);
geometry_msgs::Twist vel;
ros::Subscriber sub = nh.subscribe<geometry_msgs::Twist>("cmd_vel", 1000, VelocidadMotores);
ros::Subscriber sub2 = nh.subscribe<geometry_msgs::Twist>("pos", 10, aviso);
comando = "JG,"+convertInt(Vel_X)+",-"+convertInt(Vel_Y);
rc = DMCCommand(hdmc, (char *)comando.c_str(), buffer, sizeof(buffer));
rc = DMCCommand(hdmc, "BG YZ;", buffer, sizeof(buffer));
rc = DMCCommand(hdmc, "TV Y;", buffer, sizeof(buffer));
vely=-atoi(buffer)/600000.0;
rc = DMCCommand(hdmc, "TV Z;", buffer, sizeof(buffer));
velz=atoi(buffer)/600000.0;
vellin=(vely+velz)/2.0;
vel.linear.x=vellin;
vel.angular.x= -m2*(PI/180.0);
vel_pub_.publish(vel);
ros::spinOnce();
loop_rate.sleep();
}
Cierra_DMC();
}
Apndice D
Nodo maestro
95
96 APNDICE D. NODO MAESTRO
#!/usr/bin/env python
# -*- coding: cp1252 -*-
import rospy
from geometry_msgs.msg import Twist
from std_msgs.msg import String
import time
import sys, os
from numpy import *
from PyQt4 import QtCore, QtGui
from P1 import Ui_Form
globvar=" "
def callback(data):
global globvar
globvar=str(data.data)
class Principal(QtGui.QWidget):
def temp(self):
self.ventana.estado.setText(globvar)
def d(self):
s="a"
pub2.publish(s)
def __init__ (self):
QtGui.QWidget.__init__(self)
self.ventana = Ui_Form()
self.ventana.setupUi(self)
self.setWindowTitle('Donaxi 2014')
self.setWindowIcon(QtGui.QIcon('sharingan.gif'))
self.connect(self.ventana.ubicar,QtCore.SIGNAL('clicked()'),self.ubicar)
self.connect(self.ventana.detener,QtCore.SIGNAL("clicked()"),self.d)
self.timer = QtCore.QTimer()
QtCore.QObject.connect(self.timer,QtCore.SIGNAL("timeout()"),self.temp)
self.timer.start(1)
def ubicar(self):
t.linear.x=float(self.ventana.L1.text())
t.linear.y=float(self.ventana.L2.text())
t.angular.z=float(self.ventana.L3.text())*(3.1416/180.0)
pub.publish(t)
app = QtGui.QApplication(sys.argv)
ventana = Principal()
ventana.show()
sys.exit(app.exec_())
Apndice E
Nodo dinamic_goal
97
98 APNDICE E. NODO DINAMIC_GOAL
#include <ros/ros.h>
#include <move_base_msgs/MoveBaseAction.h>
#include <actionlib/client/simple_action_client.h>
#include <geometry_msgs/Twist.h>
#include <tf/transform_broadcaster.h>
#include <std_msgs/String.h>
ros::Publisher chat;
std_msgs::String msg;
move_base_msgs::MoveBaseGoal goal;
goal.target_pose.pose.position.x = ins->linear.x;
goal.target_pose.pose.position.y = ins->linear.y;
goal.target_pose.pose.orientation = tf::createQuaternionMsgFromYaw(ins->angular.z);
ac.sendGoal(goal);
ac.waitForResult();
if(ac.getState() == actionlib::SimpleClientGoalState::SUCCEEDED)
{
msg.data ="Posicion alcanzada";
chat.publish(msg);
}
else{
msg.data ="No se logro el objetivo";
chat.publish(msg);
}
}
Nodo cancel_goal
99
100 APNDICE F. NODO CANCEL_GOAL
#include <ros/ros.h>
#include <move_base_msgs/MoveBaseAction.h>
#include <actionlib/client/simple_action_client.h>
#include <std_msgs/String.h>
[9] Willow Garage, Inc. (2013, 30 de noviembre). Tickets, [en lnea]. California, Estados Unidos
de Amrica: Autor. Recuperado el 27 de enero de 2014, de http://wiki.ros.org/Tickets
[10] Willow Garage, Inc. (2013, 24 de abril). About Willow Garage, [en lnea]. California, Es-
tados Unidos de Amrica: Autor. Recuperado el 27 de enero de 2014, de http://www.
willowgarage.com/pages/about-us
[11] Conley, K. (2014, 27 de febrero). Roslaunch, [en lnea]. California, Estados Unidos de Amri-
ca: Willow Garage, Inc. Recuperado el 1 de marzo de 2014, de http://wiki.ros.org/
roslaunch
[12] Field, T., Leibs, J. y Bowman, J. (2014, 15 de marzo). Rosbag, [en lnea]. California, Estados
Unidos de Amrica: Willow Garage, Inc. Recuperado el 23 de marzo de 2014, de http:
//wiki.ros.org/rosbag
101
102 BIBLIOGRAFA
[13] Field, T., Leibs, J. y Bowman, J. (2014, 15 de marzo). Rosbag/Commandline, [en lnea].
California, Estados Unidos de Amrica: Willow Garage, Inc. Recuperado el 23 de marzo de
2014, de http://wiki.ros.org/rosbag/Commandline
[14] Thomas, D. (2014, 27 de enero). Rqt_graph, [en lnea]. California, Estados Unidos de Amri-
ca: Willow Garage, Inc. Recuperado el 27 de enero de 2014, de http://wiki.ros.org/rqt_
graph
[15] Hershberger, D., Gossow, D. y Faust, J. (2014, 25 de enero). Rviz, [en lnea]. California,
Estados Unidos de Amrica: Willow Garage. Recuperado el 27 de enero de 2014, de http:
//wiki.ros.org/rviz
[16] Gonzlez Fernndez, V.R., Lpez Cruzado, A. y Cabero Esteban, J.A. (2012, 28 de abril).
Tema 5.5: Robots Mviles, [en lnea]. Valladolid, Espaa: Centro de Formacin del Profe-
sorado e Innovacin Educativa de Valladolid. Recuperado el 26 de diciembre de 2013, de
http://platea.pntic.mec.es/vgonzale/cyr_0708/archivos/_15/Tema_5.5.htm
[17] Navarro Garca, D.A.(2009). Contribucin a la autolocalizacin de robots mviles basada
en la fusin de informacin multisensorial. Trabajo de grado, Doctorado en Automtica e
Informtica Industrial, Universidad Politcnica de Valencia, Valencia, Espaa.
[18] Thrun, S., Burgard, W. y Fox, D. (2006). Probabilistic Robotics. Massachusetts, Estados
Unidos de Amrica: MIT Press.
[19] Oxford Advanced Learner's Dictionary (2010). Nueva York, Estados Unidos de Amrica:
Oxford University Press.
[20] Propioceptivo (2014, 2 de enero). Diccionario de Medicina Vox [en lnea]. Barcelona, Es-
paa: Larousse. Recuperado el 10 de enero de 2014, de http://www.diccionarios.com/
[21] Lpez, D., Gmez-Bravo, F., Cuesta, F. y Ollero, A. (2006). Planicacin de trayectorias con
el algoritmo RRT. Aplicacin a robots no holnomos. Revista Iberoamericana de Automtica
e Informtica Industrial, 3, 56-67.
[22] Gmez-Bravo, F., Cuesta, F. y Ollero, A. (2003). Planicacin de trayectorias en robots
mviles basada en tcnicas de control de sistemas no holnomos. En XXIV Jornadas de
Automtica, Len, Espaa.
[23] Cham, J. (2009). R.O.B.O.T. Comics: Path Planning, [imagen]. Recuperada de http://
www.willowgarage.com/blog/2009/09/04/robot-comics-path-planning
[24] Ogata, K. (2010). Modern Control Engineering (5ta Ed.). Nueva Jersey, Estados Unidos de
Amrica: Pearson Education, Inc.
[25] Ollero Baturone, A. (2001). Robtica. Manipuladores y robots mviles. Barcelona, Espaa:
Marcombo Boixareu Editores.
[26] Silva Ortigoza, R., Garca Snchez, J.R., Barrientos Sotelo, V.R., Molina Vilchis,
M.A., Hernndez Guzmn, V.M. y Silva Ortigoza, G. (2007). Una panormica de
los robots mviles. Telematique [en lnea], Vol. 6,
N 3. Recuperado el 5 de enero
de 2014, dehttp://www.publicaciones.urbe.edu/index.php/telematique/article/
viewArticle/833/2037
[27] Sotelo Iniesta, E.D.(2006). Diseo e Implementacin de los Robots F180 del ITAM. Trabajo
de grado, Ingeniera en Telemtica, Instituto Tecnolgico Autnomo de Mxico, Mxico
D.F., Mxico.
BIBLIOGRAFA 103
[28] Natera G., A.E. (2000). Usos del rayo laser en odontologia restauradora. Primera parte.
Aspectos generales, clasicacion, interrelacion con los tejidos vivos y precauciones en el
uso. Acta Odontolgica Venezolana [en lnea], Vol. 38, N 1. Recuperado el 9 de enero
http://www.actaodontologica.com/ediciones/2000/1/usos_rayo_laser_
de 2014, de
odontologia_restauradora.asp
[30] Sentek Solutions, Inc. (2012, 2 de septiembre). Scanning Laser Rangenders, [en lnea].
Carolina del Norte, Estados Unidos de Amrica: Autor. Recuperado el 4 de enero de 2014,
de http://senteksolutions.com/products/scanning-laser-rangefinders/
[33] Phidgets, Inc. (2013, 27 de diciembre). 1056_0 - PhidgetSpatial 3/3/3, [en lnea]. Alber-
ta, Canad: Autor. Recuperado el 9 de enero de 2014, de http://www.phidgets.com/
products.php?product_id=1056
[34] Mottram, B. (2011). ROS driver for Phidgets Spatial sensor, [en lnea]. California, Estados
Unidos de Amrica: Willow Garage, Inc. Recuperado el 14 de enero de 2014, de http:
//wiki.ros.org/phidgets
[35] Ramrez Manzanares, A. (2012). Figura 12.- Diagrama a bloques de un ltro de Kalman,
[imagen]. Recuperada de http://www.cimat.mx/~alram/VC/MSAA.htm
[36] Willow Garage, Inc. (2013). A robot that has many relevant frames, [imagen]. Recuperada
de http://wiki.ros.org/robot_state_publisher/Tutorials/Using%20the%20robot%
20state%20publisher%20on%20your%20own%20robot?highlight=%28robot_state_
publisher%29
[37] Willow Garage, Inc. (2013, 18 de octubre). Setting up your robot using tf, [en lnea].
California, Estados Unidos de Amrica: Autor. Recuperado el 15 de enero de 2014, de
http://wiki.ros.org/navigation/Tutorials/RobotSetup/TF
[38] Willow Garage, Inc. (2013, 18 de octubre). Publishing Odometry Information over ROS,
[en lnea]. California, Estados Unidos de Amrica: Autor. Recuperado el 15 de enero de
2014, de http://wiki.ros.org/navigation/Tutorials/RobotSetup/Odom
[39] Gerkey, B. P., Leibs, J. y Gassend, B. (2010). Hokuyo_node, [en lnea]. California, Es-
tados Unidos de Amrica: Willow Garage, Inc. Recuperado el 15 de enero de 2014,
de https://code.ros.org/svn/ros-pkg/stacks/laser_drivers/trunk/hokuyo_node/
src/node/hokuyo_node.cpp
[40] Willow Garage, Inc. (2013, 23 de diciembre). Robot for Research and Innovation, [imagen].
Recuperada de https://www.willowgarage.com/pages/pr2/overview
104 BIBLIOGRAFA
[41] Stachniss, C., Frese, U. y Grisetti, G. (2014, 9 de enero). What is OpenSLAM.org?, [en
lnea]. Freiburg, Alemania: OpenSLAM.org. Recuperado el 11 de febrero de 2014, de https:
//openslam.org/
[42] Hiemstra, P. y Nederveen, A. (2007, 24 de agosto). Monte Carlo Localization, [en lnea].
Groningen, Pases Bajos: Universidad de Groningen (Rijksuniversiteit Groningen). Recu-
perado el 22 de febrero de 2014, de http://citeseerx.ist.psu.edu/viewdoc/summary?
doi=10.1.1.99.7041
[43] Marder-Eppstein, E. (2014, 5 de febrero). Move_base, [en lnea]. California, Estados Unidos
de Amrica: Willow Garage, Inc. Recuperado el 8 de febrero de 2014, de http://wiki.ros.
org/move_base
[44] Osuna-Altamirano, T. , Gonzlez, L.A. y Aguilar L.T. (2010, 25 y 26 de marzo). Tcnica
de Navegacin de Campos Potenciales para un Robot Mvil para la Evasin de Obstculos.
Trabajo presentado en el Encuentro de Investigacin en Ingeniera Elctrica (ENINVIE)
celebrado en la Casa Municipal de la Cultura, Zacatecas, Mxico.
[45] Willow Garage, Inc. (2013, 18 de octubre). Setup and Conguration of the Navigation Stack
on a Robot, [en lnea]. California, Estados Unidos de Amrica: Autor. Recuperado el 13 de
febrero de 2014, de http://wiki.ros.org/navigation/Tutorials/RobotSetup
[46] Chapman, S. J. (2005). Mquinas Elctricas (4ta Ed.). (C. De Robina Cordera). Mxico
D.F., Mxico: McGraw-Hill Interamericana. (Original en ingls, 2005).
[47] Galil Motion Control, Inc. (2013, 24 de agosto). Brushless Servo Motor BLM-N23-50-1000-
B, [en lnea]. California, Estados Unidos de Amrica: Autor. Recuperado el 19 de febrero
de 2014, de http://www.galilmc.com/products/servo-motor.php
[48] NEMA (2013). NEMA Motor Mounting Dimensions, [tabla]. Recuperada de http://www.
numberfactory.com/NEMA%20Motor%20Dimensions.htm
[49] NEMA (2013, 8 de diciembre). About the National Electrical Manufacturers Association,
[en lnea]. Virginia, Estados Unidos de Amrica: Autor. Recuperado el 19 de febrero de
2014, de http://www.nema.org/About/pages/default.aspx
[50] Controller (2013, 5 de octubre). WhatIs.com, [en lnea]. Kansas, Estados Unidos de Amrica:
WhatIs.com. Recuperado el 20 de febrero de 2014, de http://whatis.techtarget.com/
definition/controller
[51] Cogging (2013). Super Glossary, [en lnea]. Arizona, Estados Unidos de Amrica: Su-
per Glossary. Recuperado el 19 de febrero de 2014, de http://es.superglossary.com/
Glosario/Tecnolog%C3%ADa/Motors/Cogging.html
[52] Miller, J. (2010, 1 de octubre). Finding the Index Pulse of an Incremental Encoder,
[en lnea]. Wisconsin, Estados Unidos de Amrica: Quantum Devices, Inc. Recupera-
http://quantumdevices.wordpress.com/2010/10/01/
do el 19 de febrero de 2014, de
finding-the-index-pulse-of-an-incremental-encoder/
[53] Galil Motion Control, Inc. (2014, enero). DMC-40x0 User Manual. Rev. 1.0n, [en lnea].
California, Estados Unidos de Amrica: Autor. Recuperado el 20 de febrero de 2014, de
http://www.galilmc.com/support/manuals.php
[54] Galil Motion Control, Inc. (2011, 11 de noviembre). DMC-40x0 Firmware Command Refer-
ence, [en lnea]. California, Estados Unidos de Amrica: Autor. Recuperado el 21 de febrero
de 2014, de http://www.galilmc.com/support/manuals.php
BIBLIOGRAFA 105