Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Memoria Final PDF
Memoria Final PDF
Prefacio: ........................................................................................................................ 4
1.1
1.2
1.3
1.4
1.5
Introduccin. ...................................................................................................... 7
Historia de la robtica. ...................................................................................... 7
Bases de la robtica actual ................................................................................ 8
Definicin de Robot............................................................................................ 9
Lmites de la robtica actual........................................................................... 10
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
Introduccin ..................................................................................................... 12
El Brazo Robot ................................................................................................. 12
Grados de libertad ........................................................................................... 12
Articulaciones................................................................................................... 14
Sistemas de coordenadas ................................................................................. 14
Volumen de trabajo ......................................................................................... 15
Actuadores ........................................................................................................ 16
El controlador................................................................................................... 18
Dispositivos sensoriales.................................................................................... 18
Elementos terminales....................................................................................... 21
3.1
3.2
3.3
3.4
3.5
3.6
Introduccin ..................................................................................................... 23
Geometra 3D ................................................................................................... 23
Cambio de escala.............................................................................................. 25
Traslacin ......................................................................................................... 25
Rotacin ............................................................................................................ 25
Rotacin alrededor de un eje arbitrario ........................................................ 26
4.1
4.2
4.3
4.4
Introduccin. .................................................................................................... 31
El problema Cinemtico Directo .................................................................... 32
Algoritmo de Denavit-Hartenberg ................................................................. 33
Cinemtica Inversa .......................................................................................... 37
5.1
5.2
Introduccin ..................................................................................................... 38
Representacin de traslacin 3D y orientacin ............................................. 38
-1-
1.1
1.2
1.3
1.4
1.5
1.6
Introduccin. .................................................................................................... 42
SICON-BOT. .................................................................................................... 43
Objetivos de la primera versin...................................................................... 43
Posibles mejoras futuras.................................................................................. 44
Requisitos mnimos. ......................................................................................... 44
Inicializacin..................................................................................................... 45
2.1
2.2
2.3
2.4
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.10
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
Introduccin ..................................................................................................... 70
Inicializacin de ventana inicial y mens desplegables ................................ 71
Entorno de creacin de robots ........................................................................ 73
Aadir elemento de traslacin ........................................................................ 76
Aadir elemento de rotacin........................................................................... 78
Aadir elemento eslabn ................................................................................. 80
Aadir elemento base ...................................................................................... 81
Posicionar y dibujar por primera vez el elemento traslacin ...................... 82
Posicionar y dibujar por primera vez el elemento rotacin......................... 85
Posicionar y dibujar por primera vez el elemento eslabn .......................... 88
Posicionar y dibujar por primera vez el elemento base ............................... 91
-2-
Rotar punto respecto a ejes x e y que pasan por otro punto dado .............. 94
Rotar punto respecto a ejes dado por dos puntos ......................................... 96
Calcular robot .................................................................................................. 99
Obtencin de los ejes de las articulaciones .................................................. 100
Obtencin de eje x, eje z y punto de origen ......................................... 101
Obtencin de eje y, normalizazin y dibujado de ejes............................ 106
Dibujar robot.................................................................................................. 107
Dibujar elemento eslabn.............................................................................. 108
Dibujar elemento traslacin.......................................................................... 111
Dibujar elemento rotacin ............................................................................ 114
Dibujar elemento base ................................................................................... 118
Salvar robot .................................................................................................... 119
Cargar robot................................................................................................... 119
Calculo de parmetros DH............................................................................ 120
Calculo de parmetros di ............................................................................... 123
Calculo de parmetros ai ............................................................................... 124
Calculo de parmetros i .............................................................................. 126
Calculo de parmetros i .............................................................................. 126
Cinemtica directa ......................................................................................... 127
Cinemtica inversa......................................................................................... 129
Posicionar robot ............................................................................................. 134
Ayuda .............................................................................................................. 138
Funcin auxiliar: Multiplicar vectorialmente vectores simblicos ........... 138
Funcin auxiliar: Redondear a cero los valores de las matrices ............... 138
-3-
Prefacio:
Durante los estudios universitarios hemos recibido una amplia formacin en
robtica, tanto tericamente como en la prctica, aprendiendo a trabajar
matemticamente con los robots o a programarlos para que realicen diversas tareas. En
el transcurso de esa formacin hemos utilizado diversas herramientas informticas que
nos ayudan en diferente grado a tratar con los robots.
Hoy en da la robtica se va extendiendo, y cada vez se generaliza ms, con lo
cual es conveniente crear ciertas herramientas que permitan acercar a usuarios menos
expertos.
El programa SICON-BOT surge con el objetivo de facilitar a los usuarios
menos expertos el uso de aplicaciones informticas, de hacer ms cmodo el trabajo
para los ms expertos e integrar en una sola herramienta, otras herramientas, para hacer
su uso ms sencillo. En definitiva, SICON-BOT tiene tres objetivos principales:
FACILIDAD-COMODIDAD-INTEGRACIN
-
Facilidad: Con un entorno grfico familiar, con diseo de robots en 3D, con
ventanas, mens desplegables, botones, y dems funciones grficas que son
familiares a la mayora de personas.
-4-
-5-
-6-
1.1
Introduccin.
La Robtica describe todas las tecnologas asociadas con los robots. Sin
embargo la definicin de robot entraa ms dificultad, pues existen muchas
definiciones:
Es cierto, como acabamos de observar, que los robots son difciles de definir. Sin
embargo, no es necesariamente un problema el que no est todo el mundo de acuerdo
sobre su definicin. Quizs, Joseph Engelberg (padre de la robtica industrial) lo
resumi inmejorablemente cuando dijo: "Puede que no se capaz de definirlo, pero s
cundo veo uno".
La imagen del robot como una mquina a semejanza del ser humano, subyace en el
hombre desde hace muchos siglos, sin embargo, el robot industrial, que se conoce y
emplea en nuestros das, no surge como consecuencia de la tendencia o aficin de
reproducir seres vivientes, sino de la necesidad.
Inmersos en la era de la informatizacin, la imperiosa necesidad de aumentar la
productividad y mejorar la calidad de los productos, ha hecho insuficiente la
automatizacin industrial rgida, dominante en las primeras dcadas del siglo XX, que
estaba destinada a la fabricacin de grandes series de una restringida gama de
productos. Hoy da, ms de la mitad de los productos que se fabrican corresponden a
lotes de pocas unidades.
1.2
Historia de la robtica.
-7-
1.3
-8-
1.4
Definicin de Robot
Esta definicin se queda algo desfasada porque las tareas que puede realizar un
robot son ms complejas que las recogidas.
La Swedish Industrial Robot Association (SWIRA) define un robot como:
-
-9-
1.5
- 10 -
- 11 -
2.1
Introduccin
2.2
El Brazo Robot
2.3
Grados de libertad
- 12 -
- 13 -
2.4
Articulaciones
2.5
Sistemas de coordenadas
Para mover el robot a cualquier punto hacen falta mnimo tres ejes, por lo que
existen cuatro tipos de sistemas de coordenadas para mover los robots segn el tipo de
las articulaciones:
-
- 14 -
2.6
Volumen de trabajo
- 15 -
2.7
Actuadores
Son los dispositivos que proporcionan la fuerza motriz para las articulaciones de
los robots. Pueden ser de tres tipos segn la fuente de energa: Elctricos, Hidrulicos y
Neumticos.
Los elctricos son cada vez ms empleados, pues tienen una gran
controlabilidad con un mnimo mantenimiento. Dentro de las diferentes variedades, los
ms comunes son los servomotores de corriente continua, los motores paso a paso y los
servomotores de corriente alterna.
- 16 -
- 17 -
2.8
El controlador
2.9
Dispositivos sensoriales
Los sensores utilizados en robtica pueden dividirse en dos clases:
Sensores internos: Son los dispositivos usados para medir la posicin, velocidad o
aceleracin de las articulaciones del robot y/o del elemento final. Con esta informacin
tratar ms adelante el sistema de control para obtener el movimiento deseado. Pueden
ser de diferentes clases:
-
- 18 -
V2 (t ) = Vm sin( ) sin( ac t )
V1 (t ) = Vm cos( ) sin( ac t )
- Codificadores pticos: Realizan tareas de determinacin de posicin con
relativa facilidad y sorprendente precisin, adems de no necesitar contacto para
obtener la medida. Pueden ser de 2 tipos:
o Codificadores pticos absolutos: Es capaz de memorizar la posicin
siempre, incluso recin conectado, por lo que no necesita ningn
ciclo de calibracin
- 19 -
+
-
- 20 -
Sensores de fuerza y par: Nos indican la fuerza que se est aplicando sobre
un objeto.
Diseo simple.
Tamao pequeo y poco peso.
Capacidad para agarrar firmemente las piezas.
Autocentrado
Una configuracin de sujecin habitual.
- 21 -
- 22 -
3.1
Introduccin
3.2
Geometra 3D
Empecemos nuestra discusin sobre las tres dimensiones revisando los mtodos
de la geometra analtica para definir objetos. El objeto ms sencillo es, por supuesto,
un punto. Como en el caso de las dos dimensiones, podemos definir un punto
estableciendo un sistema de coordenadas y listando las coordenadas del punto.
Necesitamos un eje adicional de coordenadas para la tercera dimensin. Podemos
disponer este tercer eje para que forme ngulo recto con los otros dos.
Podemos utilizar este nuevo sistema de coordenadas para definir la ecuacin de
una recta. En dos dimensiones tenamos:
Son necesarias las coordenadas de dos puntos para construir estas ecuaciones
y
LVARO GMEZ RAMOS.
Esto significa que slo son necesarias tres constantes para definir un plano. Las
ecuaciones para un plano en particular pueden ser determinadas si conocemos las
coordenadas de tres puntos (que no estn alineados)
Tenemos as tres ecuaciones con tres incgnitas que podemos resolver con la
ayuda de un poco de lgebra.
Otra forma de especificar un plano es mediante un nico punto que pertenezca
al plano
. Este vector
es un punto genrico del
plano, entonces
es un vector de ese plano. Si tenemos en cuenta
que estos dos vectores forman un ngulo recto, su producto escalar ser nulo:
- 24 -
3.3
Cambio de escala
o de rango
3.4
Traslacin
3.5
Rotacin
- 25 -
En esta rotacin, pensamos en el eje como fijo mientras que algn objeto se
mueve en el espacio. Podemos pensar tambin que el objeto permanece inmvil
mientras los ejes se mueven. La diferencia entre uno y otro planteamiento es la
direccin de la rotacin. Fijar el eje y girar el objeto en sentido antihorario es lo mismo
que fijar el objeto y mover el eje en sentido horario.
La rotacin alrededor de los ejes x e y se realiza con una matriz de
transformacin similar a la anterior.
Para hacer una rotacin alrededor del eje y, del tal forma que el eje z se
convierte en el x realizamos la siguiente matriz en coordenadas homogneas
3.6
- 26 -
.
La matriz de transformacin que traslada el origen al eje de giro ser:
hasta
- 27 -
Si ahora realizamos un giro alrededor del eje x hasta que nuestro eje arbitrario
quede en el plano xz, el segmento proyectado quedar alineado con el eje z. Cuanto vale
el ngulo q ?
y, teniendo en cuenta la figura anterior, es fcil deducir las razones trigonomtricas del
ngulo q
Por lo tanto, la matriz de transformacin para el giro alrededor del eje x ser
LVARO GMEZ RAMOS.
- 28 -
Necesitamos realizar ahora un giro de ngulo f alrededor del eje y para que el
segmento quede alineado con el eje z.
- 29 -
Es posible ahora realizar el giro j alrededor del eje escogido. Ya que este eje
est alineado con el eje z, la matriz correspondiente a esta rotacin ser
- 30 -
CAPTULO: CINEMTICA.
4.1
Introduccin.
La cinemtica del brazo del robot trata con el estudio analtico de la geometra
del movimiento de un brazo de robot con respecto a un sistema de coordenadas de
referencia fijo sin considerar las fuerzas o momentos que originan el movimiento. As,
la cinemtica se interesa por la descripcin analtica del desplazamiento espacial del
robot como una funcin del tiempo, en particular de las relaciones entre la posicin de
las variables de articulacin y la posicin y orientacin del efecto final del brazo del
robot.
Hay dos problemas fundamentales en la cinemtica del robot. El primer
problema se suele conocer como el problema cinemtico directo, mientras que el
segundo es el problema cinemtico inverso. Como las variables independientes en un
robot son las variables de articulacin, y una tarea se suele dar en trminos del sistema
de coordenadas de referencia, se utiliza de manera ms frecuente el problema
cinemtico inverso. Denavit y Hartenberg en 1955 propusieron un enfoque sistemtico
y generalizado de utilizar lgebra matricial para describir y representar la geometra
espacial de los elementos del brazo del robot con respecto la un sistema de referencia
fijo. Este mtodo utiliza una matriz de transformacin homognea 4 x 4 para describir
la relacin espacial entre dos elementos mecnicos rgidos adyacentes y reduce el
problema cinemtico directo a encontrar una matriz de transformacin homognea 4 x
4 que relaciona el desplazamiento espacial del sistema de coordenadas de la mano al
sistema de coordenadas de referencia. Estas matrices de transformacin homogneas
son tambin tiles en derivar las ecuaciones dinmicas de movimiento del brazo del
robot. En general, el problema cinemtico inverso se puede resolver mediante algunas
tcnicas. Los mtodos utilizados ms comnmente son el algebraico matricial, iterativo
o geomtrico.
Cinemtica Directa (ngulos para encontrar posicin):
Se conoce:
a) La longitud de cada eslabn.
b) El ngulo de cada articulacin.
Se busca: La posicin de cualquier punto (coordenadas con respecto a la base)
Cinemtica Inversa (posicin para encontrar ngulos):
Se conoce:
a) La longitud de cada eslabn.
b) La posicin de cualquier punto (coordenadas con respecto a la base).
Se busca: El ngulo de cada articulacin necesitado para obtener la posicin.
- 31 -
4.2
x=
y=
z=
=
=
=
f x (q1
f y (q1
f z (q1
f (q1
f (q1
f (q1
q2
q2
q2
q2
q2
q2
...
...
...
...
...
...
qn )
qn )
qn )
qn )
qn )
qn )
Donde:
q1...n = Son las variables de las articulaciones. Para articulaciones de rotacin las
variables son ngulos. Para articulaciones prismticas las variables son distancias.
x, y, z = Coordenadas de la posicin del robot
- 32 -
x = l1 cos 1 + l 2 cos(1 + 2 )
y = l1 sen1 + l 2 sen(1 + 2 )
Para robots de ms de 2 grados de libertad es difcil aplicar mtodos
geomtricos para la solucin de su cinemtica directa.
A cada eslabn se le asocia un sistema coordenado y utilizando
transformaciones homogneas es posible representar las rotaciones y traslaciones
relativas entre los diferentes eslabones que componen el robot. Siendo la matriz:
Aii1
Siendo i el n de eslabn
A0n = Aii1
i =1
4.3
Algoritmo de Denavit-Hartenberg
- 33 -
Aii1
cos i
sen
i
=
0
sen i
cos i
0
0
0
0
1
0
0 1
0 0
0 0
1 0
0
1
0
0
0 0 1
0 0 0
1 d i 0
0 1 0
0
1
0
0
0 a i 1
0
0 0 0 cos i
1 0 0 sen i
0 1 0
0
0
0
0
0
sen i
cos i
0
Aii1
cos i
sen
i
=
0
cos i sen i
cos i cos i
sen i
0
sen i sen i
sen i cos i
cos i
0
ai cos i
ai sen i
di
- 34 -
di
ai
- 35 -
Donde:
T = A = Aii1
n
0
i =1
- 36 -
4.4
Cinemtica Inversa
Donde:
q1...k = Son las variables de las articulaciones. Para articulaciones
revolutas las variables son ngulos. Para articulaciones prismticas las
variables son distancias.
- 37 -
5.1
Introduccin
5.2
Por ejemplo, para una traslacin T = transl(0.5, 0.0, 0.0), una rotacin en y T =
roty(pi/2) y una rotacin en z T = rotz(pi/2):
- 38 -
5.3
Cinemtica directa
5.4
Cinemtica inversa
- 39 -
- 40 -
- 41 -
1.1
Introduccin.
- 42 -
1.2
SICON-BOT.
1.3
Facilidad: Con un entorno grfico familiar, con diseo de robots en 3D, con
ventanas, mens desplegables, botones, y dems funciones grficas que son
familiares a la mayora de personas.
- 43 -
1.4
1.5
Adicin de dinmica
Adicin de movimiento en 3D siguiendo trayectorias
Interaccin con otros robots
Posibilidad de disear un entorno de trabajo
Cambio de plataforma de programacin, para lograr una mayor eficacia,
como podra ser el lenguaje de programacin C o C++
Requisitos mnimos.
- 44 -
1.6
Inicializacin.
- 45 -
2.1
Con imread cargamos una imagen del disco duro en una variable de matlab y
con subimage mostramos la imagen en la ventana
- 46 -
Con uimenu creamos los mens desplegables y sus opciones, en este ejemplo
creamos el men desplegable llamado Archivo que contiene las opciones Nuevo
Grficamente, Salvar Robot, Salvar D-H, Cargar Robot y salir
2.2
Paneles:
- 47 -
- 48 -
Elementos
posibles del
robot
2.3
Parmetros
del robot
Plot principal
Eslabones y articulaciones.
Existen 4 tipos de elementos que estn disponibles para disear nuestro robot,
estos son: Articulacin de traslacin, articulacin de rotacin, eslabn y base.
Traslacin
Rotacin
Eslabn
Base
- 49 -
7
10
13
8
11
14
9
12
15
10
11
12
13
14
15
- 50 -
Con estos parmetros haremos rotar la figura vertical tantos grados como le
indiquemos alrededor de los ejes x y z que pasan por el centro de la base del robot.
- 51 -
Para ver el efecto de un giro sobre el eje z haremos girar 90 sobre el eje x y
45 sobre el eje z
- 52 -
- 53 -
Con estos elementos y sus parmetros podemos dibujar una amplia gama de
robots diferentes.
2.4
Botones:
- 54 -
Elegimos la posicin deseada del elemento y que valor inicial queremos que
aparezca por defecto 0.
- 55 -
3.1
Nuevo robot
Para poder crear un nuevo robot, tenemos que iniciar el programa desde matlab
escribiendo en el espacio de trabajo sicon, con lo que se nos abrir la ventana de
bienvenida.
- 56 -
4. Una vez que tenemos el elemento totalmente parametrizado, slo nos queda
indicarle que tipo de elemento es y ser aadido automticamente tomando
como punto inicial el final del elemento anterior o si es el primer elemento,
ser colocado en (0,0,0).
Ejemplo:
1.
2.
3.
- 57 -
4.
5.
El resultado es:
As iremos diseando nuestro robot paso a paso, elemento a elemento, hasta que
tengamos dibujado nuestro robot por completo:
3.2
Calcular robot
Para calcular el robot, o lo que es lo mismo, obtener los ejes del robot, debemos
ir al men desplegable Ejecucin y seleccionar la opcin Calcular robot.
- 58 -
Una vez calculado los ejes, podemos realizar varias acciones como salvar
nuestro robot, para usarlo en un futuro, calcular sus parmetros de Denavit-Hartenberg
o ver su cinemtica directa.
3.3
Salvar Robot
Para salvar el robot es necesario haber calculado sus ejes con anterioridad, y lo
que esto implica, haberlo diseado. Luego iremos al men Archivo y elegiremos la
opcin Salvar robot.
Entonces se nos abrir una ventana donde elegir en que lugar guardar el robot y
con que nombre. Se guardar bajo la extensin .mat cuando le demos al botn
guardar.
- 59 -
3.4
Cargar Robot
- 60 -
- 61 -
3.5
Parmetros D-H
Entonces se nos abrir una nueva ventana que contiene los parmetros D-H del
robot representados de forma matricial:
di
ai
tethai
alphai
Con estos tendremos calculados los parmetros D-H de una forma totalmente
automtica, con los nombres de las variables que le indicsemos.
Una vez calculado los parmetros D-H, podremos acceder a nuevas opciones del
programa como Salvar D-H, Posicionar Robot o Cinemtica Inversa
- 62 -
3.6
Salvar D-H
Con esto podremos exportar la matriz D-H y la matriz P_D_H, la primera nos
indica los parmetros de Denavit-Hartenberg, la segunda adems de incluir la matriz DH nos guarda tambin el tipo de articulacin del robot, dando un 0 para rotacin y un 1
para traslacin. La matriz P_D_H es totalmente compatible con el toolbox de robtica
de matlab.
Para salvar D-H debemos seleccionar la opcin Salvar D-H del men
desplegable Archivo, elegir donde guardarla y con que nombre.
3.7
Cinemtica directa
Para poder ver la cinemtica directa del robot debemos ir al men desplegable
Ejecucin y seleccionar la opcin Cinemtica directa.
- 63 -
As sabremos cual ser la posicin del extremo del robot a partir del valor de las
variables.
3.8
Cinemtica inversa
Para poder ver la cinemtica inversa del robot debemos ir al men desplegable
Ejecucin y seleccionar la opcin Cinemtica inversa.
- 64 -
Posicin
deseada
Nombre
de las
variables
Valor
calculado
de las
variables
Una vez pulsemos el botn calcular nos aparecer otra nueva pantalla con un
diseo esquemtico del robot en la posicin deseada.
Ejemplo:
- 65 -
3.9
Posicionar Robot
Para poder ver la cinemtica inversa del robot debemos ir al men desplegable
Ejecucin y seleccionar la opcin Posicionar robot.
- 66 -
3.10 Ayuda
Sicon-bot dispone de una pequea ayuda para aprender a usar el programa.
Dicha ayuda se encuentra en la opcin Ayuda Sicon del men desplegable Ayuda.
- 67 -
3.10 Herramientas
A la derecha del espacio de trabajo de sicon-bot disponemos de un panel de
herramientas.
- 68 -
Rotar robot:
Ver/Ocultar ejes:
Nos permite ocultar los ejes calculados del robot o volver a verlos
cuando deseemos.
-
Ver/Ocultar robot:
- 69 -
4.1
Introduccin
- 70 -
4.2
Con este comando y las propiedades que le hemos indicado, se abre una ventana
nueva, que nos devuelve un valor nico y representativo que almacenamos en la
variable hf1 para poder realizar futuras operaciones con la ventana.
Le hemos indicado ciertos parmetros a travs de las propiedades, veamos
algunos interesantes:
-
- 71 -
Pero con uimenu tambin podemos crear las opciones que se crearn en el
men al desplegarse:
- 72 -
4.3
Cuando elegimos nuevo robot, nos aparece la ventana con el entorno que nos
permite disear el robot
Creamos unos paneles para colocar en ellos diferentes elementos y agrupar los
que tienen algo en comn. Esta accin la hacemos con el comando uipanel, guardando
su indicador en una variable. Adems le indicamos a travs de las propiedades
BackgroundColor y Position, de que color ser y donde estar colocado con respecto
a los lmites de la ventana principal, y le damos un nombre con title:
- 73 -
- 74 -
Para ello creamos una matriz con las coordenadas de los vrtices y otra donde se
le indican las caras de la figura a travs de los vrtices que la componen. Luego
elegimos el plot donde queremos representar la figura, y ejecutamos el comando
patch indicndole la matriz de vrtices y la de caras y el color del objeto a travs de
la propiedad FaceVertezCData. Tambin se le indica la manera de colorear el objeto,
en este caso a travs de FaceColor,flat, las caras se dibujarn por homogneas.
Con
Axis
xy
- 75 -
Botones de pulsar
Textos
Cuadros editables
Botones de estado
4.4
Para aadir un elemento de traslacin en nuestro diseo del robot tan slo
tenemos que parametrizarlo correctamente y pulsar el botn correspondiente. Pero esto
es a nivel de usuario, en la programacin es un proceso ms complejo que veremos a
continuacin.
La funcin que coloca un elemento de traslacin en nuestro robot es la
siguiente:
- 76 -
MR: Es la matriz que contendr los datos del robot, es decir es nuestro robot
desde el punto de vista matemtico.
Q1: Es un vector que contiene los valores de las diferentes variables de
traslacin, segn su orden de creacin.
n: Guarda el nmero de elementos que tiene nuestro robot.
(x,y,z): Son las coordenadas del punto actual donde se aadir el siguiente
elemento del robot.
htextoe: Cuadro editable que contiene el valor de la rotacin sobre el eje de
traslacin del elemento. (Actualmente 0 por estar deshabilitada).
- 77 -
Lo siguiente sera guardar el valor del punto inicial donde dibujar el elemento
en forma simblica:
El paso siguiente recurre a la llamada de una funcin que dibuja el robot a partir
del punto inicial y los datos indicados y nos devuelve el nuevo valor inicial para el
prximo elemento a aadir que coincide con el punto final del elemento inicial. Este
dato nos lo devuelve en forma numrica y simblica:
Luego guardamos el valor de rotacin que le indicamos que deseamos que tenga
la representacin grfica del elemento.
4.5
- 78 -
- 79 -
4.6
Luego llamamos a una funcin que nos dibuja el elemento base y nos guarda en
MR el punto final e inicial:
- 80 -
Luego guardamos el valor de rotacin que le indicamos que deseamos que tenga
la representacin grfica del elemento.
4.7
- 81 -
Luego llamamos a una funcin que nos dibuja el elemento base y nos guarda en
MR el punto final e inicial:
Luego guardamos el valor de rotacin que le indicamos que deseamos que tenga
la representacin grfica del elemento.
4.8
Para dibujar el elemento traslacin por primera usamos una funcin distinta que
para dibujarlo las siguientes veces, esto es porque la primera se dibuja a partir del punto
inicial y los valores de giro y longitudes indicadas por el usuario en la parametrizacin,
obtenindose luego el punto final del robot. Sin embargo, a partir de entonces se
dibujar a partir del punto inicial y el punto final obtenido.
Lo segundo sera obtener los ngulos indicados por el usuario, que nos sirven
para posicionar el robot adecuadamente:
- 82 -
Con esto tenemos el elemento situado en vertical y formado por una recta, pero
necesitamos representarlo en 3D, para ello necesitamos obtener 8 vrtices, 4 por cada
base.
X8
Pto. final
X5
X7
X6
X4
Pto. inicial
X1
X3
X2
Rotar es una funcin que rota un punto Pf con respecto a los ejes x e y que
hacemos pasar por otro punto dado Pi. Si hacemos Pi coincidir con el punto inicial del
elemento, ste rotar hasta posicionarse en su posicin final.
- 83 -
Ahora rotaremos el punto final en vertical, para obtener el nuevo punto inicial
del siguiente elemento, luego sustituimos los valores simblicos por los valores
actuales, para tener el valor numrico del nuevo punto inicial:
Ahora que tenemos los vrtices posicionados pero de forma simblica, tenemos
que calcular su valor actual para posicionarlos:
- 84 -
4.9
Para dibujar el elemento rotacin por primera usamos una funcin distinta que
para dibujarlo las siguientes veces, esto es porque la primera se dibuja a partir del punto
inicial y los valores de giro indicadas por el usuario en la parametrizacin,
obtenindose luego el punto final del robot. Sin embargo, a partir de entonces se
dibujar a partir del punto inicial y el punto final obtenido.
- 85 -
Lo segundo sera obtener los ngulos indicados por el usuario, que nos sirven
para posicionar el robot adecuadamente:
A partir del valor del punto inicial, situamos el punto final coincidente:
Con esto tenemos el elemento situado en vertical y formado por una recta, pero
necesitamos representarlo en 3D, para ello necesitamos obtener 8 vrtices, 4 por cada
base.
X8
X5
X7
X6
Pto. final
Pto. inicial
X4
X1
X3
X2
- 86 -
Rotar es una funcin que rota un punto Pf con respecto a los ejes x e y que
hacemos pasar por otro punto dado Pi. Si hacemos Pi coincidir con el centro de
gravedad del elemento, ste rotar hasta posicionarse en su posicin final.
En este caso el punto inicial no variar, por lo que coincidir con el final.
Luego tenemos la posibilidad de rotar la figura alrededor de su eje principal,
para ello usamos la funcin rot que es una funcin para resolver el giro de un punto
(X,Y,Z) respecto a la recta que pasa por los puntos (X1,Y1,Z1) y (X2,Y2,Z2) con un
ngulo de rotacin igual a tetha:
:
Ahora que tenemos los vrtices posicionados pero de forma simblica, tenemos
que calcular su valor actual para posicionarlos:
- 87 -
- 88 -
A partir del valor del punto inicial, situamos el punto final momentneamente a
una distancia L (anteriormente indicada) en vertical:
Con esto tenemos el elemento situado en vertical y formado por una recta, pero
necesitamos representarlo en 3D, para ello necesitamos obtener 8 vrtices, 4 por cada
base.
X8
Pto. final
X5
X7
X6
X4
Pto. inicial
X1
X3
X2
- 89 -
Ahora rotaremos el punto final en vertical, para obtener el nuevo punto inicial
del siguiente elemento:
Ahora que tenemos los vrtices posicionados pero de forma simblica, tenemos
que calcular su valor actual para posicionarlos:
- 90 -
- 91 -
A partir del valor del punto inicial, situamos el punto final momentneamente a
una distancia L (anteriormente indicada) en vertical:
Con esto tenemos el elemento situado en vertical y formado por una recta, pero
necesitamos representarlo en 3D, para ello necesitamos obtener 8 vrtices, 4 por cada
base.
X8
Pto. final
X5
X7
X6
X4
Pto. inicial
X1
X3
X2
- 92 -
Ahora rotaremos el punto final en vertical, para obtener el nuevo punto inicial
del siguiente elemento:
Ahora que tenemos los vrtices posicionados pero de forma simblica, tenemos
que calcular su valor actual para posicionarlos:
- 93 -
4.12 Rotar punto respecto a ejes x e y que pasan por otro punto dado
Este procedimiento lo resuelve por completo la funcin creada para la ocasin:
Rotacin
Deshacer traslacin
- 94 -
En esta rotacin, pensamos en el eje como fijo mientras que algn objeto se
mueve en el espacio. Podemos pensar tambin que el objeto permanece inmvil
mientras los ejes se mueven. La diferencia entre uno y otro planteamiento es la
direccin de la rotacin. Fijar el eje y girar el objeto en sentido antihorario es lo mismo
que fijar el objeto y mover el eje en sentido horario.
La rotacin alrededor de los ejes x e y se realiza con una matriz de
transformacin similar a la anterior.
Para hacer una rotacin alrededor del eje y, del tal forma que el eje z se
convierte en el x realizamos la siguiente matriz en coordenadas homogneas
- 95 -
hasta
- 96 -
Si ahora realizamos un giro alrededor del eje x hasta que nuestro eje arbitrario
quede en el plano xz, el segmento proyectado quedar alineado con el eje z. Cuanto vale
el ngulo q ?
Sabemos que la longitud del segmento proyectado es
y, teniendo en cuenta la figura anterior, es fcil deducir las razones trigonomtricas del
ngulo q
Por lo tanto, la matriz de transformacin para el giro alrededor del eje x ser
- 97 -
Necesitamos realizar ahora un giro de ngulo f alrededor del eje y para que el
segmento quede alineado con el eje z.
- 98 -
Es posible ahora realizar el giro j alrededor del eje escogido. Ya que este eje
est alineado con el eje z, la matriz correspondiente a esta rotacin ser:
El primer paso es aadir un falso eslabn al final del ltimo elemento, para
obtener despus un eje final:
- 99 -
Una vez que tenemos la matriz MR ya con las variables de traslacin y rotacin,
pasamos a ejecutar la funcin MRtoMRvec, que es una funcin que transforma la
matriz con las coordenadas de los eslabones en una matriz con los ejes de las
articulaciones de rotacin y traslacin y un punto de estos:
Slo nos falta obtener el vector y y dibujar los ejes, lo cual hacemos a travs
de la funcin Plotejes:
- 100 -
- 101 -
cuando el rango de la matriz A es uno, es decir los vectores directores son iguales o
proporcionales, las rectas son paralelas o coincidentes (la misma); sern coincidentes
cuando el rango de B tambin sea 1 y paralelas cuando el rango de B sea 2.
Cuando el rango de A es dos y el rango de B tambin dos: las rectas se cortan.
El sistema que resulta al igualar sus ecuaciones paramtricas es compatible
determinado. Cuando el rango de A es dos y el de B tres: las rectas se cruzan. El
sistema es incompatible.
El punto P ser el punto del eje que guardamos en la matriz MRvec:
- 102 -
Si las rectas se cruzan el vector z ser el vector del eje que contiene VRvec, el
punto de origen ser el punto del eje actual que contiene MRvec, y el vector x ser el
producto vectorial de los vectores del eje actual y el siguiente:
Si las rectas se cortan el vector z ser el vector del eje que contiene VRvec, el
punto de origen es el punto de interseccin de los dos ejes, que calculamos teniendo en
cuenta las siguientes ecuaciones:
- 103 -
Slo nos falta el vector x, que ser la perpendicular comn a los ejes implicados.
Si las rectas son paralelas debemos determinar el vector perpendicular a ambas
rectas, hacemos que la recta pase por el punto P del primer eje, pero no tiene porque
pasar por el punto Q, as que buscamos el punto Q del segundo eje por donde si pase:
- 104 -
El ltimo caso posible es que las rectas sean coincidentes, lo cual resolvemos
dependiendo de varios casos concretos, es decir, pueden existir combinaciones no
contempladas que no se resuelvan correctamente.
Lo primero es ver si los ejes de la articulacin actual y de la anterior coinciden o
son paralelas y no es la primera articulacin:
- 105 -
El primer paso es crear unos ejes iniciales que sern siempre iguales, y estarn
situados en (0, 0, 0):
Ahora para dibujar los ejes, primero convertimos la matriz simblica en matriz
numrica con los valores correspondientes a la posicin actual:
- 106 -
- 107 -
lx
ly
l1
- 108 -
Con esto tenemos el elemento situado en vertical y formado por una recta, pero
necesitamos representarlo en 3D, para ello necesitamos obtener 8 vrtices, 4 por cada
base.
X8
Pto. final
X5
X7
X6
X4
Pto. inicial
X1
X3
X2
- 109 -
Rotar es una funcin que rota un punto Pf con respecto a los ejes x e y que
hacemos pasar por otro punto dado Pi. Si hacemos Pi coincidir con el punto inicial del
elemento, ste rotar hasta posicionarse en su posicin final.
Ahora rotaremos el punto final en vertical, para obtener el nuevo punto inicial
del siguiente elemento:
- 110 -
- 111 -
lx
ly
l1
Con esto tenemos el elemento situado en vertical y formado por una recta, pero
necesitamos representarlo en 3D, para ello necesitamos obtener 8 vrtices, 4 por cada
base.
- 112 -
Pto. final
X5
X7
X6
X4
Pto. inicial
X1
X3
X2
Rotar es una funcin que rota un punto Pf con respecto a los ejes x e y que
hacemos pasar por otro punto dado Pi. Si hacemos Pi coincidir con el punto inicial del
elemento, ste rotar hasta posicionarse en su posicin final.
Ahora rotaremos el punto final en vertical, para obtener el nuevo punto inicial
del siguiente elemento:
- 113 -
- 114 -
lx
ly
l1
- 115 -
Con esto tenemos el elemento situado en vertical y formado por una recta, pero
necesitamos representarlo en 3D, para ello necesitamos obtener 8 vrtices, 4 por cada
base.
X8
X5
Pto. final
X7
X6
Pto. inicial
X4
X1
X3
X2
- 116 -
Rotar es una funcin que rota un punto Pf con respecto a los ejes x e y que
hacemos pasar por otro punto dado Pi. Si hacemos Pi coincidir con el punto inicial del
elemento, ste rotar hasta posicionarse en su posicin final.
Ahora rotaremos el punto final en vertical, para obtener el nuevo punto inicial
del siguiente elemento:
- 117 -
Con esto tenemos el elemento situado en vertical y formado por una recta, pero
necesitamos representarlo en 3D, para ello necesitamos obtener 8 vrtices, 4 por cada
base.
Pto. final
X8
X5
X4
Pto. inicial
X1
X7
X6
X3
X2
- 118 -
Una vez indicados donde y con que nombre guardar los datos, procedemos a
salvarlos con la funcin save a la que le indicamos el nombre del archivo a guardar y
las variables a guardar en el archivo que se crear:
- 119 -
Luego dibujaremos el robot con la funcin dibubot y sus ejes con la funcin
plotejes:
Lo primero que debemos hacer es calcular los parmetros DH, cuyo clculo lo
resolveremos en funciones independientes:
- 120 -
- 121 -
- 122 -
Ya hemos representado todos los valores, ahora los almacenamos en una matriz
llamada P_D_H:
- 123 -
, y un punto Q
- 124 -
, y un punto Q
- 125 -
Es el ngulo que forman dos rectas es el ngulo que forman sus vectores directores:
- 126 -
Es el ngulo que forman dos rectas es el ngulo que forman sus vectores directores:
- 127 -
- 128 -
- 129 -
- 130 -
- 131 -
Ahora creamos una nueva funcin a la que se llamar cuando se pulse el botn
calcular, y que nos realizar el clculo de la cinemtica inversa. El clculo lo
realizamos a travs de la funcin ikine. IKINE calcula la cinemtica inversa del
manipulador
Q = IKINE(DH, STOL, ILIMIT, T)
Q = IKINE(DH, STOL, ILIMIT, T, Q0)
Q = IKINE(DH, STOL, ILIMIT, T, Q0, M)
Devuelve los valores de las variables articulares necesarios para que el efector
final del manipulador tenga la posicin y orientacin dadas por la transformacin T. La
solucin del problema cinemtico inverso no es nica en general, y es posible que para
una misma orientacin y posicin deseadas, se obtengan soluciones distintas en funcin
del vector inicial de variables articulares (Q0) que se le pase a IKINE.
LVARO GMEZ RAMOS.
- 132 -
- 133 -
Ahora sustituimos los nombres de las variables por el valor cero en la matriz
P_D_H para tenerla en el mismo formato que usa el toolbox de robtica:
- 134 -
Ahora creamos una nueva ventana para introducir los valores articulares con los
que deseamos posicionar el robot, y tambin daremos la opcin de elegir si lo queremos
representar de forma esquemtica solamente o tambin de forma tridimensional:
- 135 -
- 136 -
- 137 -
4.31 Ayuda
Para llamar a la ayuda se hace a travs de la funcin ayuda, que abre una
pgina web (previamente creada con toda la ayuda) en un explorador propio de matlab:
- 138 -
BLOQUE 3: CONCLUSIONES
- 139 -
Conclusiones.
El proyecto naci con varios objetivos que segn se fue desarrollando fueron
variando.
Se quera disear un software interactivo en el que se pudieran disear robots en
tres dimensiones para luego poder obtener los ejes del robot y los parmetros de
Denavit-Hartenberg. Esta sera la parte novedosa del software.
Luego existira otra parte del software que consistiese en la integracin de
herramientas ya existentes, para conseguir un paquete que incluya todas las
herramientas que podamos considerar interesantes para el trabajo con robots. En esta
seccin se incluiran la resolucin del problema cinemtica directa e inversa, as como
la dinmica directa e inversa. Tambin se coment la posibilidad de desarrollar ciertos
bloques de simulink para la simulacin, incluso la posibilidad de que alguno de estos
bloques fuera desarrollado en el lenguaje de programacin C para que tuviese una
ejecucin ms rpida.
La mayor parte del peso del proyecto se basa en la parte grfica del software,
sobre todo en lo que se trata de diseo en tres dimensiones. Otra de las cuestiones a las
que ms tiempo se ha dedicado es a la matemtica realizada con simblico. Es decir, lo
difcil fue dibujar el robot segn lo indique el usuario y poder posicionarlo o moverlo
porque ello implica una matemtica compleja de matrices simblicas.
En cuanto a la parte puramente relacionada con la robtica como puede ser la
cinemtica directa e inversa fue relativamente rpida su integracin, porque ya
tenamos unas matrices y variables previamente calculadas que nos facilitan el trabajo.
El proyecto no tena un fin claro, pues no se conocan con suficiente exactitud
las dificultades que iran surgiendo, por lo que una vez desarrollado todo el diseo y
clculo de ejes y parmetros de Denavit-Hartenberg se opt por aadirle tambin la
cinemtica y dejar la dinmica y otras cuestiones para futuras ampliaciones.
Es decir, se trata de un proyecto abierto con muchas posibilidades de
ampliacin, en el cual se han dejado sentadas unas bases ms que suficientes para poder
ser de cierta utilidad en esta su primera versin.
- 140 -
Desarrollos futuros.
Como hemos dicho este es un proyecto abierto que podr ser ampliado y
modificado en un futuro.
Lo primero a ampliar sera aadir la dinmica directa e inversa y la posibilidad
de aadir bloques propios a simulink para poder simular el robot.
Pero se pueden hacer muchas ms cosas, como la posibilidad de mover el robot
siguiendo trayectorias, o la inclusin de un segundo robot con el que interactuar, o
incluso el diseo de elementos del entorno de trabajo. Quizs para este hecho sea mejor
realizar un cambio en la plataforma de desarrollo y pasar de matlab a algn lenguaje
ms eficiente, sobre todo en la parte grfica.
Las posibilidades de ampliacin son inmensas, y hacen de este software una
herramienta muy interesante para el trabajo con robots. Se podra llegar a obtener un
paquete de herramientas muy completo e integrado, consiguiendo un tipo de software
poco desarrollado hasta el da de hoy.
Sobre todo Sicon-Bot se pretende centrar en la ayuda al estudio de la robtica,
es decir, una herramienta para el estudiante, pero con futuras ampliaciones podra llegar
a ser de cierta utilidad profesional, sobre todo si se consigue compatibilizar con otras
herramientas ya existentes.
- 141 -
BLOQUE 4: ANEXOS
- 142 -
function ayuda
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Funcin de ayuda
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
web index.htm
- 143 -
y1
y2
y3
y4
y5
y6
y7
y8
z1]=rot(xi,yi,zi,xf,yf,zf,xi-2,yi-2,zi,ange);
z2]=rot(xi,yi,zi,xf,yf,zf,xi+2,yi-2,zi,ange);
z3]=rot(xi,yi,zi,xf,yf,zf,xi+2,yi+2,zi,ange);
z4]=rot(xi,yi,zi,xf,yf,zf,xi-2,yi+2,zi,ange);
z5]=rot(xi,yi,zi,xf,yf,zf,xi-2,yi-2,zi+l,ange);
z6]=rot(xi,yi,zi,xf,yf,zf,xi+2,yi-2,zi+l,ange);
z7]=rot(xi,yi,zi,xf,yf,zf,xi+2,yi+2,zi+l,ange);
z8]=rot(xi,yi,zi,xf,yf,zf,xi-2,yi+2,zi+l,ange);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Dibujamos el elemento
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
vertices=[x1 y1 z1;x2 y2 z2;x3 y3 z3;x4 y4 z4;x5 y5 z5;x6 y6 z6;x7 y7
z7;x8 y8 z8];
caras=[1 2 3 4;1 2 6 5;2 3 7 6;3 4 8 7;1 4 8 5;5 6 7 8];
subplot(sp1)
- 144 -
- 145 -
y1
y2
y3
y4
y5
y6
y7
y8
z1]=rotar(xi,yi,zi,xi-2,yi-2,zi,angx,angz);
z2]=rotar(xi,yi,zi,xi+2,yi-2,zi,angx,angz);
z3]=rotar(xi,yi,zi,xi+2,yi+2,zi,angx,angz);
z4]=rotar(xi,yi,zi,xi-2,yi+2,zi,angx,angz);
z5]=rotar(xi,yi,zi,xi-2,yi-2,zi+l,angx,angz);
z6]=rotar(xi,yi,zi,xi+2,yi-2,zi+l,angx,angz);
z7]=rotar(xi,yi,zi,xi+2,yi+2,zi+l,angx,angz);
z8]=rotar(xi,yi,zi,xi-2,yi+2,zi+l,angx,angz);
[xf yf zf]=rotar(xi,yi,zi,xf,yf,zf,angx,angz);
- 146 -
y1
y2
y3
y4
y5
y6
y7
y8
z1]=rot(xi,yi,zi,xf,yf,zf,x1,y1,z1,ange);
z2]=rot(xi,yi,zi,xf,yf,zf,x2,y2,z2,ange);
z3]=rot(xi,yi,zi,xf,yf,zf,x3,y3,z3,ange);
z4]=rot(xi,yi,zi,xf,yf,zf,x4,y4,z4,ange);
z5]=rot(xi,yi,zi,xf,yf,zf,x5,y5,z5,ange);
z6]=rot(xi,yi,zi,xf,yf,zf,x6,y6,z6,ange);
z7]=rot(xi,yi,zi,xf,yf,zf,x7,y7,z7,ange);
z8]=rot(xi,yi,zi,xf,yf,zf,x8,y8,z8,ange);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Dibujamos el elemento
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
vertices=[x1 y1 z1;x2 y2 z2;x3 y3 z3;x4 y4 z4;x5 y5 z5;x6 y6 z6;x7 y7
z7;x8 y8 z8];
caras=[1 2 3 4;1 2 6 5;2 3 7 6;3 4 8 7;1 4 8 5;5 6 7 8];
subplot(sp1)
patch('Vertices',vertices,'Faces',caras,'FaceVertexCData',[0 0
0],'FaceColor','flat');
return
- 147 -
- 148 -
- 149 -
- 150 -
%coincidentes
%paralelos
%se cortan
w(2) Q(2)-P(2);v(3) w(3) Q(3)-
- 151 -
%se cruzan
end
end
- 152 -
else
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Resuelvo la matemtica necesaria para calcular tethai
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
v=MRejes(i-1,[4 5 6]);
w=MRejes(i,[4 5 6]);
x=cross(v,w);
tethai(i1)=simple(acos((v(1)*w(1)+v(2)*w(2)+v(3)*w(3))/(sqrt(v(1)^2+v(2)^2+v(3
)^2)*(sqrt(w(1)^2+w(2)^2+w(3)^2)))));
mod_x=simple(abs(sqrt(x(1)^2+x(2)^2+x(3)^2)));
- 153 -
- 154 -
MR con los
matriz de robot a
la matriz con
el resto de ejes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
habilitaciones de nuevas opciones del menu
- 155 -
- 156 -
- 157 -
end
- 158 -
%N de filas
%Variable de checkbox
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Calculamos el n de articulaciones, el tipo y el orden
%
de ellas.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=2:size(MRejes,1)
if MRejes(i,13)==1
a(i-1)=0;
cont1=cont1+1;
Var(i-1)=Q2_simb(cont1);
end
if MRejes(i,13)==2
a(i-1)=1;
cont2=cont2+1;
Var(i-1)=Q1_simb(cont2);
end
end
a(cont1+cont2+1)=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Nueva ventana para introducir los datos de las variables
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:num_simb_rot
P_D_Haux=subs(P_D_Haux,Q1_simb(j),0);
end
for j=1:num_simb_rot2
P_D_Haux=subs(P_D_Haux,Q2_simb(j),0);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Creo la matriz del robot para usarla en el toolbox de robtica
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:n
siconbot{i}=link([P_D_Haux(i,1) P_D_Haux(i,2) P_D_Haux(i,3)
P_D_Haux(i,4) a(i)],'modified');
end
- 159 -
- 160 -
- 161 -
n=size(P_D_H,1);
stol=1e-3;
ilimit=1000;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Matriz de posicin final deseada necesaria para "ikine"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
TG = [1 0 0 str2num(get(xedit,'String'));0 1 0
str2num(get(yedit,'String'));0 0 1 str2num(get(zedit,'String'));0 0 0
1];
vectorq0=zeros(1,tras+rotac-1);
%Posicin inicial
q=ikine(DH,stol,ilimit,TG,vectorq0,[1 1 1 1 1 1]); %Clculo de
cinemtica Inversa
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Dibujamos el robot
- 162 -
%Posicionar robot
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Mostrar valores de variables articulares
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:n-1
set(hdata(i),'String',num2str(q(i)));
end
end
function V3=cross_sym(V1,V2)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
multiplica vectorialmente vectores simblicos
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
V3=[det([V1(2) V1(3);V2(2) V2(3)]) det([V1(1) V1(3);V2(1) V2(3)])
det([V1(1) V1(2);V2(1) V2(2)])];
- 163 -
subplot(sp1)
MR=simple(MR);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Calculamos MR con valores reales
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:num_simb_rot
MR=subs(MR,Q1_simb(j),Q1(j));
variables
end
for j=1:num_simb_rot2
MR=subs(MR,Q2_simb(j),-Q2(j));
variables
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Dibuja el tipo de elemento
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:n
switch MR(i,1)
case
1
traslac2(MR(i,2),MR(i,3),MR(i,4),MR(i,5),MR(i,6),MR(i,7),MR(i,8));
case
2
eje2(MR(i,2),MR(i,3),MR(i,4),MR(i,5),MR(i,6),MR(i,7),MR(i,8));
case
3
eslabon2(MR(i,2),MR(i,3),MR(i,4),MR(i,5),MR(i,6),MR(i,7),MR(i,8));
case
4
base2(MR(i,2),MR(i,3),MR(i,4),MR(i,5),MR(i,6),MR(i,7),MR(i,8));
case
5
garra2(MR(i,2),MR(i,3),MR(i,4),MR(i,5),MR(i,6),MR(i,7),MR(i,8));
end
end
- 164 -
%ngulo positicvo
%ngulo negativo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Calculamos el giro sobre el eje z a partir del pto inicial
y
%
final.
- 165 -
y1
y2
y3
y4
y5
y6
y7
y8
z1]=rotar(xi1,yi1,zi1,xi1,yi1-0.6,zi1-0.5,angx,angz);
z2]=rotar(xi1,yi1,zi1,xi1+0.6,yi1,zi1-0.5,angx,angz);
z3]=rotar(xi1,yi1,zi1,xi1,yi1+0.6,zi1-0.5,angx,angz);
z4]=rotar(xi1,yi1,zi1,xi1-0.6,yi1,zi1-0.5,angx,angz);
z5]=rotar(xi1,yi1,zi1,xi1,yi1-0.6,zi1+0.5,angx,angz);
z6]=rotar(xi1,yi1,zi1,xi1+0.6,yi1,zi1+0.5,angx,angz);
z7]=rotar(xi1,yi1,zi1,xi1,yi1+0.6,zi1+0.5,angx,angz);
z8]=rotar(xi1,yi1,zi1,xi1-0.6,yi1,zi1+0.5,angx,angz);
[xf yf zf]=rotar(xi1,yi1,zi1,xf,yf,zf,angx,angz);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Rotamos la figura con respecto al eje Xi-Xf
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
if ange
[x1 y1 z1]=rot(xi,yi,zi,xf,yf,zf,x1,y1,z1,ange);
[x2 y2 z2]=rot(xi,yi,zi,xf,yf,zf,x2,y2,z2,ange);
[x3 y3 z3]=rot(xi,yi,zi,xf,yf,zf,x3,y3,z3,ange);
[x4 y4 z4]=rot(xi,yi,zi,xf,yf,zf,x4,y4,z4,ange);
[x5 y5 z5]=rot(xi,yi,zi,xf,yf,zf,x5,y5,z5,ange);
[x6 y6 z6]=rot(xi,yi,zi,xf,yf,zf,x6,y6,z6,ange);
[x7 y7 z7]=rot(xi,yi,zi,xf,yf,zf,x7,y7,z7,ange);
[x8 y8 z8]=rot(xi,yi,zi,xf,yf,zf,x8,y8,z8,ange);
end
- 166 -
- 167 -
y1
y2
y3
y4
y5
z1]=rotar(xi,yi,zi,xi,yi-0.6,zi-0.5,angx,angz);
z2]=rotar(xi,yi,zi,xi+0.6,yi,zi-0.5,angx,angz);
z3]=rotar(xi,yi,zi,xi,yi+0.6,zi-0.5,angx,angz);
z4]=rotar(xi,yi,zi,xi-0.6,yi,zi-0.5,angx,angz);
z5]=rotar(xi,yi,zi,xi,yi-0.6,zi+0.5,angx,angz);
- 168 -
y1
y2
y3
y4
y5
y6
y7
y8
z1]=rot(xi,yi,zi-0.5,xf,yf,zf+0.5,x1,y1,z1,ange);
z2]=rot(xi,yi,zi-0.5,xf,yf,zf+0.5,x2,y2,z2,ange);
z3]=rot(xi,yi,zi-0.5,xf,yf,zf+0.5,x3,y3,z3,ange);
z4]=rot(xi,yi,zi-0.5,xf,yf,zf+0.5,x4,y4,z4,ange);
z5]=rot(xi,yi,zi-0.5,xf,yf,zf+0.5,x5,y5,z5,ange);
z6]=rot(xi,yi,zi-0.5,xf,yf,zf+0.5,x6,y6,z6,ange);
z7]=rot(xi,yi,zi-0.5,xf,yf,zf+0.5,x7,y7,z7,ange);
z8]=rot(xi,yi,zi-0.5,xf,yf,zf+0.5,x8,y8,z8,ange);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Dibujamos el elemento
- 169 -
- 170 -
%N de filas
%Variable de checkbox
%Contador
%Contador
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Calculamos el n de articulaciones, el tipo y el orden
%
de ellas.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=2:size(MRejes,1)
if MRejes(i,13)==1
a(i-1)=0;
articular
cont1=cont1+1;
Var(i-1)=Q2_simb(cont1);
articulares ordenadas
end
if MRejes(i,13)==2
a(i-1)=1;
cont2=cont2+1;
Var(i-1)=Q1_simb(cont2);
end
end
a(cont1+cont2+1)=0;
ficticia al final del robot
%Articulacin de traslacion
%Vector con tipo de variable
%Creamos un articulacin
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Damos valor cero a las variables articulares para adaptarlas
al
%
formato del toolbox de robtica
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:num_simb_rot
P_D_Haux=subs(P_D_Haux,Q1_simb(j),0);
end
for j=1:num_simb_rot2
P_D_Haux=subs(P_D_Haux,Q2_simb(j),0);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Nueva ventana para introducir los datos de las variables
- 171 -
- 172 -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Obtenemos los valores de las articulaciones
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:size(hdata,2)
vector(i)=str2num(get(hdata(i),'String'));
end
vector(i+1)=0;
%Ultima articulacin(Ficticia)=0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
- 173 -
- 174 -
- 175 -
%Longitud del
%ngulo positicvo
%ngulo negativo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Calculamos el giro sobre el eje z a partir del pto inicial
y
%
final.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
if (xi==xf)&(yi==yf)
angz=0;
else
lx=xf-xi;
ly=yf-yi;
l1=sqrt(lx^2+ly^2);
V=[lx/l1 ly/l1 0]*l;
xf1=V(1);
yf1=V(2);
zf1=V(3);
angz=(pi/2-acos(xf1/l));
end
%ngulo de y
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Situamos el punto final a una distancia L en vertical
respecto
%
al punto inicial
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
- 176 -
y1
y2
y3
y4
y5
y6
y7
y8
z1]=rotar(xi,yi,zi,xi-0.5,yi-0.5,zi,angx,angz);
z2]=rotar(xi,yi,zi,xi+0.5,yi-0.5,zi,angx,angz);
z3]=rotar(xi,yi,zi,xi+0.5,yi+0.5,zi,angx,angz);
z4]=rotar(xi,yi,zi,xi-0.5,yi+0.5,zi,angx,angz);
z5]=rotar(xi,yi,zi,xi-0.5,yi-0.5,zi+l,angx,angz);
z6]=rotar(xi,yi,zi,xi+0.5,yi-0.5,zi+l,angx,angz);
z7]=rotar(xi,yi,zi,xi+0.5,yi+0.5,zi+l,angx,angz);
z8]=rotar(xi,yi,zi,xi-0.5,yi+0.5,zi+l,angx,angz);
[xf yf zf]=rotar(xi,yi,zi,xf,yf,zf,angx,angz);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Rotamos la figura con respecto al eje Xi-Xf
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
if ange
[x1 y1 z1]=rot(xi,yi,zi,xf,yf,zf,x1,y1,z1,ange);
[x2 y2 z2]=rot(xi,yi,zi,xf,yf,zf,x2,y2,z2,ange);
[x3 y3 z3]=rot(xi,yi,zi,xf,yf,zf,x3,y3,z3,ange);
[x4 y4 z4]=rot(xi,yi,zi,xf,yf,zf,x4,y4,z4,ange);
[x5 y5 z5]=rot(xi,yi,zi,xf,yf,zf,x5,y5,z5,ange);
[x6 y6 z6]=rot(xi,yi,zi,xf,yf,zf,x6,y6,z6,ange);
[x7 y7 z7]=rot(xi,yi,zi,xf,yf,zf,x7,y7,z7,ange);
[x8 y8 z8]=rot(xi,yi,zi,xf,yf,zf,x8,y8,z8,ange);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Dibujamos el elemento
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
vertices=[x1 y1 z1;x2 y2 z2;x3 y3 z3;x4 y4 z4;x5 y5 z5;x6 y6 z6;x7 y7
z7;x8 y8 z8];
caras=[1 2 3 4;1 2 6 5;2 3 7 6;3 4 8 7;1 4 8 5;5 6 7 8];
subplot(sp1)
patch('Vertices',vertices,'Faces',caras,'FaceVertexCData',[.8 .4
.125],'FaceColor','flat');
return
- 177 -
- 178 -
y1
y2
y3
y4
y5
y6
y7
y8
z1]=rotar(xi,yi,zi,xi-0.5,yi-0.5,zi,angx,angz);
z2]=rotar(xi,yi,zi,xi+0.5,yi-0.5,zi,angx,angz);
z3]=rotar(xi,yi,zi,xi+0.5,yi+0.5,zi,angx,angz);
z4]=rotar(xi,yi,zi,xi-0.5,yi+0.5,zi,angx,angz);
z5]=rotar(xi,yi,zi,xi-0.5,yi-0.5,zi+l,angx,angz);
z6]=rotar(xi,yi,zi,xi+0.5,yi-0.5,zi+l,angx,angz);
z7]=rotar(xi,yi,zi,xi+0.5,yi+0.5,zi+l,angx,angz);
z8]=rotar(xi,yi,zi,xi-0.5,yi+0.5,zi+l,angx,angz);
[xf yf zf]=rotar(xi,yi,zi,xf,yf,zf,angx,angz);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Rotamos la figura con respecto al eje Xi-Xf
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
if ange
[x1 y1 z1]=rot(xi,yi,zi,xf,yf,zf,x1,y1,z1,ange);
[x2 y2 z2]=rot(xi,yi,zi,xf,yf,zf,x2,y2,z2,ange);
[x3 y3 z3]=rot(xi,yi,zi,xf,yf,zf,x3,y3,z3,ange);
[x4 y4 z4]=rot(xi,yi,zi,xf,yf,zf,x4,y4,z4,ange);
[x5 y5 z5]=rot(xi,yi,zi,xf,yf,zf,x5,y5,z5,ange);
[x6 y6 z6]=rot(xi,yi,zi,xf,yf,zf,x6,y6,z6,ange);
[x7 y7 z7]=rot(xi,yi,zi,xf,yf,zf,x7,y7,z7,ange);
[x8 y8 z8]=rot(xi,yi,zi,xf,yf,zf,x8,y8,z8,ange);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%sustituimos las variables por su valor
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
x1=subs(x1,Q1(tras2));
x2=subs(x2,Q1(tras2));
x3=subs(x3,Q1(tras2));
x4=subs(x4,Q1(tras2));
x5=subs(x5,Q1(tras2));
x6=subs(x6,Q1(tras2));
x7=subs(x7,Q1(tras2));
x8=subs(x8,Q1(tras2));
y1=subs(y1,Q1(tras2));
y2=subs(y2,Q1(tras2));
y3=subs(y3,Q1(tras2));
y4=subs(y4,Q1(tras2));
y5=subs(y5,Q1(tras2));
y6=subs(y6,Q1(tras2));
y7=subs(y7,Q1(tras2));
y8=subs(y8,Q1(tras2));
z1=subs(z1,Q1(tras2));
z2=subs(z2,Q1(tras2));
z3=subs(z3,Q1(tras2));
z4=subs(z4,Q1(tras2));
z5=subs(z5,Q1(tras2));
z6=subs(z6,Q1(tras2));
z7=subs(z7,Q1(tras2));
z8=subs(z8,Q1(tras2));
- 179 -
- 180 -
- 181 -
y1
y2
y3
y4
y5
z1]=rotar(xi,yi,zi,xi-0.5,yi-0.5,zi,angx,angz);
z2]=rotar(xi,yi,zi,xi+0.5,yi-0.5,zi,angx,angz);
z3]=rotar(xi,yi,zi,xi+0.5,yi+0.5,zi,angx,angz);
z4]=rotar(xi,yi,zi,xi-0.5,yi+0.5,zi,angx,angz);
z5]=rotar(xi,yi,zi,xi,yi,zi+l,angx,angz);
[xf yf zf]=rotar(xi,yi,zi,xf,yf,zf,angx,angz);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Rotamos la figura con respecto al eje Xi-Xf
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
if ange
[x1 y1 z1]=rot(xi,yi,zi,xf,yf,zf,x1,y1,z1,ange);
[x2 y2 z2]=rot(xi,yi,zi,xf,yf,zf,x2,y2,z2,ange);
[x3 y3 z3]=rot(xi,yi,zi,xf,yf,zf,x3,y3,z3,ange);
[x4 y4 z4]=rot(xi,yi,zi,xf,yf,zf,x4,y4,z4,ange);
[x5 y5 z5]=rot(xi,yi,zi,xf,yf,zf,x5,y5,z5,ange);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Dibujamos el elemento
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
vertices=[x1 y1 z1;x2 y2 z2;x3 y3 z3;x4 y4 z4;x5 y5 z5];
caras=[1 2 3 4;1 2 5 5;2 3 5 5;3 4 5 5;1 4 5 5];
subplot(sp1)
patch('Vertices',vertices,'Faces',caras,'FaceVertexCData',[0 0
0],'FaceColor','flat');
return
- 182 -
y1
y2
y3
y4
y5
z1]=rotar(xi,yi,zi,xi-0.5,yi-0.5,zi,angx,angz);
z2]=rotar(xi,yi,zi,xi+0.5,yi-0.5,zi,angx,angz);
z3]=rotar(xi,yi,zi,xi+0.5,yi+0.5,zi,angx,angz);
z4]=rotar(xi,yi,zi,xi-0.5,yi+0.5,zi,angx,angz);
z5]=rotar(xi,yi,zi,xi,yi,zi+l,angx,angz);
[xf yf zf]=rotar(xi,yi,zi,xf,yf,zf,angx,angz);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Rotamos la figura con respecto al eje Xi-Xf
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
if ange
[x1 y1 z1]=rot(xi,yi,zi,xf,yf,zf,x1,y1,z1,ange);
- 183 -
y2
y3
y4
y5
z2]=rot(xi,yi,zi,xf,yf,zf,x2,y2,z2,ange);
z3]=rot(xi,yi,zi,xf,yf,zf,x3,y3,z3,ange);
z4]=rot(xi,yi,zi,xf,yf,zf,x4,y4,z4,ange);
z5]=rot(xi,yi,zi,xf,yf,zf,x5,y5,z5,ange);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Dibujamos el elemento
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
vertices=[x1 y1 z1;x2 y2 z2;x3 y3 z3;x4 y4 z4;x5 y5 z5];
caras=[1 2 3 4;1 2 5 5;2 3 5 5;3 4 5 5;1 4 5 5];
subplot(sp1)
patch('Vertices',vertices,'Faces',caras,'FaceVertexCData',[0 0
0],'FaceColor','flat');
return
- 184 -
%variable aux de MR
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Habilitacion de nuevas opciones en el menu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
set(htras,'Enable','off');
set(heje,'Enable','off');
set(hrot,'Enable','off');
set(hgarra,'Enable','off');
set(hbase,'Enable','off');
set(graph_DH,'Enable','on')
set(graph_calcbot,'Enable','off')
set(graph_cindir,'Enable','on')
return
- 185 -
if MR(i,1)==2
%si la articulacion es de rotacion el eje se calcula:
MRvec(num,:)=simple([(x0+x1)/2 (y0+y1)/2 (z0+z1)/2 x1-x0
y1-y0 z1-z0 1]);
else
%si la articulacion es de traslaccion el eje se calcula:
MRvec(num,:)=simple([x1 y1 z1 x1-x0 y1-y0 z1-z0 2]);
end
end
if (i==n)&(MR(i,1)~=1)&(MR(i,1)~=2) %si es un ultimo eslabon y no
es una articulacion
x1=MR(i,5);
y1=MR(i,6);
z1=MR(i,7);
num=num+1;
MRvec(num,:)=simple([MR(i-1,2) MR(i-1,3) MR(i-1,4) MR(i-1,5)MR(i-1,2) MR(i-1,6)-MR(i-1,3) MR(i-1,7)-MR(i-1,4) 0]);
end
end
end
- 186 -
k1=q1-p1;
k2=q2-p2;
k3=q3-p3;
mod_v1=sqrt(v1^2+v2^2+v3^2);
A=[v1/mod_v1 w1;v2/mod_v1 w2;v3/mod_v1 w3];
B=[k1 v1 w1;k2 v2 w2; k3 v3 w3];
%determinamos si los ejes son coincidentes, paralelos, se cortan o
se cruzan
if (rank(A)==1)&(rank(B)==1)
%coincidentes
rectas=0;
end
if (rank(A)==1)&(rank(B)==2)
%paralelos
rectas=1;
end
if (rank(A)==2)&(rank(B)==2)
%se cortan
rectas=3;
end
if (rank(A)==2)&(rank(B)==3)
%se cruzan
rectas=4;
end
if rectas==0
%coincidentes
- 187 -
end
if rectas==1
% Paralelas
q1_=simple(det([q1 0 0 -w1;q2 1 0 -w2;q3 0 1 -w3;q4 v2 v3
0])/det([1 0 0 -w1; 0 1 0 -w2; 0 0 1 -w3; v1 v2 v3 0]));
q2_=simple(det([1 q1 0 -w1;0 q2 0 -w2;0 q3 1 -w3;v1 q4 v3
0])/det([1 0 0 -w1; 0 1 0 -w2; 0 0 1 -w3; v1 v2 v3 0]));
q3_=simple(det([1 0 q1 -w1;0 1 q2 -w2;0 0 q3 -w3;v1 v2 q4
0])/det([1 0 0 -w1; 0 1 0 -w2; 0 0 1 -w3; v1 v2 v3 0]));
u(i,:)=([simple(q1_-p1) simple(q2_-p2) simple(q3_p3)]/sqrt((q1_-p1)^2+(q2_-p2)^2+(q3_-p3)^2));
%sum(abs([simple(q1_-p1) simple(q2_-p2) simple(q3_p3)]).^2)^(1/2));%norm([q1_-p1 q2_-p2 q3_-p3]);
MRperp(i,:)=simple([MRvec(i,[4 5 6]) p1 p2 p3 u(i,:)
MRvec(i,7)]);
end
if rectas==3
%Cortan
x=simple((det([k1 w1 u(1);k2 w2 u(2);k3 w3 u(3)])/det([v1 w1
u(i,1);v2 w2 u(i,2);v3 w3 u(i,3)])));
r1=simple(p1+abs(x)*v1);
r2=simple(p2+abs(x)*v2);
r3=simple(p3+abs(x)*v3);
MRperp(i,:)=([MRvec(i,[4 5 6]) r1 r2 r3 u(i,:) MRvec(i,7)]);
end
if rectas==4
% Cruzan
MRperp(i,:)=([MRvec(i,[4 5 6]) p1 p2 p3 u(i,:) MRvec(i,7)]);
end
- 188 -
- 189 -
%Variables de traslacion
%
X inicial
%
Y inicial
%
Z inicial
%
N de piezas iniciales
%N de elem de traslacion+1
%N de elem de rotacin+1
%Matriz del robot
%n de elementos de traslacion
%n de elementos de rotacion
%Variables de traslacion
%Valores de traslacion
%Variables de rotacion
%Valores de rotacion
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
lim de los ejes del plot principal
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
xinf=-30;
xsup=30;
yinf=-30;
ysup=30;
zinf=0;
zsup=40;
ejes=[-20 20 -20 20 0 20];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Color de fondo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
set(hf1,'Color',[.824, .824, .824])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Habilita opciones del menu
- 190 -
- 191 -
- 192 -
%Lmite de ejes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Botones, Textos y cuadros editables
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
rotate_struct = load([matlabroot,'/toolbox/matlab/icons/rotate.mat']);
rotate_cdata = rotate_struct.cdata;
imgejes = imread('ejes.TIF');
imgbot = imread('robot.TIF');
%boton de rotacin
hrot3d = uicontrol('Style','togglebutton',...
'Callback',@rot3d,...
'Tag','mypan',...
'Units','normalized',...
'Position',[0.95 0.94 0.03
0.03],...
'CData',rotate_cdata,...
'Interruptible','off',...
'BusyAction','cancel');
%boton de ver ejes
hejes = uicontrol('Style','togglebutton',...
'Callback',@ver,...
'Tag','mypan',...
'Units','normalized',...
'Position',[0.95 0.84 0.03
0.03],...
'CData',imgejes,...
'Interruptible','off',...
'BusyAction','cancel');
%boton de representar robot
hbot = uicontrol('Style','togglebutton',...
'Callback',@ver,...
'Tag','mypan',...
'Units','normalized',...
'Position',[0.95 0.74 0.03
0.03],...
'CData',imgbot,...
'value',1,...
'Interruptible','off',...
'BusyAction','cancel');
%Boton de aadir traslacion
htras = uicontrol('style','pushbutton',...
'Callback',@colocar1,...
- 193 -
- 194 -
- 195 -
- 196 -
- 197 -
- 198 -
%Pto inicial
%n de elem
%valor variable
%n elem tras
%pto inicial tramo
%pto final
%eje traslacion
%pto final tramos
%rot eje
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Colocar rotacion
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = colocar2(varargin)
global MR Q2 n x y z htextoe rotac
if n==0
MR=sym([0 0 0 0 0 0 0 0]);
end
n=n+1;
Q2(rotac)=str2num(get(htextoe,'String'));
rotacion
rotac=rotac+1;
rotac
[x y z]=eje(x,y,z);
MR(n,1)=2;
MR(n,8)=str2num(get(htextoe,'String'))*2*pi/360;
end
%pto inicial
%n de elem
%valor variable de
%n de elem de
%nuevo pto final
%eje rotac
%rot eje
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Colocar eslabon
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = colocar3(varargin)
global MR n x y z htextoe
if n==0
MR=sym([0 0 0 0 0 0 0 0]);
end
n=n+1;
MR(n,[2 3 4])=[x y z];
[x y z]=eslabon(x,y,z);
MR(n,[5 6 7])=[x y z];
MR(n,1)=3;
MR(n,8)=str2num(get(htextoe,'String'))*2*pi/360;
end
%n de elementos
%pto inicial
%pto final
%tipo elem
%rot eje
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
colocar base
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
- 199 -
%n de elementos
%pto inicial
%pto final
%tipo de elem
%rot eje
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
colocar garra
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = colocar5(varargin)
global MR n x y z htextoe
if n==0
MR=sym([0 0 0 0 0 0 0 0]);
end
n=n+1;
MR(n,[2 3 4])=[x y z];
[x y z]=garra(x,y,z);
MR(n,[5 6 7])=[x y z];
MR(n,1)=5;
MR(n,8)=str2num(get(htextoe,'String'))*2*pi/360;
end
%n de elemento
%pto inicial
%pto final
%tipo de elem
%rot eje
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
habilitar/deshabilitar rotacion 3D
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
function varargout = rot3d(varargin)
global hrot3d
persistent enable_state;
val = get(hrot3d,'Value');
switch val
case 0
rotate3d off;
case 1
rotate3d on;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Habilitar o Deshabilitar ver ejes
- 200 -
- 201 -
- 202 -
- 203 -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
habilitacin de nuevas opciones de los menus
- 204 -
- 205 -
n=size(MRperp,1);
%N de ejes
clear MRejes
subplot(sp1)
MRejes(1,[1 2 3 4 5 6 7 8 9 10 11 12 13])=sym([0 0 1 1 0 0 0 1 0 0 0 0
0]);
%ejes iniciales
MRejes_aux=MRejes;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%sustitucion de valores de traslacion
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:num_simb_rot
MRejes_aux=subs(MRejes,Q1_simb(j),Q1(j));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%sustitucion de valores de rotacion
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:num_simb_rot2
MRejes_aux=subs(MRejes,Q2_simb(j),Q2(j));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%dibuja ejes iniciales
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=0:0.15:3
hold on
plot3(MRejes_aux(1,1)*j, MRejes_aux(1,2)*j,
MRejes_aux(1,3)*j,'.b',MRejes_aux(1,4)*j, MRejes_aux(1,5)*j,
MRejes_aux(1,6)*j,'-*r',MRejes_aux(1,7)*j, MRejes_aux(1,8)*j,
MRejes_aux(1,9)*j,'-+g')
hold off
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Calculo los ejes y los dibujo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:n
- 206 -
- 207 -
- 208 -
0 1];
0 0 1];
1];
0 1];
cos(-tetha) 0 0;0 0 1
end
- 209 -
- 210 -
- 211 -
Q1_simb Q2_simb
P_D_Haux=P_D_H;
cont1=0;
cont2=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%vemos tipo de articulacin
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=2:size(MRejes,1)
if MRejes(i,13)==1
a(i-1)=0;
cont1=cont1+1;
end
if MRejes(i,13)==2
a(i-1)=1;
cont2=cont2+1;
end
end
a(cont1+cont2+1)=0;
eje
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
% Sustituimos variables articulares por cero
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:num_simb_rot
P_D_Haux=subs(P_D_Haux,Q1_simb(j),0);
end
for j=1:num_simb_rot2
P_D_Haux=subs(P_D_Haux,Q2_simb(j),0);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
% creamos DH
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
DH=P_D_Haux;
for i=1:(size(DH,1))
DH(i,5)=a(i);
end
- 212 -
- 213 -
subimage(img)
axis off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Creamos los menus y submenus desplegables
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
mfile= uimenu('Label','Archivo');
mfile_graf=uimenu(mfile,'Label','Nuevo
Grficamente','Callback','nuevo','Separator','on');
mfile_save=uimenu(mfile,'Label','Salvar
Robot','Callback','Savebot','Separator','on','Enable','off','Accelerat
or','S');
mfile_saveDH=uimenu(mfile,'Label','Salvar DH','Callback','SaveDH','Separator','off','Enable','off');
mfile_load=uimenu(mfile,'Label','Cargar
Robot','Callback','loadbot','Separator','on','Enable','off','Accelerat
or','L');
uimenu(mfile,'Label','Salir','Callback','clear
all','Callback','close all','Separator','on','Accelerator','Q');
mopt= uimenu('Label','Configuracion');
- 214 -
- 215 -
- 216 -
%ngulo de y
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Situamos el punto final a una distancia L en vertical
respecto
%
al punto inicial
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
- 217 -
y1
y2
y3
y4
y5
y6
y7
y8
z1]=rotar(xi,yi,zi,xi-0.3,yi-0.3,zi,angx,angz);
z2]=rotar(xi,yi,zi,xi+0.3,yi-0.3,zi,angx,angz);
z3]=rotar(xi,yi,zi,xi+0.3,yi+0.3,zi,angx,angz);
z4]=rotar(xi,yi,zi,xi-0.3,yi+0.3,zi,angx,angz);
z5]=rotar(xi,yi,zi,xi-0.3,yi-0.3,zi+l,angx,angz);
z6]=rotar(xi,yi,zi,xi+0.3,yi-0.3,zi+l,angx,angz);
z7]=rotar(xi,yi,zi,xi+0.3,yi+0.3,zi+l,angx,angz);
z8]=rotar(xi,yi,zi,xi-0.3,yi+0.3,zi+l,angx,angz);
[xf yf zf]=rotar(xi,yi,zi,xf,yf,zf,angx,angz);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Rotamos la figura con respecto al eje Xi-Xf
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
if ange
[x1 y1 z1]=rot(xi,yi,zi,xf,yf,zf,x1,y1,z1,ange);
[x2 y2 z2]=rot(xi,yi,zi,xf,yf,zf,x2,y2,z2,ange);
[x3 y3 z3]=rot(xi,yi,zi,xf,yf,zf,x3,y3,z3,ange);
[x4 y4 z4]=rot(xi,yi,zi,xf,yf,zf,x4,y4,z4,ange);
[x5 y5 z5]=rot(xi,yi,zi,xf,yf,zf,x5,y5,z5,ange);
[x6 y6 z6]=rot(xi,yi,zi,xf,yf,zf,x6,y6,z6,ange);
[x7 y7 z7]=rot(xi,yi,zi,xf,yf,zf,x7,y7,z7,ange);
[x8 y8 z8]=rot(xi,yi,zi,xf,yf,zf,x8,y8,z8,ange);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Dibujamos el elemento
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
vertices=[x1 y1 z1;x2 y2 z2;x3 y3 z3;x4 y4 z4;x5 y5 z5;x6 y6 z6;x7 y7
z7;x8 y8 z8];
caras=[1 2 3 4;1 2 6 5;2 3 7 6;3 4 8 7;1 4 8 5;5 6 7 8];
subplot(sp1)
patch('Vertices',vertices,'Faces',caras,'FaceVertexCData',[.4, .4,
.125],'FaceColor','flat');
return
- 218 -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Calculamos el n de elementos de traslacion
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
if tras>1
%n de elementos de traslacion igual a tras-1
tras2=tras-1;
else tras2=tras;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Obtenemos datos de variable
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
num_simb_rot=num_simb_rot+1;
traslacin
l=str2num(get(htexto,'String'));
a=get(htextot1,'String');
Q1_simb(num_simb_rot)=a;
L=sym(a);
%Aadimos un elemento ms de
%longitud inicial del tramos
%nombre de variable (traslacion)
%matriz de nombre de variables
%Longitud
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Cogemos los valores de los ngulos y los pasamos a
radianes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
angx=-str2num(get(htextox,'String'))*2*pi/360;
angz=-str2num(get(htextoz,'String'))*2*pi/360;
ange=str2num(get(htextoe,'String'))*2*pi/360;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Situamos el punto final a una distancia L en vertical
respecto
%
al punto inicial
- 219 -
y1
y2
y3
y4
y5
y6
y7
y8
z1]=rotar(xi,yi,zi,xi-0.3,yi-0.3,zi,angx,angz);
z2]=rotar(xi,yi,zi,xi+0.3,yi-0.3,zi,angx,angz);
z3]=rotar(xi,yi,zi,xi+0.3,yi+0.3,zi,angx,angz);
z4]=rotar(xi,yi,zi,xi-0.3,yi+0.3,zi,angx,angz);
z5]=rotar(xi,yi,zi,xi-0.3,yi-0.3,zi+l,angx,angz);
z6]=rotar(xi,yi,zi,xi+0.3,yi-0.3,zi+l,angx,angz);
z7]=rotar(xi,yi,zi,xi+0.3,yi+0.3,zi+l,angx,angz);
z8]=rotar(xi,yi,zi,xi-0.3,yi+0.3,zi+l,angx,angz);
- 220 -
- 221 -