Skip to main content

1_9788491191698

Page 1

Prácticas de Robótica Articulada V-REP

Leopoldo Armesto Universidad Politécnica de Valencia


Copyright ® 2015 Todos los derechos reservados. Ni la totalidad ni parte de este libro puede reproducirse o transmitirse por ningún procedimiento electrónico o mecánico, incluyendo fotocopia, grabación magnética, o cualquier almacenamiento de información y sistema de recuperación sin permiso escrito de los autores y del editor. En caso de erratas y actualizaciones, la Editorial Tirant lo Blanch publicará la pertinente corrección en la página web www.tirant.com.

© TIRANT LO BLANCH EDITA: TIRANT LO BLANCH VALENCIA TELFS.: 96/361 00 48 - 50 Email: tlb@tirant.com www.tirant.com ISBN: 978-84-9119-169-8 ´ MAQUETA:

Si tiene alguna queja o sugerencia, envíenos un mail a: atencioncliente@tirant.com. En caso de no ser atendida su sugerencia, por favor, lea nuestro Procedimiento de quejas en: www.tirant.net/index.php/empresa/politicas-de-empresa


Pr´ acticas de Rob´ otica Articulada con V-REP Universidad Polit´ecnica de Valencia Leopoldo Armesto


Pr´ actica 1 Introducci´ on al Simulador V-REP 1.1.

Descripci´ on

V-REP (Virtual Robot Experimentation Platform) [12] es un simulador de rob´otica con una extensa capacidad, funcionalidades y APIs (conjunto de funciones y m´etodos para ser utilizado por otros software). El simulador de rob´otica V-REP dispone de una interfaz o entorno de desarrollo (IDE) en la que cada modelo u objeto est´a basado en una arquitectura de control distribuido (puede ser controlado por un script propio, un plugin, una aplicaci´on cliente remota a trav´es de su API, etc). Esto hace ideal a la plataforma de simulaci´on en un entorno multi-robot. Los controladores de los robots pueden ser escritos en C/C++, Python, Java, Lua, Matlab o Urbi. La siguiente lista son s´olo una de las posibles aplicaciones de uso de V-REP: Simulaci´on de sistemas de fabricaci´on automatizados. Monitorizaci´on remota. Control de hardware. Prototipado r´apido y verificaci´on. Monitorizaci´on de seguridad. Ense˜ nanza de rob´otica. Presentaci´on de producto. V-REP puede ser utilizado como una aplicaci´on individual (a trav´es de su IDE) o puede ser incrustada en una aplicaci´on cliente principal. Dispone de un int´erprete de Lua (lenguaje de programaci´on) que lo hace muy vers´atil con la capacidad de combinar funcionalidades de alto y bajo nivel para obtener resultados espectaculares con pocas l´ıneas de c´odigo. 9


´ ´ AL SIMULADOR V-REP PRACTICA 1. INTRODUCCION

10

Figura 1.1: Pr´actica 1. Tutorial robot RobotArm.

1.2.

Eslabones del brazo rob´ otico

Con objeto de introducir las diversas funcionalidades del software, utilizaremos un brazo robot, al que llamaremos robot RobotArm (Brazo Rob´otico de la Universidad Carlos III de Madrid, por Antonio Castro [5]). Se trata de un brazo robot imprimible con impresoras 3D de muy bajo coste ligeramente adaptado con respecto al dise˜ no original. Lo que obtendremos tras la realizaci´on de esta pr´actica nos permitir´a tener un conocimiento del simulador cara a realizar el resto de pr´acticas y trabajo de la asignatura. El resultado esperado de esta pr´actica se muestra en la figura 1.1. Mencionar que en realidad el dise˜ no del robot original incluye una articulaci´on interna en el eslab´on 1, que aqu´ı se ha agrupado en una sola pieza por simplicidad. Por tanto, deb´ eis tener en consideraci´ on que los nombres de los eslabones de la versi´ on impresa del robot y los nombres de los eslabones de la versi´ on simulada no coinciden, de forma intencionada. Actividad Primero de todo, empezar una sesi´on nueva de V-REP. El simulador muestra una escena vac´ıa por defecto. V-REP distingue dos tipos de geometr´ıas, las puras y las no-puras. Las geometr´ıas puras son primitivas tipo esferas, cilindros, prismas, etc. que permiten el c´alculo r´apido de colisiones con lo que son ideales para simular efectos que no necesariamente se tienen porque renderizar. Por contra, las geometr´ıas


´ 1.2. ESLABONES DEL BRAZO ROBOTICO

11

