Implementación de Robótica en La Nube
Implementación de Robótica en La Nube
Implementación de Robótica en La Nube
TESIS
Presenta
Tutor Académico:
Dr. José Martín Flores Albino
Tutores Adjuntos:
Dr. Víctor Manuel Landassuri Moreno
Dr. Saul Lazcano Salas
En este trabajo se mencionan algunas de las plataformas para desarrollo de sistemas robóticos
y se resaltan sus principales características. Entre ellas destaca ROS (Robot Operating
System), el cual tiene una gran aceptación por parte de la industria, investigadores y
entusiastas alrededor del mundo debido a su filosofía de no reinventar la rueda y reutilizar el
código. Por estas razones se hace uso de ROS para el funcionamiento de los robots utilizados
en este proyecto.
Por otra parte, se ensamblan dos robots, uno de armado propio y otro de distribución
comercial (Turtlebot 3 Burger), para llevar a cabo el sistema de interacción entre ellos. El
robot propio será de características limitadas y se construirá con base en componentes
comerciales, es decir, solo tendrá capacidades básicas para desplazarse y evitar colisiones,
mientras que el robot de experimentación comercial posee una mayor capacidad de sensores
entre los cuales destaca un sensor laser para medir distancias a su alrededor y con el cual se
generará y compartirá información para que el otro robot haga uso de ella.
The current research in Cloud robotics aims to provide robots with the benefits of the cloud
so their functions and performance are leveraged. Cloud robotics can be described as a social
network where robots can share, store and process information that can be "learned" to
perform new tasks according to their design and features.
Cloud robotics is a project in the development stage due to the lack of standards in robotic
development systems. Fortunately, different robot software development platforms on
Internet aim to become standard for robotics.
In this work some platforms for robotic development systems are summarized and their main
characteristics are highlighted. Among them, ROS (Robot Operating System) stands out
since it has great acceptance by the industry, researchers and enthusiasts around the world
due to its philosophy of not reinventing the wheel and reusing code. For these reasons, ROS
was used to control this project robots.
On the other hand, two robots were used to create the interaction system; one robot was
designed and manufactured by our research group and the other one was a commercial robot
(Turtlebot 3 Burger). Our robot was built using commercial components and its functions
were limited to move and avoid collisions; whilst, the commercial robot had a larger number
of features and sensors. The most important feature, in the commercial robot, was the laser
sensor to measure distances around it and generate the information that was shared and used
by our robot.
The interaction system consists on using the commercial robot to scan a controlled
environment and use this information to build a map that allows the creation of trajectories.
Subsequently, the route will be share to our robot and it will safely move in the scanned area
achieving a task that it cannot do by itself.
Antecedentes......................................................................................................... 1
Delimitación ......................................................................................................... 3
Objetivos............................................................................................................... 4
Hipótesis ............................................................................................................... 5
Justificación .......................................................................................................... 5
Metodología .......................................................................................................... 6
i
Arquitectura................................................................................................. 23
ii
Seguimiento de trayectorias ............................................................................... 61
Referencias ....................................................................................................................... 98
iii
Índice de figuras
Figura 2.1: Robot móvil con referencia global y referencia local. Tomada de (Siegwart,
Nourbakhsh, & Scaramuzza, 2011) ...................................................................................... 11
Figura 2.2: Robot móvil alineado con los ejes globales. Tomada de (Siegwart, Nourbakhsh,
& Scaramuzza, 2011) ............................................................................................................ 13
Figura 2.3: Diagrama de red robot-to-robot.......................................................................... 22
Figura 2.4: Diagrama de red robot-to-cloud. ........................................................................ 22
Figura 2.5: Estructura de un repositorio en ROS. ................................................................. 25
Figura 2.6: Estructuras y esquemas de conceptos. Se describen gráficamente algunos
conceptos de ROS. a) Representa un servicio. b) Ilustra la estructura de un Nodo. c) Se
muestran las partes que componen un paquete. d) Esquema de mensajes y temas. ............. 26
Figura 2.7: Estructura de comunicación entre nodos. ........................................................... 26
Figura 3.1: Diagrama de etapas de desarrollo del robot móvil…………………..………...29
Figura 3.2: Versión 1 del robot de elaboración propia. ........................................................ 30
Figura 3.3: Versión 2 del robot de elaboración propia. ........................................................ 31
Figura 3.4: Diagrama de flujo del primer sketch de Arduino. .............................................. 33
Figura 3.5: Robot de elaboración propia ejecutando ROS sobre Ubuntu Mate. .................. 35
Figura 3.6: Emulador 3D Gazebo. ........................................................................................ 36
Figura 3.7: Diagrama de flujo del primer sketch de Arduino para ROS. ............................. 38
Figura 3.8: Versión final del robot de elaboración propia. ................................................... 39
Figura 3.9: Turtlebot 3 Burger. ............................................................................................. 40
Figura 3.10: Lista de Partes del Turtlebot 3 Burger. ............................................................ 41
Figura 3.11: Mapa generado con Turtlebot 3 en las oficinas del Edificio F del CU UAEM
VM. ....................................................................................................................................... 43
Figura 3.12: Diagrama de nodos y tópicos para generar un mapa con Turtlebot 3. ............. 44
Figura 4.1: Diagrama de comunicación entre los robots, el máster y la nube………………45
Figura 4.2: Grafica de datos obtenidos del Turtlebot 3 para avance del robot. .................... 49
Figura 4.3: Grafica de datos obtenidos del Turtlebot 3 para giro del robot. ......................... 50
Figura 4.4: Generación de trayectoria en la computadora “máster” con la herramienta rviz
con el algoritmo DWA. ......................................................................................................... 52
iv
Figura 4.5: Diagrama de flujo del segundo sketch de Arduino para ROS............................ 54
Figura 4.6: Calibración lineal de los robots. Secuencia 1 de 4. ............................................ 56
Figura 4.7: Calibración lineal de los robots. Secuencia 2 de 4. ............................................ 57
Figura 4.8: Calibración lineal de los robots. Secuencia 3 de 4. ............................................ 58
Figura 4.9: Calibración lineal de los robots. Secuencia 4 de 4. ............................................ 58
Figura 4.10: Calibración rotacional de los robots. Secuencia 1 de 4. ................................... 59
Figura 4.11: Calibración rotacional de los robots. Secuencia 2 de 4. ................................... 60
Figura 4.12: Calibración rotacional de los robots. Secuencia 3 de 4. ................................... 60
Figura 4.13: Calibración rotacional de los robots. Secuencia 4 de 4. ................................... 61
Figura 4.14: Mapas de los escenarios de pruebas de trayectorias. ....................................... 62
Figura 4.15: Diagrama de nodos y tópicos para seguimiento de trayectoria en Turtlebot 3.63
Figura 4.16: Diagrama de nodos y tópicos para seguimiento de trayectoria en robot propio.
.............................................................................................................................................. 64
Figura 4.17: Ejecución de trayectoria en el escenario 1 de ambos robots. Secuencia 1 de 5.
.............................................................................................................................................. 65
Figura 4.18: Ejecución de trayectoria en el escenario 1 de ambos robots. Secuencia 2 de 5.
.............................................................................................................................................. 66
Figura 4.19: Ejecución de trayectoria en el escenario 1 de ambos robots. Secuencia 3 de 5.
.............................................................................................................................................. 67
Figura 4.20: Ejecución de trayectoria en el escenario 1 de ambos robots. Secuencia 4 de 5.
.............................................................................................................................................. 68
Figura 4.21: Ejecución de trayectoria en el escenario 1 de ambos robots. Secuencia 5 de 5.
.............................................................................................................................................. 69
Figura 4.22: Ejecución de trayectoria en el escenario 2 de ambos robots. Secuencia 1 de 5.
.............................................................................................................................................. 71
Figura 4.23: Ejecución de trayectoria en el escenario 2 de ambos robots. Secuencia 2 de 5.
.............................................................................................................................................. 72
Figura 4.24: Ejecución de trayectoria en el escenario 2 de ambos robots. Secuencia 3 de 5.
.............................................................................................................................................. 73
Figura 4.25: Ejecución de trayectoria en el escenario 2 de ambos robots. Secuencia 4 de 5.
.............................................................................................................................................. 74
v
Figura 4.26: Ejecución de trayectoria en el escenario 2 de ambos robots. Secuencia 5 de 5.
.............................................................................................................................................. 75
vi
Índice de tablas
Tabla 2.1: Comparación entre distintas plataformas de software para el desarrollo de sistemas
robóticos, destacando sus principales características. .......................................................... 19
vii
Lista de acrónimos
BFL Por sus siglas en inglés Bayesian Filtering Library.
CU Centro Universitario.
DARPA Por sus siglas en inglés Defense Advance Research Project Agency.
EEROS Por sus siglas en inglés Easy, Elegant, Reliable, Open and Safe.
GB Gigabyte.
KB Kilobyte.
viii
LDS Por sus siglas en inglés Laser Distance Sensor.
LiDAR Por sus siglas en inglés Laser Imaging Detection and Ranging.
OpenCV Por sus siglas en inglés Open Source Computer Vision Library.
Orocos Por sus siglas en inglés Open Robot Control Software u Open Real-time
Control Services.
PWM Modulación por Ancho de Pulsos (Del inglés Pulse Width Modulation).
SO Sistema operativo.
ix
TCP Por sus siglas en inglés Transmission Control Protocol.
VM Valle de México.
x
Capítulo 1: Introduccion
Antecedentes
La robótica es un campo de investigación tecnológica que ha tenido grandes avances en
la última década, sin embargo, para que los robots realicen tareas complejas requieren de
costosos recursos, esto se debe a que demandan capacidades de procesamiento de alta
complejidad para que trabajen autónomamente. Al igual que las personas usan las redes de
comunicación para compartir recursos, la llamada robótica en la nube (Cloud Robotics)
permitiría que los robots hicieran uso de dichos recursos alojados en la nube, interactuando
a través de la misma y creando una base de conocimiento que podrán compartir.
El Instituto Nacional de Estándares y Tecnología (NIST) (Mell & Grance, 2011) define
Cloud Computing como: "un modelo que permite el acceso a la red bajo demanda y con
ubicuidad práctica para compartir recursos configurables (por ejemplo: servidores,
almacenamiento, redes, aplicaciones y servicios) que pueden ser rápidamente accesibles y
1
suministrados y liberados con mínimo esfuerzo de gestión o interacción del proveedor de
servicios".
Si de una forma semejante a las redes sociales se construye una red de servicios
disponibles para los robots, estos podrían comunicarse, coordinarse, informarse, transmitir y
recibir información que trabajando como una unidad autónoma no se podría tener.
Por lo tanto, si han sido muy importantes los recursos en la nube para las personas en la
actualidad ¿Cómo se verían beneficiados los robots con un concepto similar?
En 2010, James Kuffner propuso el término Cloud Robotics y mencionó varias ventajas y
potenciales beneficios de este nuevo campo (Kuffner, 2010). Los principales beneficios de
robótica en la nube son disminuir el costo de fabricación de los robots y permitir que operen
de manera autónoma pero coordinada. Actualmente un robot requiere de muchos sensores
para realizar una tarea específica y autónoma, esto lo hace poco accesible a las personas o
empresas, ya que deberían desembolsar cantidades importantes de dinero por un robot muy
especializado, que frecuentemente solo puede desempeñar una tarea correctamente.
Antes de que el concepto de Cloud Robotics sea lo que hoy se entiende, se había propuesto
una arquitectura de interacción entre robots, (Kumar, Rus, & Sukhatme, 2008) Networked
Robotics. Se conceptualizaba como una interacción entre varios robots funcionando juntos y
en coordinación, o de manera cooperativa con sensores, computadoras embebidas y usuarios
humanos. Permitiendo además que múltiples robots y entidades auxiliares lleven a cabo
tareas que rebasan los recursos de un solo robot.
La robótica en la nube tiene como principal objetivo crear un Internet para robots, es decir,
una gran base de datos de información y aplicaciones para consulta mediante una conexión
a Internet, logrando así adquirir habilidades que permitan al robot realizar tareas nuevas de
manera correcta y coordinada.
2
permitiría transmitir capacidades entre robots de diferente complejidad con la meta de hacer
más accesible la robótica. En este proyecto se hará uso de una plataforma de intercambio de
información entre dos robots: un sistema robótico de bajo costo que mediante un sistema de
comunicación basado en el protocolo de Internet sea capaz de aprovechar el modelo del
ambiente generado por un robot de mayor capacidad y utilizar un algoritmo para seguir
trayectorias en entornos controlados.
Dicha plataforma permitiría que, a través de servicios disponibles en Internet para robots,
estos puedan potencializar sus capacidades a través del intercambio de información y
recursos entre ellos. La robótica en la nube hecha realidad podría hacer que los robots fueran
tan comunes como los teléfonos celulares de ahora.
Delimitación
Para el desarrollo de este trabajo, se hará uso de un robot móvil de armado propio, apoyado
de una computadora para procesamiento de información y un micro controlador para dar la
capacidad de tener sensores de seguridad y evitar colisiones. Además de un robot comercial
(Turtlebot 3 Burger), equipado con sensores y actuadores, entre los que destaca un sensor
tipo Lidar (del inglés Laser Imaging Detection and Ranging), para generar mapas de su
entorno en 2D. En este proyecto no se busca ni manipular objetos ni alterar el entorno, el
robot será un observador con el objetivo de aprender de su ambiente para así lograr trazar
rutas evadiendo obstáculos.
Capacidad del robot de ensamble propio: el robot armado para este trabajo
tendrá capacidades básicas de locomoción y contará con un sensor ultrasónico para
evitar colisiones.
3
Hardware y software del robot de ensamble propio: en cuanto a hardware se
hará uso de una Raspberry Pi 3, Arduino, dos motorreductores, un sensor de
distancia, una rueda libre y un chasis de acrílico como base de ensamble. En
relación al software, se instalará el SO Ubuntu Mate y ROS (Robot Operating
System) en su versión Kinetic Kame.
La precisión en el seguimiento de la trayectoria: este concepto requiere de
aumentar las capacidades del robot de armado propio, en esta etapa se destaca la
economía de recursos para la construcción del robot, limitando sus capacidades
naturales. Si se quiere aumentar la precisión bastará con aumentar la tecnología de
motores, pues la información será la misma en todo caso. Por lo anterior, no se
considera evaluar la precisión del seguimiento de la trayectoria.
Por lo que en este proyecto se busca ilustrar como la plataforma de comunicación entre
robots permitiría aprovechar las capacidades entre los mismos.
Objetivos
Objetivo general
Hacer uso de una plataforma robótica que muestre el concepto de robótica en la nube. La
plataforma consistirá en dos robots que se comunicarán para seguir una trayectoria con base
en un mapeo de un entorno controlado. Uno de ellos tendrá capacidades de censado a través
de un sensor Lidar, mientras que el otro robot tendrá capacidades básicas de movimiento.
Objetivos específicos
4
Uso de herramientas basadas en ROS para la generación de trayectorias y evasión
de obstáculos.
Comunicación y transferencia de la trayectoria al robot de armado propio.
Hipótesis
La robótica en la nube otorgaría la capacidad de compartir información entre robots al
contar con servicios accesibles automáticamente. Se propone que a través de una plataforma
se muestre el beneficio del intercambio de datos para la realización de tareas.
La construcción de robots con bajo costo, es decir, sin la necesidad de contar con
un gran número de sensores y actuadores complejos, así como tarjetas de control
o computadoras a bordo, sino únicamente los necesarios para su funcionamiento
de manera correcta y segura.
A robots de bajo costo, desempeñar nuevas tareas e incluso aprender otras
aprovechando los beneficios que ofrece la infraestructura de robótica en la nube,
como pueden ser consulta, almacenamiento, descarga y/o procesamiento de
información.
Justificación
Los robots son cada vez más comunes en la vida de las personas, hasta hace no mucho
tiempo se consideraban solo disponibles para actividades complejas y costosas. Por ejemplo,
soldar, transportar, pintar, cortar, por mencionar algunas, pero recientemente con la mejora
de dispositivos de procesamiento (microprocesadores, microcontroladores, FPGA, etc.) y
dispositivos electromecánicos “MEMS” (Micro Electro Mechanical Systems), los robots
comienzan a estar presentes en diversas actividades humanas. Desafortunadamente los robots
todavía no son accesibles para todo el mundo, debido a su alto costo. Los robots requieren
de hardware y software especial para realizar una tarea determinada, lo que los limita en
funcionamiento y esta es otra razón para que los robots no se hayan convertido en la principal
5
opción para realizar diversas actividades. Otra dificultad en robótica es la falta de estándares
que permitan unificar su control y manejo de información.
Además, brinda la capacidad de permitir a los robots comunicarse entre sí, permitiendo
intercambiar, subir y descargar conocimientos. Esto significa que si un robot necesita realizar
una tarea que desconoce, puede descargar las instrucciones para llevar a cabo dicha labor,
además de tener la posibilidad de pedir ayuda en caso de no contar con los recursos de
hardware o software necesarios para ejecutar una acción.
Una de las principales ventajas que ofrece la robótica en la nube, es la de disminuir costos
en la fabricación de robots por lo que no será necesario que dispongan de grandes capacidades
de procesamiento, memoria o sensores para su desempeño, la comunicación con la nube
permitirá a los robots poder realizar más de una labor.
Metodología
Para el desarrollo del proyecto se plantea lo siguiente:
Recursos disponibles de robótica en la nube. Estudio y comprensión del tema de
robótica en la nube (Cloud robotics).
6
Establecer especificaciones del sistema de robótica en la nube. Se analiza y
comprende el funcionamiento de robótica en la nube, características de hardware y
software que le permiten a estas plataformas brindar su servicio.
Elección de hardware. Con base en la información obtenida y las pruebas que se
realicen con el software de robótica en la nube se podrá tener una idea clara de las
especificaciones técnicas de hardware necesario.
Desarrollo del hardware y software del proyecto. Con todos los datos recopilados
hasta este punto será posible realizar el ensamble de los robots para su funcionamiento
y comunicación con la nube, haciendo uso de ROS como base de comunicación. Para
el caso del robot comercial, se realizará el ensamble y conexión de chasis, sensores y
actuadores. El robot de armado propio se ensamblará por etapas para lograr una
correcta locomoción del mismo.
Calibración y pruebas. Mediante un robot de experimentación comercial
(Turtlebot3 Burger), se recopilará información de un entorno controlado mediante sus
sensores y actuadores. Después se construirá un mapa del entorno a partir de los datos
obtenidos y posteriormente se trazarán trayectorias para compartirse hacia el robot de
armado propio. El robot propio será capaz de transitar en el entorno censado por el
Turtlebot 3 de manera segura.
7
“Robot Operating System en un Ambiente Virtual” y “ROS: Robot Operating System para
la Implementación de un Robot Móvil”, presentados en Coloquios del Centro Universitario
UAEM Valle de México durante 2017.
Organización de la tesis
La organización de la tesis es la siguiente:
En el capítulo 2 se darán los antecedentes de la robótica móvil, así como una clasificación
de la misma de acuerdo con la generación a la que pertenecen. Se mencionarán algunas
plataformas disponibles en Internet para el desarrollo de software para robótica, resaltando
sus principales características mediante una tabla. En este capítulo también se describe la
robótica en la nube y sus principales características. Finalmente, se describirá el Sistema
Operativo Robot (ROS), el cual es utilizado en ambos robots del proyecto de esta tesis.
El capítulo 3 presentará la forma en que se elaboró el robot móvil propio, así como las
características, ensamble y puesta en marcha del robot comercial.
Las conclusiones se presentarán en el capítulo 5, así como también las líneas o trabajos de
investigación a futuro.
8
Capítulo 2: Conceptos fundamentales
de robotica movil
Robótica móvil
Un robot es cualquier máquina de accionamiento automático que sustituye el trabajo
humano y puede o no realizar sus funciones de forma semejante a la humana, en general, la
robótica es la disciplina de la ingeniería que se ocupa del diseño, construcción y operación
de robots (Hu, Tay, & Wen, 2012). Los robots son una realidad y existen principalmente en
la industria de manufactura para realizar tareas difíciles, repetitivas y peligrosas, como son:
pintar, cortar y soldar, por mencionar sólo algunas. Hay tareas complejas, como aquellas que
requieren la intervención directa del ser humano, se busca que los robots igualen o superen
las capacidades de las personas y por lo tanto que sean completamente autónomos.
Existen diversas maneras de clasificar a los robots, puede ser de acuerdo a su generación
o a su inteligencia y posteriormente a su mecánica de funcionamiento o también por la tarea
que se encomienda al robot.
De acuerdo con (Tapia García & López Hernández, 2017), la clasificación por generación
es:
2.- Robots controlados por sensores: Ejecutan movimientos con base en información
obtenida a través de sus sensores.
3.- Robots controlados por visión: Interactúan con el entorno basándose en información
obtenida por visión artificial.
5.- Robots con inteligencia artificial: Utilizan métodos de inteligencia artificial para
resolución de problemas y toma de decisiones.
9
6.-Los robots médicos: Principalmente prótesis y robots tele-operados.
8.- Los robots móviles: Cuentan con patas, ruedas u orugas que les brindan capacidad de
locomoción. Tienen la capacidad de utilizar la información captada por sus sensores en
tiempo real y se ocupan principalmente en la industria. También se utilizan robots de este
tipo para actividades de vigilancia, agricultura, militares, exploración y/o investigación
(terrestre, subterránea, marina, submarina, aérea y espacial), entre otras.
Los robots móviles no son los más complejos sistemas mecánicos dentro de la robótica,
existen otros con mayor dificultad de acción, por ejemplo, un brazo robótico que manipula
objetos tiene más de un eje de movimiento, en comparación con un robot móvil que solo
posee dos.
Es importante conocer el entorno del robot ya que de este depende el movimiento que
pueda realizar, los caminos que pueda seguir y la manera de posicionarse dentro de su
ambiente.
10
En la Figura 2.1 se representa la relación entre una referencia global y una referencia local
del robot. Donde la referencia global se da por {XI, YI} mientras la referencia local se
especifica a partir de un punto P el cual se establece en el chasis del robot y desde este punto
se definen los ejes {XR, YR}.
Figura 2.1: Robot móvil con referencia global y referencia local. Tomada de (Siegwart, Nourbakhsh, &
Scaramuzza, 2011)
𝑋
𝜉𝐼 = [𝑌 ] (2.1)
𝜃
11
cos 𝜃 sin 𝜃 0
𝑅(𝜃) = [ −sin 𝜃 cos 𝜃 0] (2.2)
0 0 1
Esta matriz se puede utilizar para dibujar el movimiento en la referencia global {XI, YI} al
movimiento en términos de la referencia local {XR, YR}. Esta operación se denota por (𝜃)𝜉𝐼̇
porque el cálculo de esta operación depende del valor de θ:
𝜋
𝜉𝑅̇ = 𝑅 ( 2 ) 𝜉𝐼̇ (2.3)
En la Figura 2.2 donde el robot se encuentra alineado en los ejes globales y locales, es
𝜋
fácil calcular la matriz de rotación ya que 𝜃 = 2
𝜋
0 1 0
𝑅 ( 2 ) = [−1 0 0] (2.4)
0 0 1
Dada cierta velocidad (𝑥,̇ 𝑦,̇ 𝜃̇ ) en la referencia global, se pueden calcular los
componentes de movimiento a lo largo de los ejes locales del robot XR y YR. En este caso
debido al ángulo del robot, el movimiento a lo largo de XR es igual a 𝑦̇ mientras el movimiento
a lo largo de YR es -𝑥̇ , por lo tanto:
𝜋
0 1 0 𝑥̇ 𝑦̇
𝜉𝑅̇ = 𝑅 (2 ) 𝜉𝐼̇ = [ −1 0 0] [𝑦̇ ] = [−𝑥̇ ] (2.5)
0 0 1 𝜃̇ 𝜃̇
Con base en estas ecuaciones es posible comprender la cinemática de un robot móvil y así
poder planificar el control del mismo a nivel software.
12
Figura 2.2: Robot móvil alineado con los ejes globales. Tomada de (Siegwart, Nourbakhsh, &
Scaramuzza, 2011)
13
System), el cual es una plataforma de desarrollo de software que provee una serie de ejemplos
y librerías que simplifican la creación de aplicaciones para robots con características de
hardware diferentes (Bravo Sánchez & Forero Guzmán, 2012), de esta forma se pueden
reutilizar códigos que están probados y que se encuentran disponibles para su consulta y
descarga, alcanzando más rápidamente los objetivos del trabajo, ganando tiempo para
enfocarse en mejorar las aplicaciones de robótica.
Una de las ventajas que ofrecen las plataformas de software para el desarrollo de sistemas
robóticos, es la de poder almacenar y compartir las investigaciones (proyectos de robótica)
llevados a cabo por instituciones públicas y privadas, así como por investigadores,
estudiantes y aficionados. Esto permite que muchos trabajos puedan ser retomados por
alguien más y no se pierdan los avances generados, sin importar si el propósito del proyecto
es de investigación, comercial o lúdico. En las plataformas de uso libre, incluso es posible
contribuir a mejorar el proyecto mismo. Por ejemplo, si se encuentra un error en el código se
hace una copia o clonación del sistema (fork en inglés), y una vez mejorado se envía a los
administradores para su evaluación (pull request en inglés), en caso de hacer una mejora
importante y significativa al sistema, se agregan los cambios generados a la versión más
reciente de la plataforma de software.
Distintos proyectos alrededor del mundo se están desarrollando, todos ellos con diferentes
características como son lenguajes de programación, propósitos (reconocimiento de voz,
14
robots móviles, agarre de objetos, mapeo, etc.) o compatibilidad (hardware, sistemas
operativos, aplicaciones), a continuación, se describen varios de ellos.
ARTOO. Es un framework para robótica, drones e Internet de las cosas (IoT). Proporciona
un Lenguaje de Dominio Específico (DSL por sus siglas en inglés) simple pero potente para
robots. ARTOO está basado en SINATRA (Mizerany, s.f.), el cual es un DSL para la rápida
creación de aplicaciones web con un mínimo esfuerzo, mediante el lenguaje de programación
Ruby e incluso toma código prestado de SINATRA. Artoo se encuentra disponible en inglés,
fue lanzado en “Los Ángeles Ruby Conference 2013”, es una infraestructura de software para
robots de código abierto que trabaja con el lenguaje de programación RUBY. Trabaja con
los sistemas operativos Linux, Windows y Mac OS X. Ofrece la posibilidad de conectar
varios dispositivos de hardware de manera sencilla (por ejemplo: ARDrone, Raspberry Pi,
joystick, teclado, Arduino, motores, servomotores, ledes, sensores análogos, entre otros)
(The Hybrid Group, 2014).
EEROS. (Easy, Elegant, Reliable, Open and Safe) Es una infraestructura de código
abierto para desarrollo de software para robots, opera bajo el sistema operativo Linux y con
el lenguaje de programación C++. Se desarrolla por NTB Universidad de Tecnología en
Suiza desde el año 2012. EEROS consta de tres sistemas conectados, el Sistema de Control,
el Secuenciador y el Sistema de Seguridad, los cuales trabajan juntos para desarrollar
rápidamente el nuevo software de robótica y minimizar errores potencialmente peligrosos.
EEROS se encuentra aún en desarrollo, sin embargo, ha tenido buenos resultados en sus
versiones prototipo, está disponible en inglés (Rüf Stiftung, 2014).
15
Microsoft Robotics Developer Studio. (MRDS). Es un Proyecto de Microsoft que inició
en 2006, ofrece un entorno de simulación 3D basado en el motor de simulación física AGEIA
PhysX, un lenguaje de programación visual y soporte en tiempo de ejecución. Opera bajo el
sistema operativo Windows 7 y su uso es libre y de código abierto. Está desarrollado sobre
el entorno .NET y soporta lenguajes de programación como VB.NET, Python, Visual Basic,
VPL o C#. Disponible en inglés (Microsoft, 2017) (Alcalá Tomás, Celorio Aponte, &
Montoya Álvarez, 2013).
MOOS. Por sus siglas en inglés Mission Oriented Operating Suite, es una plataforma
construida en C++ para investigación en robótica, se comenzó en 2001 y su creador es Paul
Newman del Departamento de Ingeniería Oceanográfica del Instituto de Tecnología de
Massachusetts. MOOS se define como un conjunto de capas que se comunican entre sí y que
en conjunto crean aplicaciones robustas. La última versión es llamada MOOS v10, la cual
opera en los sistemas operativos Linux y Mac OS X (Newman P. , s.f.) (Newman P. M.,
2008). Es compatible con los lenguajes de programación Matlab y Java, está disponible en
idioma inglés.
16
OpenCV. (Open Source Computer Vision Library). Es una librería de código abierto
creada por Intel en el año 1999, está orientada a la visión artificial y aprendizaje de máquinas.
Opera bajo los sistemas operativos Linux, Mac, Windows y Android. Soporta los lenguajes
de programación Python, Java, C/C++ y MATLAB. Cuenta con tutoriales en inglés, español
y japonés (OpenCV team, 2017).
17
cualquier lenguaje que admita sockets TCP. Disponible en inglés (Gerkey, Vaughan, &
Howard, 2014).
ROCK. (The Robot Construction Kit) Es una plataforma para desarrollo de sistemas
robóticos de código abierto, basado en RTT de Orocos. Proporciona todas las herramientas
necesarias para configuración y ejecución de sistemas robóticos. Inicialmente se desarrolló
en el DFKI Centro de Innovación Robótica y su principal colaborador es la Universidad
Católica Leuven. Trabaja con sistema operativo Linux (Ubuntu y Debian) y está disponible
en inglés. Es compatible con los lenguajes de programación C++ y Ruby (Center, s.f.).
ROS (Robot Operating System) es una infraestructura para el desarrollo de software para
robots, provee una serie de ejemplos, librerías, herramientas y convenciones que simplifican
la creación de aplicaciones para robots con características de hardware diferentes. La
filosofía de ROS es hacer software que pueda ser reutilizado en otros robots, es decir, lograr
que el código que se crea para un robot, pueda ser compartido y utilizado en otros robots para
así ahorrar tiempo y esfuerzo en el desarrollo de aplicaciones. ROS está bajo la licencia open
source. Se encuentra disponible en inglés, alemán, francés, italiano, japonés, coreano,
portugués, chino simplificado y español. ROS surgió originalmente en el año 2007 bajo el
nombre de “switchyard”, fue desarrollado por el Laboratorio de Inteligencia Artificial de
Stanford. A partir del año 2008 el desarrollo del proyecto se lleva a cabo en el Instituto de
Investigación de Robótica Willow Garage, en California, Estados Unidos (Willow Garage,
s.f.). ROS opera con el sistema operativo Linux y soporta los lenguajes de programación C,
C++, Python y Java, este último aún en fase experimental.
Tabla comparativa
18
Tabla 2.1: Comparación entre distintas plataformas de software para el desarrollo de sistemas robóticos,
destacando sus principales características
19
Plataforma Tipo de SO con que Lenguajes de Idiomas Servicios que ofrece.
de desarrollo licencia. trabaja. programación soportados.
soportados.
Además cuatro librerías
para C++.
Player Open Linux, C++, Tcl, Java, Inglés. Paquetes de software
Source Solaris, BSD Python y “Stage” y “Gazebo” los
y Mac OSX cualquier cuales son simuladores 2D
(Darwin). lenguaje que y 3D respectivamente.
admita sockets Compatibilidad con robots
TCP. y hardware comercial.
ROCK Open Linux. C++ y Ruby. Inglés. Plataforma para desarrollo
Source de sistemas robóticos con
todas la herramientas
necesarias para
configuración y ejecución
de los mismos.
ROS Open Linux y Mac C, C++, Python. Inglés, Infraestructura para
Source OS X. Java aún en alemán, desarrollo de software para
Windows modo francés, robots, repositorios,
con algunos experimental. italiano, localización y mapeo
errores. japonés, simultaneo, simulación 2D
coreano, y 3D, identificación de
portugués, objetos, robots móviles,
chino control, planificación de
simplificado rutas, agarre de objetos,
y español. visión artificial y
reconocimiento facial y de
gestos. Gran
compatibilidad con
hardware.
Dada la información anterior se puede resumir que todas las plataformas de software para
desarrollo de sistemas robóticos mencionadas ofrecen open source. El sistema operativo que
predomina es Linux, con excepción de MRDS el cual trabaja con Windows, los sistemas
operativos Mac y Android también figuran como una opción para algunas plataformas. La
diversidad en lenguajes de programación es amplia, pero los más utilizados son C++, Python
y Java. El idioma que aparece disponible para todas las plataformas es el inglés y en muchos
casos es el único idioma soportado. Es importante analizar los objetivos que se persiguen al
desarrollar un proyecto para poder hacer una correcta elección de la plataforma de desarrollo
de software, además de evaluar los conocimientos del desarrollador en cuanto a lenguajes de
programación, sistema operativo e idioma.
20
Robótica en la nube
Debido a su alto costo de desarrollo e implementación, los robots no han logrado colocarse
como un producto comercial y al alcance de todos. La creación de un robot requiere de diseño
de hardware complejo, así como de capacidad de almacenamiento, sensores, motores y
demás componentes electrónicos que le permiten al robot desarrollar una tarea, además del
software para controlar dichas actividades y que el robot las realice con eficiencia.
Decir “la nube” es referirse de manera metafórica al Internet o a los servicios que brinda
la red de redes, como puede ser el correo electrónico, almacenamiento de archivos o
información como los servicios de Dropbox, One Drive, Google Drive o Box, entre otros,
aplicaciones como las redes sociales o incluso servicios para jugar en tiempo real, donde
mediante una conexión de banda ancha se puede disfrutar al máximo de un video juego, sin
necesidad de contar con un hardware poderoso por parte del usuario, todo esto de manera
gratuita y permitiendo ahorros importantes.
Robótica en la nube tiene como objetivo utilizar esta infraestructura disponible en Internet,
pero orientada a los robots, es decir, crear sitios web donde los robots puedan hacer uso de
hardware remoto, almacenar, consultar y descargar información para realizar sus tareas y
poder “aprender” nuevas funciones.
Robótica en la nube tiene dos niveles de arquitectura como se menciona en (Hu, Tay, &
Wen, 2012):
R2R (Robot-to-Robot)
Es una red local para un grupo de robots (Figura 2.3). Esta arquitectura, también conocida
como Networked Robotics, tiene como su principal función el proporcionar un medio para
compartir información entre robots dentro de una red de comunicación privada.
21
Robot-to-Robot (R2R).
R2C (Robot-to-Cloud)
Robot-to-Cloud (R2C).
22
mediante el uso de navegadores de Internet o una conexión remota, sin la necesidad de hacer
una instalación en el dispositivo del usuario final.
• RaaS (Robot as a Service). Se refiere a los robots que pueden ser dinámicamente
coordinados para la ejecución de tareas específicas. RaaS tiene tres aspectos de sistema:
estructura, interfaz y comportamiento. Puede haber varios tipos de unidades de nube, robots
o dispositivos inteligentes, por ejemplo: robots de vigilancia, de servidumbre, de compañía
y atención a pacientes. Estos robots se encuentran distribuidos en diferentes lugares y
pueden ingresar a la plataforma de robótica en la nube (Koken, 2015).
Arquitectura
Existen tres niveles de conceptos en ROS: nivel del sistema de archivos, nivel de
computación gráfica y el nivel de comunidad, se toma de (Willow Garage, s.f.) (García
Cazorla , 2013) y (Labrador Fleitas, 2014) los siguientes elementos.
23
El nivel de Sistema de archivos se refiere a los recursos del programa:
• Paquetes, (Figura 2.6 inciso c), son la unidad principal de organización en ROS y
pueden contener procesos ejecutables (nodos en ROS), una biblioteca dependiente, conjunto
de datos, archivos de configuración o cualquier otra cosa que sea útil para una organización
conjunta.
• Pilas, (Figura 2.5), son un conjunto de paquetes que comparten una misma
funcionalidad, son equivalentes a las librerías en otros lenguajes de programación.
• Manifiestos de pilas, los cuales proporcionan datos sobre una pila, incluyendo su
información de licencia y sus dependencias en otras pilas.
• Mensajes, (Figura 2.6 inciso d), definen las estructuras de datos para los mensajes
enviados en ROS, dado que los nodos se comunican mediante mensajes.
El nivel de computación a nivel gráfico es la red ROS que se encarga de procesar todos
los datos:
• Nodos, (Figura 2.6 inciso b y Figura 2.7), a son programas, que realizan funciones
como puede ser publicar mensajes o hacer cualquier procesamiento. Son procesos que llevan
a cabo cálculos. Por ejemplo, un nodo controla un sensor o un nodo calcula la velocidad de
un motor.
24
• Temas, (Figura 2.6 inciso d), también llamados tópicos son los nombres que
identifican el contenido de un mensaje y pueden ser publicador o suscriptor. Se puede pensar
en un tema como un Bus de mensajes, donde cada Bus tiene un nombre y cualquier nodo
puede conectarse al Bus para enviar o recibir Mensajes.
En el nivel de comunidad:
• Distribución, son las distintas versiones de ROS que se pueden instalar. Es similar a
las versiones de Linux, por ejemplo, Ubuntu. La última versión es ROS Melodic Morenia.
• Wiki de ROS, se trata de un foro donde los usuarios pueden crear contenido y
compartir información sobre ROS, cualquier persona puede contribuir al foro mediante un
registro en el sitio web.
25
Figura 2.6: Estructuras y esquemas de conceptos. Se describen gráficamente algunos conceptos de ROS.
a) Representa un servicio. b) Ilustra la estructura de un Nodo. c) Se muestran las partes que componen un
paquete. d) Esquema de mensajes y temas
Existe un tipo de archivo llamado BAG, (nombrado así por su extensión “.bag”), el cual
permite almacenar información de uno o varios temas para después poder consultar, procesar,
analizar o visualizar los datos capturados.
26
La cantidad de usuarios de ROS está creciendo rápidamente, esto se debe a las ventajas
que ofrece este SO tales como: ser un software libre, la gran compatibilidad con hardware
(actuadores, sensores, cámaras, Arduino, Raspberry, entre otros), la reutilización del código,
simuladores 3D, soporte multilenguaje (C, C++, Phyton o JAVA en modo experimental), por
lo cual es aceptado y utilizado por investigadores, centros educativos y la industria.
Para el caso de este proyecto la plataforma que se utilizó fue ROS debido a las
características descritas anteriormente y la aceptación que tiene alrededor del mundo, lo que
permite contar con mucha información y soporte con respecto al desarrollo de software y
funcionamiento del SO.
27
28
Capítulo 3: Ensamble, configuracion
y operacion de los robots
Robot móvil de armado propio
Para llevar a cabo los experimentos en este trabajo se requerían dos robots para su
interacción. Se construyó un robot móvil con la premisa de ser de bajo costo. Con base en un
chasis de acrílico, dos motorreductores, un Arduino Uno y una Raspberri Pi 3 se comenzó el
ensamble del robot propio. Sin embargo, el material antes mencionado no era suficiente para
el armado del robot por lo que se fueron incorporando piezas conforme se avanzaba en el
proyecto. En la parte de software, se tuvo el objetivo de utilizar Open Source, por este motivo
se instaló Ubuntu, el IDE de Arduino y ROS para comenzar el proyecto.
El desarrollo del robot móvil se dividió en etapas de construcción (Figura 3.1), durante las
cuales se fue mejorando el hardware y software para lograr una correcta locomoción. Dichas
etapas se describen a continuación.
29
Primera etapa: Ensamble de chasis, actuadores y sensores.
30
Segunda etapa: Programación en Arduino del control básico
En esta segunda versión (Figura 3.3) se trabajó en el IDE de Arduino para lograr la
locomoción del robot. El programa permite controlar la velocidad y la dirección de los
motores conectados a las llantas, a través de un puente H con el circuito integrado L293D.
Además, se programó la lectura de un sensor ultrasónico (HC-SR04) para medir la distancia
con objetos al frente del robot.
En este sketch para Arduino se programaron en funciones que concentran las actividades
activación y manejo de los motores (Anexo B Sketch de Arduino) para tener la ventaja de un
código más claro y reducir el tamaño del mismo. Se generaron las funciones de Avance,
Retroceso, Paro, Enclavamiento de la botonera, Enclavamiento del puerto serial, Velocidad
y Sensor Ultrasónico.
Para el caso de las funciones Avance, Retroceso y Paro, como su nombre lo indica, se
establecen valores que brindan al robot el estado de los motores, es decir, indican si las ruedas
31
deben o no girar y en qué sentido. Por otro lado, la función de velocidad lee y establece la
velocidad a la que deberán girar las llantas del robot, la función del Sensor Ultrasónico
obtiene datos desde el sensor para calcular distancias con objetos que se encentren al frente
del robot y evitar colisiones.
Por otra parte, se incluyó un vector de información con la finalidad de poder visualizar el
estado de los sensores y actuadores en el robot. El vector muestra en pantalla la velocidad de
los motores, el estado de los motores, el cual puede ser avance, retroceso o paro y además la
distancia que se obtiene desde el Sensor Ultrasónico (Figura 3.4).
32
Figura 3.4: Diagrama de flujo del primer sketch de Arduino
33
Tercera etapa: Incorporación de Raspberry PI 3 e instalación y operación
básica de ROS
$ roscore
Por otro lado, ya con la Raspberry y todos los componentes de hardware montados en el
robot, se notó la dificultad que tenía para moverse, de manera que se sustituyeron algunas
partes para hacer más ligero el robot y reducir su peso. Se optó por remplazar las baterías de
Acido-Plomo y la batería CDP por una sola batería tipo LiPo junto a un regulador de voltaje
34
de corriente continua de 12-5V 5A. La batería LiPo entrega 11.V, los cuales son suficientes
para mover los motores, sin embargo, el Arduino Uno y la Raspberry PI 3 necesitan 5V para
funcionar y es por este motivo que se hizo uso del regulador.
Figura 3.5: Robot de armado propio ejecutando ROS sobre Ubuntu Mate
Asimismo, se cambió la rueda loca tipo “carrito de súper mercado” debido a la resistencia
que presentaba al hacer un giro, se suplió por una rueda tipo “bola” de metal para tener una
mejor respuesta al movimiento.
Al mismo tiempo, se trabajó con la Pc que sirvió como “master” en ROS, para este caso
la instalación de ROS se hizo en un SO Ubuntu 14.04 LTS (Trusty) 64 bits.
La distribución instalada de ROS fue Indigo Igloo. Se siguieron los pasos que la página
de ROS indica en (Willow Garage, 2017).
35
Una vez instalado Gazebo se ejecuta en una terminal el comando para correr ROS:
$ roscore
Logrando así experimentar con el uso y la interfaz de ROS para tareas básicas.
36
Cuarta etapa: Ejecución de ROS para el control del robot
$ cd <sketchbook>/libraries
$ rm -rf ros_lib
Una vez instalado el paquete rosserial se modificó el sketch para incluir las librerías de
ROS y generar los nodos a utilizar (Figura 3.7). En esta etapa, Arduino Uno comenzó a
generar errores debido al tamaño del programa y su capacidad de memoria (32 kb), por lo
que se sustituyó con un Arduino Mega, el cual posee más memoria (256 kb).
37
Figura 3.7: Diagrama de flujo del primer sketch de Arduino para ROS
38
Quinta etapa: Pruebas de funcionalidad del robot
39
lo que le permite realizar tareas de mapeo (SLAM Simultaneous Localization and Mapping),
el robot y sus principales características se pueden observar en la siguiente ilustración.
Para el ensamble del robot se siguió el manual del fabricante, mismo que viene incluido
junto con todas las piezas del robot y herramienta necesaria. El manual contiene instrucciones
en japonés, chino, coreano e inglés con la descripción de todas las piezas incluidas, así como
la guía paso a paso para el correcto ensamble del hardware del robot (Figura 3.10).
40
Figura 3.10: Lista de Partes del Turtlebot 3 Burger. Tomada de (Robotis, 2018)
41
Pruebas del Turtlebot 3 Burger
Una vez que el Turtlebot 3 se encontraba ensamblado, con SO y con ROS, se comprobó
el correcto funcionamiento de ROS. En la Pc se ejecutó desde una nueva terminal el
comando:
$ roscore
Ya con ROS ejecutándose en la Pc, se debe ejecutar en una nueva terminal del Turtlebot
3:
Con estos pasos queda listo el robot para conectarse con la computadora remota, donde se
debe ejecutar en una nueva terminal los comandos:
$ export TURTLEBOT3_MODEL=burger
Después de introducir los comandos, el TurtleBot 3 se encuentra listo para ser manipulado,
existen varias alternativas para controlar los movimientos del robot, puede ser operado
mediante el teclado de la computadora remota, control de XBOX 360, Play Station 3, Robotis
RC100, control remoto del Wii o incluso mediante una aplicación Android. Dependiendo el
mando seleccionado se deben instalar los paquetes necesarios para la tele-operación, en este
caso el control del Play Station fue el seleccionado debido a su disponibilidad en el
laboratorio. En una nueva terminal se ejecuta el comando:
Una vez que se han ejecutado correctamente los comandos anteriores, se debe ejecutar la
instrucción para comenzar a generar el mapa (Figura 3.11). Es importante en este punto,
asegurarse que los relojes, tanto del robot como el de la computadora remota, se encuentren
en sincronía, ya que de no ser así el comando mostrará error y no se podrá generar la
exploración.
42
El comando para guardar el mapa es:
Figura 3.11: Mapa generado con Turtlebot 3 en las oficinas del Edificio F del CU UAEM VM
43
Figura 3.12: Diagrama de nodos y tópicos para generar un mapa con Turtlebot 3
44
Capítulo 4: Diseno y desarrollo
experimental
Descripción de la plataforma
Mediante el uso de dos robots, uno comercial y otro de armado propio; se busca compartir
información entre ambos a través de una computadora que hará la función de máster y
brindará conexión a la nube. Dicho de otra manera, los robots podrán subir, consultar y
descargar información mediante una red inalámbrica a través de una computadora que tendrá
la función de servidor y proporcionará servicio de nube (Figura 4.1).
45
Creación e interpretación de datos del modelo de espacio de trabajo
En esta sección se describe la forma para interpretar los datos del sensor Lidar y los datos
cinemáticos del Turtlebot 3, de tal manera que se construye el modelo del espacio del entorno
del robot. En la primera parte se configurará las llamadas bags para recuperar los datos de
los tópicos correspondientes al sensor Lidar y de velocidad, posteriormente se programa a
través de Matlab un código para graficar la información guardada. Se presentan experimentos
donde se representa el movimiento del robot y las lecturas del mismo a cada “paso”.
Para generar los experimentos de representación del entorno del robot, se generaron
archivos bags, estos se generan al mismo tiempo de ejecutar una exploración del entorno del
Turtlebot 3, donde se almacena información de los temas de principal interés (en este caso el
tema del sensor Lidar /scan, velocidad /cmd_vel e IMU /imu), para posteriormente
procesarlos, consultarlos y generar el mapa en la computadora.
En la Pc se ejecuta:
$ roscore
En el Turtlebot 3 se ejecuta:
$ export TURTLEBOT3_MODEL=burger
Hasta este paso el robot comercial está listo para comenzar a explorar su entorno, pero
antes se debe ejecutar el comando para generar el archivo bag, es importante tener un
46
directorio para alojar los datos generados. Para este caso se creó el directorio: bagfiles y se
encuentra dentro de “Carpeta personal”.
$ cd bagfiles
Ya dentro del directorio en la Pc, se introduce en una nueva terminal el comando para
crear el archivo bag:
Como se puede ver en el comando anterior, solo es necesario introducir el nombre del
nuevo archivo y el tema o los temas a grabar dentro del bag. Para terminar con la captura de
datos se presiona “ctrl+c”.
Una vez creado el archivo bag se procede con la extracción de los datos, para este caso se
importaron los datos de los temas hacia un archivo .txt, en una nueva terminal en la Pc, dentro
del directorio que contiene al archivo bag se introduce el comando:
Este comando va a generar un archivo que contiene toda la información del tema
seleccionado, el archivo será .txt y aparecerá dentro del directorio donde se encuentra el
archivo bag.
Para lograr procesar los datos generados por el Turtlebot 3 en los archivos bag, se hizo
uso del programa Matlab, debido a las herramientas que posee para trabajar con matrices de
información.
Después de haber generado el archivo txt, se copian los datos y se pegan en el programa
“Excel” mediante la opción de “pegado especial”, se debe seleccionar la opción “separar por
comas” y por último guardar el archivo. Este procedimiento se realiza para cada txt, que
corresponde a determinado tópico.
47
Luego de guardar el archivo “Excel”, se importan los datos a Matlab mediante el
comando:
$ Nombre_variable=xlsread(‘nombre_archivo’)
$ DATA=xlsread('lecturas.xlsx');
$ DATA2=xlsread('Velocidad.xlsx');
Para lograr generar el mapa se graficó (x,y) con una selección de datos del sensor Lidar
que se encuentran dentro de la variable “fdata”, para el caso de “x” se multiplica por coseno
y por la variable “i” que va desde 1 hasta 359, lo que representa los 360°. Después se
convierte a radianes y se suma el valor de desplazamiento del robot contenido en “a”,
multiplicado por la escala de la gráfica contenida en “vx”. Para el eje “y” se toman los valores
de “fdata”, se multiplican por seno, la variable “i” y se convierten a radianes. Las ecuaciones
en código quedan de la siguiente manera:
48
Figura 4.2: Grafica de datos obtenidos del Turtlebot 3 para avance del robot
Para esta escenificación se generan de igual forma los archivos xlsx generados a partir del
txt, que provienen a su vez del bag. Las variables quedan de la misma manera que el ejemplo
anterior, es decir:
$ DATA=xlsread('lecturas.xlsx');
$ DATA2=xlsread('Velocidad.xlsx');
49
Figura 4.3: Grafica de datos obtenidos del Turtlebot 3 para giro del robot
50
Generación de trayectoria
Existen en la literatura diversos algoritmos para generar trayectorias en mapas 2D, como
puede ser A*, Dijkstra, DWA, Campos de potencial, por mencionar solo algunos. Es difícil
seleccionar a alguno de estos algoritmos como el mejor, ya que cada uno posee ventajas y
desventajas para determinados escenarios, sin embargo, para este caso, se utilizó DWA, el
cual es el algoritmo por defecto que se utiliza en el Turtlebot 3 Burger.
DWA proviene del inglés Dynamic Window Approach, es un algoritmo propuesto por
Dieter Fox (Fox, Thrun, & Burgard, 1997). Básicamente el algoritmo calcula velocidades
(lineal y angular), para alcanzar el objetivo o la meta, tomando en cuenta los obstáculos y la
dirección u orientación de la meta. DWA se basa en los ejes cartesianos (x,y) y los transforma
en velocidades (v,w) las cuales se definen por la velocidad tangencial y angular.
En esta función, heading será la velocidad que maximice la orientación hacia la meta, la
distancia dist deberá ser mayor entre la trayectoria y el obstáculo para evitar choque con
algún obstáculo y vel representa la velocidad de avance, la cual deberá ser la más rápida
posible. Por otra parte, los símbolos sigma (σ), beta (β) y gamma (γ) representan un peso, el
cual para este caso se define por defecto de la siguiente manera (Zheng, 2017):
σ = 32.0 (4.2)
β = 20.0 (4.3)
γ = 0.02 (4.4)
Después de contar con el mapa, el siguiente paso es generar la ruta que han de seguir
ambos robots. Para lograrlo se ejecuta en la computadora “máster” el experimento que genera
la trayectoria.
Este experimento se llevó a cabo de manera virtual con la herramienta rviz de ROS, la
cual es un visualizador de datos que permite generar la trayectoria con ayuda del algoritmo
DWA, simulando un Turtlebot 3 Burger desplazarse en un mapa de un entorno creado con
51
anterioridad. Al mismo tiempo se ejecutó de manera física, es decir, se colocó el robot
comercial en el entorno controlado y con obstáculos para realizar la trayectoria de manera
real.
La Figura 4.4 muestra la generación de trayectoria, para este caso se utilizó un mapa de
un escenario con obstáculos representados en la imagen por las líneas y puntos en color
negro. Se puede observar al Turtlebot 3 en la esquina superior derecha enmarcado por un
rectángulo y una línea azul, la cual dibuja la trayectoria que llega hasta la meta establecida
manualmente, representada por una flecha de color rojo. Los datos del sensor Lidar en el
Turtlebot3 se observan en color verde y amarillo.
Figura 4.4: Generación de trayectoria en la computadora “máster” con la herramienta rviz con el algoritmo
DWA
52
Los pasos para realizar trayectorias como lo descrito anteriormente son:
$ roscore
$ export TURTLEBOT3_MODEL=burger
Después de introducir los comandos, se abrirá el visualizador donde se debe hacer clic en
la opción “2D Pose Estimate” para indicar la posición y orientación del robot dentro del
mapa. Posteriormente se debe establecer la meta o punto final, para lograrlo se debe dar clic
sobre la opción “2D Nav Goal” y entonces el robot comienza a desplazarse en el entorno
evitando obstáculos haciendo uso del algoritmo DWA para evitar los obstáculos.
53
Figura 4.5: Diagrama de flujo del segundo sketch de Arduino para ROS
54
Calibración de movimientos: lineal y rotacional
Para realizar las pruebas de seguimiento de trayectoria, era necesario ajustar las
velocidades del robot de armado propio. Esto se logró ajustando las velocidades PWM en
cada motor (izquierdo y derecho), asemejando los movimientos como los hace el Turtlebot
3. Además, en esta etapa se hizo uso del segundo sketch de Arduino, el cual tiene la capacidad
de suscribirse al tópico cmd_vel para asignar velocidades a los motores de los robots.
Dado que el robot propio funciona con motores de corriente continua, los cuales dependen
de un valor PWM asignado desde Arduino y que dicho valor se encuentra dentro del rango
[0, 255] donde cero representa el valor mínimo y doscientos cincuenta y cinco el valor
máximo, se llevó a cabo un ajuste de la velocidad para que correspondiera a la que maneja el
robot de experimentación comercial.
𝑌 −𝑌
𝑀 = 𝑋2 − 𝑋1 (4.5)
2 1
Para hacer las escalas se tomaron en cuenta las velocidades del Turtlebot 3, las cuales son
para el movimiento lineal de 1.5 y para el rotacional de 0.4 en la escala del mismo robot.
Estos valores se multiplicaron por 10 para hacer su valor entero y lograr así un manejo más
fácil dentro del sketch de Arduino. Derivado de esto, resultó que para el movimiento lineal
la escala tendría 15 valores y para el rotacional serían 4 valores.
(𝑌 − 𝑌 )
𝑉𝑒𝑙 = (𝑋2 − 𝑋1 ) ∗ (𝑣𝑎𝑙𝑜𝑟 − 𝑋1 ) + 𝑌1 (4.6)
2 1
Donde:
55
X2 es el valor máximo de la escala.
valor es la velocidad que proviene del Turtlebot 3 y que se multiplica por 10.
El valor para la escala PWM se fijó en 70, iniciando así las pruebas de desplazamiento en
ambos robots para comprobar que su funcionamiento fuera lo más parejo posible. Durante
los ensayos se incrementó y decremento el valor PWM para observar el comportamiento del
robot de armado propio. Se encontró que con el valor de 60 PWM el robot propio se
comportaba de manera semejante al robot comercial, por lo que las pruebas posteriores se
ejecutaron con este valor.
Calibración lineal
Para llevar a cabo la calibración lineal se generó una bolsa de datos con el Turtlebot 3. En
la Figura 4.6 se aprecia el escritorio de la computadora “master” ejecutando ROS y la bolsa
de datos en diferentes terminales.
56
En la Figura 4.7 se observa a los robots colocados de manera paralela detrás de una marca
de cinta roja en el piso. Los robots se encuentran listos para ejecutar los datos contenidos en
la bolsa desde la computadora “master”.
La Figura 4.8 muestra a los robots ejecutando los datos de la bolsa para calibrar el
movimiento lineal. Para este experimento, ambos robots se desplazan hacia el frente con
velocidades similares.
57
Figura 4.8: Calibración lineal de los robots. Secuencia 3 de 4
En la Figura 4.9 ambos robots continúan desplazándose con base en los datos de la bolsa
generada para la calibración de velocidad. Se puede observar que presentan un avance similar
y por lo tanto se consideran calibrados en su movimiento lineal.
58
Calibración rotacional.
En el caso de la calibración rotacional, se hizo una bolsa de datos con el Turtlebot 3 para
reproducirla después de manera simultánea en ambos robots. En la Figura 4.10 se puede ver
el escritorio de la computadora “master” ejecutando ROS y la bolsa con los datos para el
experimento.
En la Figura 4.11 se observa a los robots colocados de manera paralela, listos para ejecutar
los datos desde la bolsa generada para este experimento de giro.
59
Figura 4.11: Calibración rotacional de los robots. Secuencia 2 de 4
Al ejecutar la bolsa desde la computadora “master”, los robots comienzan a reproducir las
velocidades contenidas en ella. Para este experimento el giro que realizan ambos es hacia su
derecha. En la Figura 4.12 se aprecia a los robots superando los 90° de giro.
60
Para finalizar, se presenta en la Figura 4.13 a los robots concluyendo el giro contenido en
la bolsa para este propósito. Como se puede observar ambos terminan la reproducción de los
datos de manera correcta y con esto se consideran calibrados en el movimiento rotacional.
Seguimiento de trayectorias
Para realizar las pruebas, se elaboraron dos entornos controlados con obstáculos en
diferentes posiciones y distancias (Figura 4.14). Los entornos se exploraron con el Turtlebot
3 para recopilar información y generar los mapas correspondientes. Después se generaron las
trayectorias a seguir con el algoritmo DWA (“trayectoria1.bag” y “trayectoria2.bag”),
almacenándolas en la computadora “master” para posteriormente transmitirse a ambos robots
en experimentos separados.
61
Figura 4.14: Mapas de los escenarios de pruebas de trayectorias
$ roscore
La Figura 4.15 muestra los nodos y los tópicos activos en el experimento de seguimiento
de trayectoria con el Turtlebot 3. La bolsa de datos está representada por el nodo
62
play_1542996637233921624, el cual se encuentra publicando a través del tópico /cmd_vel
hacia el nodo del Turtlebot 3 llamado /turtlebot3_core. Los otros nodos de la figura son
propios del robot comercial y para el experimento son irrelevantes ya que solo se ocupan los
descritos para el seguimiento de la trayectoria.
En el caso del robot propio, el experimento se corre de manera muy parecida al robot
comercial, en la computadora “máster” se ejecuta:
$ roscore
63
Figura 4.16: Diagrama de nodos y tópicos para seguimiento de trayectoria en robot propio
64
Figura 4.17: Ejecución de trayectoria en el escenario 1 de ambos robots. Secuencia 1 de 5
En la Figura 4.18 se puede observar a ambos robots colocados en el punto de inicio listos
para comenzar a reproducir la trayectoria trasmitida desde la computadora “master”. En este
caso se señaló el inicio y la meta con cinta adhesiva de color rojo.
65
Figura 4.18: Ejecución de trayectoria en el escenario 1 de ambos robots. Secuencia 2 de 5
La Figura 4.19 muestra como los robots evaden el primer obstáculo con base en la
información obtenida desde la bolsa. Las líneas amarillas representan una aproximación de
la trayectoria.
66
Figura 4.19: Ejecución de trayectoria en el escenario 1 de ambos robots. Secuencia 3 de 5
Posteriormente, se observa en la Figura 4.20 a los robots perfilarse hacia la meta marcada
con la cinta roja y evadiendo el segundo obstáculo.
67
Figura 4.20: Ejecución de trayectoria en el escenario 1 de ambos robots. Secuencia 4 de 5
Finalmente se puede ver en la Figura 4.21 a los robots alcanzando la meta sin colisiones
y desempeñándose de manera similar durante el recorrido.
68
Figura 4.21: Ejecución de trayectoria en el escenario 1 de ambos robots. Secuencia 5 de 5
69
Caso de estudio dos
70
Figura 4.22: Ejecución de trayectoria en el escenario 2 de ambos robots. Secuencia 1 de 5
71
Figura 4.23: Ejecución de trayectoria en el escenario 2 de ambos robots. Secuencia 2 de 5
Posteriormente, en la Figura 4.24 se puede observar a los robots pasando en medio de los
obstáculos sin colisiones y avanzando hacia la puerta de las oficinas.
72
Figura 4.24: Ejecución de trayectoria en el escenario 2 de ambos robots. Secuencia 3 de 5
73
Figura 4.25: Ejecución de trayectoria en el escenario 2 de ambos robots. Secuencia 4 de 5
Después de llegar al otro lado de la antesala, se puede visualizar en la Figura 4.26 como
los robots se acercan a su meta desempeñando movimientos y velocidades similares.
74
Figura 4.26: Ejecución de trayectoria en el escenario 2 de ambos robots. Secuencia 5 de 5
Discusión de resultados
Durante el desarrollo de este trabajo se hizo uso de ROS en ambos robots, lo que permitió
generar mapas 2D y simularlos gracias a las herramientas que ofrece, también se generaron
trayectorias con ayuda del algoritmo DWA y Turtlebot 3. Lo anterior fue posible por la
75
filosofía, el soporte y la comunidad que tiene ROS, su estructura permite realizar cosas que
hasta hace unos años era complicado y requería de mucho tiempo para lograse, como lo
realizado en este trabajo.
Robótica en la nube brindará a los robots muchos beneficios como los da el Cloud
Computing a las personas actualmente, es cierto que el concepto todavía no es una realidad
y que faltan muchos puntos por atender, como puede ser la seguridad de estas plataformas o
la infraestructura para almacenar y procesar toda esta información que se creará, pero al día
de hoy es interesante ver como estos desarrollos tecnológicos hacen que la robótica se
acerque más a las personas.
76
Capítulo 5: Conclusiones
En la elaboración de este proyecto se logró analizar y comprender el concepto de robótica
en la nube, para posteriormente ejemplificar su funcionamiento mediante una plataforma de
comunicación entre dos robots.
El sistema de interacción entre robots que se presenta en este proyecto plantea el desarrollo
de la forma de interacción y comunicación entre robots de diferente tecnología. Se ilustra
como la información puede intercambiarse entre robots a través de una plataforma de
comunicación y de esta forma aprovechar los datos para realizar tareas.
77
con tarjetas para control de bajo nivel, en el caso del robot propio un Arduino Mega y en el
caso de Turtlebot 3 una OpenCR.
Aún con las diferencias antes mencionadas, la interacción entre ambos se logró de manera
correcta, alcanzando la meta en ambos casos sin dificultades y evadiendo los obstáculos
planteados en los escenarios.
78
Dada la plataforma de experimentación y los resultados obtenidos se concluye que con el
uso de plataformas para el desarrollo de robots (como lo es ROS), permitirá que la robótica
este más al alcance de la comunidad técnica para brindar soluciones a problemas, permitiendo
una rápida transferencia de los nuevos desarrollos.
Trabajo futuro
Con lo realizado hasta ahora se ha podido experimentar con las capacidades de ROS, que
hacen posible la construcción de robots con grandes capacidades por medio de una
plataforma de desarrollo común, queda como trabajo futuro las siguientes actividades:
Si robótica en la nube funcionará de forma similar a las redes sociales para las personas,
dotaría a los robots de nuevas habilidades para desempeñar tareas para las que no fueron
hechos originalmente, pero que con la ayuda de otros robots más equipados de sensores
pueden llegar a realizar.
79
Anexo A. Material utilizado en la
construccion del robot propio
El material para la construcción del robot propio fue:
1 Raspberry Pi 3 Model B
1 Arduino Uno
1 Chasis de acrílico de dos niveles para robot con tornillería y separadores.
1 Cable USB tipo AB de 1.8 metros.
2 Motorreductor Recto 48:16 con rueda de plástico.
2 Switch Mini Deslizable 2 Pasos 3 Pin.
8 Diodo rectificador IN4005.
Cable calibre 22 rojo, amarillo y negro.
2 Circuito Integrado L293D.
Resistencia de 10 K Ohm 1/4W 5%
6 Micro botón push switch interruptor 2 pines.
1 Protoboard de 830 puntos.
Cinchos de plástico.
Cable micro USB a USB.
Batería recargable marca Klip Xtreme, modelo KBH-120 de 5.3V 1000mAh.
Batería recargable marca CDP, modelo R-PB10k de 5V 10000 mAh.
1 Paquete de 80 cables tipo dupont macho-macho y macho-hembra de 15 cm.
1 Batería recargable 12V 1.4 Ah Ácido-Plomo.
1 Mini protoboard de 170 puntos.
1 Sensor ultrasónico HC-SR04.
1 Carcasa de acrílico para Raspberry PI 3.
1 Rueda loca tipo “carrito de súper mercado”.
1 Batería recargable LiPo 11.1v 1200mAh.
1 Cable conector macho tipo “T” para batería LiPo.
1 Arduino Mega.
80
1 Carcasa de acrílico para Arduino Mega.
1 Rueda loca tipo “bola” de metal.
1 regulador de voltaje corriente continua 12-5V 5A.
81
Anexo B. Codigo desarrollado
B.1 Sketch de Arduino para tele operación y visualización de estados de sensores y
actuadores en el robot (primer sketch).
ros::NodeHandle nh;
std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);
//Motor 2
#define Avance2 4
#define Retroceso2 2
#define Paro2 7
//Motor 2
#define PWMA2 5
#define PWMB2 6
//Sensor Ultrasónico
#define PinTrig 9
#define PinEcho 3
//Variables de velocidad
byte vel1; //M1
byte vel2; //M2
82
byte HoldAvan1;
byte HoldRetr1;
int pasado1[3]; //Arreglo de pasados para Motor 1
//Motor 2
byte HoldAvan2;
byte HoldRetr2;
int pasado2[3]; //Arreglo de pasados para Motor 2
//Distancia
int actualDist1;
//Vector de estados
char vEdos[100];
void setup() {
83
nh.advertise(chatter);
//Sensor Ultrasónico
pinMode(PinTrig, OUTPUT);
pinMode(PinEcho, INPUT);
}
void loop() {
84
break;
case 'A': //Baraja de velocidades para M1 desde A=0 hasta K=250 con
intervalos de 25 MAYÚSCULAS
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
velm1 = 1;
break;
case 'a': //Baraja de velocidades para M2 desde a=0 hasta k=250 con
intervalos de 25 minúsculas
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
velm2 = 1;
break;
default:
;
break;
}
//Enclavamiento Motor 1
AvanAuto1 = DetectorFlanco(AvanAuto1, pas[0]);
pas[0] = AvanAuto1;
RetrAuto1 = DetectorFlanco(RetrAuto1, pas[1]);
pas[1] = RetrAuto1;
ParoAuto1 = DetectorFlanco(ParoAuto1, pas[2]);
pas[2] = ParoAuto1;
//Enclavamiento Motor 2
AvanAuto2 = DetectorFlanco(AvanAuto2, pas[3]);
pas[3] = AvanAuto2;
RetrAuto2 = DetectorFlanco(RetrAuto2, pas[4]);
pas[4] = RetrAuto2;;
ParoAuto2 = DetectorFlanco(ParoAuto2, pas[5]);
pas[5] = ParoAuto2;
if (velm1 == 1){
85
vel1 = Velocidadm(dato); //Si "velm1" toma el valor de 1 entonces se invoca
la función "Velociadadm" y se le pasa el valor de "dato" desde el puerto serial
}
if (velm2 == 1){
vel2 = Velocidadm(dato); //Si "velm2" toma el valor de 1 entonces se invoca
la función "Velociadadm" y se le pasa el valor de "dato" desde el puerto serial
}
86
HoldAvan2 = 0;
edoMot2 = 2;
}
//Sensor Ultrasónico
distancia1 = SensorUS(PinTrig,PinEcho);
actualM1 = edoMot1;
actualM2 = edoMot2;
actualVM1 = vel1;
actualVM2 = vel2;
actualDist1 = distancia1;
tiempo = millis() / 1000;
sprintf(vEdos, "M1: %d, M2: %d, V1: %d, V2: %d, D1: %d, T: %d", actualM1,
actualM2, actualVM1, actualVM2, actualDist1, tiempo);
ini = millis();
}
}
FUNCIONES.H
//Función de Avance
void AvanceM(const int PWMA, const int PWMB, int vel){
digitalWrite(PWMA, LOW);
analogWrite(PWMB, vel);
}
//Función de Retroceso
void RetrocesoM(const int PWMA, const int PWMB, int vel){
digitalWrite(PWMB, LOW);
analogWrite(PWMA, vel);
}
//Función de Paro
void ParoM(const int PWMA, const int PWMB){
digitalWrite(PWMA, LOW);
digitalWrite(PWMB, LOW);
}
//Función de Enclavamiento de botonera
int DetectorFlanco(int EstadoPuerto, int pasado){
87
return EstadoPuerto && !pasado;
}
//Función de Enclavamiento de puerto serial
void DetectorFlancoSerial(int *Activa, int pasado){
*Activa = 1;
if(pasado == 1 && *Activa == 1){
*Activa = 0;
}
}
//Función de Velocidad
int Velocidadm(int dato){
if (dato >= 65 && dato <= 75) // A partir de ((y2 - y1) / (x2 - x1)) *
(dato - x1) + y1;
return ((250 - 0) / (75 - 65)) * (dato - 65) + 0;
else if (dato >= 97 && dato <= 107)
return ((250 - 0) / (107 - 97)) * (dato - 97) + 0;
else
return 0;
}
//Función de Sensor Ultrasónico
int SensorUS (int PTrig, int PEcho){
long distancia=0;
long NumDatos=20;
int i;
for(i=0;i<NumDatos;i++){
digitalWrite(PTrig, LOW);
delayMicroseconds(2);
digitalWrite(PTrig, HIGH);
delayMicroseconds(10);
digitalWrite(PTrig, LOW);
distancia = pulseIn(PEcho, HIGH)*0.017+distancia;
}
distancia=distancia/20;
if (distancia > 200)
return -1;
else
return distancia;
}
88
B.2 Sketch de Arduino para seguimiento de trayectorias (Segundo sketch).
#include <ros.h>
#include <math.h>
#include <geometry_msgs/Twist.h>
ros::NodeHandle nh;
float linx;
float angz;
int num = 10;
int lx;
int az;
int abslx;
int absaz;
//Designación de los puertos fisicos para señal PWM
//Motor 1
#define PWMA1 10
#define PWMB1 11
//Motor 2
#define PWMA2 5
#define PWMB2 6
void setup(){
nh.initNode();
nh.subscribe(sub);
//Configuracion como salidas PWM
//Motor 1 Izquierdo
pinMode(PWMA1, OUTPUT);
pinMode(PWMB1, OUTPUT);
//Motor2 Derecho
pinMode(PWMA2, OUTPUT);
pinMode(PWMB2, OUTPUT);
}
absaz=abs(angz);
az=(10/4.0)*((absaz*num)-0)+100; //((y2 - y1) / (x2 - x1)) * (dato - x1) +
y1;
az=ceil(az); //floor
89
digitalWrite(PWMB2, LOW);
}
else if ((linx == 0) && (angz > 0)){ //Giro a la DERECHA
digitalWrite(PWMA1, LOW);
analogWrite(PWMB1, az);
analogWrite(PWMA2, az); //az
digitalWrite(PWMB2, LOW);
}
else if ((linx == 0) && (angz < 0)){ //Giro a la IZQUIERDA
analogWrite(PWMA1, az); //az
digitalWrite(PWMB1, LOW);
digitalWrite(PWMA2, LOW);
analogWrite(PWMB2, az);
}
else if ((linx > 0) && (angz > 0)){ //Giro a la DERECHA hacia ENFRENTE
digitalWrite(PWMA1, LOW);
analogWrite(PWMB1, az);
digitalWrite(PWMA2, LOW);
analogWrite(PWMB2, lx);
}
else if ((linx > 0) && (angz < 0)){ //Giro a la IZQUIERDA hacia ENFRENTE
digitalWrite(PWMA1, LOW);
analogWrite(PWMB1, lx);
digitalWrite(PWMA2, LOW);
analogWrite(PWMB2, az);
}
else if ((linx < 0) && (angz > 0)){ //Giro a la DERECHA hacia ATRAS
analogWrite(PWMA1, lx);
digitalWrite(PWMB1, LOW);
analogWrite(PWMA2, az);
digitalWrite(PWMB2, LOW);
}
else if ((linx < 0) && (angz < 0)){ //Giro a la IZQUIERDA hacia ATRAS
analogWrite(PWMA1, az);
digitalWrite(PWMB1, LOW);
analogWrite(PWMA2, lx);
digitalWrite(PWMB2, LOW);
}
else if ((linx == 0) && (angz == 0)){ //Paro
digitalWrite(PWMA1, LOW);
digitalWrite(PWMB1, LOW);
digitalWrite(PWMA2, LOW);
digitalWrite(PWMB2, LOW);
}
nh.spinOnce();
delay(1);
}
90
B.3 Código de Matlab para generar mapas con movimiento angular.
conteo2=[];
for i=1:nl; %número de muestras por tiempo 102
timeLidar=DATA(:,1);
timeVel=DATA2(:,1);
compara=timeVel - timeLidar(i,1);
pasos=sign(compara);
conteo=find(pasos<0);
conteo2=[conteo2 size(conteo,1)];
end
end
figure(1);
title('GIRO DERECHA')
plot(x,y,'.k')
hold on
axis('equal')
%axis([-4.5 4.5 -3.5 3.5])
pause(0.2);
drawnow
%hold off
end
end
91
B.4 Código de Matlab para generar mapas con movimiento lineal.
conteo2=[];
for i=1:nl; %número de muestras por tiempo 79
timeLidar=DATA(:,1);
timeVel=DATA2(:,1);
compara=timeVel - timeLidar(i,1);
pasos=sign(compara);
conteo=find(pasos<0);
conteo2=[conteo2 size(conteo,1)];
end
92
Anexo C. Diagramas de conexion
C.1 Diagrama de conexión general
D1 D3 D5 D7
Arreglo1_1 Arreglo2_1
M1 M2 ArduinoDigital
2 3 4 5 6 7 8 9 10 11 12 13 Arreglo1_2 Arreglo1_1 Arreglo2_2 Arreglo2_1
3_L293D
+5V
+5V
RaspberryPi3
BATERÍA Regulador
ARDUINO Universidad Autónoma del Estado de México Fecha
12 V 12v-5v
5V Centro Universitario UAEM Valle de México 06/06/2018
LINE VREG
VOLTAGE
ECHO
TRIG
GND
VCC
93
C.2 Diagrama de conexión de la botonera
R1 R2 R3 R4 R5 R6
1kΩ 1.0kΩ 1.0kΩ 1.0kΩ 1.0kΩ 1.0kΩ
94
C.3 Diagrama de conexión del puente H L293D
LD293D
ENABLE 1 16 POWER VCC 5V
No. PIN CONEXIÓN A DRIVER INPUT 2 15 DRIVER INPUT
1 +5v DRIVER OUTPUT 3 14 DRIVER OUTPUT
2 11 Arduino GND 4 13 GND
3 Motor 1 GND 5 12 GND
4 GND DRIVER OUTPUT 6
5 GND 11 DRIVER OUTPUT
6 Motor 1 DRIVER INPUT 7 10 DRIVER INPUT
7 10 Arduino POWER VCC 4.5 TO 36V 8 9 ENABLE
8 +12v PUENTE H
9 +5v
10 6 Arduino
11 Motor 2 Universidad Autónoma del Estado de México Fecha
12 GND Centro Universitario UAEM Valle de México 05/03/2018
13 GND
14 Motor2 Alumno: Marco Antonio Aguilar Tadeo Versión
15 5 Arduino Diagrama de
16 +5v Dibujo: Diagrama de conexíon CI L293D conexiones
95
C.4 Diagrama de conexión de Arduino Mega
DIGITAL Conexión a
PWMK
D2 -Retr_M2
D3 Echo SenUltraS
D4 -Avan_M2
D5 Pin 15 L293D
D6 Pin 10 L293D
D7 -Paro_M2
D8 -Paro_M1
D9 Trigger SenUltraS
D10 Pin 7 L293D
D11 Pin 2 L293D
D12 -Avan_M1
D13 -Retr_M1
Universidad Autónoma del Estado de México Fecha
Centro Universitario UAEM Valle de México 05/03/2018
96
C.5 Diagrama de conexión del sensor ultrasónico
9_Arduino
3_Arduino
+5V
ECHO
TRIG
GND
VCC
SensorUltraSónico
97
Referencias
Alcalá Tomás, F., Celorio Aponte, A., & Montoya Álvarez, C. (2013). Plataforma de
simulación reconfigurable basada en Microsoft Robotics Developer Studio.
Recuperado el 24 de agosto de 2017, de
https://eprints.ucm.es/22468/1/Plataforma_de_Simulaci%C3%B3n_reconfigurable_
basada_en_MRDS.pdf
Alonso, D., Pastor, J. Á., Sánchez, P., Álvarez, B., & Vicente Chicote, C. (2012).
Generación automática de software para sistemas de tiempo real: Un enfoque
basado en componentes, modelos y frameworks. Revista Iberoamericana de
Automática e Informática industrial, 9(2), 170-181.
Bravo Sánchez, F. Á., & Forero Guzmán, A. (2012). La robótica como un recurso para
facilitar el aprendizaje y desarrollo de competencias generales. Teoría de la
Educación. Educación y Cultura en la Sociedad de la Información, 13(2).
Brooks, A., Kaupp, T., Makarenko, A., & Moser, M. (s.f.). Orca. Recuperado el 8 de junio
de 2017, de http://orca-robotics.sourceforge.net/index.html
Center, D. R. (s.f.). ROCK the robot construction kit. Recuperado el 9 de junio de 2017, de
https://www.rock-robotics.org/index.html
98
Fedor, C., & Simmons, R. (s.f.). CARMEN Robot Navigation Toolkit. Recuperado el 6 de
junio de 2017, de http://carmen.sourceforge.net/
Fox, D., Thrun, S., & Burgard, W. (1997). The dynamic window approach to collision
avoidance. IEEE Robotics & Automation Magazine, 4(1), 23-33.
Gerkey, B., Vaughan, R., & Howard, A. (16 de febrero de 2014). The player project.
Recuperado el 6 de junio de 2017, de
http://playerstage.sourceforge.net/index.php?src=index
Goldberg, K. (1994). Beyond the web: Excavating the real world via mosaic. Second
International WWW Conference, (págs. 1-12). Chicago, IL, USA.
Hu, G., Tay, W. P., & Wen, Y. (2012). Cloud robotics: architecture, challenges and
applications. IEEE network, 26(3).
Kamei, K., Nishio, S., & Hagita, N. (2012). Cloud Networked Robotics. IEEE Network.
Kumar, V., Rus, D., & Sukhatme, G. S. (2008). Networked robots. En Springer Handbook
of Robotics (págs. 943-958). Berlin: Springer.
99
Mell, P., & Grance, T. (September de 2011). The NIST definition of Cloud Computing.
National Institute of Standars and Tecnology, Special Publication.
Siegwart, R., Nourbakhsh, I. R., & Scaramuzza, D. (2011). Autonomous Mobile Robots.
MIT press.
Tapia García, M. R., & López Hernández, J. M. (2017). Robótica Móvil. Jóvenes en la
ciencia, 3(2), 2526-2530.
100
The Hybrid Group. (2014). artoo Ruby on robots. Recuperado el 05 de junio de 2017, de
http://artoo.io/
101