Diseño e Implantación del Robot IRB120
Diseño e Implantación del Robot IRB120
Autor:
Álvaro Conejero Sánchez
Tutor:
David Muñoz de la Peña Sequedo
iii
A mis abuelos a los que veo
menos de lo que me gustaría
v
Agradecimientos
Un año que para mi comenzó siendo una huracán de acontecimientos ha pasado a llenarme de valores y de igual
forma valorar más a los que me rodean y son parte de mis pilares fundamentales. Es por ello que en primer lugar
sólo puedo acordarme de mis familiares y amigos más cercanos.
Doy gracias a David Muñoz, mi tutor, ya que al llegar a su despacho no tenía ni idea de que hacer mi trabajo,
me propuso uno según mis preferencias hacia asignaturas que había dado en la escuela. Sinceramente, me ha
venido “como anillo al dedo” y estoy muy contento de la decisión de haber aceptado su propuesta.
Debo por último incluir a Ignacio Alvarado, que ha sido el encagardo de las impresiones 3D y a veces de abrirme
la puerta del laboratorio, pero siempre con un trato inigualable.
Álvaro Conejero Sánchez
Sevilla, 2018
vii
Resumen
Este trabajo tuvo como objetivo la creación de una práctica para el alumnado en la que pudiera utilizar el IRB120
ubicado en los laboratorios de la ETSI en asignaturas de introducción a la programación de robots manipulables.
La compañía fabricante de estos robots, ABB, posee un software llamado RobotStudio que permite hacer
simulaciones previas de nuestros programas en un entorno virtual. Esto último es ideal para que los alumnos
puedan practicar previamente antes de realizar las prácticas con el robot real.
Como ejemplo de práctica a resolver por el alumno se propuso el juego tradicional de las Torres de Hanoi
mediante recursividad. Para dicha resolución sería necesario el uso de algoritmos de cierto nivel de complejidad.
Además se llevó a cabo la fabricación del juego mediante la impresora 3D, haciendo uso de las destrezas de
diseño gráfico. A su vez, se debería tener en cuenta que el modelo de juego iba ser resuelto por un IRB120 con
una garra, por lo que sería necesario la creación de unos dedos adaptadores que pudieran coger las piezas para
moverlas de una torre a otra.
El proyecto consistió en la creación de dicho entorno virtual y dejarlo todo preparado para que inmediatamente
después de programar el robot virtual se pueda llevar esta programación al real sin problema. Dicha
programación está basada en un lenguaje particular del software llamado RAPID.
Cabe decir que este trabajo tiene mucha relación con trabajos pasados también tutelados por David Muñoz. Estos
trabajos pasados, ver Bibliografía, dejaron preparado el IRB120 con la pinza neumática MHQ2-D20 como
terminación. Dicha pinza tiene unos adaptadores donde podemos colocar nuevas terminaciones que nos
permitan realizar una acción específica. En nuestro caso se colocaron unas terminaciones que nos permiten
mover las fichas del juego.
Un reto añadido al proyecto surgió al comprobar que RobotStudio no tenía la potencia suficiente para resolver
el juego por recursividad. Es por ello que fue necesaria la creación de una comunicación por socket entre Matlab
y RobotStudio.
ix
Abstract
This dissertation had as a goal the creation of a practice for students in which they could use the IRB120
located in ETSI’s laboratories in subjects dealing with the introduction to programming manipulable
robots. The company which manufactures these robots, ABB, owns a software called RobotStudio, which
allows us to make previous simulations of our programs in a virtual setting. This is ideal for students to
practise previously before doing the practice with the real robot.
As an example of practice to be solved by students, the traditional game “The Towers of Hanoi” through
recursion was proposed. In order to solve it, the use of certain complex algorithms would be needed.
Moreover, the making of the game was carried out through a 3D printer, using the graphic design skills.
At the same time, it should be considered that the game model was going to be solved by an IRB120 with
a gripper, so the creation of adaptor fingers in order to take the pieces and move it from one tower to
another would be needed.
The project dealt with the creation of the previously mentioned virtual setting and leave everything ready
so that immediately after programming the virtual robot, students could be able to do it in a real
environment without any problem. This programming is based on a particular software language
called RAPID.
It should be noted that this project has a lot in common with previous projects also supervised by David
Muñoz. These previous projects, see Bibliography, left the IRB120 ready with the pneumatic clamp as
the termination. This clamp has some adaptors where we can add new terminations which allow us to
perform a specific action. In our case, we placed terminations which allowed us to move the pieces of the
game.
A challenge added to the project emerged when we checked that RobotStudio did not have enough power
to solve the game through recursion. Because of that, the creation of a communication by socket
between Matlab and RobotStudio.
xi
xiii
Índice
Agradecimientos vii
Resumen ix
Abstract xi
Índice xiv
Índice de Tablas xvii
Índice de Figuras xix
1 Introducción y objetivos 1
1.1 Robot ARB120 2
1.2 Pinza neumática MHQ2-20D 2
1.3 Instalación neumática 3
1.4 Reglas de las Torres de Hanoi 3
2 Diseño del juego y de los dedos de las garra 11
2.1 Modelos preliminares 11
2.1.1 Proceso de creación de piezas en AutoDesk Inventor 11
2.1.2 Elección del modelo 21
2.2 Modelo final tras la realización de la base de madera 22
2.3 Diseño de los dedos de la garra 22
2.3.1 Diseño dedos 22
2.3.2 Diseño conectores para herramienta 25
3 Estación de RobotStudio 27
3.1 Creación de la herramienta 27
3.1.1 Montaje de la herramienta en RobotStudio 27
3.1.2 Obtención del eje en el laboratorio 30
3.1.3 Posicionar origen local de la herramienta 31
3.1.4 Creación de mecanismo 32
3.2 Creación de SmartComponent y lógica de la estación 37
3.2.1 SmartComponent 37
3.3 Posicionar robot y elementos de la estación 44
3.3.1 Posicionar mesa y robot 44
3.3.2 Crear y posicionar WorkObject 48
3.3.3 LLevar el SmartComponent “pinza” a robot 50
3.4 Pasos finales y sincronización con RAPID 50
4 Flexpendant 54
4.1 Manejo básico 55
4.2 Definir herramienta 59
4.3 Definir WorkObject con la FlexPendant 61
5 Comunicación por socket entre RobotStudio y Matlab 63
5.1 Creación de la GUI 63
5.1.1 GUI: modelado de la interfaz 64
5.1.2 GUI: Programación 67
5.2 Programación en RAPID para la comunicación por socket 70
5.2.1 Crear el socket programado en escucha y aceptar conexión 70
5.2.2 Recibir datos y desempaquetar 70
5.2.3 Fin de conexión 70
6 Programa Rapid en estación virtual 71
6.1 Recibir matriz de movimientos desde Matlab 71
6.2 Proceso “Estado” 71
6.3 Proceso “Movimiento” 71
7 Simulación 73
8 Programa para robot real 76
8.1 Cálculo de pendientes de los ejes de las torres 76
8.2 Estrategia de recolocación para cogida de piezas 79
8.3 Programa para robot real 80
9 Cambios en la estación para simular recolocación 81
10 Conclusiones 83
11 Bibliografía 84
11 Anexo 85
11.1 Anexo A: Planos 85
11.2 Anexo B: Archivos para Autodesk Inventor 85
11.3 Anexo C: Archivos para impresión 3D 85
11.4 Anexo D: Archivos de componentes para RobotStudio 86
11.5 Anexo E: Estaciones RobotStudio y SmartComponent. 86
11.6 Anexo F: Archivos programación RAPID 86
11.7 Anexo G: Archivos GUI 86
11.8 Anexo H: Memoria en format word 86
11.9 Anexo I: Especificaciones IRB120 87
11.10Anexo J: Vínculos Autodesk Inventor 88
11.11Anexo K: Vínculos RobotStudio 88
11.12Anexo L: Vínculos GUI 88
xv
ÍNDICE DE TABLAS
xvii
ÍNDICE DE FIGURAS
xix
Figura 29: Crear unión primer componente Inventor 19
Figura 30: Crear unión segundo componente Inventor 20
Figura 31: Selección de conjunto de contactos Inventor 20
Figura 32: Activar conjunto de contactos Inventor 20
Figura 34: Juego final cilindros Inventor 21
Figura 34: Juego final ortoedros Inventor 21
Figura 35: Juego final "gorritos" Inventor 21
Figura 36: Creación de base real Inventor 22
Figura 37: Extrusión para dedo pinza Inventor 23
Figura 38: Creación de puntos para agujeros Inventor 23
Figura 39: Creación de agujeros pasantes Inventor 24
Figura 40: Creación de extrusión para agujero rectangular Inventor 24
Figura 41: Creación de empalmes por contorno Inventor 25
Figura 42: Creación agujeros adaptador Inventor 25
Figura 43: Creación empalmes adaptador Inventor 26
Figura 44: Importar geometría RobotStudio 27
Figura 45: Selección color RobotStudio 27
Figura 46: Establecer origen local RobotStudio 28
Figura 47: Creación origen local adaptador RobotStudio 28
Figura 48: Seleccionar fijar posición RobotStudio 29
Figura 49: Posicionamiento de dedo en adaptador RobotStudio 29
Figura 50: Unir dedo y adaptador en un mismo sólido RobotStudio 30
Figura 51: Posición con todos los ángulos a 0º IRB120 30
Figura 52: Posición del efector en horizontal IRB120 31
Figura 53: Posición de los ejes de la terminación del IRB120 RobotStudio 31
Figura 54: Posición herramienta para coincidencia del TCP RobotStudio 32
Figura 55: Crear mecanismo RobotStudio 32
Figura 56: Ventana auxiliar crear mecanismo RobotStudio 32
Figura 57: Creación de eslabones RobotStudio 33
Figura 58: Modificar ejes RobotStudio 34
Figura 59: Crear Datos de herramiento RobotStudio 34
Figura 60: Heramienta terminada RobtoStudio 35
Figura 61: Herramienta montada sobre IRB120 RobotStudio 35
Figura 62:Definir dependencia RobotStudio 36
Figura 63: Selección movimiento de ejes de mecanismo RobotStudio 36
Figura 64: Comprobación funcionamiento correcto de cierra y abre RobotStudio 36
Figura 65: Componente inteligente RobotStudio 37
Figura 66: Ventana de SmartComponent RobotStudio 37
Figura 67: Propiedades CierraPinza y AbrePinza RobotStudio 38
Figura 68: Propiedades puerta lógica NOT RobotStudio 38
Figura 69: Propiedades PlaneSensor RobotStudio 39
Figura 70: PlaneSensor sobre dedo RobotStudio 39
Figura 71: Llevar PlaneSensor a dedo RobotStudio 39
Figura 72: Comprobación de PlaneSensor RobotStudio 40
Figura 73: Ventana diseño de SmartComponent RobotStudio 40
Figura 74: Detalle ventana diseño sobre apertura y cierre RobotStudio 41
Figura 75: Detalle pestaña diseño RobotStudio 41
Figura 76: Sistema de E/S RobotStudio 42
Figura 77: Seleccionar I/O System RobotStudio 42
Figura 78: Creación de nueva unidad combi RobotStudio 42
Figura 79: Creación de señales Pillada y CierraPinza RobotStudio 43
Figura 80: Lógica de estación RobotStudio 43
Figura 81: Ventana lógica de la estación RobotStudio 43
Figura 82: Posición RobotStudio 44
Figura 83: Crear objetivo para WorkObject_Mesa RobotStudio 44
Figura 84: Localización de Target_10 RobotStudio 45
Figura 85: Girar Target_10 RobotStudio 45
Figura 86: Posición correcta de Target_10 RobotStudio 46
Figura 87: Selección convertir punto en objeto de trabajo RobotStudio 46
Figura 88 Seleccionar como UCS RobotStudio 47
Figura 89: Posicionamiento respecto a UCS RobotStudio 47
Figura 90: Posicionamiento respecto a mundo RobotStudio 48
Figura 91: Creación de WorkObject del juego RobotStudio 48
Figura 92: Posicionar uno de los bloques RobotStudio 49
Figura 93: Juego completo posicionado RobotStudio 49
Figura 94: Actualizar posición del SmartComponent a IRB120 RobotStudio 50
Figura 95: Estación final colocada RobotStudio 50
Figura 96: Creación de posiciones de apoyo RobotStudio 51
Figura 97: Trayectoria con prohibidos RobotStudio 51
Figura 98: Girar posición para tener correcta orientación para cogida RobotStudio 52
Figura 99: Copiar y aplicar orientación RobotStudio 52
Figura 100: Sincronizar RobotStudio 52
Figura 101: Ventana de sincronización con RAPID RobotStudio 53
Figura 102: FlexPendant 54
Figura 103: Icono FlexPendant RobotStudio 54
Figura 104: Interfaz FlexPendant RobotStudio 54
Figura 105: Menú FLexPendant 55
Figura 106: Botonería para control 55
xxi
Figura 107: Panel de control RobotStudio 56
Figura 108: Pesaña Panel de control RobotStudio 56
Figura 109: Ventana Jogging FlexPendant RobotStudio 56
Figura 110: Ventana Jogging Motion mode linear RobotStudio 57
Figura 111: Menú cambio de velocidades FlexPendant RobotStudio 58
Figura 112: Ventana de producción RobotStudio 58
Figura 113: Creación de tooldata FlexPendant Robotstudio 59
Figura 114: Definición de tooldata Flexpendant RobotStudio 59
Figura 115: Posiciones para definir tooldata 60
Figura 116: Ventana wobdata FlexPendant RobotStudio 61
Figura 117: Ventana Define de Wobdata FlexPendant RobotStudio 61
Figura 118: Posiciones para definir WorkObject_Base 62
Figura 119: Comprobación origen bien situado 62
Figura 120: Selección nueva GUI Matlab 63
Figura 121: Ventana GUIDE Quick Start Matlab 63
Figura 122: ventana para edición de gráficos GUI Matlab 64
Figura 123: Icono Push botton Matlab 64
Figura 124: Icono Pop-up-menu Matlab 64
Figura 125: Icono Edit text Matlab 64
Figura 126: Icono Static text Matlab 64
Figura 127: Icono Table Matlab 64
Figura 128: Icono Aligne Matlab 65
Figura 129: Ventana propiedades elementos GUI Matlab 65
Figura 130: Ventana edición de propiedades de tablas GUI Matlab 66
Figura 131: Icono run GUI Matlab 66
Figura 132: Interfaz Gui Matlab final 67
Figura 133: Función revursiva para resolver las Torres de Hanoi Matlab 68
Figura 134: Explicación gráfica algoritmo 68
Figura 136: GUI con matriz para juego con 5 ortoedros 69
Figura 136: GUI con matriz para juego con 3 ortoedros 69
Figura 137: Proceso “Movimiento” y parámetros a recibir 71
Figura 138: Programación de movimiento para coger pieza 72
Figura 139: Programación de movimiento para dejar pieza 72
Figura 140: Botonera simulaciones RobotStudio 73
Figura 141: Opciones reproducción RobotStudio 73
Figura 142: Opciones restablecer RobotStudio 74
Figura 143: Ventana guardar estado actual RobotStudio 74
Figura 144: Crear conjunto de colisiones Robotstudio 75
Figura 145: Conjuntos de colisiones RobotStudio 75
Figura 146: Simulación con conjunto de colisiones RobotStudio 75
Figura 147: Robot inicia movimientos verticales sobre eje origen 76
Figura 149: Colisión con eje al desplazarse verticalmente 77
Figura 149: Reajuste tras colisión 77
Figura 150: Inclinación eje 77
Figura 151: Bloque mal situado para cogida 79
Figura 152: Movimientos de recolocación para cogida 79
Figura 153: SmartComponent para mover bloques sin cerrar RobotStudio 81
Figura 154: Diseño de PlaneSensors para mover piezas RobotStudio 81
Figura 155: Señales para PlaneSensor Robotstudio 82
Figura 156: Lógica de la estación RobotStudio 82
xxiii
1 INTRODUCCIÓN Y OBJETIVOS
E
n la actualidad, existen un gran número de industrias que utilizan robots en su cadena de producción. Es
por ello que el Departamento de Ingeniería de Sistemas y Automática adquirió un par de IRB120 cuyo
objetivo principal es que el alumno pueda tener sus primeros contactos con un robot de carácter industrial.
El fabricante de estos robots, ABB, posee a su vez el software RobotStudio. En el que se pueden crear estaciones
virtuales sobre las que probar diseños de programación. Esta herramienta es un gran valor añadido para el
aprendizaje.
Inicialmente, los robots no poseen un elemento actuador, es por ello que en proyectos pasados se instaló en uno
de los dos robots una garra neumática MHZ2-20D y se dejó lista para el funcionamiento. La garra abre y cierra
un par de terminaciones, pero, lo más relevante de estas es que disponen de un sistema de adaptadores que
permiten la colocación de una nueva terminación y así poder ser utilizada con diferentes fines. Esto último es de
gran interés ya que el departamento posee una impresora 3D, XYZprinting da Vinci 2.0 Duo, con la cual podemos
construir nuevas terminaciones a bajo coste.
Teniendo este escenario en mente, el siguiente paso natural era el desarrollo de una práctica para el alumnado,
este fue el objetivo principal de este proyecto.
Para su realización es necesaria la creación de creación de un entorno virtual basado en el IRB120 con la pinza
neumática, sobre el cual el alumno pueda hacer pruebas con sus diseños de programación, y, una vez que se
haya comprobado que el código del alumno es correcto, su posterior implantación en el robot real.
Como enunciado de la práctica se pensó en que el alumno tuviera que resolver el juego de las Torres de Hanoi,
concretamente por el método de recursividad.
Para hacer todo esto fue necesario hacer el modelo 3D de las diferentes piezas que forman el juego y los
ejecutores finales que se adaptan a la pinza eléctrica para coger dichas piezas. Además, RobotStudio tiene en sus
bibliotecas los IRB120., pero su terminación hay que diseñarla y hacer que sea “inteligente” mediante el diseño
de un SmartComponent y de la lógica de la estación.
Para la definición de la herramienta y bases de coordenadas, es necesario el uso de la FlexPendant. Este utensilio
está directamente conectado a la controladora del robot y nos permite mover las diferentes partes del robot,
definir herramientas y bases de coordenadas entre otros. La FlexPendant también puede ser emulada desde
RobotStudio, por lo que inicialmente se hicieron pruebas con ella.
Un valor añadido al proyecto fue la necesidad de comunicación entre Matlab y RobotStudio. Esto fue necesario
porque RobotStudio no tiene la potencia suficiente para realizar los cálculos de recursividad necesarios para
resolver el juego.
Por último, se resolvió mediante RAPID los movimientos ordenados por la matriz que llega desde Matlab y se
realizaron los ajustes pertinentes para que el programa de la simulación y el real funcionen igual.
1
2 Introducción y objetivos
3
2 DISEÑO DEL JUEGO Y DE LOS DEDOS DE LAS
GARRA
E
L diseño de las fichas del tablero y las garras que se agregaron al adaptador fueron todas diseñadas
mediante la aplicación Inventor de Autodesk, software de CAD 3D para el desarrollo de productos,
concretamenete su versión de 2018. Esta herramienta es de un gran uso en el diseño ingenieril junto a
otros programas como CATIA o Solid Edge. El software se puede descargar accediendo mediante UVUS a la
zona de descargas de la Universidad de Sevilla y descargándose el paquete de Autodesk.
Para la realización del boceto podemos se hace uso de las opciones línea, círculo, arco o rectángulo. Como
ejemplo vamos a hacer el diseño de un juego basado en cilindros de diferentes alturas de 50 mm de diámetro
(para su utilización con la garra que puede coger piezas de 50 mm) por lo que se hará uso de la opción círculo.
Figura 6:
Círculo Inventor
11
12
Diseño del juego y de los dedos de las garra
Para dar una altura a nuestro cilindro es necesario estruir la pieza. De nuevo en la misma barra de opciones
podemos encontrar el botón extruir.
Una vez estemos en la opción extruir, y hayamos clicado sobre nuestro boceto, nos aparecerá una ventana que
nos permite seleccionar la distancia de extrusión. En este ejemplo la altura del cilindro tendrá 20 mm.
12
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 13
Por último para hacerle un agujero pasante utilizamos el botón Agujero. Haciendo click sobre la superficie donde
deseemos crear el agujero podremos crear un agujero de cierto diámetro según un centro que hayamos
seleccionado.
13
14
Diseño del juego y de los dedos de las garra
Por último, para poder tener una visión mejor del conjunto global, se modifica el aspecto del cilindro agujereado.
Primero hemos de seleccionar el botón aspecto.
Se abre una ventana desde la cual podemos agregar distintos aspectos al documento y aspectos de la biblioteca
de Inventor los cuales podemos usar. En este caso agregamos el aspecto naranja claro.
Una vez agregado el aspecto al documento, ya podemos repetir el aspecto sobre nuestro cilindro.
14
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 15
De forma muy similar se crea la base del juego utilizando las herramientas boceto 2D, rectángulo, círculo y
extrusión podremos diseñar la base desea. Cabe destacar que podemos extruir las tres columnas de la base del
juego de forma simultánea.
Figura 18: Boceto 2D tres columnas Figura 18: Extrusión tres columnas base
para base Inventor Inventor
15
16
Diseño del juego y de los dedos de las garra
Una herramienta también utilizada en el diseño de las piezas es la de empalme. Con ella podemos crear
empalmes en las aristas de los ortoedros y bases para darles un acabado mas fino.
Es necesario seleccionar las aristas donde queramos los empalmes y seleccionar en la ventana auxiliar el radio
deseado.
Una vez se terminaron los ortoedros y la base se creó un conjunto donde tenemos una previsuacización de los
ortoedros y la base antes de llevarlos a RobotStudio.
16
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 17
Otra de las alternativas propuestas es un juego basado en “gorritos invertidos”, esta variante se creó de forma
muy similar a las anterioes piezas por lo que no se hace incapié de nuevo en su formación.
17
18
Diseño del juego y de los dedos de las garra
Para la creación de la base central, se hizo uso de simetría, esta herramienta permitió la construcción del segundo
macho que hace que encajen las bases con mayor rapidez.
Antes del proceso de creación de una simetría es necesario la creación de un plano que nos servirá como plano
de simetría. Una vez creado el plano y le demos al botón de simetría nos aparece la ventana auxiliar donde
deberemos seleccionar el plano respecto al cual hacer la simetría y la operación que precisa una simetría, en
nuestro caso las relacionadas con la construcción del elemento conector de la base central.
Por último para ver los modelos completos se ensamblan creando un nuevo archivo accediendo a
archivo>nuevo>ensamblaje.
18
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 19
Se insertan las diferentes piezas que vayamos a usar. Por ejemplo vamos a insertar la base del juego de fichas
cilíndricas y la ficha de 20 mm de altura que hemos creado anteriormente. Para ello pinchamos en insertar y
abrimos los ficheros correspondientes.
A continuación vamos a insertar la ficha cilíndrica en uno de los ejes del juego. Seleccionamos el icono unión
desde ensamblar que nos da acceso a una ventana emergente donde podremos elegir el tipo de unión, en nuestro
caso seleccionamos el tipo cilíndrica. Tras esto es necesario indicar el origen en el primer componente y en el
segundo.
19
20
Diseño del juego y de los dedos de las garra
Hecho esto el cilindro no podrá abandonar el eje. Pero notamos que si puede atravesar base. Para resolver este
problema es necesario indicar que la pieza será tipo conjunto de contacto haciendo click derecho sobre ella y
seleccionando conjunto de contactos.
Por último para ver que efectivamente todo marcha bien se debe acceder a inspeccionar y activar solucionador
de contactos. Esto hace que el cilindro no pueda atravesar la base.
20
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 21
Figura 34: Juego final cilindros Inventor Figura 34: Juego final ortoedros Inventor
Por otro lado, el modelo de los gorritos invertidos, fué pensado para la pinza Cleveland Guest Engineering LTD
la cual posee el segundo robot del laboratorio. Al tener estos un ala que permite la cogida de las piezas de forma
satisfactoria. Por lo que se deja el modelo para proyectos futuros de índole semejante.
21
22
Diseño del juego y de los dedos de las garra
22
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 23
Para su construcción se realizó una extrusión parecida a las de apartados anteriores. Se dibujó el boceto de una
especie de zeta y se dimensionó. Tras ello se realizó la operación de extrusión.
Además, el conector de la pinza posee unos taladros roscados, por lo que se hace coincidir estos con unos
agujeros en nuestros dedos. Para esto, en Inventor, hay que colocar el punto donde queramos ponerlo (en la foto
hay dos puntos ya que hacemos dos agujeros).
23
24
Diseño del juego y de los dedos de las garra
Tras esto, pulsando el botón agujero podemos seleccionar ambos puntos y hacer nuestros agujeros pasantes.
Además, de nuevo hubo que realizar una extrusión de forma rectangular para hacer el hueco por donde vamos
a ponertar las terminaciones de la pinza de SMC con nuestros dedos.
24
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 25
Se realizaron también empalmes, de 1 mm. En esta ocasión todas las aristas de la pieza llevaban, por lo que era
más fácil hacerlos por contorno en vez de aristas marcando la opción contorno.
Ambos dedos son iguales pero localizados de forma simétrica en las terminaciones de la pinza, por lo que se
imprimeron dos.
25
26
Diseño del juego y de los dedos de las garra
26
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 27
3 ESTACIÓN DE ROBOTSTUDIO
E
n este capítulo vamos a describir el proceso de creación de la estación virtual de RobotStudio, software de
ABB el cual se puede obtener de su página web principal, aunque la versión descargable está bastante
recortada en funciones, para acceder por completo hay que tener una licencia, como la que posee la US.
No basta con la colocación espacial de las piezas creadas con Inventor. Además hay que dotar a la estación de
cierta inteligencia para poder coger los objetos con la pinza. Este apartado es muy similar al del proyecto del
año pasado, pero hay ciertos detalles en la creación de la herramienta que son necesarios para que pueda ser
trasladado desde un programa, creado y probado con la estación, al robot real.
Concretamente la posición del efector fue corregida, ya que sus ejes no estaban bien colocados, y se creó un
PlaneSensor asociado a uno de los dedos de la garra para una mayor precisión en la visualización de los
movimientos. De igual forma, al tener que sustituir los dedos de la garra era necesario volver a crear la
herramienta por completo por lo que también se incluye en este apartado su edición.
En el caso de que queramos modificar el color de las piezas basta con click derecho
pieza>modificar>seleccionar color>seleccionar color>aceptar.
27
28
Estación de RobotStudio
De igual forma en el caso en el que queramos ver o no uno de los objetos representados en RobotStudio basta
con click derecho objeto>visible, esto lo hace visible o visible según esté marcado o no.
Para posicionar el origen local de una pieza seleccionamos establecer click derecho pieza>modificar>origen
local. Por ejemplo lo haremos en el adaptador y uno de los dedos que parece el caso más complicado de
reubicación y selección de orígenes locales.
Para marcar la posición en la que queremos el origen local podemos hacerlo direcatmente introduciendo las
coordenadas del punto que queremos. Además RobotStudio dispone de opciones de selección de puntos según
la geometría. Para su uso debemos primero marcar el tipo de ajuste del punto después volver a la ventana de
establecer origen local y seleccionar un apartado cualquiera de posición. Una vez hecho esto podemos indicarle
con el ratón donde se encuentra nuestro punto. Por ejemplo, para seleccionar el origen local del adaptador,
primero hemos hecho selección en establecer origen local del adaptador, tras esto ajustar a centro, volvemos a
la ventana de origen local y marcamos una de las casillas de posición y ahora con el ratón seleccionamos el
punto de la geometría que queremos marcar como origen local.
28
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 29
De esta forma ya tenemos el origen local localizado, además podemos situar sus ejes de coordenadas ya que no
son los que queremos, para ello debemos cambiar los grados la orientación según nos convenga. Para comprobar
que hemos localizado correctamente el origen local basta con posicionarlo en el origen mundo hacienda uso de
la opción fijar posición respecto a referencia mundo.
De la misma forma podemos localizar el orgen local en el dedo, en este caso lo mejor es ponerlo donde se va a
posicionar con nuestro adaptador, un buen lugar es la cara del interior del agujero rectangular. Tras esto y con
la opcion de definir posición y hacienda uso de ajustar a centro de nuevo, podemos situar nuestro dedo en el
adaptador de la forma adecuada.
29
30
Estación de RobotStudio
Por ultimo vamos a hacer que estas dos piezas formen una única geometría llevando el cuerpo de adaptador a
Dedo pinza paralela. Esto sirve para definir los eslabones de una vez en la creacion de la herramienta 3.1.4
Creación de mecanismo. En concreto la unión del dedo y el adaptador se podría haber realizado también en
Inventor mediante un nuevo un ensamble.
El resto de la herramienta se monta realizando los mismos pasos según era necesario.
30
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 31
31
32
Estación de RobotStudio
Al crear el mecanismo, el eje de dicho mecanismo será el asociado al origen mundo, es por ello que hay que
posicionar la herramienta en el origen de forma que coincidan los 45º calculados en el punto anterior y los ejes
del TCP.
Nos aparece la ventana de crear mecanimos, donde en tipo de mecanismo debemos seleccionar herramienta.
32
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 33
Ahora debemos entrar en el apartado eslabones donde indicaremos los diferentes eslabones que componen
nuestra herramienta. En nuestro caso tenemos un eslabón base, el cual debemos marcar como tal, y otros dos
eslabones más, nuestros dedos de la garra con sus adaptadores.
A continuación debemos definir los ejes de la herramienta entrando en la siguiente característica de la ventana
crear mecanismo.
En el caso que nos ocupa se trata de un eje prismático y además está a 45º respecto el eje Z, es por ello que
primera posición y segunda posición están calculadas para cumplir con este ángulo. Además el sentido de cada
movimiento según el eje es opuesta por lo que están pensadas para cumplir con la misma dirección pero sentidos
opuestos (igualmente si se hubiese puesto con el mismo sentido basta con modificar la dependencia de ejes a un
factor de -1 en vez de 1).
Es necesario indicar uno de los dos como eje activo.
El límite nos indica cuantos milímetros recorre el dedo según el eje. En nuestro caso 10 mm.
33
34
Estación de RobotStudio
Las siguientes características de nuestra herramienta están en el apartado Crear Datos de Herramienta.
Debemos indicar una posición de TCP (Tool Central Point) o PCH (Punto central de la herramienta), que indica
el punto de cogida de nuestra pinta y unos ejes de coordenadas con los que vamos a entrar a cogerlas, en nuestro
caso de 107 mm además de un ángulo de 45º ya que esto nos permitirá poder coger las piezas con un ángulo
deseado y sin tener que hacer ningún tipo de transformación. El centro de gravedad puede ser calculado con el
uso de la FlexPendant pero en nuestro caso no es relevante por lo que se supone uno de 65 mm en Z.
34
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 35
La cual podemos ver que una vez montada en el robot queda con sus ejes y TCP perfectamente ubicados.
35
36
Estación de RobotStudio
Como siguiente paso tenemos que definir la dependecia. Esta tiene que ser de 1 para que los dos dedos se muevan
a la par.
Finalmente en la ventana de crear mecanismo le debemos dar a compilar y ya tendremos nuestra herramienta.
Para comprobar que todo funciona correctamente podemos verlo haciendo click derecho sobre la herramienta y
seleccionando movimiento de ejes de mecanismo.
Se abrirá una ventana con un scroll donde podremos ver si nuestra herramienta abre y cierra correctamente.
36
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 37
3.2.1 SmartComponent
Seleccionamos Componente inteligente en nuestro menú. Para crear uno nuevo.
En la ventana que se abre podemos accede a añadir componentes y agregar los distintos componentes que nos
serán útilies en nuestra creación. En nuestro caso se han usado un plane sensor, una puerta lógica Not, un
Attacher, un Detacher y por ultimo dos JointMover. Además, hay que arrastrar el icono de nuestra herramienta
al componente inteligente para que forme parte de él. Por ultimo en el apartado de señales y conexiones hay que
crear las señales “Cierra” de tipo DigitalInput y como valor predeterminado 0. Como opción está la de crear
una señal más en este caso DigitalOutput que nos indique si la garra coge algo.
37
38
Estación de RobotStudio
A los JointMover se les cambiaron sus nombres, a uno se le llamó “CierraPinza” y al otro “AbrePinza”. Para
ambos se seleccionó como mecanismo el componente “Garra_Lab”.”CierraPinza” es editado para que lleve al
eslabón principal hasta la posición de 9 mm y con un tiempo de cierre de 0.2 segundos, este ultimo valor es
estimado y no es relevante. Los mismo se hizo con “AbrePinza” pero en esta ocasión con duración de 0 segundos
y moviendo el eslabón principal a la posición 0 mm de su eje de movimiento.
Por ultimo se editó el PlaneSensor. Este componente cuando se encuentra con un objeto nos permitirá interactuar
con él. En nuestro caso nos es de utilidad para que la pinza agarre un objeto cuando la cerramos. Para hacerlo
tuvimos que crear un plano paralelo a una de las caras de la pinza por donde vamos a coger las piezas y además
vincular el movimiento del movimiento del SmarComponent a ese dedo de la pinza para que se mueva con él.
De esta forma conseguimos que en simulación el robot agarre piezas.
38
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 39
En primer lugar debemos posicionar el plano paralelo a uno de las cara de agarre de uno de los dedos, debe estar
lo suficientemente pegado a la cara pero sin llegar a tocar, ya que si tocase siempre detectaría que hay algo y por
lo tanto no funcionaría adecuadamente.
Por ultimo, para mover el plano con el dedo es necesario asociarlo a éste ultimo para ello hay que localizar el
dedo siguiendo la secuencia Garra_lab>Eslabones>Dedo_1 y una vez localizado arrastrar el PlaneSensor al
interior.
39
40
Estación de RobotStudio
Para la comprobación de que hemos situado bien el plano y que está asociado, se recomienda al lector mover
los ejes del eslabón y comprobar que efectivamente el PlaneSensor se mueve con el dedo.
Entramos ahora en la ventana Diseño. En un principio nos aparecerán todos los componentes desordenados. Una
vez ordenados el diseño del componente inteligente quedaría de la siguiente forma.
El cierre o apertura de la pinza según la señal “Cierra” se realiza mediante los elementos
“CierraPinza”,”AbrePinza”, la puerta lógica NOT y la señal de entrada “Cierra”. Conectamos la señal “Cierra”
con Execute de “CierraPinza”, con lo que se ejecutará el cierre de la pinza cuando se active “Cierra”. A su vez
debe de interrumpirse “AbrePinza,” es por ello que se conecta también la señal a Cancel de “AbrePinza”.
El funcionamiento para abrir se basa en que la señal “Cierra” esté desactivada. En ese caso pasaremos por la
puerta NOT que hará que haya señar por su OutPut y éste se conectará al Cancel de “CierraPinza”, cancelando
el cierre y a Execute de “AbrePinza”, ejecutando la apertura.
40
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 41
Si “Cierra” está activo significa que podemos coger algo. Por esto se active el PlaneSensor tener señal en
“Cierra”. El PlaneSensor si detecta algo mandará una señar por SensorOut que llegará a “CierraPinza”
haciendo que cancele el cierre ya que hemos detectado algo. A su vez al ser cancelado debemos hacer un
Attacher para coger el objeto. Como Parent se debe elegir el mecanismo que viene de “CierraPinza”, la pinza,
y como Child el objeto detectado por el PlaneSensor, conexión SensedPart() con Child() del attacher.
Si abrimos significará que estamos soltando si hemos cogido algo, para ello ejecutamos el detacher si
“Abrepinza” está ejecutado y se desvinculará del objeto cogido por el attacher conectando el apartado Child()
de este ultimo con el Child() de Detacher.
41
42
Estación de RobotStudio
Como opción para pruebas se conectó el paused de “CierraPinza” a la señal “Pillada”, utilizada para pruebas,
que nos indicará si hay algo cogido, para ello debe haber sido pausado el cierre de la pinza por culpa del
PlaneSensor.
Ahora debemos programar las señales de entradas y salidas simuladas. Accedemos a
Controlador>Sistema>Configure>I/O System.
Dentro de la DeviceNet creamos una nueva unidad hacienda click derecho sobre ella. Creamos una nueva unidad
combi digital de entradas y salidas por la que irá asociada nuestras señales.
42
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 43
Ahora desde la pestaña señales podemos crear nuestras señales “CierraPinza” y “Pillada” asignada al Combi
d652 y con Device Mapping 0. En el pop-up de nivel de acceso marcar ALL para poder utilizarlo en simulación.
Ya creadas las señales es hora de darle lógica a la estación. Con este ultimo paso, al hacer uso en RAPID de la
señal “CierraPinza” se ejecutará “Cierra” del SmartComponent. Entramos en Lógica de estación y vamos a la
pestaña Diseño.
Estableciendo las conexiones de la imagen hacemos que si “CierraPinza” está activo se ejecute “Cierra” del
SmartComponent. Por otro lado el SmartComponent cuando ejecute “Pillada” mandará una señal para que se
ejecute la señal “Pillada” simulada.
43
44
Estación de RobotStudio
Figura 82:
Posición
RobotStudio
44
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 45
De esta forma se crea una nueva posición en el objeto de trabajo actual predefinido por RobotStudio, “wobj0”,
aparece en la siguiente imagen con el nombre de “Target_10”.
Un paso previo a continuar con la creación del WorkObject es orientar la posición creada según como vayamos
a querer que estén localizados nuestros ejes del WorkObject. Con la herramienta de giro podemos modificar
esto.
45
46
Estación de RobotStudio
Con esto ya está listo para ser convertido a objeto de trabajo, obteniendo un nuevo WorkObject.
Una vez tenemos nuestro WorkObject, para poder posicionar objetos respecto a él, necesitamos seleccionarlo
como UCS.
46
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 47
Ya con el WorkObject en el vértice de la mesa y habiendo sido seleccionado este como UCS, podemos ahora
posicionar el robot y la base respecto a él de una forma más cómoda.
47
48
Estación de RobotStudio
Podríamos igualmente haberlos situaos usando el sistema de referencia “Mundo”, pero parece más adecuado
usar el proceso anterior para situar objetos sobre un plano.
48
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 49
Como ya tenemos definido el objeto de trabajo de la base del juego, es facil posicionar las fichas del juego
estableciendo su origen local en el centro de sus bases y tras ello llevarlas a la posición del eje de torre.
49
50
Estación de RobotStudio
50
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 51
Además se crearon posiciones de apoyo a la programación, con el propósito de no tener que medir coordenadas
e introducir manualmente las posiciones. Para que estas pasen a RAPID es necesario crear una trayectoria y
llevar los puntos a ella
Observamos que en primera instancia tenemos un icono de dirección prohibida sobre los movimientos de la
trayectoria. En un principio puede parecer que todo está correcto, pero la herramienta no puede coger los bloques
ya que el robot no puede llegar a colocar la herramienta de forma que su TCP coincida con el punto. Es por ello
que hay que cambiar la orientación de los puntos haciendo que sea la adecuada para entrar a coger los bloques.
Para que la herramienta coja correctamente las piezas, sin tener que hacer ninguna transformación, tenemos que
definir estos objetivos con una orientación que coincida con el TCP de la herramienta ya que de esta forma va a
coger los bloques. Giramos uno de nuestros puntos hasta hacerlo coincidir con los ejes del TCP y tras esto
copiamos su orientación y se las damos al los otros dos objetivos.
51
52
Estación de RobotStudio
Figura 98: Girar posición para tener correcta orientación para cogida
RobotStudio
Por último sincronizamos nuestra estación con el controlador. Inmediatamente se crea el código en RAPID que
define nuestra herramienta, los distintos WorkObjects y los puntos objetivos que estarán en un proceso, en este
caso el proceso “Path_10”.
52
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 53
53
54
Flexpendant
4 FLEXPENDANT
E
l IRB120 posee una controladora portátil denominada Flexpendant, con ella podremos gestionar los
movimientos del robot, para programar y para crear o modificar parámetros.
Además, RobotStudio posee una controladora virtual con la que podremos hacer las mismas operaciones que
haríamos con la real, por lo que es muy útil para practicar. Para acceder a ella hay que entrar en la pestaña
controlador y seleccionar el icono de la FlexPendant. Que hará expandiserse una ventana auxiliar donde está
simulada la FlexPendant.
54
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 55
Haciendo click en el icono de arriba a la izquierda de la imagen se abrirá un menú desde el cual podemos
acceder a las distintas funciones de la controladora.
55
56
Flexpendant
En la controladora virtual tambien disponemos de estos modos. Para tener acceso a ellos debemos ir a la pestaña
de Controlador y seleccionar el icono de Panel de control. Tras ello podremos seleccionar el modo que
queramos.
De vuelta al menu de la Flexpendant podemos ejecutar movimientos, sin nada programado previamente,
hacienda uso de la opción Jogging. Al abrirse aparece una ventana donde tenemos acceso a las opciones de
movimiento.
56
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 57
A la izquierda podemos ver difrentes opciones. Las más relevantes en este proyecto han sido la de Tool y
WorkObject. Con la primera podemos decir que herramienta tenemos puesta en el robot y con la segunda
respecto a que sistemas de coordenadas, o WorkObject como se denomina en RobotStudio, nos estamos
movimiendo. Si clicásemos sobre ellos nos aparecerían las diferestes herramientas y WorkObjets, deben haber
sido creados previamente, se verá en apartados siguientes.
Al seleccionar Motion Mode, podemos elegir el tipo de movimiento que vamos a hacer. En el ejemplo de la
ventana estaríamos controlando los ejes 1, 2 y 3 y es por ello que en el apartado position nos aparecen los grados
a los que están los ejes del robot. Otra opción sería mover los ejes 4, 5 o 6 o incluso movernos de forma rectilínea,
lo cual es bastante interesante. En este caso Position nos da las coordenadas en la que se encuentra el TCP de la
herramienta en coordenadas cartesianas y respecto al WorkObject elegido ademas de sus correspondiente
cuaterniones.
Motion Mode también nos da la opción de hacer movimientos de reorientación sobre el TCP que hayamos
definido.
Un paso que debemos dar antes de modificar la posición manualmente es habilitar la opción Enable. La
controladora real tiene un botón en la parte trasera que nos permite habilitar el movimiento si la pulsamos
(además recordar que debemos haber seleccionado Manual en el panel de control) y si liberamos el botón deja
al robot muerto, sin poder hacer movimientos.
Hacinedo uso del joystick podemos mover el robot a nuestro antojo según la opción seleccionada y teniendo en
cuenta sus limitaciones de movimiento. Podemos de igual manera elegir la velocidad a la que se realiza este
movimiento pulsando en el icono de abajo a la derecha de la pantalla, en el se muestran diferentes opciones pero
en concreto la segunda nos permite modificar la velocidad.
57
58
Flexpendant
Si en el menú despegable pulsasemos el icono Production Window, nos aparecería nuestro programa cargado
en la controladora. Para ejectar un programa lo normal es indicar un puntero a main mediante el botón PP to
main. Indicado la dirección del puntero y seleccionado Enable podemos ejecutar nuestros programa haciendo
click en el botón Play. Recordemos que podemos dejar el robot muerto si liberamos Enable, muy importante
para salvar errores.
58
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 59
Una vez creada podemos editar la definición de la herramienta pulsando en edit>define. Seleccionando el
método TCP por cuatro puntos se nos da la posibilidad de definir la herramienta de una forma práctica. Para ello
el software tiene programado un método según el cual nosotros le damos cuatro puntos y él inmediatamente
calcula la herramienta. Los puntos no pueden ser cuales se quiera, se supone un TCP en nuestro caso donde
queremos coger la pieza, y se lleva su origen a un punto en el espacio. Y además debemos acceder a ese punto
en posiciones y orientaciones diferentes. El manual recomienda también alejarnos del punto y volver por otro
sitio para que la definición sea lo más correcta posible.
59
60
Flexpendant
Las siguientes imagenes muestran las diferentes posiciones del robot hacia un mismo punto para definir la
herramienta por el método de los cuatro puntos.
60
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 61
Elegimos new y nombramos nuestro WorkObject y le daremos a OK. El resto de opciones son las mismas que
para la creación de la herramienta.
Teniendo declarado el WorkObject ahora podemos definirlo. Para ello pulsamos edit>define donde nos
aparecían todos los WorkObjects creados. A continuación se eligió usar el Método por 3 puntos.
El método crea un sistema de coordenadas cartesiano tomando como referencia dos puntos del eje X y otro del
eje Y. Con estos ya puede definir el WorkObject (tener en cuenta la regla del tornillo o la mano derecha para
saber donde aparecerá el eje Z). En el caso que nos ocupa al formar un plano el elemento base de la base y
sabiendo que los ejes deben estar igual que los de la estación virtual, se lleva la herramienta a los susodichos
puntos. En este apartado es especialemtne útil utilizar los movimientos rectilíneos del robot accediendo a
Jogging.
A continuación imágenes del proceso. Incluye la comprobación de que la base es la correcta, para ello se llevó
el TCP a la posición que debería ser nuestro origen y se comprobó en el menú Jogging que position referida a
61
62
Flexpendant
la base de coordenadas creada está en (0,0,0) , basta desplazarse realizar movimientos para comprobar que los
ejes también están definidos correctamente.
62
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 63
U
n reto que surgió a la hora de realizar el proyecto que nos ocupa fue el de comunicar a RobotStudio con
algún otro software de mayor potencia matemática para la resolución del problema recursivo de las
Torres de Hanoi. Es por ello que se pensó en la comunicación por socket para la cual RobotStudio está
preparado. Como programa para resolver el algoritmo se pensó inmediatamente en Matlab, software también
disponible si se posee un usuario en la Universidad de Sevilla, ya que es una herramienta muy potente y no tiene
problemas a la hora de resolver este tipo de problemas. Además para que al usuario le sea más fácil la
comunicación se creó una GUI (Graphical User Interface) donde poder seleccionar el puerto y la IP a la que
nos queramos conectar y el número de fichas que tiene nuestro juego en ese instante.
Se nos abre una ventana emergente donde podemos crear una nueva interfaz gráfica.
63
64
Comunicación por socket entre RobotStudio y Matlab
Edit text: Al introducir texto en estos casilleros podremos utilizarlos. Se utiliza para obtener la dirección
y puerto al que conectarse.
Static text: crea cuadros de texto. Se usan para identificar los edit text creados.
Table: Usado para crear tablas. En nuestra interfaz se usa para representar la matriz de movimientos a
realizar por el robot.
64
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 65
Haciendo doble click en los elementos podemos configurar sus propiedades como el nombre, el tipo de color,
etc. En especial, Tag nos sirve para hacer referencia a nuestro objeto en la programación por lo que es importante
darle un nombre identificativo.
Objeto Tag
Tabla TTable
65
66
Comunicación por socket entre RobotStudio y Matlab
La tabla es un elemento algo particular, para editar sus propiedades hay que hacer click derecho sobre ella y
seleccionar Table Property Editor. En ella editamos los apartados Columns y Rows para poder mostrar la matriz
de movimientos adecuadamente.
Una vez finalicemos los gráficos de nuestra interfaz le clicamos en la casilla run y tras darle un nombre a nuestra
interfaz Matlab nos creará un archivo .fig donde almacena los gráficos y otro .m donde está la programación de
dichos gráficos y podremos incluir acciones en ellos como veremos en el siguiente punto.
66
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 67
La obtención de la IP y del número de puerto se hace de forma similar. Para ello, una vez localizada las funciones
que llevan el nombre de sus tags, definiremos las variables globales “IP” y “PORT” donde almacenaremos la
IP y el puerto introducidos por el usuario. Para que IP y puerto puedan guardar el dato introducido en la interfaz
es necesario el uso de la función get la cual programada como get(hObject,’String’) obtendría el valor de la
propiedad String de nuestro objeto gráfico. El objeto gráfico es una variable tipo Handle
Como particularidad, el puerto al ser introducido para crear la comunicación por socket, necesita estar en formato
doble para ello utilizamos la función str2double que nos permite transformar un string a double.
Obtenida la IP y el puerto podemos crear un objeto TCPIP con este podremos realizar la conexión por socket
utilizando la función fopen. Es necesario que el otro de la conexión esté ya conectado ya que si no la conexión
fallaría. En nuestro caso es necesario que hayamos inicialido el Socket en nuestro programa de RAPID antes de
conectarlo a Matlab. Si la conexión ha sido realizada correctamente aparecerá una ventana emergente que nos
escribe un mensaje de verificación para ello se utiliza la función msgbox.
67
68
Comunicación por socket entre RobotStudio y Matlab
Un dato importante es que “IP” y “PORT” deben haber sido definidas como variables globales para que podamos
trabajar con ellas en esta función. De igual manera, la variable “t” se define como global ya que será utilizada
en otra función, en concreto para el envío de datos por ese socket.
La obtención del número de piezas se hace mediante el pop-up que contiene una lista desde uno hasta cinco.
Para obtener el valor seleccionado no podemos hacerlo como en el caso de la obtención de la IP o el puerto, esto
es debido a que al usar get(hObject,’String’) estaremos guardando un cell array de valores que contiene los
strings 1,2,3,4 y 5. Por lo que para accede a lo que el usuario ha seleccionado en primer lugar hemos de guardar
en una variable, en nuestro caso contenido, el cell array. Una vez hecho esto, podemos usar get(hObject,’value’)
que nos dará la ubicación del número seleccionado. Con contenido(a) obtendremos el string seleccionado. De
nuevo este valor se necesita en formato double por lo que se hace uso de la función str2double y se guarda en
“n”, también definida como global para su uso en otras funciones.
Ya con el valor de fichas del juego podemos obtener la matriz de movimientos del juego. Se utiliza para ello la
función “Tower” la cual necesita el número de piezas “n” y en que orden están las torres, ya que podría ser que
quisieramos que en vez de en la torre de la izquierda el juego comenzase en la torre de la derecha, por ejemplo.
La función “Tower” resuelve el problema de las “Torres de Hanoi” de forma recursiva .
Figura 133: Función revursiva para resolver las Torres de Hanoi Matlab
En esencia esta solución está basada en tres pasos: poner los n-1 discos de menor tamaño en la torre auxiliar,
una vez montada montada la torre auxiliar poner el disco más grande en la tercera torre y por ultimo pasar la
torre montada en la auxiliar al destino. Con esto hemos conseguido un problema recursivo, ya que para mover
los discos de una torre a otra uno de los pasos es mover uno de los discos de una torre a otra. Como caso base
que no depende de la recursividad es el que se tiene cuando sólo hay un disco en la torre origen, este caso no
depende de operaciones intermedias, basta con mover el disco de la torre inicial a la final.
68
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 69
El resultado de “Tower” es una matriz de movimientos que será guardada en “mMovimientos”. Que
inmediatamente será posible visualizar en la tabla creada en la interfaz. Esto viene en la última parte de la
programación de este apartado, set([Link],’data’,mMovimientos) modifica el dato de la Table poniendo
nuestra matriz de movimientos.
Este último paso para el envío por Socket, necesita la matriz de movimientos, el objeto “t” donde viene nuestro
puerto e IP y “n” el número de fichas.
En primer lugar se calculó aquí el número de movimientos que el juego necesitaría hacer según el algoritmo
recursivo y se guardó en “nmov”.
Con fwrite podemos enviar por socket la matriz de movimiento y además el número de movimientos necesarios.
Para ello antes hemos de convertirlo en formato byte con la función uint8, como particularidad, no podemos
enviar la matriz numérica como tal si no en forma de vector, por lo que se decidió que fuera un vector cuya
primera componente fuera en primer lugar el número de movimientos necesarios, tras ella la primera columna
de la matriz de movimimientos (la que corresponde a la columna del juego donde tengo que coger la ficha a
mover) y por último la segunda columna de la matriz (correspondiente a la columna del juego donde tengo que
dejar la ficha). La función fwrite además necesita el objeto TCPIP en nuestro caso “t”.
Por último, el botón de desconexión llama a la función cierre completo la cual mediante la serie de comandos
de la imagen nos permite eliminar el objeto TCPIP y por tanto la conexión. Pese a esto aun habría que cerrar la
conexión por el lado del software de RobotStudio.
El resultado final de la GUI es el mostrado en las dos imagenes siguientes. En ella podemos ver como se rellena
la matriz de movimimientos según el número de fichas que hayamos introducido. Esta puede ser enviada
haciendo conexión y pulsando el botón “enviar”.
Figura 136: GUI con matriz para Figura 136: GUI con matriz para
juego con 5 ortoedros juego con 3 ortoedros
69
70
Comunicación por socket entre RobotStudio y Matlab
70
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 71
E
n los archivos adjuntos encontramos el programa escrito en RAPID para la estación virtual, ver “11.6
Anexo E: Archivos programación RAPID”. Éste es exactamente igual que el programa para el caso real
salvo en el proceso movimiento debido a las necesidades del robot real.
Al inicio del módulo principal podemos encontrar la definición de todas las variables usadas, muchas de ellas
ya inicializadas. Seguidamente, encontramos el proceso “main”, en cuyo inicio encontramos la inicialización de
algunas variables. Inmediatamente después llama al proceso “Tporsocket” que es el encargado de realizar las
operaciones oportunas para obtener la matriz de movimientos de Matlab. Una vez obtenida dicha matriz,
procedemos a resolver la torre haciendo uso de un bucle y de los procesos “Estado” y “Movimiento”.
71
72
Programa Rapid en estación virtual
Tras su invocación, lo primero que hace el proceso son los movimientos necesarios para coger una pieza y salir
por el eje en el que estaba dicha pieza. Para decidir de que columna debe coger usará la variable ori. Supongamos
que ori vale 1. Entonces entrará en el if correspondiente y ejecutará una primera orden de aproximación paralela
a la pieza, esto se hace así para evitar colisiones con el alrededor, primero se lleva a una posición segura. Al ser
un movimiento con offsets nos estaremos moviendo en posiciones relativas al punto “Target_Torigen” en este
caso. dAprox nos da la distancia de aproximación respecto a X del movimiento. Además la coordenada Z que
nos da la altura a la que queremos coger será la que tenga col{1} que recordemos era donde se guardaban la
alturas actuales de las torres. Esta altura Z aun no está ajustada por lo que es natural pensar que cogeremos los
bloques a una altura media, por lo que restamos tamano/2 teniendo acceso a una pieza justo por su mitad. Pese
a ello, sigue haciendo falta un último ajuste ya que los dedos de la pinza son más gruesos que algunos laterales
de pieza, es por ello que se añade una pequeña altura para que no pueda chocar con otros bloques o con la base
cuando está cogiendo una pieza.
La segunda secuencia se basa en la primera. Una vez realizada la aproximación procedemos a hacer Moveldo
este comando permite movernos a la posición a la que queremos coger y tras ello activar una señal, para este
caso “CierraPinza”.
Hizo falta una espera tras esto, realizada con WaitTime, ya que si no inmediatamente se iba a otra posición sin
tiempo a que la pinza cerrase, por lo que no llegaba del todo a la posición y había problemas de alturas. Ya con
la pieza cogida procedemos a sacar la pieza del eje, se decidió a una altura de 210 mm ya que esta permitía la
salida de las piezas y no era demasiada altura.
Proceso similar ocurre con la dejaba de la pieza, ahora tendremos que llevar la pieza a la posición indicada por
des. Y con ella irnos desplazando por el eje para llegar a la altura que tenía col{des} más una altura que en
principio coincidiría con la de tamano/2 pero que al igual que para coger necesita ajuste, ya no sólo para evitar
el choque con el resto de elementos si no también porque al ser la cogida más alta de la mitad provocaría que
estuviéramos dejando la pieza a una altura más baja de la que deberíamos. Moveldo realizaría el movimiento de
colocación de la base en la posición de dejada y tras ello abriría la pinza. De igual forma que en el apartado
anterior volvemos a necesitar un WaitTime. Por último, salimos perpendicularme respeto al eje de la torre a una
distancia de seguridad dAprox para continuar con el siguiente movimiento.
72
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 73
7 SIMULACIÓN
E
ntrando en la pestaña de simulación encontramos la siguiente botonera:
Con ella podemos ejecutar nuestro código de RAPID en la estación actual y en el caso de que queramos, grabar
la simulación seleccionando la opción de reproducir, grabar en visor.
Con la opción Pausa estando en reproducción, podemos ir pausando nuestra simulación para ver que es lo que
está pasando en nuestro sistema paso a paso. Parar detiene por completo la simulación y no permite volver a
reproducir, habría que restablecer y darla reproducir de nuevo.
73
74
Simulación
Cuando estamos realizando ensayos sobre una situación, lo normal es que queramos volver a una situación de
partida cada vez que queramos y no sea necesario volver a colocar todos nuestros componentes de nuevo.
Restablecer permite al programador guardar una situación en la estación de forma que pueda volver cuantas
veces quiera a ella sin problema. E incluso también podemos tener guardadas diferentes posiciones lo cual
también es de gran utilidad. Pulsando en las opciones de Restablecer podemos guardar el estado actual para
futuros usos.
74
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 75
Por último en la simulación se hizo uso de los conjuntos de colisiones, creando dichos conjuntos podemos ver
si los diferentes objetos de nuestra estación chocan entre ellos.
Una vez clickado, nos aparecerá unas carpetas donde debemos llevar los objetos que queremos ver si colisionan
entre si, por ejemplo la “Garra_Lab” y el ortoedro de 20 mm.
75
76
Programa para robot real
L
a programación del robot real debería ser simplemente pasar el código RAPID de simulación a la
controladora directamente. Pero hay una serie de diferencias respecto al diseño 3D de gran importancia.
En primer existe una diferencia entre el WorkObject real e imaginario, por lo que debemos ajustar el
movimiento atendiendo estas difrencias. Además la pendiente de los ejes de las torres presentan cierta
inclinación por lo que el movimiento de los ortoedros por ellas no es una vertical si no que presenta cierta
pendiente. Por último, la pinza real coge las piezas con mucha fuerza haciendo impredecible su forma de dejada
y por tanto la de cogida en movimientos posteriores. Es por ello que fue necesario el diseño de una estrategia de
recolocación con la que poder coger las fichas sin problema.
76
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 77
De esta forma hemos obtenido la inclinación de los ejes de torre, pese a ello aun existe una pequeña desviación
entre las pendientes de las rectas. Por lo que en el laboratorio se hicieron pequeños ajustes para el correcto
funcionamiento.
77
78
Programa para robot real
Tras realizar los cálculos necesarios se obtuvieron las respectivas rectas de cada eje.
Pese a ello en la programación se tuvieron que ajustar un poco quedando finalmente como:
Sabiendo ahora la inclinación, en la programamación el movimiento de los bloques por los ejes de torre no es
una recta vertical, si no una recta con una leve desviación respecto a la vertical. Es por ello que según la altura a
la que vayamos a poner la pieza vamos a llevarla a una posición X diferente.
La cogida de la pieza al ser inexta y generar un ángulo y el plano paralelo a la mesa, obliga a que la bajada de
las piezas también tenga que ser corregida para que no haya ningún contacto.
78
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 79
79
80
Programa para robot real
Si la pienza cogiese y dejase las fichas con suficiente suavidad podriamos prescindir de este método. Incluso de
la base en si misma, ya que podriamos mover las torres de un sitio a otro con muchísima precisión.
En “11.4 Anexo E: Archivos programación RAPID” si abrimos el programa
“Programa_Base_Real_Con_Reposicionamiento” encontramos el proceso recolocar que es el encargado de
realizar esta operación.
Un problema añadido, debido a que la cogida y suelte de la pieza es muy brusco de nuevo, es que pueden acabar
las piezas con distinta inclinación respecto a la horizontal de la mesa. Por lo que de nuevo en el código no
podemos coger las piezas a una altura media como en nuestra programación en el ideal si no que para las distintas
alturas de pieza tendremos que cogerlas a una altura ensayada.
80
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 81
E
l mecanismo utilizado para accionar la herramienta hace que ésta coja y suelte las piezas coja las piezas
con demasiadas imprecisiones y por ello tuvimos que crear un proceso en la programación que se
encargase de la recolocación de las piezas para llevarla a una posición de cogida óptima. Es por ello que
se decidió hacer un último ajuste en la estación que emula la base real y hacer que en ésta se simule también este
mecanismo de recolocación. Sin embargo, esta tarea nos obliga a modificar el SmartComponent, ya que no está
preparado para que sus dedos sirvan para ajustar una pieza a cierta posición en posición de abierto.
Atendiendo a este problema creamos un nuevo SmartComponent a partir del anterior al que agregamos tres
plane sensor con los cuales podemos emular como al hacer contacto con los dedos de la garra se van moviendo
los bloques.
De forma similar al apartado “3.2 Creación de SmartComponent y lógica de la estación” debemos diseñar el
SmartComponent de forma que al estar activo uno de los PlaneSensor seamos capaces de arrastrar la pieza, y
una vez que desactivemos liberemos la pieza.
81
82
Cambios en la estación para simular recolocación
Recordemos también que es necesaria la creación de las señales que activen nuestros plane sensor así como
reajustar la lógica de la estación.
De esta forma ya podemos programar los movimientos de recolocación de nuestra pieza haciendo uso de la
activación de señales.
82
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 83
10 CONCLUSIONES
T
ras la conclusión de este trabajo de fin de grado, se pueden sacar distintas conclusiones.
El carácter de este proyecto hace que el creador tenga que aprender a moverse en un entorno con
bastantes similitudes a las asignaturas dadas en la escuela, pero a su vez es necesario una gran
adquisición de conocimientos para poder desarrollar todo el contenido.
El diseño de los juegos y piezas tuvo gran importancia en el desarrollo del proyecto. Resulta muy
interesante tener a disposición una impresora 3D ya que abarata mucho la creación de piezas pudiendo
de esta forma ensayar con nuestros modelos de forma rápida y económica.
Todo el trabajo desarrollado con ABB ha sido de gran utilidad, ya que en cierta manera se ha aprendido
un oficio. De hecho ahora se tiene gran habilidad con el entorno y el desarrollo de otros proyectos
requeriría muchísimo menos tiempo de aprendizaje. Prueba de ello es el último ajuste del
SmartComponent para el cual se tardó un tiempo irrelevante respecto a sus primeras componsiciones.
Poder llevar la simulación a un sistema real con todos los problemas que esto puede llegar a dar, es una
experiencia muy valiosa. En los sistemas virtuales todo funciona a la perfección una vez programado,
pero una vez queramos implantar nuestros sistemas siempre hay que tener en cuenta los pequeños
errores que hacen a un sistema real único e irrepetible. Es por ello que en la actualidad muchos los
trabajadores que se dedican a la producción en masa en la actualidad no tratan de resolver los problemas
de forma inteligentes, directamente van punto a punto programando trayectorias.
Siendo estos los puntos concluyentes más relevantes, se puede decir que la experiencia en su elaboración ha sido
bastante satisfactoria.
83
84
Bibliografía
11 BIBLIOGRAFÍA
José Luis Pozo Acosta, «Adaptación física y electrónica de un actuador eléctrico a un robot
manipulador», Trabajo Fin de Máster, 2016.
Agustín Ramos Hurtado, « Diseño, programación y simulación de estaciones robotizadas industriales
con Robotstudio», Trabajo Fin de Grado, 2016.
Mª Luisa Fernández Iglesias, «Diseño y fabricación de Garras para un IRB120 », Trabajo Fin de Grado,
2017.
Azahara Gutiérrez Corbacho, «Desarrollo de una interfaz para el control del robot IRB120 desde
Matlab», Trabajo Fin de Grado, 2014.
Fabricante ABB, «Procedimientos iniciales-IRC5 y RobotStudio », manual del operador.
Fabricante ABB, «IRC5 con FlexPendant», manual del operador.
Fabricante SMC, «Parallel Type Air Gripper Series MHZ», catálogo.
Fabricante SMC, «Pinza eléctrica de 2 dedos / con cubierta antipolvo. Serie LEHZJ», datasheet.
Apuntes de la asignatura Control y Programación de Robots de 4º GIERM, Universidad de Sevilla.
Peter So, «course materials for 2.003J / 1.053J Dynamics and Control I», Fall 2007. MIT
OpenCourseWare ([Link] Massachusetts Institute of Technology. Downloaded on [DD
Month YYYY].
84
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 85
11 ANEXO
11.1 Anexo A: Planos
En la carpeta “Diseños_Planos_y_Formatos” adjunta en el disco del proyecto se encuentran los ficheros .dwg
y .pdf de todos los elementos de la estación.
“Modelos_De_Juegos” contiene a su vez la carpeta con las distintas soluciones planteadas desde el
inicio.
o “Solucion_Con_Cilindros”>”Juegos_Cilindros_Planos”.
o “Solucion_Con_Gorritos_Para_Pinza_Angular”>”Juegos_Gorritos_Planos”.
o “Solucion_Con_Ortoedros”>”Juego_Ortoedros_Planos”.
“Pinza_Paralela_50mm”>”Dedo_Pinza_50mm” tiene los planos de las piezas creadas dentro de las
dos piezas creadas.
o “Adaptador” encontramos los planos del adaptador.
o Dedo_Pinza_Paralela_50mm” encontramos los planos del dedo creado.
“Mesa” contiene los planos de mesa.
“Base_Madera_Real” contiene los planos de la base de madera real.
85
86
Anexo
86
Diseño de una estación virtual e implantación en sistema real de un robot IRB120 87
87
88
Anexo
88