no-puras suelen tener un coste computacional muy elevado de c´alculo de colisiones, ya que est´an compuestas por facetas. Sin embargo, las tarjetas gr´aficas est´an preparadas para este prop´osito ya que disponen de hardware especializado que permite trabajar con geometr´ıas muy diversas y renderizarlas, con lo que son ideales para la visualizaci´on. Por lo tanto, normalmente las geometr´ıas no-puras se utilizar´an s´olo para renderizado (lo que el usuario ve), mientras que las geometr´ıas puras las utilizaremos para poder ejecutar rutinas propias del simulador (colisiones, din´amica, etc.) que el usuario no tiene porqu´e ver. V-REP dispone de un conjunto de diecis´ eis capas (estructuradas en dos filas de ocho capas cada una) en las que ubicar cada uno de los objetos que creamos. Por defecto las ocho primeras capas son visibles (la primera fila) y por conveniencia para hacer un objeto no visible lo pasaremos a su capa equivalente en la segunda fila (capas de la nueve a la diecis´eis). Un objeto puede estar en varias capas simult´aneamente. Las capas en las que un objeto es visible pueden modificarse dentro de las propiedades comunes del objeto, seg´ un se indica en la figura 1.2 y haciendo doble-clic sobre el icono del objeto y pulsando al bot´on “Common”. Para generar geometr´ıas no-puras podemos o bien importarlas o crearlas. En nuestro caso importaremos las geometr´ıas a partir de los ficheros STL que se utilizan para imprimir el robot RobotArm en los ficheros [1]. Para ello accedemos a [File → Import → Mesh] y seleccionamos los ficheros (de uno en uno): “eslabon0.stl”, “eslabon1a.stl”, “eslabon1b.stl”, “eslabon2.stl”, “eslabon3.stl”, “eslabon4.stl”, “eslabon5.stl”, “servo1.stl”, “servo2.stl”, “servo3.stl”, “servo4.stl”, “servo5.stl”, “servo6.stl”, “servo7.stl”, “servo8.stl”, “pinza base.stl”, “engranaje izquierdo.stl”, “engranaje derecho.stl”, “dedo izquierdo.stl”, “dedo derecho.stl”, “barra izquierdo.stl” y “baon son metros y el vector Z apunta rra izquierda.stl”. Las unidades de importaci´ hacia arriba. A cada pieza importada, le cambiaremos el nombre para poder identificarla adecuadamente. Para ello, en la ventana que pone “Scene hierarchy”, veremos un objeto con nombre “STL Imported”, que si hacemos doble-clic sobre el nombre nos permitir´a cambiarlo. Para posicionar/orientar el objeto en el entorno de simulaci´on debemos primero seleccionarlo y luego pulsar los iconos “object/item shift” o “object/item rotate” (figura 1.3), que se encuentra en el men´ u de iconos de la barra superior. Importar las piezas anteriormente mencionadas con la posici´on y orientaci´on que se indican en la tabla 1.1. En principio, las piezas est´an correctamente posicionadas, mientras que la orientaci´on depende de la propia geometr´ıa de la pieza. Por conveniencia, tras importar cada una de las piezas, accederemos al men´ u [Edit → Reorient bounding box → with reference of world], de esta forma la orientaci´on de las piezas ser´a en la configuraci´on que denotaremos como HOME, siempre cero. Nos aseguraremos que la opci´ on Static est´ a activada, seg´ un se especifica en la tabla 1.1. Para ello, accedemos dentro de las propiedades din´amicas del objeto tras pulsar el bot´on Show dynamic properties dialog dentro del cuadro de di´alogo Scene Object Properties (ver figura 1.2). Los objetos est´aticos no pueden ser directamente actuados a trav´es de articulaciones controladas por


´ ´ AL SIMULADOR V-REP PRACTICA 1. INTRODUCCION

12

Figura 1.2: Pr´actica 1. Propiedades comunes de los objetos.

Figura 1.3: Pr´actica 1. Iconos para posicionar y orientar los objetos.

par/fuerza, si no que su posici´on y orientaci´on depender´a de la posici´on y orientaci´on de otros objetos. No tienen din´amica, es decir, ni masa ni inercia y por lo general los usaremos para objetos de geometr´ıa no-puras, si bien pueden haber otros casos, en los que queramos que una geometr´ıa pura no tenga propiedades din´amicas. Si una articulaci´on tuviera que mover un objeto din´amico, entonces deber´a estar o en modo par/fuerza o tener la casilla de modo h´ıbrido activada (estos conceptos no se entender´an hasta la pr´actica 7, con lo que por el momento no son necesarios). Aseguraros que la posici´ on y la orientaci´ on coinciden con las indicadas en la tabla 1.1.

1.3.

Articulaciones del brazo rob´ otico

Actividad Las articulaciones pueden ser del tipo revoluci´on, prism´aticas o esf´ericas. En nuestro caso, todas las articulaciones del robot son del tipo revoluci´on. Para crear una articulaci´on accedemos al [Menu Add → Joint → Revolute]. Renombraremos las articulaciones


´ 1.3. ARTICULACIONES DEL BRAZO ROBOTICO

13

Objeto Posici´on [m] Orientaci´on [◦ ] Static eslabon0 {0,-0.0044,0.0245} {0,0,0} S´ı eslabon1a {0,-0.0044,0.0474} {0,0,0} S´ı eslabon1b {0,-0.0044,0.0835} {0,0,0} S´ı eslabon2 {0.0384,-0.0083,0.1334} {0,0,0} S´ı eslabon3 {0.0376,0.0006,0.1691} {0,0,0} S´ı eslabon4 {-0.0417,-0.0034,0.1712} {0,0,0} S´ı eslabon5 {-0.0556,0.0022,0.1659} {0,0,0} S´ı servo1 {-0.009,-0.0049,0.0240} {0,0,0} S´ı servo2 {-0.0094,-0.0049,0.0715} {0,0,0} S´ı servo3 {0,0.0386,0.0849} {0,0,0} S´ı servo4 {0.0664,-0.0078,0.1712} {0,0,0} S´ı servo5 {-0.0077,0.0006,0.1656} {0,0,0} S´ı servo6 {-0.0465,-0.0325,0.1712} {0,0,0} S´ı servo7 {-0.0617,0.0006,0.1655} {0,0,0} S´ı servo8 {-0.0955,-0.0067,0.1618} {0,0,0} S´ı pinza base {-0.0945,0.0006,0.171} {0,0,0} S´ı engranaje izquierdo {-0.1049,-0.015,0.1791} {0,0,0} S´ı engranaje derecho {-0.1011,0.0186,0.179} {0,0,0} S´ı dedo izquierdo {-0.1369,-0.0253,0.173} {0,0,0} S´ı dedo derecho {-0.1369,0.0264,0.173} {0,0,0} S´ı barra derecha {-0.1227,0.0163,0.1731} {0,0,0} S´ı barra izquierda {-0.1228,-0.0154,0.1731} {0,0,0} S´ı Tabla 1.1: Pr´actica 1. Posiciones, orientaciones y propiedades din´amicas de las piezas del robot RobotArm.


14

´ ´ AL SIMULADOR V-REP PRACTICA 1. INTRODUCCION

reci´en creadas e introduciremos el nombre “articulacionX” siendo “X” el n´ umero de la articulaci´on. Por conveniencia las articulaciones las nombraremos a partir del n´ umero 1. Las articulaciones de la 1 a la 6 corresponden a las articulaciones centradas en los ejes de los servos, mientras que las articulaciones de la 7 a la 10 son la del servo 8 y los orificios del dedo izquierdo de la pinza y las articulaciones de la 11 a la 14 son la de los orificios del dedo derecho (incluida la del engranaje derecho). Las articulaciones 10 y 14 son las de los orificios de la “pinza base” con las barras. V´ease la figura 1.4 para mayor aclaraci´on al respecto del nombre asignado a cada una de las articulaciones de la pinza. Por defecto, las articulaciones est´an en el modo joint is in force/torque mode, sin embargo, por el momento utilizaremos el modo joint is in passive mode para las articulaciones de la 1 a la 7, dado que los objetos que mover´an, es decir, los eslabones, son todos est´aticos. La articulaci´on 11, del engranaje derecho, es una articulaci´on dependiente de la articulaci´on 7, con lo que seleccionaremos el modo joint is in dependent mode y luego pulsaremos al bot´on “Adjust dependency equation” e introduciremos la ecuaci´on tal y como se muestra en la figura 1.5. Este modo nos permitir´a simular el mecanismo del engranaje de forma que el a´ngulo de una articulaci´on ser´a replicado por la otra. Es importante considerar aqu´ı la relaci´on entre los l´ımites de las articulaciones 7 y 11, ya que son opuestos. Es decir, si la articulaci´on 7 tiene como valor m´aximo articular 30 la articulaci´on 11 debe de tener −30. Estos par´ametros est´an correctamente reflejados en la tabla 1.2. Las articulaciones de la 8 a la 14 (a excepci´on de la 11) las fijaremos en el modo joint is inverse kinematics mode que nos permitir´a dejar que sea el propio programa de V-REP el que calcule la orientaci´on que deben de tener estas articulaciones con objeto de resolver el mecanismo de la pinza (esto no se ver´a hasta la secci´on 1.5). En las propiedades de cada objeto articulaci´on, cuadro de di´alogo Scene Object Properties podemos tambi´en modificar el aspecto que tiene a partir de los par´ametros Joint Length y Joint diameter, estableced dichos valores seg´ un se especifica en la tabla 1.2. Por defecto las articulaciones aparecen en la capa dos (en el apartado de las propiedades comunes), si bien por conveniencia, las pasaremos a la capa diez (justo la de abajo). La tabla 1.2 muestra las propiedades que debe de tener cada articulaci´on mientras que la tabla 1.3 muestra su posici´on y orientaci´on (fijaos especialmente en verificar que la posici´ on y la orientaci´ on est´ an como corresponde). Las propiedades de las articulaciones las localizaremos en el cuadro de di´alogo Scene Object Properties, siendo las articulaciones 1, 2, ..., 7 y 11 no c´ıclicas (la casilla Position is cyclic debe estar desactivada) con los rangos que se especifican en la tabla 1.2. A las articulaciones de la 8 a la 14 (a excepci´on de la 11), al no estar motorizadas ni limitadas por ning´ un mecanismo, las dejamos con la opci´on c´ıclica activada.


´ 1.3. ARTICULACIONES DEL BRAZO ROBOTICO

Figura 1.4: Pr´actica 1. Articulaciones de la pinza

Figura 1.5: Pr´actica 1. Ecuaci´on de dependencia de la articulaci´on 11.

Objeto Modo Long. [m] Di´am. [m] Pos. Min. [◦ ] Rango [◦ ] articulacion1 Pasivo 0.003 0.1 -90 180 articulacion2 Pasivo 0.1 0.01 -20 90 articulacion3 Pasivo 0.1 0.01 -67.5 90 articulacion4 Pasivo 0.025 0.01 -90 180 articulacion5 Pasivo 0.1 0.01 -90 180 articulacion6 Pasivo 0.025 0.01 -90 180 articulacion7 Movimiento 0.02 0.0025 -15 45 articulacion8 Cin. Inversa 0.02 0.0025 articulacion9 Cin. Inversa 0.02 0.0025 articulacion10 Cin. Inversa 0.02 0.0025 articulacion11 Dependiente 0.02 0.0025 -30 45 articulacion12 Cin. Inversa 0.02 0.0025 articulacion13 Cin. Inversa 0.02 0.0025 articulacion14 Cin. Inversa 0.02 0.0025 Tabla 1.2: Pr´actica 1. Propiedades de las articulaciones.

15


´ ´ AL SIMULADOR V-REP PRACTICA 1. INTRODUCCION

16

Objeto articulacion1 articulacion2 articulacion3 articulacion4 articulacion5 articulacion6 articulacion7 articulacion8 articulacion9 articulacion10 articulacion11 articulacion12 articulacion13 articulacion14 Tabla 1.3: Pr´actica 1.

Posici´on [m] Orientaci´on [◦ ] {0,-0.005,0.0475} {0,0,0} {0,-0.005,0.095} {90,0,0} {0.0758,-0.005,0.1715} {90,0,0} {-0.026,0,0.1715} {0,90,0} {-0.0525,0,0.1715} {90,0,0} {-0.0755,0,0.1715} {0,90,0} {-0.0955,-0.0112,0.182} {0,0,0} {-0.1163,-0.0321,0.182} {0,0,0} {-0.1331,-0.0255,0.182} {0,0,0} {-0.1126,-0.005,0.182} {0,0,0} {-0.0955,0.012,0.182} {0,0,0} {-0.1163,0.0328,0.182} {0,0,0} {-0.1331,0.0265,0.182} {0,0,0} {-0.1126,0.0063,0.182} {0,0,0} Posiciones y orientaciones de las articulaciones.

Actividad Adem´as de las articulaciones, nos har´a falta crear objetos del tipo dummy. Son objetos cuyo fin no es otro que el de poder posicionar o relacionar determinados objetos entre s´ı. T´ıpicamente los utilizaremos para calcular la cinem´atica inversa del robot o seguir trayectorias. Crearemos cuatro objetos del tipo dummy y los posicionaremos en los dos orificios comunes entre el objeto “pinza base” y los objetos de las barras (dos objetos dummies a cada lado) accediendo a [Menu Add → Dummy]. Renombraremos los objetos de forma que se llamen “dummyIzqPinza”, “dummyIzqBarra” para los dummies del orificio de la derecha y “dummyDerPinza”, “dummyDerBarra” para los dummies del orificio de la derecha. Es importante que los dummies de un mismo dedo (izquierdo o derecho) tengan la misma posici´ on y orientaci´ on. Posicionaremos los dummies de la izquierda en la misma posici´ on que la articulaci´ on 10 y los dummies de la derecha en la misma posici´ on que la articulaci´ on 14. V-REP permite copiar propiedades de un objeto desde otro objeto. Pod´eis, por ejemplo, seleccionar “dummyIzqPinza” y, manteniendo el bot´on SHIFT pulsado, seleccionar el objeto “articulaci´on” (desde el cual queremos copiar las propiedades). Despu´es, para copiar la propiedad de la posici´on, accedemos al cuadro de di´alogo “Object/Item position/orientation” pinchando sobre el icono de la figura 1.3 y pulsar al bot´on “Apply to selection”, tal y como se muestra en la figura 1.6.


1.4. RELACIONES DE PARENTESCO

17

Figura 1.6: Pr´actica 1. Copiar propiedades de un objeto a otro.

1.4.

Relaciones de parentesco

Ahora es el momento de establecer la relaci´on adecuada entre los eslabones, las articulaciones y el resto de objetos de la simulaci´on. El objeto base ser´a el eslab´on 0, al cual activaremos la opci´on Object is model base en las propiedades comunes del cuadro de di´alogo Scene Object Properties. Observar´eis que aparece un punto justo a la izquierda del icono en los objetos que son modelos base tras activarlo. Esto permitir´a tratar a todo el robot como un u ´nico objeto (para facilitar la copia entre diferentes escenas). La figura 1.7 muestra las relaciones de parentesco entre los diferentes objetos. Para hacer un objeto hijo de otro objeto (padre), simplemente debemos seleccionar el objeto hijo sobre su icono, arrastrarlo hasta el objeto padre y soltar. Para deshacer la relaci´on de parentesco, repetid la operaci´on, pero soltando el objeto hijo sobre la escena principal. Se observa que, por lo general, para el caso de cadenas cinem´aticas abiertas, haremos que un eslab´ on dependa de la articulaci´ on con su mismo n´ umero. Es eslab´on 0 no se mueve y por tanto (por el momento) no depende de ning´ un otro objeto. Para las cadenas cinem´aticas cerradas como el caso de la pinza, debemos hacer hijos a los dummies “dummyIzqPinza” y “dummyDerPinza” de su objeto base, en este caso “pinza base”. Los dummies de la barra (el otro extremo de la cadena cinem´atica) deben ser hijos de la u ´ltima de las articulaciones.


´ ´ AL SIMULADOR V-REP PRACTICA 1. INTRODUCCION

18

(a) Objetos del brazo

(b) Objetos de la pinza

Figura 1.7: Pr´actica 1. Relaci´on entre los objetos (eslabones, articulaciones y servos).

1.5.

Mecanismo de la pinza

Ahora pretendemos configurar los mecanismos de cadena cerrada para los elementos de la pinza, de forma que sea VREP quien calcule los valores de las articulaciones de los orificios (articulaciones de la 8 a la 14, exceptuando a la articulaci´on 11). El objetivo es establecer una restricci´on geom´etrica entre los objetos dummies que hemos creado anteriormente, de forma que sea cual sea el valor de la articulaci´on 7 (asociada al servo 8), VREP debe de calcular los ´angulos correspondientes para que los dummies siempre permanezcan coincidentes. En las propiedades de cada uno de los dummies de cada orificio seleccionamos en el men´ u despleglable “Linked dummy” al dummy correspondiente del mismo orificio y en el men´ u desplegable “Link type” seleccionamos “GCS, overlap constraint”. Observar´eis que en la ventana “Scene Hierarchy” aparecen los dummies relacionados con una flecha de color (verde para el caso de la relaci´on “GCS, overlap constraint”). V-REP permite establecer determinadas relaciones para el c´alculo de la cinem´atica inversa. De momento, utilizaremos la herramienta GCS (Geometric Constraint Solver) que permite fijar los valores de las articulaciones para el caso de mecanismos de cadena cerrada, como es el caso del mecanismo de la pinza. Si seleccionamos el objeto “pinza base” y accedemos a [Menu Tools → Calculation modules] aparecer´a el cuadro de di´alogo “Calculation Modules”. De entre todas las opciones, nos centraremos, por el momento en el c´alculo realizado por el “Geometric constraint solver” (v´ease figura 1.8), pulsando al bot´on correspondiente. Si pulsamos al bot´on “Insert new object”, habremos establecido la relaci´on geom´etrica entre los objetos.


1.5. MECANISMO DE LA PINZA

19

Figura 1.8: Pr´actica 1. Configuraci´on de la herramienta Geometric constraint solver.

Ejercicio 1: Simulando el robot Ahora ya estamos en disposici´on de simular el robot. Si pulsamos al bot´on “Start/Resume simulation” justo en la barra de iconos de la parte superior, comenzar´a la simulaci´on. De momento no hace nada impresionante, pero al menos, ya hab´eis conseguido ensamblar vuestro primer robot en V-REP.


Pr´ actica 2 Ampliaci´ on de Conocimientos de V-REP En esta pr´actica profundizaremos en el conocimiento del simulador V-REP. Retomaremos la simulaci´on realizada durante la pr´actica 1 y renombraremos el fichero con otro nombre. Por un lado aprenderemos a utilizar controles de usuario. Por otro lado, aprenderemos a programar y utilizar algunas funciones b´asicas de V-REP y finalmente incorporaremos elementos de representaci´on gr´afica, que completar´an el conocimiento de V-REP en sus aspectos m´as b´asicos.

2.1.

Controles de usuario

V-REP permite crear controles de usuario de forma bastante sencilla que nos permiten, en tiempo de simulaci´on establecer determinadas opciones o modificar valores a determinadas variables o par´ametros. En nuestro caso, utilizaremos barras de deslizamiento para poder establecer la posici´on de las articulaciones. Actividad Para crear un control de usuario, pinchamos sobre el icono situado en el panel de la izquierda que pone Toggle custom user interface edit mode. Si pulsamos el bot´on Add new user interface crearemos una nueva interfaz, de la que debemos establecer el tama˜ no del a´rea de trabajo client size-x y client size-y. Lo recomendable es utilizar un tama˜ no de 10 para el tama˜ no en client size-x y 2 por cada elemento que queramos incorporar en client size-y. Nuestro objetivo es introducir 7 barras de deslizamiento para la posici´on deseada de cada articulaci´on, por tanto necesitamos al menos 14 de tama˜ no en client size-y. Sobre el nuevo control creado pinchamos en la barra del t´ıtulo e introducimos Brazo Robot en el campo Button label (up state). Creamos una etiqueta, con toda la primera fila seleccionada (pulsando CTRL), hacemos click sobre el bot´on Insert merged button, seleccionamos el tipo Label y desmarcamos la opci´on Horizontally centered, marcamos la opci´on Ignore

21


22

´ ´ DE CONOCIMIENTOS DE V-REP PRACTICA 2. AMPLIACION

Figura 2.1: Pr´actica 2. Creaci´on de un control de usuario.

mouse e introducimos el nombre Art. 1: en la etiqueta. De forma similar creamos una barra de deslizamiento o Slider (la opci´on Ignore mouse debe estar marcada). Repetimos el procedimiento para introducir el resto de las articulaciones.

Cada elemento que introducimos en un control de usuario tiene un manejador o handle al cual le corresponde un n´ umero. Este n´ umero es importante pues nos permitir´a referirnos a ´el para conocer su estado o el valor. En la figura 2.1 se muestra el resultado de la interfaz de usuario esperada, as´ı como los valores de los manejadores para cada uno de los controles: la barra de deslizamiento para los servos en este caso deber´ıan ser: 2, 4, 6, 8, 10, 12 y 14, aunque podr´ıan ser otros n´ umeros.

2.2.

Programaci´ on con V-REP

La forma m´as sencilla de controlar un robot en V-REP es a trav´es de un child script con lenguaje Lua. Aprenderemos su uso a trav´es de diferentes ejemplos, si bien es recomendable utilizar tutoriales y manuales de referencia que encontrar´eis en internet si ten´eis dudas adicionales [7]. Cada objeto de V-REP puede disponer de un script que permite el control de ese objeto (u otros objetos). A continuaci´on se realizar´an un conjunto de actividades cuyo prop´osito no es m´as que os familiaric´eis con la API (Application Program Interface) de V-REP. Pod´eis acceder a la documentaci´on a partir de [Help → Help topics] y despu´es accediendo a [Writing code in and around V-REP → V-REP API framework → Regular API → Regular API function list (by category)]. El siguiente trozo de c´odigo muestra algunos de los elementos m´as comunes de la sintaxis de Lua (no se debe implementar):


´ CON V-REP 2.2. PROGRAMACION

23

argIn1=2 argIn2=3 argOut1,argOut2,argOut3=funcion(argIn1,argIn2) if ((argOut1[1]==2) and (argOut1[2]==3)) then for i=1,argOut[2],1 do argOut3=math.cos(argOut3+math.pi/2) end end

El c´odigo en s´ı mismo no pretende representar nada, simplemente es la forma de introducir el uso de expresiones t´ıpicas para el control de flujo (if, for), llamadas de funciones (observa c´omo se pasan los argumentos de entrada y salida) y el uso de funciones trigonom´etricas (utilizando la librer´ıa “math”), ya que estas ser´an las m´as frecuentes. No obstante aprenderemos el uso del lenguaje conforme se vayan realizando los ejercicios y ejemplos. A continuaci´on se muestran ejemplos de c´odigo t´ıpicamente utilizados para introduciros a la sintaxis de Lua: -- Esto es un comentario -- Inicializacion de arrays v1={1,2,3} -- Inicializacion de un vector con tres elementos v2={} -- Inicializacion vacia for i=1,#v1,1 do -- #v1 contiene el tama~ no del vector v2[i]=v1[i] -- Inserta el elemnto v1[i] al final de v2 end -- Muestro el resultado en consola print("v2={" .. v2[1] .. "," .. v2[2] .. "," .. v2[3] .. "}") -- Inicializacion de una matriz como vector de vectores m={{1,2,3},{4,5,6},{7,8,9}} -- Calculo la traza de la matriz como vector de vectores traza=m[1][1]+m[2][2]+m[3][3] -- Calculos matem´ aticos (trigonom´ etricos) A=0.3 B=0.4 C=math.sqrt(A*A+B*B) -- Teorema del coseno angA=math.acos((B*B+C*C-A*A)/(2*B*C)) angB=math.acos((A*A+C*C-B*B)/(2*A*C)) angC=math.acos((A*A+B*B-C*C)/(2*A*B)) -- Arcotangente en los cuatro cuadrantes posX = 3 posY = 2 theta=math.atan2(posY,posX)


´ ´ DE CONOCIMIENTOS DE V-REP PRACTICA 2. AMPLIACION

24

Actividad Para crear un script accederemos a [Men´ u Tools → Scripts] del tipo non-threaded y lo asociamos el objeto eslabon0. Dentro del script (hacemos doble-click para acceder al icono justo al lado a la derecha del nombre del objeto) podemos introducir c´odigo Lua asociado a ese objeto. El siguiente c´odigo de ejemplo obtiene el manejador de la interfaz de usuario con la instrucci´on simGetUIHandle y muestra por consola sus valores (en el men´ u de la izquierda hay un icono que indica “User settings”, dentro del cuadro de di´alogo correspondiente, hay una opci´on que indica “Hide console window” que debemos desactivar). if (simGetScriptExecutionCount()==0) then -- Put some initialization code here ctrlID=simGetUIHandle("UI") sliderID={2,4,6,8,10,12,14} end simHandleChildScript(sim_handle_all_except_explicit) -- Put your main code here print('#########################') print('SLIDERS') for i=1,#sliderID,1 do slider_i = simGetUISlider(ctrlID,sliderID[i]) print('slider' .. i .. '=' .. slider_i) end if (simGetSimulationState()==sim_simulation_advancing_lastbeforestop) then -- Put some restoration code here end

El manejador no es m´as que un valor (espec´ıfico de V-REP) que se necesita para poder hacer uso de otras funcionalidades, como por ejemplo el caso de la funci´on simGetUISlider. Esta funci´on devuelve un valor de 0 a 1000 con la posici´on relativa del slider. La funci´on requiere de dos argumentos de entrada, el primero es el manejador del control de usuario y el segundo el n´ umero de bot´on. Se ha creado una lista con los n´ umeros de bot´on correspondientes a la interfaz de usuario anteriormente creada. Obs´ervese que se ha hecho uso de un bucle for para mostrar los valores de los diferentes sliders. En vez de especificar directamente el n´ umero 7 haciendo referencia a los sliders que tiene la interfaz de usuario, hemos usado el operador # para indicar el tama˜ no de la lista anteriormente creada. Es decir, #sliderID es en realidad 7 para el ejemplo mostrado. Por otro lado, para mostrar cualquier mensaje de texto o resultado por consola, hemos hecho uso de la instrucci´on print que permite concatenar cadenas de texto utilizando las


´ CON V-REP 2.2. PROGRAMACION

25

comillas simples y n´ umeros mediante el operador .. (equivale al operador << de C++ para la concatenaci´on de strings). Actividad Ahora vamos a obtener las posiciones y orientaciones de las articulaciones y mostrar su valor por pantalla. Esto nos permitir´a por un lado aprender c´omo obtenemos los manejadores de objetos que tenemos creados en nuestra simulaci´on y por otro lado, nos permite utilizar funciones b´asicas para conocer la posici´on y orientaci´on de los objetos. La instrucci´on simGetObjectHandle permite obtener el manejador de objetos de la simulaci´on. El u ´nico argumento de entrada que requiere es una cadena de texto con el nombre del objeto. Aqu´ı asumimos que el nombre de todas y cada una de las articulaciones sigue un patr´on “articulacionX”, siendo X el n´ umero de la articulaci´on empezando por 1. Si hab´eis utilizado otro patr´on, deb´eis por tanto adaptar el siguiente c´odigo de forma conveniente (el c´odigo s´olo afecta a la parte del c´odigo de inicializaci´on): -- C´ odigo en la inicializaci´ on qID={} for i=1,7,1 do qID[i]=simGetObjectHandle('articulacion' .. i) end -- Mostramos las posiciones iniciales print('POSICIONES ARTICULACIONES INICIALES') for i=1,#qID,1 do pos_i=simGetObjectPosition(qID[i],-1) print('q' .. i .. '={' .. pos_i[1] .. ',' .. pos_i[2] .. ',' .. pos_i[3] .. '}') end print('ORIENTACIONES ARTICULACIONES INICIALES') for i=1,#qID,1 do ori_i=simGetObjectOrientation(artID[i],-1) print('q' .. i .. '={' .. ori_i[1] .. ',' .. ori_i[2] .. ',' .. ori_i[3] .. '}') end end

Como se puede observar, la instrucci´on qID={} crea una lista vac´ıa, mientras que con la instrucci´on qID[i] agrega los manejadores a dicha lista de forma din´amica. Por tanto, ahora podemos acceder a diferentes propiedades de las articulaciones haciendo referencia al elemento correspondiente de la lista. Este es el caso de las instrucciones simGetObjectPosition(qID[i],-1) y simGetObjectOrientation(qID[i],-1),


26

´ ´ DE CONOCIMIENTOS DE V-REP PRACTICA 2. AMPLIACION

que obtienen el valor absoluto (con respecto al mundo). Estas dos funciones, devuelven una lista con tres elementos cada una con las posiciones X, Y, Z y orientaciones Alpha (en X), Beta (en Y) y Gamma (en Z), respectivamente. Los valores de dichas posiciones y orientaciones los mostramos por consola mediante la instrucci´on print.

Ejercicio 2: L´ımites de las articulaciones Ahora se pide que mostr´eis por consola los l´ımites de cada una de las articulaciones en la parte de inicializaci´on del c´odigo. La funci´on a utilizar es simGetJointInterval, que devuelve dos valores, primero una variable booleana indicando si la articulaci´on es c´ıclica o no y segundo un vector o tabla con los intervalos. Su uso esperado es como se indica, si bien deb´eis leer la documentaci´on correspondiente (en la figura 2.2) si necesit´ais ampliar la informaci´on: cyclic,interval=simGetJointInterval(artID[i])

El vector de los intervalos tiene dos elementos, el primero devuelve el valor del a´ngulo m´ınimo de la articulaci´on y el segundo devuelve su rango. Deb´eis almacenar los l´ımites f´ısicos de las articulaciones en dos listas (inicialmente vac´ıas) qMin y qMax y mostrarlas por consola. Despu´es, deb´eis modificar la parte del c´odigo principal para que el programa deje de mostrar por consola el valor del slider de 0 a 1000 y en su lugar muestre los valores a introducir a las articulaciones en radianes. Para ello, debemos utilizar los l´ımites de las articulaciones para convertir la variable slider[i] (devuelta por la funci´on simGetUISlider con valores de 0 a 1000) en radianes seg´ un la siguiente expresi´on: qi =

slideri ∗ (qM ax,i − qM in,i ) + qM in,i 1000

(2.1)

siendo slider[i] ≡ slideri el valor obtenido con la funci´on simGetUISlider y qM in,i y qM ax,i los valores m´ınimo y m´aximo de las articulaciones (est´an almacenados en las listas qMin y qMax). Almacenar los valores de las articulaciones en una lista con nombre q.

Ejercicio 3: Moviendo el robot mediante el control de usuario A partir del valor almacenado en la variable qi , debemos ahora modificar el a´ngulo de la articulaci´on correspondiente de la simulaci´on. La funci´on a utilizar es simSetJointPosition, que permite especificar como primer argumento el manejador


Turn static files into dynamic content formats.

Create a flipbook
1_9788491191698 by Editorial Tirant Lo Blanch - Issuu