Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Facultad de Ingeniería
Escuela Profesional de Ingeniería
Mecatrónica
TESIS
Para optar el Título Profesional de
INGENIERO MECATRÓNICO
Autor:
Barreto Vásquez, Maximino Víctor
Asesor:
1
DEDICATORIA
A mi abuela Mercedes. Cómo ha pasado el tiempo querida abuela, te observo con ternura.
Eres una mujer admirable, luchadora y exitosa; reúnes tantas cualidades, me inspiro en ti
al forjar mi destino. Gracias por estar conmigo desde que era un niño, por todo el amor
que me has dado. Tengo en mi memoria tantos momentos felices junto a ti.
A mi querido abuelo Oscar. Papá Oscar, lamento que no estés conmigo en el inicio de mi
vida adulta. Te agradezco por todas las risas que me arrancaste, por mostrarme tu lado
más humano, por permitirme acompañarte en tu oficio y tus travesías. Recuerdo
alegremente los juegos que ideabas para mí, tu cantar, tu carisma. Te tengo presente a
cada momento.
A mis tíos, Antero, Optaciano, Irma, Ángel, Isabel y muy especialmente a Alberto, mi
segundo padre y maestro; Juan, mi entrañable amigo y Anselmo, mi compañero
inseparable.
A mis abuelos Maximino, el hombre más sabio que conozco, un ejemplo a seguir y
Graciela, tan alegre e inteligente, como pocas.
2
RESUMEN
Este trabajo presenta todos los desarrollos realizados para generar trayectorias en línea
recta para un brazo robótico de 5 grados de libertad diseñado en base a piezas pre-
fabricadas, obteniéndose un prototipo que emula las prestaciones de un manipulador
industrial y puede ser utilizado para fines didácticos.
3
INDICE
4
2.3.1. Población: .......................................................................................................... 50
2.3.2. Muestra: ............................................................................................................. 50
2.4. Técnicas e Instrumentos ................................................................................................. 50
CAPÍTULO III: DESARROLLO Y RESULTADOS ................................................................. 51
3.1. ESTRUCTURA MECÁNICA DEL ROBOT MANIPULADOR .................................. 51
3.2. CINEMÁTICA DIRECTA............................................................................................. 52
3.2.1. Asignación de tramas a las articulaciones del robot y obtención de parámetros
de Denavit-Hatenberg ........................................................................................ 52
3.2.2. Obtención de Matrices de Transformación Homogénea y cinemática directa. . 53
3.2.3. Cinemática directa utilizando cuaterniones ....................................................... 54
3.3. CINEMÁTICA INVERSA DEL MANIPULADOR ..................................................... 55
3.3.1. DESACOPLO CINEMÁTICO.......................................................................... 56
3.3.2. OBTENCIÓN DE LAS TRES PRIMERAS VARIABLES DE
ARTICULACIÓN. ............................................................................................ 62
3.3.3. CÁLCULO DE Q4 Y Q5 UTILIZANDO EL MÉTODO ALGEBRÁICO ...... 68
3.3.4. PROGRAMACIÓN EN MATLAB Y TIEMPO DE CÁLCULO ..................... 69
3.4. VERIFICACIÓN DE LOS ALGORITMOS DE CINEMÁTICA DIRECTA E
INVERSA. .............................................................................................................................. 69
3.4.1. Ecuaciones de decisión para los indicadores de configuración del brazo ......... 70
3.4.2. Calculo de errores e implementación del algoritmo de verificación ................. 71
3.5. GENERACIÓN DE TRAYECTORIA LINEAL USANDO CUATERNIONES .......... 72
3.6. VERIFICACIÓN DE ERRORES MÁXIMOS .............................................................. 80
3.7. AHORRO COMPUTACIONAL Y TIEMPO DE CALCULO ...................................... 82
3.7.1. CUANTIFICACIÓN OPERACIONAL ............................................................ 82
3.7.2. TIEMPO DE CÁLCULO .................................................................................. 84
CAPÍTULO IV: DISCUSIÓN DE RESULTADOS. .................................................................. 85
4.1. ESTRUCTURA DEL BRAZO ROBÓTICO ................................................................. 85
4.2. CINEMÁTICA DIRECTA............................................................................................. 85
4.3. CINEMÁTICA INVERSA............................................................................................. 85
4.4. GENERACIÓN DE TRAYECTORIAS ........................................................................ 86
CAPITULO V: CONCLUSIONES ............................................................................................. 88
CAPITULO VI: REFERENCIAS BIBLIOGRÁFICAS ............................................................. 89
ANEXOS..................................................................................................................................... 91
A. CODIGOS EN MATLAB .............................................................................................. 91
A.1 FUNCIONES PARA IMPLEMENTAR OPERACIONES BÁSICAS
USANDO CUATERNIONES. .......................................................................... 91
A.2 CINEMÁTICA DIRECTA USANDO MTH ................................................................. 93
5
A.3 CINEMÁTICA DIRECTA USANDO CUATERNIONES ........................................... 94
A.4 COMPARACIÓN DE ALGORITMOS DE CINEMÁTICA DIRECTA USANDO
CUATERNIONES Y MTH .................................................................................................... 95
A.5 TIEMPOS DE CÁLCULO PARA ALGORITMOS DE CINEMÁTICA DIRECTA ... 96
A.6 CINEMÁTICA INVERSA............................................................................................. 97
A.7 VERIFICACIÓN DE CINEMÁTICA INVERSA Y DIRECTA ................................. 101
A.8 GENERACIÓN DE TRAYECTORIAS ...................................................................... 103
6
CAPÍTULO I: INTRODUCCIÓN
1.1. Realidad problemática
En los últimos años, los desarrollos llevados a cabo en el área de la Robótica, son cada
vez más impresionantes en todas las áreas en las que ésta se divide, podemos dar cuenta
de robots humanoides que son capaces de caminar por una cuerda, de trasladar objetos
pesados, incluso de manejar una bicicleta. La robótica, conjugada con la visión e
inteligencia artificial, el control y otras ciencias involucradas, seguirán sorprendiéndonos
con el paso del tiempo.
La robótica está cada vez más cerca de nosotros, en el ámbito industrial está siendo de
mucha utilidad. Un ejemplo de ello es la inclusión de Brazos Robóticos o Robots
Manipuladores en las plantas industriales, que realizan trabajos que pueden ser
peligrosos, engorrosos y cansados para el ser humano, como el caso del transporte de
objetos pesados, manipulación de sustancias peligrosas y desarrollo de labores repetitivas.
Actualmente este tipo de Robots se han convertido en la parte más importante de los
sistemas de Paletizado, convirtiéndolos en sistemas más eficientes que permiten a las
empresas registrar cifras de ahorro significativas. En el Perú, hoy en día, ya muchas
empresas cuentan con esta tecnología.
Por ello, es importante que incursionemos en esta área y desarrollemos el marco teórico
que nos permita entender el fundamento que está detrás del funcionamiento de los
mencionados Robots manipuladores y estar preparados para tratar con ellos en nuestra
vida profesional.
1.2. ANTECEDENTES
1.2.1. KUKA
1
de automatización inteligentes, tanto en la sede de Augsburgo como en el resto del
mundo. Nuestros clientes internacionales proceden, entre otras, de las industrias
automovilística y general. En KUKA somos proveedores totales: ponemos a su
disposición tanto componentes individuales como instalaciones completamente
automatizadas” [1].
“KUKA le ofrece una gama muy amplia de robots industriales. En KUKA encontrará el
robot adecuado sin importar la exigencia de la tarea:
• Robots de seis ejes en todas las dimensiones, con distintas capacidades de carga,
de alcances y en las más diversas variantes
• Robots ligeros preparados para el trabajo con humanos, para una directa
colaboración entre personas y máquinas
• Robots industriales para salas blancas, para cumplir con las máximas exigencias
de higiene
2
Fig. 1.1 Gama de Robots Industriales KUKA
(Fuente: https://www.kuka.com/es-es/productos-servicios/sistemas-de-robot/robot-
industrial)
“Lo automatizamos prácticamente todo” [3], nos dice Universal Robots en la primera
imagen que podemos observar en su página web.
3
1.2.3. Tesis “DISEÑO Y CONSTRUCCIÓN DE UN BRAZO ROBOT DE 6
GRADOS DE LIBERTAD CON FINES EDUCATIVOS PARA APLICACIONES
EN NIVEL MEDIO SUPERIOR”.
“Este trabajo presenta el diseño y desarrollo de un brazo robot de 6 grados de libertad que será
utilizado para difundir de una manera más abierta y fácil la cultura de la robótica en las aulas de
los jóvenes estudiante que se interesan por la ingeniería, teniendo como bases la programación
y la electrónica para ayudarnos a comprender el rol tan importante de la automatización de los
procesos cotidianos en nuestros días y que en algún momento se aplicarán en los medios de
transporte así como en nuestro hogar para orientarlos al mejoramiento de la calidad de vida del
ser humano.”
“En este trabajo se presenta una metodología que permite obtener los parámetros
necesarios para la generación de trayectorias de manipuladores robóticos fuera de línea,
como son: los vectores de posición angular que resulten en la configuración espacial del
manipulador que se requiere durante la trayectoria deseada, y los vectores de fuerza o
torque necesarios para que se cumplan las condiciones dinámicas de movimiento.
4
Partiendo de un análisis cinemático y dinámico del manipulador y de la tarea a
desempeñar por este. Desarrollando también las herramientas de computo necesarias para
este fin.”
1.2.6. Tesis “Control de posición/fuerza para manipuladores rígidos basado en
cuaterniones unitarios”
5
1.3. Marco Teórico
1.3.1. Robots manipuladores: Definición y estructura.
1.3.1.1. Definición
Fu, Gonzales y Lee (1988) consideran que la definición más precisa de los robots
industriales, es la dada por el Robot Institute of America: “un robot es un manipulador
reprogramable multifuncional diseñado para mover materiales, piezas o dispositivos
especializados, a través de movimientos programados variables para la realización de una
diversidad de tareas”.
Saha (2010, p. 5), sin embargo, prefiere la definición brindada por la Organización
Internacional para la Estandarización (ISO), que adopta la definición anterior, con una
ligera modificación y nos dice: Un robot es un manipulador multifuncional
reprogramable, capaz de mover materiales, piezas, herramientas o dispositivos especiales,
a través de movimientos variables programados, para el desempeño de tareas diversas.
“Existen otras definiciones dadas por otras asociaciones, como por ejemplo, el Robotics
Institute of America (RIA), la Japan Industrial Robot Association (JIRA), la British Robot
Association (BRA) y otras. Todas ellas coinciden en dos puntos: la capacidad de
reprogramación y la multifuncionalidad de los robots”, concluye Saha (2010, p. 5)
Para Barrientos (1997), debido a que las anteriores no contemplan el hecho de que el
robot tenga varios grados de libertad, la definición más completa es la brindada por la
Asociación Francesa de Normalización (AFNOR), que define primero el manipulador y
luego, basándose en dicha definición, define el robot:
6
• Robot: es un manipulador automático servocontrolado, reprogramable, polivalente,
capaz de posicionar y orientar piezas, útiles o dispositivos especiales, siguiendo
trayectorias variables reprogramables, para la ejecución de tareas variadas.
Normalmente tiene la forma de uno o varios brazos terminados en una muñeca. Su
unidad de control incluye un dispositivo de memoria y ocasionalmente de
precepción del entorno. Normalmente su uso es el de realizar una tarea de manera
cíclica, pudiéndose adaptar a otra sin cambios permanentes en su material.
“Un robot está formado por una serie de elementos o eslabones unidos mediante
articulaciones que permiten un movimiento relativo entre cada dos eslabones
consecutivos. La constitución física de la mayor parte de los robots industriales guarda
cierta similitud con la anatomía del brazo humano, por lo que en ocasiones, para hacer
referencia a los distintos elementos que componen el robot, se usan términos como
cuerpo, brazo, codo y muñeca”, menciona Barrientos (1997, p. 16)
Barrientos (1997) menciona también que el movimiento de cada articulación puede ser
de desplazamiento, de giro o una combinación de ambos. Dando esto como resultado 6
tipos de articulaciones que se muestran en la Figura 1.3, sin embargo, en la práctica, en
los robots solo se emplean la de rotación y la prismática.
7
La Figura 1.4 nos muestra un Robot Manipulador de 6 grados de libertad, cada
articulación representa un grado de libertad y todas son de tipo giratorio. Esta es una
configuración típica, y la más usada para el diseño de manipuladores en la industria.
8
sistema de coordenadas {A}, como se ve en la Fig. 1.5. Dados los subíndices 𝑥, 𝑦 y 𝑧,
los elementos individuales de un vector son:
𝑝𝑥
𝐴
𝑃 = [𝑝𝑦 ] (1.1)
𝑝𝑧
Por ende, las posiciones de los puntos se describen con vectores, y las orientaciones
de los cuerpos con un sistema de coordenadas adjunto.
9
Para denotar los vectores unitarios proporcionamos las direcciones principales del
sistema de coordenadas {B} como 𝑋⃗𝐵 , 𝑌
⃗⃗𝐵 , 𝑍⃗𝐵 . Al escribirse en términos del sistema de
10
Esto sugiere que la inversa de una matriz de rotación es igual a su transpuesta; lo cual
puede verificarse fácilmente de la siguiente manera:
𝑇
𝐵
𝑋⃗𝐴
𝑇
𝐵 𝑇 𝐴
𝐴𝑅 𝐵 𝑅 = 𝐵 ⃗⃗
𝑌𝐴 [ 𝐴𝑋⃗𝐵 𝐴𝑌
⃗⃗𝐵 𝐴𝑍⃗𝐵 ] = 𝐼3 . (1.6)
𝑇
[ 𝐵𝑍⃗𝐴 ]
En efecto, mediante el álgebra lineal, sabemos que el inverso de una matriz con
columnas ortonormales es igual a su transpuesta.
11
Fig. 1.7 Ejemplo de varias tramas.
(Fuente: Craig (2006, p. 23))
12
𝐴 𝐴 𝐵
𝑃= 𝐵𝑇 𝑃 . (1.9)
Es importante también darnos cuenta que la matriz 𝐵𝐴𝑇 representa la relación que existe
entre la trama {𝐵} y la trama {𝐴}; es decir, expresa la trama {𝑩} respecto de la trama
{𝑨}.
(1.10)
Conocidos 𝐵𝐴𝑇 y 𝐵𝐶𝑇 calculamos sencillamente la matriz que describe {𝐶} en relación a la
trama {𝐴}, con una simple multiplicación de matrices:
𝐴
𝐶𝑇 = 𝐵𝐴𝑇 𝐵𝐶𝑇 (1.11)
𝐴 𝐴 𝐶
𝑃= 𝐶𝑇 𝑃 (1.12)
Fig. 1.9 Tramas compuestas: cada una se conoce de forma relativa a la anterior
13
Invertir una transformada
Si conocemos 𝐴
𝑃 y la matriz 𝐵𝐴𝑇 y deseamos conocer 𝐵𝑃 , necesitamos calcular la matriz
𝐵 𝐴
𝐴𝑇 , a la cual llamaremos matriz inversa de 𝐵𝑇 . Craig (2006, p. 36), demuestra lo siguiente:
𝐵
𝐴𝑇 = 𝐵𝐴𝑇 −1 (1.13)
−1
Donde, el operador representa la operación que nos permite calcular la inversa de
cualquier matriz.
1. Es la descripción de una trama. 𝐵𝐴𝑇 describe la trama {𝐵} en relación con la trama
𝐴
{𝐴}. Específicamente, las columnas 𝐵𝑅 son vectores unitarios que definen las
direcciones de los ejes principales de {𝐵} y 𝐵𝐴𝑃𝐵𝑂𝑅𝐺 ubica la posición del origen de
{𝐵}, ambos respecto de {𝐴}.
2. Es la asignación de una transformada. 𝐵𝐴𝑇 asigna 𝐵𝑃 → 𝐴𝑃.
3. Es un operador de transformación. 𝑇 opera en 𝐴𝑃1 para crear 𝐴𝑃2 .
Barrientos (1997), nos brinda los conceptos necesarios para entender fácilmente este
apartado.
La cinemática del robot manipulador, estudia el movimiento del mismo con respecto a un
sistema de referencia. Así, la cinemática se interesa por la descripción analítica del
movimiento espacial del robot como una función del tiempo, y en particular por las
relaciones entre la posición y orientación del extremo final del robot con los valores que
toman sus coordenadas articulares.
14
Existen dos problemas fundamentales a resolver en la cinemática del robot (Fig. 1.10); el
primero de ellos se conoce como el problema cinemático directo, y consiste en
determinar cuál es la posición y orientación del extremo final del robot, con respecto a un
sistema de coordenadas que se toma como referencia, conocidos los valores de las
articulaciones y los parámetros geométricos de los elementos del robot; el segundo,
denominado problema cinemático inverso, resuelve la configuración que debe adoptar
el robot para una posición y orientación del extremo conocidas.
1.3.3. Cuaterniones
En, tal vez, “el más famoso acto de vandalismo matemático”, el 16 de octubre de 1843,
Sir William Rowan Hamilton escribió la siguiente ecuación en el Puente Brougham,
(ahora Puente Broom) en Dublín:
𝑖 2 = 𝑗 2 = 𝑘 2 = 𝑖𝑗𝑘 = −1. (1.14)
La formulación de estas leyes fue un acto decisivo en la historia del álgebra.
Los cuaterniones son un concepto que generaliza el concepto de números complejos, se
podría decir también que son una extensión de los números reales. Los números
complejos se generan con la adición de la unidad imaginaria 𝑖, mientras que los
cuaterniones se generan con la adición de tres unidades imaginarias (𝑖, 𝑗, 𝑘).
El concepto de cuaternión ha sido aplicado satisfactoriamente en el análisis de
mecanismos espaciales durante las últimas décadas. Utilizaremos los cuaterniones para
facilitar la representación de la orientación de la mano del manipulador para planificar
una trayectoria en línea recta.
De acuerdo a la ecuación 1.51, se puede particularizar:
𝒊𝒋 = 𝒌 𝒋𝒌 = 𝒊 𝒌𝒊 = 𝒋
𝒋𝒊 = −𝒌 𝒌𝒋 = −𝒊 𝒊𝒌 = −𝒋 (1.15)
15
Las unidades 𝒊, 𝒋, 𝒌 del cuaternión se pueden interpretar como los tres vectores básicos
de un conjunto de ejes cartesianos. Así, un cuaternión 𝑸 se puede escribir como una parte
escalar 𝑠 y una parte vectorial 𝒗.
𝑄 = [𝑠 + 𝒗] = 𝑠 + 𝑎𝒊 + 𝑏𝒋 + 𝑐𝒌 = (𝑠, 𝑎, 𝑏, 𝑐) (1.16)
Es importante observar que los cuaterniones incluyen a los números reales (𝑠, 0,0,0); a
los números complejos (s,a,0,0) y los vectores (0,a,b,c)
16
1.3.3.1. Los cuaterniones y las rotaciones.
Las rotaciones finitas en el espacio se pueden tratar de una manera simple y eficiente con
la ayuda del álgebra de cuaterniones.
17
2(𝑞0 2 + 𝑞1 2 ) − 1 2(𝑞1 𝑞2 − 𝑞0 𝑞3 ) 2(𝑞1 𝑞3 + 𝑞0 𝑞2 )
𝑅 = [ 2(𝑞1 𝑞2 + 𝑞0 𝑞3 ) 2(𝑞0 2 + 𝑞2 2 ) − 1 2(𝑞2 𝑞3 − 𝑞0 𝑞1 ) ] (1.27)
2(𝑞1 𝑞3 − 𝑞0 𝑞2 ) 2(𝑞2 𝑞3 + 𝑞0 𝑞1 ) 2(𝑞0 2 + 𝑞3 2 ) − 1
18
𝑄(𝑞, 𝑝) = ([cos(𝜃⁄2) , sin(𝜃⁄2) < 𝑘𝑥 , 𝑘𝑦 , 𝑘𝑧 >], < 𝑝𝑥 , 𝑝𝑦 , 𝑝𝑧 >) (1.28)
Dado que un robot se puede considerar como una cadena cinemática formada por objetos
rígidos o eslabones unidos entre sí mediante articulaciones, se puede establecer un
sistema de referencia fijo situado en la base del robot y describir la localización de cada
uno de los eslabones con respecto a dicho sistema de referencia. De esta forma, el
problema cinemático directo se reduce a encontrar una matriz de transformación
homogénea T que relacione la posición y orientación del extremo del robot respecto del
sistema de referencia fijo situado en la base del mismo. Ésta matriz será función de las
coordenadas articulares.
En general, un robot de n grados de libertad está formado por n eslabones unidos por n
articulaciones, de forma que cada par articulación-eslabón constituye un grado de
libertad. A cada eslabón se le puede asociar un sistema de coordenadas solidario a él y,
utilizando las matrices de transformación homogénea, es posible representar las
rotaciones y traslaciones relativas entre los distintos eslabones que componen el robot.
Normalmente, la MTH que representa la posición y orientación relativa entre los sistemas
asociados a dos eslabones consecutivos del robot se suele denominar matriz 𝑖−1𝐴𝑖 , según
𝑖−1
la notación utilizada por Barrientos (1997), o 𝑖𝑇, según la notación utilizada por Craig
19
(2006). Como lo venimos haciendo, en la presente investigación utilizamos la segunda
notación.
Parámetros D-H.
Una vez obtenidos los parámetros D-H, el cálculo de las relaciones entre los eslabones
consecutivos del robot es inmediato, ya que vienen dadas por las matrices 𝑖−1𝑖𝐴, que se
calculan según la expresión general (1.14).
𝑐𝑜𝑠 𝜃𝑖 − cos ∝𝑖 𝑠𝑒𝑛 𝜃𝑖 𝑠𝑒𝑛 ∝𝑖 sen 𝜃𝑖 𝑎𝑖 𝑐𝑜𝑠 𝜃𝑖
𝑖−1 𝑠𝑒𝑛 𝜃𝑖 cos ∝𝑖 𝑐𝑜𝑠 𝜃𝑖 −𝑠𝑒𝑛 ∝𝑖 cos 𝜃𝑖 𝑎𝑖 𝑠𝑒𝑛 𝜃𝑖
𝑖𝐴 = ( 𝑠𝑒𝑛 ∝𝑖 𝑐𝑜𝑠 ∝𝑖
) (1.32)
0 𝑑𝑖
0 0 0 1
20
Las relaciones entre eslabones no consecutivos, es decir, entre cualquier par de sistemas
de coordenadas del brazo, se obtiene como producto de un conjunto de matrices (1.15),
utilizando los conceptos de operaciones con MTH vistos anteriormente.
0
6𝐴 = 01𝐴 12𝐴 23𝐴 34𝐴 45𝐴 56𝐴 (1.33)
El objetivo del problema cinemático inverso consiste en encontrar los valores que deben
adoptar las coordenadas articulares del robot 𝑞 = [𝑞1 , 𝑞2 , 𝑞3 , … , 𝑞𝑛 ]𝑇 para que su
extremo se posicione y oriente según una determinada localización espacial.
Los valores ingresados serán la posición y orientación final del efector final del
manipulador, información contenida en la MTH que relaciona este elemento con la
base, si 𝑛 es el número de grados de libertad de un manipulador, entonces, para obtener
los valores de las articulaciones, debemos conocer 𝑛0𝐴
0 𝒏 𝒐 𝒂 𝒑
𝑛𝐴 =(
0 0 0 1
) (1.34)
21
1. En aplicaciones en las que se solicite resolver en tiempo real el problema
cinemático inverso en tiempo real. Una solución de tipo iterativo no garantiza tener
la solución en el momento adecuado.
2. La solución del problema cinemático inverso, con cierta frecuencia, no es única;
existiendo diferentes n-uplas [𝑞1 , 𝑞2 , 𝑞3 , … , 𝑞𝑛 ]𝑇 que posicionan y orientan el
extremo del robot del mismo modo. En estos casos, una solución cerrada permite
incluir determinadas reglas o restricciones que aseguren que la solución obtenida
sea la más adecuada de entre las posibles.
“La mayor parte de los robots poseen estructuras o eslabones dispuestos de tal manera
que facilitan en cierta medida la resolución de su problema cinemático inverso. Por
ejemplo, si solo se consideran los primeros grados de libertad de muchos robots, estos
tienen una estructura planar, esto es, los tres primeros elementos quedan contenidos en
un plano. Esta circunstancia facilita la resolución del problema. Asimismo, en muchos
robots se da la circunstancia de que los tres grados de libertad últimos, dedicados
fundamentalmente a orientar el extremo del robot, corresponden a giros sobre ejes que se
cortan en un solo punto. Este otro criterio facilita también el cálculo de la n-upla
[𝑞1 , 𝑞2 , 𝑞3 , … , 𝑞𝑛 ]𝑇 correspondiente a la posición y orientación deseadas. Por lo tanto, para
los casos citados y otros, es posible establecer ciertas pautas generales que permitan
plantear y resolver el problema cinemático inverso”, Barrientos (1997, p. 108).
Los métodos más utilizados para el cálculo de la cinemática inversa, son: el método
geométrico, método algebraico o matricial y el método de desacoplo cinemático. La
forma más sencilla de llegar al resultado es combinando el método de desacoplo
cinemático con cualquiera de los otros dos.
“Para un robot PUMA mostrado en la Figura 1.11 (y otros robots giratorios), se definen
diversas configuraciones de brazo de acuerdo con la geometría del brazo humano y el
sistema de coordenadas de elementos que se estableció utilizando el algoritmo 2.1 como
(Fig. 12):
22
BRAZO IZQUIERDO (hombro) 𝜃2 positivo mueve la muñeca en la dirección 𝑧0 negativa
mientras la articulación tres no se activa.
BRAZO ARRIBA (codo por encima de la muñeca): Posición de la muñeca del brazo
{DERECHO, IZQUIERDO} con respecto al sistema de coordenadas del hombro, tiene
valor de coordenada {negativo, positivo} a lo largo del eje 𝑦2 .
BRAZO ABAJO (codo por debajo de la muñeca): posición de la muñeca del brazo
{DERECHO, IZQUIERDO} con respecto al sistema de coordenadas del hombro, tiene
valor de coordenada {positivo, negativo} a lo largo del eje 𝑦2
(Obsérvese que la definición de las configuraciones del brazo con respecto al sistema de
coordenadas del elemento pueden tener que ser ligeramente modificadas si se utilizan
diferentes sistemas de coordenadas para los elementos.)”, Fu, Gonzales y Lee (1988, p.
64),
23
configuración. Estos dos indicadores se combinan para dar una solución de las cuatro
posibles para las tres primeras articulaciones. Para cada una de las cuatro configuraciones
del brazo (Figura 1.12) el tercer indicador (MUÑECA) da una de las dos posibles
soluciones de articulación para las tres últimas articulaciones. Estos tres indicadores se
pueden definir como:
(1.35)
(1.36)
(1.37)
(1.38)
24
Fig. 1.12 Definición de diversas configuraciones de un brazo
(Fuente: Fu, Gonzales y Lee (1988, p. 65))
Los valores señalados por estos indicadores y el conmutador se especifican por el usuario
para encontrar la solución cinemática inversa”, Fu, Gonzales y Lee (1988, pp. 64-65).
El uso de estos parámetros, nos permiten seleccionar una de las 16 soluciones posibles
que tiene un brazo robótico de seis grados de libertad con articulaciones giratorias. El
indicador al que Fu, Gonzales y Lee llaman CONMUTADOR, selecciona una de las dos
posiciones posibles para el último grado de libertad.
Como sabemos, los tres primeros grados de libertad posicionan el extremo final del robot
en un lugar deseado y las articulaciones siguientes, si bien es cierto varían un poco la
posición del robot, se utilizan para determinar la orientación del extremo final.
25
Valiéndose de lo anterior; este método consiste, como se mencionó antes, en separar el
problema cinemático inverso en dos: posición y orientación. Las articulaciones finales,
generalmente se cortan en un solo punto, el cual se calcula fácilmente con una resta de
vectores. Una vez hecho esto, se procede a calcular los tres primeros grados de libertad:
[𝑞1 , 𝑞2 , 𝑞3 ], utilizando el método algebraico o geométrico. Con estos valores, es sencillo calcular
los valores de los ángulos de articulación restantes.
Barrientos (1997, p.118), nos explica el método de desacoplo cinemático para un robot
de 6 grados de libertad que cumple con la condición de que se intersecten grados de
libertad de orientación en un solo punto (Fig. 1.11).
Dadas la posición y orientación deseadas para el manipulador de la Figura 1.11 ( 06𝐴), de donde
obtenemos 𝑂6, que es el vector posición del sistema de coordenadas del eslabón final con
respecto a la base; encontramos el punto 𝑂5 realizando una resta de vectores, éste punto
es la posición de la intersección de los ejes de las articulaciones de orientación con
respecto a la base. Con esto podemos fácilmente calcular los ángulos de las articulaciones
como se mencionó líneas arriba.
26
1.3.5.2. Método geométrico
Fu, Gonzales y Lee (1988, p. 66), nos explican un método geométrico, muy interesante,
el cual posteriormente utilizaremos en la investigación, luego de aplicar el método de
desacoplo cinemático, que divide el problema en dos etapas. Éste método nos permite
elegir entre los diferentes conjuntos de ángulos que solucionan la cinemática inversa.
Un manipulador puede llegar a tener hasta 16 soluciones posibles, Craig (2006, p. 105).
El método algebraico utiliza las MTH para resolver el problema cinemático inverso.
Aplicarlo para resolver los 6 grados de libertad a partir del conocimiento de la matriz
0
𝑛𝐴 (ecuación 1.15), es muy complicado y tedioso, sin embargo, si utilizamos
previamente el método de desacoplo cinemático, el método algebraico se vuelve viable
27
debido a que se resuelven primero las articulaciones [𝑞1 , 𝑞2 , 𝑞3 ] y luego, una vez
calculados esos valores, las articulaciones siguientes.
Barrientos (1997, p. 112), nos explica la utilización de este método para el manipulador
de tres grados de libertad de la Figura 13.
“El primer paso a dar para resolver el problema cinemático es obtener la expresión (1.14)
correspondiente a este robot. Es decir, obtener la matriz que relaciona el sistema de
referencia {𝑆0 } asociado a la base con el sistema de referencia {𝑆3 } asociado con su extremo.
La figura 1.15 representa la asignación de sistemas de referencia según los criterios de Denavit-
Hartenberg, con el robot situado en su posición de partida (𝑞1 = 𝑞2 = 𝑞3 = 0 ),y la Tabla 1
muestra los valores de los parámetros D-H”.
Articulación 𝜃 𝑑 𝑎 𝛼
1 𝑞1 𝑙1 0 90
2 𝑞2 0 0 −90
3 0 𝑞3 0 0
A partir de estos parámetros, de inmediato, se pueden obtener las matrices que relacionan
cada eslabón con el eslabón siguiente y la matriz que relaciona el eslabón final con la
base del robot. Estas son:
28
(1.39)
0 −1 0
1𝐴 3𝐴 = 12𝐴 23𝐴 (1.40)
1 −1 0 −1 0
2𝐴 1𝐴 3𝐴 = 23𝐴 (1.41)
𝒏 𝒐 𝒂 𝒑
Puesto que 03𝐴 = ( ) es conocida, los miembros a la izquierda en las
0 0 0 1
expresiones (1.22) y (1.23) son funciones de las variables (𝑞1 , … , 𝑞𝑘 ) mientras que los
miembros de la derecha lo son de las variables articulares (𝑞𝑘+1 , … , 𝑞𝑛 ).
De este modo, de la primera de las expresiones (1.22) y (1.23) se tendrá 𝑞1 aislado del resto de
las variables articulares y tal vez será posible obtener su valor sin la complejidad que se tendría
abordando directamente la manipulación de la expresión (1.16). A su vez, una vez obtenida 𝑞1 , la
expresión (1.23) permitirá tener el valor de 𝑞2 aislado y respecto de 𝑞3 . Por último, conocidos 𝑞1
y 𝑞2 se podrá obtener 𝑞3 de la expresión (1.16).”, Barrientos (1997, pp. 115-117).
29
Fig. 1.16 Asignación de sistemas de referencia de robot polar de la Figura 13
(Fuente: Barrientos (1997, p.114))
(1.42)
Encontrar los valores de los dos siguientes grados de libertad es un poco más complejo,
debido a que se presentan ecuaciones trascendentes [9], sin embargo, Craig (2006) aporta
un método que utiliza cambios de variables para convertir estas ecuaciones en ecuaciones
algebraicas sencillas de resolver.
“Las ecuaciones trascendentales son a menudo difíciles de resolver porque, aun cuando
solamente hay una variable (digamos, 𝜃), generalmente aparece como 𝑠𝑒𝑛 𝜃 y 𝑐𝑜𝑠 𝜃. No
30
obstante, si hacemos las siguientes sustituciones se produce una expresión en términos de
una sola variable 𝑢:
(1.43)
Ésta es una sustitución geométrica muy importante que se utiliza a menudo para resolver
ecuaciones cinemáticas. Estas sustituciones convierten ecuaciones trascendentales en
ecuaciones polinomiales en 𝑢”, Craig (2006, pp. 113-114).
Luego de aplicar la sustitución por una variable 𝑢, la igualdad tomará una forma
polinomial:
𝑏±√𝑏 2 +𝑎2 −𝑐 2
𝑢= (1.47)
𝑎+𝑐
Por lo tanto,
𝑏±√𝑏2 +𝑎2 −𝑐 2
𝜃 = 2𝑡𝑎𝑛−1 ( ). (1.48)
𝑎+𝑐
“En caso de que la solución para u en base a la ecuación (1.29) fuera compleja, no hay
solución real para la ecuación trascendental original. Observe que si a + c = 0, el
argumento del arco tangente se vuelve infinito y por ende θ = 180°. En una
implementación por computadora debe comprobarse antes esta división potencial entre
cero. Esta situación se produce cuando el término cuadrático de (1.28) desaparece, de
31
manera que la ecuación cuadrática se degenera en una ecuación lineal”, Craig (2006, p.
114).
32
Para el indicador BRAZO
Sean:
𝒁𝟎 : Eje del sistema de coordenadas de la base.
𝒁𝟏 : Eje del sistema de coordenadas 𝑆1, respecto de 𝑆0 .
𝒑′ = (𝑝𝒙 , 𝑝𝒚 , 0): La proyección de 𝑷𝟎𝟓 sobre el plano 𝑿𝟎 𝒀𝟎 .
𝑖 𝒋 𝒌
𝒁 𝑥 𝒑′ 1
𝑔= 𝒁𝟎 . |𝒁𝟏 𝑥 𝒑′| = 𝒁𝟎 . |− sin 𝑞1 cos 𝑞1 0| |𝒁 𝑥 𝒑′|
𝟏 𝟏
𝑝𝑥 𝑝𝑦 0
−𝑝𝒚 sin 𝑞1−𝑝𝒙 cos 𝑞1
𝑔= |𝒁𝟏 𝑥 𝒑′|
(1.49)
33
Figura 1.18 Configuraciones codo arriba y codo abajo según la configuración brazo
derecho y brazo izquierdo.
(Fuente: Elaboración propia)
La ecuación para hallar el parámetro CODO, para el manipulador de la figura 1.11, tendría
la siguiente forma (Fu, Gonzales y Lee, 1988):
𝐶𝑂𝐷𝑂 = 𝐵𝑅𝐴𝑍𝑂. 𝑠𝑖𝑔𝑛(𝑃24 𝑦 )
+1 → 𝐶𝑜𝑑𝑜 𝑒𝑛𝑐𝑖𝑚𝑎 𝑑𝑒 𝑙𝑎 𝑀𝑢ñ𝑒𝑐𝑎
𝐶𝑂𝐷𝑂 = 𝐵𝑅𝐴𝑍𝑂. 𝑠𝑖𝑔𝑛(𝑑4 𝐶3 − 𝑎𝟑 𝑆3 ) = {
−1 → 𝐶𝑜𝑑𝑜 𝑑𝑒𝑏𝑎𝑗𝑜 𝑑𝑒 𝑙𝑎 𝑀𝑢ñ𝑒𝑐𝑎
(1.50)
En esta ecuación se utiliza 𝑷𝟐𝟒 ya que, en el análisis de las primeras tres articulaciones
se encontró conveniente, debido a la coincidencia de los Sistemas de coordenadas 𝑆𝟎𝟑 y
𝑆04 .
34
1.3.7. Generación de trayectorias
La planificación de trayectorias consiste en generar una función que satisfaga, según las
exigencias del usuario, una posición inicial y final, o bien una posición inicial y final y
algunos puntos intermedios definidos, o bien una posición inicial y final y un camino
específico deseado (generalmente un camino en línea recta).
Las dos primeras opciones se pueden conseguir mediante métodos de interpolación, que
actúan en el espacio de las variables articulares, es decir, unimos los puntos inicial y final,
o los puntos inicial y final más los puntos intermedios (Craig (2006) los llama Puntos
Vía; Fu , Gonzales y Lee los llaman “ligaduras de camino”) mediante funciones
polinomiales de grado 𝑛.
La tercera opción se consigue de una manera un poco más complicada, y se tiene que
hacer un trabajo que involucra al espacio de las coordenadas cartesianas.
Así, algunos autores clasifican a los métodos de generación de trayectorias en dos grupos,
los que trabajan en el espacio de las variables de articulación y los que trabajan en el
espacio de las coordenadas cartesianas.
Paul (1972) demostró que son de interés las siguientes consideraciones, para la
generación de trayectorias de este tipo:
1. Cuando se toma un objeto, el movimiento de la mano debe dirigirse hacia fuera
del objeto; en otro caso, mano puede golpear la superficie soporte del objeto.
2. Si especificamos una posición de partida (punto de despegue) a lo largo del vector
normal a la superficie desde la posición inicial y si queremos que la mano (es
decir, el origen del sistema de coordenadas de la mano) pase a través de esta
posición, entonces tenemos un movimiento de partida admisible. Si especificamos
más aún el tiempo necesitado para alcanzar esta posición, podríamos controlar la
velocidad con la cual despega el objeto.
3. El mismo conjunto de requisitos de despegue para el movimiento del brazo es
también válido cuando nos acercamos a la posición final (es decir, debemos
movernos en una dirección normal a la superficie y frenándonos cuando nos
aproximamos a la posición final) de manera que se pueda obtener y controlar la
dirección de aproximación correcta.
35
4. De lo anterior, tenemos cuatro posiciones para cada movimiento del brazo: inicial,
despegue, asentamiento y final (Figura 1.18)
5. Ligaduras de posición:
a. Posición inicial: serán la velocidad y aceleración (normalmente nula)
b. Posición de despegue: movimiento continuo a puntos intermedios.
c. Posición de asentamiento: lo mismo que para la posición de despegue.
d. Posición final: serán la velocidad y aceleración (normalmente nulas)
6. Además de estas ligaduras, los extremos de todas las trayectorias de la
articulación deben estar dentro de sus límites físicos y geométricos.
Posición inicial
1. Posición
2. Velocidad inicial (normalmente nula)
3. Aceleración inicial (normalmente nula)
Posición intermedia
4. Posición de despegue
5. Continuidad en posición
36
6. Continuidad en velocidad
7. Continuidad en aceleración
8. Posición de asentamiento
9. Continuidad en posición
10. Continuidad en velocidad
11. Continuidad en aceleración
Posición final
12. Posición
13. Velocidad final (normalmente nula)
14. Aceleración final (normalmente nula)
37
4. Posición de despegue = 𝜃1 = 𝜃(𝑡1 ).
5. Continuidad en posición en 𝑡1 .
6. Continuidad en velocidad en 𝑡1 .
7. Continuidad en aceleración en 𝑡1 .
8. Posición de asentamiento = 𝜃2 = 𝜃(𝑡2 )
9. Continuidad en posición en 𝑡2
10. Continuidad en velocidad en 𝑡2
11. Continuidad en aceleración en 𝑡2 .
12. Posición final = 𝜃𝑓 = 𝜃(𝑡𝑓 ).
13. Magnitud de la velocidad final = 𝑣𝑓 (normalmente nula).
14. Magnitud de la aceleración final = 𝑎𝑓 (normalmente nula).
𝑎0 𝑡1 2 𝑎0 𝑡1 2
ℎ1 (𝑡) = (𝛿1 − 𝑣0 𝑡1 − − 𝜎) 𝑡 4 + 𝜎𝑡 3 + ( ) 𝑡 2 + (𝑣0 𝑡1 )𝑡 + 𝜃0 (1.54)
2 2
ℎ1 (1) 4𝛿 𝜎
𝑣1 = = ( 𝑡 1 − 3𝑣0 − 𝑎0 𝑡1 − 𝑡 ) (1.55)
𝑡1 1 1
𝑎1 𝑡2 2 𝑎1 𝑡2 2
ℎ2 (𝑡) = (𝛿2 − 𝑣1 𝑡2 − ) 𝑡3 + ( ) 𝑡 2 + (𝑣1 𝑡2 )𝑡 + 𝜃1 (1.57)
2 2
ℎ2 (1) 3𝛿 𝑎1 𝑡2
𝑣2 = = ( 𝑡 2 − 2𝑣1 − ) (1.58)
𝑡2 2 2
38
𝑎2 𝑡𝑛 2 𝑎𝑓 𝑡𝑛 2
ℎ𝑛 (𝑡) = (9𝛿𝑛 − 4𝑣2 𝑡𝑛 − − 5𝑣𝑓 𝑡𝑛 + ) 𝑡 4 + (−8𝛿𝑛 + 5𝑣𝑓 𝑡𝑛 −
2 2
𝑎𝑓 𝑡𝑛 2 𝑎2 𝑡𝑛 2
+ 3𝑣2 𝑡𝑛 ) 𝑡 3 + ( ) 𝑡 2 + (𝑣2 𝑡𝑛 )𝑡 + 𝜃2 (1.60)
2 2
donde 𝜎 = 𝑓/𝑔 y
𝑡𝑛 2𝑡𝑛 3𝑡2
𝑔= + +2+
𝑡2 𝑡1 𝑡1
𝑎0 𝑡1 2 𝑎0 𝑡1 2 2
ℎ1 (𝑡) = (𝛿1 − 𝑣0 𝑡1 − ) 𝑡3 + 𝑡 + (𝑣0 𝑡1 )𝑡 + 𝜃0 (1.61)
2 2
ℎ1 (1) 3𝛿 𝑎0 𝑡1
𝑣1 = = ( 𝑡 1 − 2𝑣0 − ) (1.62)
𝑡1 1 2
𝑎1 𝑡2 2 𝑎2 𝑡2 2
ℎ2 (𝑡) = (6𝛿2 − 3𝑣1 𝑡2 − 3𝑣2 𝑡2 − + ) 𝑡 5 + (−15𝛿2 − 8𝑣1 𝑡2 +
2 2
3𝑎1 𝑡2 2 3𝑎1 𝑡2 2
7𝑣2 𝑡2 + − 𝑎2 𝑡2 2 ) 𝑡 4 + 6𝛿2 − (10𝛿2 − 6𝑣1 𝑡2 − 4𝑣2 𝑡2 − +
2 2
𝑎2 𝑡2 2 𝑎1 𝑡2 2 2
2
) 𝑡3 + 2
𝑡 + (𝑣1 𝑡2 )𝑡 + 𝜃1 (1.64)
39
ℎ2 (1) 3𝛿𝑛 𝑎𝑓 𝑡𝑛
𝑣2 = =( − 2𝑣𝑓 + ) (1.65)
𝑡2 𝑡𝑛 2
𝑎𝑓 𝑡𝑛 2
ℎ𝑛 (𝑡) = (𝛿𝑛 − 𝑣𝑓 𝑡𝑛 + ) 𝑡 3 + (−3𝛿𝑛 + 3𝑣𝑓 𝑡𝑛 + 𝑎𝑓 𝑡𝑛 2 )𝑡 2 + (3𝛿𝑛 − 2𝑣𝑓 𝑡𝑛 +
2
𝑎𝑓 𝑡𝑛 2
) 𝑡 + 𝜃0 (1.67)
2
ℎ1 (1) 3𝛿 𝑎0 𝑡1
𝑣1 = = ( 𝑡 1 − 2𝑣0 − ) (1.68)
𝑡1 1 2
40
las transiciones entre posiciones de la mano debidos a operaciones rotacionales necesitan
menos cálculo, mientras que las operaciones traslacionales no dan ninguna ventaja.
El esquema de trayectoria de movimiento en línea recta de Paul utiliza el método de la
matriz de transformación homogénea para representar las posiciones finales. Esta
representación es fácil de comprender y de utilizar. Sin embargo, las matrices son
moderadamente costosas de almacenar y los cálculos sobre ellas requieren más
operaciones que para algunas otras representaciones. Taylor (1979) observó que
utilizando un cuaternión para representar la rotación hacía el movimiento más uniforme
y eficaz. Propuso dos métodos al problema de planificación de movimientos en línea recta
entre puntos nudos. El primero, llamado control del camino cartesiano, es un
refinamiento de la técnica de Pul, pero utilizando una representación de cuaterniones
para las rotaciones. Este método es simple y proporciona un movimiento rotacional más
uniforme. Sin embargo, necesita considerables cálculos en tiempo real y es vulnerable a
configuraciones del manipulador degeneradas. El segundo método, llamado camino de la
articulación de desviación acotada, necesita una fase de pre-planificación del
movimiento que selecciona suficientes puntos nudos de manera que el manipulador se
pueda controlar mediante interpolación lineal de los valores de la articulación sin permitir
que la mano del manipulador se desvíe de la trayectoria en línea recta más de una cantidad
preespecificada. Este método reduce grandemente la cantidad de cálculos que se deben
hacer en cada intervalo de muestreo.
El método de generación de trayectorias utilizado por Paul, puede ser revisado en Fu,
Gonzales y Lee (1988). En el presente texto profundizaremos en los dos métodos
planteados por Taylor; para lo cual, primero abordaremos el concepto de cuaterniones y
el álgebra que los gobierna.
𝑹 𝑷𝒊
𝑭𝒊 = ( 𝒊 ) (1.70)
0 0
41
El movimiento a lo largo del camino consiste en traslaciones del origen del sistema de la
herramienta desde 𝒑𝟎 hasta 𝒑𝟏 acomplado con rotaciones de la parte de orientación desde
la estructura de la herramienta desde 𝑹𝟎 hasta 𝑹𝟏 . Sea λ(𝑡) la fracción que queda todavía
del movimiento para ser recorrida en el tiempo 𝑡. Para un movimiento uniforme tenemos:
𝑇−𝑡
λ(𝑡) = (1.71)
𝑇
𝑅𝑜𝑡(𝒏, 𝜃) = 𝑹𝟎 −1 𝑹𝟏 (1.74)
𝜏∆𝒑𝟏
𝒑(𝑇1 − 𝜏) = 𝒑𝟏 − (1.75)
𝑇1
𝜏∆𝒑𝟐
𝒑(𝑇1 + 𝜏) = 𝒑𝟏 + (1.76)
𝑇2
42
𝑑 ∆𝒑𝟏
𝒑(𝑡)|𝑡=𝑇1−𝜏 = (1.77)
𝑑𝑡 𝑇1
𝑑 ∆𝒑𝟐
𝒑(𝑡)|𝑡=𝑇1+𝜏 = (1.78)
𝑑𝑡 𝑇2
donde ∆𝒑𝟏 = 𝒑𝟏 − 𝒑𝟐 , ∆𝒑𝟐 = 𝒑𝟐 − 𝒑𝟏 , y 𝑇1 y 𝑇2 son los tiempos recorridos por los dos
segmentos. Si aplicamos una aceleración constante a la transición,
𝑑2
𝒑(𝑡) = 𝒂𝒑 (1.79)
𝑑𝑡 2
Donde
𝑅𝑜𝑡(𝒏𝟏 , 𝜃1 ) = 𝑹𝟎 −1 𝑹𝟏 y 𝑅𝑜𝑡(𝒏𝟐 , 𝜃2 ) = 𝑹𝟏 −1 𝑹𝟐
El sistema de control del camino cartesiano descrito anteriormente necesita una cantidad
considerable de tiempo de cálculo y es difícil de tratar con las restricciones sobre la
conducta espacial de las variables de articulación del manipulador en tiempo real. Existen
algunas formas posibles que están disponibles para tratar este problema. Una podría ser
pre-calcular y almacenar la solución de la articulación mediante la simulación del
algoritmo en tiempo real, antes de la ejecución del movimiento. En este caso, la ejecución
43
del movimiento sería trivial, ya que los puntos de consigna del servo se podrían leer
rápidamente de memoria. Otra forma posible es pre-calcular la solución de la articulación
para cada intervalo de muestreo y luego realizar interpolaciones de articulación utilizando
polinomios de bajo grado para ajustarlo a través de estos puntos intermedios para generar
los puntos de consigna del servo. La dificultad de este método es que el número de puntos
intermedios necesitados para mantener la mano del manipulador aceptablemente próxima
a la trayectoria en línea recta cartesiana depende del movimiento particular que se realice.
Cualquier intervalo predeterminado suficientemente pequeño para garantizar pequeñas
desviaciones necesitará una cantidad superflua de tiempo y de espacio de memoria.
𝑇 −𝑡
𝒒(𝒕) = 𝒒𝟏 − 𝑇1 ∆𝒒𝟏 (1.82)
1
44
mano del manipulador en el punto nudo de la articulación 𝒒𝒋 (𝒕) y 𝑭𝒄 (𝒕), que corresponde
a la mano del manipulador en el correspondiente camino cartesiano, en el punto medio
del segmento. Luego, definimos las desviaciones en desplazamiento y rotación, de la
siguiente manera:
45
𝒒𝒎 = 𝒒𝟏 − 1⁄2 ∆𝒒𝟏 (1.87)
𝒑𝟎 +𝒑𝟏 𝜃
𝒑𝒄 = y 𝑹𝒄 = 𝑹𝟏 𝑅𝑜𝑡(𝒏𝟏 , − 2) (1.88)
𝟐
donde 𝑅𝑜𝑡(𝒏, 𝜃) = 𝑹𝒐 −𝟏 𝑹𝟏 .
𝛿𝑝 = |𝒑𝒎 − 𝒑𝒄 | (1.89)
Paso 5: Comprobación de las cotas de error. Si 𝛿𝑝 < 𝛿𝑝 𝑚á𝑥 y 𝛿𝑅 < 𝛿𝑅 𝑚á𝑥 , entonces
parar. De lo contrario, calcular el vector solución de la articulación 𝑞𝑐 corresponde al
punto medio del espacio cartesiano 𝑭𝒄 , y aplicar los pasos S2 a S5 recursivamente para
los dos subsegmentos sustituyendo 𝑭𝟏 por 𝑭𝒄 y 𝑭𝒄 por 𝑭𝟎 .
La figura 1.19 muestra una comparación entre los dos métodos expuestos en esta sección,
como vemos el método de desviación acotada reduce rápidamente el error de desviación
46
a medida que incrementa el número de segmentos utilizados, la trayectoria no es exacta,
pero el error de desviación es bastante pequeño y el tiempo de cálculo, mucho más rápido.
47
1.4. Formulación del Problema
1.6. Hipótesis
Aplicando el método de Denavit-Hartenberg, la cinemática directa; la cinemática
inversa, mediante el método de desacoplo cinemático y la generación de trayectorias,
utilizando cuaterniones unitarios, se podrá conseguir un algoritmo que realice el cálculo
48
necesario para generar las trayectorias de un Brazo Robótico de 5 grados de libertad en
tiempo real.
1.7. Objetivos
1.7.1. Objetivo General
Desarrollar, un algoritmo que nos permita generar trayectorias para un brazo
robótico de 5 grados de libertad utilizando cuaterniones unitarios
49
CAPÍTULO II: MÉTODO
2.1. Diseño de investigación:
Investigación aplicada.
2.2.Variables
2.2.1. Variables independientes.
Trayectoria lineal deseada para el efector final.
Error máximo de desviación para la trayectoria
Tiempo de paso.
Estructura y dimensiones del brazo robótico.
50
CAPÍTULO III: DESARROLLO Y RESULTADOS
3.1.ESTRUCTURA MECÁNICA DEL ROBOT MANIPULADOR
La estructura mecánica del brazo robótico está basada en piezas pre-fabricadas de
aluminio, las cuales vienen siendo utilizadas últimamente en los centros de estudio, para
aplicaciones prácticas que involucran áreas como la robótica y electrónica. En este
apartado describiremos la estructura que se logró ensamblar.
Además se utilizan servomotores del modelo MG-996, los cuales pueden generar un
torque máximo de 12 Kg-cm.
En el Anexo A, presentamos los planos detallados de cada una de las piezas utilizadas.
51
3.2. CINEMÁTICA DIRECTA
3.2.1. Asignación de tramas a las articulaciones del robot y obtención de
parámetros de Denavit-Hatenberg
De acuerdo al algoritmo de Denavit-Hartenberg asignamos los sistemas de coordenadas
a las articulaciones y efector final del brazo robótico.
Fig. 3.2 Sistemas de coordenadas para el brazo robótico, según Algoritmo D-H
(Fuente: Elaboración propia)
52
El brazo en la Figura, se encuentra en la posición:
𝜃1 = 𝜃2 = 𝜃3 = 𝜃4 = 𝜃5 = 0°. (3.1)
𝑐𝑜𝑠𝑞5 −𝑠𝑒𝑛𝑞5 0 0
4 𝑠𝑒𝑛𝑞5 𝑐𝑜𝑠𝑞5 0 0)
5𝐴 = ( 0 0 1 𝐿5
(3.6)
0 0 0 1
La cinemática directa consiste calcular la matriz 05𝐴 que relacione el efector final con la base
del robot y lo hacemos realizando la siguiente operación:
0
5𝐴 = 01𝐴 12𝐴 23𝐴 34𝐴 45𝐴 (3.7)
La expresión resultante es muy extensa, por lo cual, en la ecuación
53
3.8 presentamos solamente su estructura, en el anexo A podemos encontrar su desarrollo
completo, obtenido utilizando Matlab. El código del programa lo presentamos en el anexo
A2.
0 0 0 0
5𝐴11 5𝐴12 5𝐴13 5𝐴14
0 0 0 0
0 5𝐴21 5𝐴22 5𝐴23 5𝐴24
5𝐴 = 0 0 0 0 (3.8)
5𝐴31 5𝐴32 5𝐴33 5𝐴34
0 0 0 0
( 5𝐴41 5𝐴42 5𝐴43 5𝐴44 )
𝜃 𝜃
𝑄1 = ([cos ( 21 ) , sin ( 21 ) < 0,0,1 > ] , < −𝑑1 sin 𝜃1 , 𝑑1 cos 𝜃1 , 𝐿1 >) (3.9)
𝜃 𝜃
𝑄2 = ([cos ( 22 ) , − sin ( 22 ) < 1,0,0 > ] , < 0 , 𝐿2 sin 𝜃2 , 𝐿2 cos 𝜃2 >) (3.10)
𝜃 𝜃
𝑄3 = ([cos ( 23 ) , − sin ( 23 ) < 1,0,0 > ] , < 0 , 𝐿3 sin 𝜃3 , 𝐿3 cos 𝜃3 >) (3.11)
𝜃 𝜃
𝑄4 = ([cos ( 24 ) , − sin ( 24 ) < 1,0,0 > ] , < −𝑑4 , 𝐿4 sin 𝜃4 , 𝐿4 cos 𝜃4 >)(3.12)
𝜃 𝜃
𝑄5 = ([cos ( 25 ) , sin ( 25 ) < 0,1,0 > ] , < 0 , 𝐿5 , 0 >) (3.13)
𝑄𝑡 (𝑞, 𝑝) = 𝑄1 𝑄2 𝑄3 𝑄4 𝑄5 (3.14)
Además, debemos considerar que, la orientación inicial del efector final del manipulador
respecto de la base, para valores de 𝜃1 = 𝜃2 = 𝜃3 = 𝜃4 = 𝜃5 = 0, no es nula. Por lo cual
54
se debe considerar en el cálculo. Dicha orientación se representa mediante el cuaternion
siguiente:
𝑄𝑓 = 𝑄𝑡 𝑄𝑖 (3.16)
El anexo A.4 contiene el programa de Matlab utilizando para este fin, dicho programa
almacena las matrices r1 y r2 correspondientes a un conjunto de ángulos de articulación
dados en vectores en vectores en los vectores R1 y R2, respectivamente. Para obtener el
error, debemos comprar cada elemento de los vectores obtenidos, según:
El error obtenido luego de ejecutar el programa del Anexo A.4, es prácticamente cero,
Por lo tanto nuestros algoritmos de cinemática directa nos brindan el mismo resultado, la
verificación de la cinemática directa, relacionándola con los resultados obtenidos por
cinemática inversa, se realiza más adelante.
55
Como se explicó en la sección 1.3.5, para resolver este problema es necesario interpretar
la estructura del manipulador, de tal manera que los tres primeros grados de libertad
tengan la finalidad de determinar la posición del extremo y los siguientes, la orientación.
El método más utilizado para resolver la cinemática de los manipuladores es el desacoplo
cinemático, el cual utiliza esta “división en dos partes” de la estructura, para simplificar
el cálculo de los ángulos requeridos para una determinada posición y orientación.
Cuando diseñamos un sistema, se busca que los cálculos sean tan sencillos como sea
posible, un criterio que siempre se toma en cuenta es el que para el diseño de
manipuladores consiste en hacer que se intersecten en un solo punto los ejes de las
articulaciones de los grados de libertad que determinan la orientación (como se explica
en la sección 1.3.4.2); en el caso de los manipuladores de seis grados, serían los tres
últimos; en el caso de manipuladores de cinco grados, como el que estamos usando para
esta investigación, serían los dos últimos.
Los robots industriales consideran este criterio, el cual es expuesto por la mayoría de
autores en su discusión sobre cinemática inversa, como Barrientos (1998); Fu, Gonzales
y Lee (1988) y Craig (2006). Sin embargo la presente investigación está enfocada en el
desarrollo de un modelo para un brazo robótico construido a partir de piezas pre-
fabricadas, que pueda realizar las aplicaciones vistas en la industria, el cual no nos permite
cumplir con el criterio expuesto anteriormente. Esto nos dificulta un poco el cálculo de
su cinemática, sin embargo, esto nos sirvió para aplicar recursos distintos a los que
generalmente se utilizan en la literatura tradicional.
La cinemática inversa consiste en encontrar los valores de todos los ángulos de las
articulaciones del robot, para que alcancen una posición y orientación dadas. Es decir,
dados todos los elementos de la matriz 05𝐴 (Ec. 1.16), debemos encontrar [𝑞1 , 𝑞2 , 𝑞3 , 𝑞4 , 𝑞5 ]
56
tres primeras articulaciones (𝑞1 , 𝑞2 y 𝑞3 ), para luego, con estos valores y los datos de
orientación, calcular los valores de las articulaciones restantes.
Sin, embargo, debido a la particular estructura de nuestro prototipo, no existe dicho punto
de intersección, por lo cual procederemos a utilizar conceptos sobre vectores para
encontrar la posición del extremo del eslabón 3 (𝑃03 𝑋 , 𝑃03 𝑌 y , 𝑃03 𝑍 ) respecto del sistema
de coordenadas de la base.
Una vez conocidas la posición y orientación deseadas para el efector final del robot, con
respecto a su base; es decir, todos los elementos de la matriz 05𝐴 (Ec. 1.16), procederemos a
calcular las componentes de 𝑃03 ( 𝑃03 𝑋 , 𝑃03 𝑌 y , 𝑃03 𝑍 ), que es origen del sistema de
coordenadas 𝑆3 (Fig. 3.3), el cual está solidario al extremo del tercer eslabón del
manipulador.
Fig. 3.3 Sistemas de coordenadas para los dos últimos grados de libertad, según
Algoritmo D-H.
(Fuente: Elaboración Propia)
⃗⃗𝟒 ,
Según disposición de los sistemas de coordenadas del robot necesitamos conocer 𝟎𝒁
𝟎⃗⃗ ⃗⃗⃗𝟒 , para lo cual realizaremos el siguiente procedimiento:
𝒀𝟒 y 𝟎𝑿
1. Cálculo de 𝟎⃗𝒁⃗𝟒 :
𝟎⃗⃗
𝒁𝟒 = 𝟎⃗𝒁⃗𝟓 (3.19)
Por lo tanto su valor ya es conocido, debido a que 𝟎⃗𝒁⃗𝟓 = 𝒏, según las ecuaciones 1.4
y 1.16, es un parámetro de entrada para el cálculo de la cinemática inversa.
57
2. Cálculo de 𝟎⃗𝒀⃗𝟒
Para definir completamente este vector, necesitamos conocer sus tres componentes
𝟎⃗⃗
𝒀𝟒 𝒙 , 𝟎⃗𝒀⃗𝟒 𝒚 y 𝟎⃗𝒀⃗𝟒 𝒛 .
Haciendo un análisis del movimiento del brazo robótico, podemos deducir fácilmente
que el vector 𝟎⃗𝒀⃗𝟒 jamás tendrá una componente en la dirección 𝑍⃗ del sistema de
coordenadas de la base 𝑺𝟎 . Por lo tanto:
𝟎⃗⃗
𝒀𝟒 𝒛 = 0. (3.20)
De la estructura del robot, sabemos que 𝟎⃗𝒀⃗𝟒 y 𝟎⃗𝒁⃗𝟓 siempre van a ser perpendiculares.
Por lo tanto, su producto escalar debe ser igual a cero, esto es:
𝟎⃗⃗
𝒀𝟒 . 𝟎⃗𝒁⃗𝟓 = 0. (3.21)
0
𝑌4 𝒙 0𝑍4 𝒙 + 0𝑌4 𝒚 0𝑍4 𝒚 + 0𝑌4 𝒛 0𝑍4 𝑧 = 0, (3.22)
Despejando:
0 1
𝑌4 𝒚 = (3.27)
√1+(0𝑍4𝒚 )2
0𝑍
4𝒙
0𝑍
0 4𝒙
𝑌4 𝒚 = (3.28)
𝑅
2 2
donde, 𝑅 = √ 0𝑍4 𝒙 + 0𝑍4 𝒚
58
Con esta forma, si analizamos las posibilidades geométricas, la división de una
𝐶
constante entre cero (0) no sucederá.
2 2
donde, 𝑅 = √ 0𝑍4 𝒙 + 0𝑍4 𝒚 .
3. Cálculo de 𝟎⃗𝑿
⃗⃗𝟒
0 2 2 2
𝑋4 𝒙 + 0𝑋4 𝒚 + 0𝑋4 𝒛 = 1 (3.36)
2 2 2 2 2 2
donde: 𝑅𝟐 = √ 0𝑍4 𝒙 0𝑋4 𝒛 + 0𝑍4 𝒛 0𝑍4 𝒚 + ( 0𝑍4 𝒙 + 0𝑍4 𝒚 )2
59
- Reemplazando 3.37 en 3.31 y 3.35, obtenemos:
0𝑍 2 + 0𝑍 2
0 4𝒙 4𝒚
𝑋4 𝒛 = ( ) (3.38)
−𝑅𝟐
0𝑍 0𝑍
0 4𝒙 4𝑧
𝑋4 𝒙 = (3.39)
𝑅2
0
- 𝑌4 𝒚 tiene dos soluciones
0
- 𝑌4 𝒙 , depende de 0𝑌4 𝒚 .
0
- 𝑋4 𝒚 depende de 0𝑌4 𝒙 y 0𝑌4 𝒚 .
0
- 𝑋4 𝒚 tiene dos soluciones
0
- 𝑋4 𝑧 y 0𝑋4 𝑥 dependen de 0𝑋4 𝒚
La figura 3.4 nos muestra un esquema de las posibles soluciones que tenemos hasta
el momento
Fig. 3.4 Esquema que muestra las cuatro posibles soluciones para encontrar el
punto 𝑃03
(Fuente: Elaboración propia)
60
⃗⃗𝑥 𝑍⃗ = 𝑋⃗
𝑌
𝑍⃗𝑥𝑋⃗ = 𝑌
⃗⃗ (3.40)
En donde, 𝑋⃗, 𝑌
⃗⃗ 𝑦 𝑍⃗ son los vectores unitarios correspondientes a cada sistema de
coordenadas del robot.
Por lo tanto, si aplicamos esta condición a los ejes del sistema de coordenadas 𝑺𝟒 ,
obtenemos:
0
𝑋4 𝑥 0𝑌4 = 0𝑍4
0
𝑌4 𝑥 0𝑍4 = 0𝑋4
0
𝑍4 𝑥 0𝑋4 = 0𝑌4 (3.41)
Donde 0𝑋4 = [ 0𝑋4 𝑥 , 0𝑋4 𝑦 , 0𝑋4 𝑧 ], 0𝑌4 = [ 0𝑌4 𝑥 , 0𝑌4 𝑦 , 0𝑍4 𝑧 ] y 0𝑍4 = [ 0𝑍4 𝑥 , 0𝑍4 𝑦 , 0𝑍4 𝑧 ]
El sistema de coordenadas que elijamos debe cumplir con las tres ecuaciones de (3.31)
Para seleccionar una solución de las dos posibles que tenemos hasta el momento,
realizaremos un análisis del movimiento del brazo robótico, con lo cual implementaremos
ciertas condiciones, observando y relacionando el valor de la articulación 𝑞1 y la dirección
del vector 0𝑌4 .
Adicionalmente:
- Si −180° < 𝜃1 < −90° ó 90° < 𝜃1 < 180°, entonces 0𝑌4 𝑥 < 0°
Para la aplicación nuestra, debido a que los servomotores tienen un recorrido de 180°,
solo utilizaremos las tres primeras condiciones, la cuarta nos sirve para cubrir un rango
de 360°.
61
3.3.2. OBTENCIÓN DE LAS TRES PRIMERAS VARIABLES DE
ARTICULACIÓN.
62
⃗⃗⃗⃗⃗
𝑋′ = 𝑌⃗⃗⃗⃗𝑜
⃗⃗ ′ = −𝑋⃗𝑜
𝑌 (3.42)
De la Figura 3.5, geométricamente:
𝜃1 = ∅ − 𝛼 (3.43)
𝐴𝐵 = 𝑑4
𝑂𝐵 = 𝑅 = √ 𝑃𝑥 2 + 𝑃𝑦 2
𝑂𝐴 = 𝑟 = √𝑃𝑥 2 + 𝑃𝑦 2 − 𝑑4 2
Sabemos que:
sin 𝜃1 𝐿 = sin(∅ − 𝛼) = sin ∅ cos 𝛼 − cos ∅ sin 𝛼 (3.35)
Calculamos los valores para las funciones trigonométricas de acuerdo al sistema de
coordenadas auxiliar 𝑋 ′ 𝑌 ′ . Para el cual, 𝑃′𝑦 = −𝑃𝑥 y 𝑃′𝑥 = 𝑃𝑦 , por tanto:
−𝑃𝑥 𝑟 𝑃𝑦 𝑑4
sin 𝜃1 𝐿 = −
𝑅 𝑅 𝑅 𝑅
−𝑃𝑥 𝑟−𝑃𝑦 𝑑4
sin 𝜃1 𝐿 = (3.44)
𝑅
Además
cos 𝜃1 𝐿 = cos(∅ − 𝛼) = cos ∅ cos 𝛼 + sin ∅ sin 𝛼 (3.45)
Entonces:
𝑃𝑦 𝑟−𝑃𝑥 𝑑4
cos 𝜃1 𝐿 = (3.46)
𝑅2
De la misma forma:
−𝑃𝑦 𝑟−𝑃𝑥 𝑑4
cos 𝜃1 𝑅 = (3.52)
𝑅2
Para la función sin 𝜃1 , de las ecuaciones 3.44 y 3.51 y tomando en cuenta la ecuación
1.17, podemos escribir:
𝐵𝑅𝐴𝑍𝑂.𝑃𝑥 𝑟−𝑃𝑦 𝑑4
sin 𝜃1 = (3.53)
𝑅2
En donde el operador BRAZO, toma los valores de 1 o −1, según la configuración del
robot (BRAZO IZQUIERDO o BRAZO DERECHO).
Para la función cos 𝜃1 , de las ecuaciones 3.45 y 3.52 y tomando en cuenta la ecuación
1.17, podemos escribir
−𝐵𝑅𝐴𝑍𝑂.𝑃𝑦 𝑟−𝑃𝑥 𝑑4
cos 𝜃1 = (3.54)
𝑅2
Con lo cual,
𝐵𝑅𝐴𝑍𝑂.𝑃𝑥 𝑟−𝑃𝑦 𝑑4
𝜃1 = tan−1 (−𝐵𝑅𝐴𝑍𝑂.𝑃 ) (3.55)
𝑦 𝑟−𝑃𝑥 𝑑4
Para solucionar esta ecuación en Matlab, utilizaremos a función atan2 (sección 1.3.5.3|).
64
3.3.2.2. CÁLCULO DE Q2 UTILIZANDO EL MÉTODO ALGEBRÁICO.
Una vez obtenido el valor de 𝑃03 (sección 3.3.1), utilizando las MTH, calculamos 03𝐴
0 1 2
1𝐴 2𝐴 3𝐴 = 03𝐴 (3.56)
1 −1 0 −1 0
2𝐴 1𝐴 3𝐴 = 23𝐴 (3.57)
Del resultado de 3.57, ayudándonos con Matlab, tomamos los elementos (1,4) y (2,4) de
la igualdad, obteniendo dos ecuaciones:
sin 𝑞2 (𝐿1 − 𝑃03 𝑧 ) + cos 𝑞2 (𝑃03 𝑦 cos 𝑞1 − 𝑑1 − 𝑃03 𝑥 sin 𝑞1 ) = 𝐿3 𝑠𝑖𝑛𝑞3 (3.59)
𝐾1 = (𝑃03 𝑧 − 𝐿1 ) (3.60)
Con lo cual podemos escribir las ecuaciones 3.58 y 3.59 de la siguiente manera:
Para solucionar esta ecuación, utilizamos el método de solución algebraica por reducción
a polinomio, explicado en la sección 1.3.5.3. Hacemos:
𝑞
𝜇 = tan ( 22 ),
1−𝑢2
cos 𝑞2 = 1+𝑢2,
2𝜇
sin 𝑞2 = 1+𝑢2 (3.65)
65
También,
𝑎 = 2𝐿2 𝐾1 ,
𝑏 = 2𝐿2 𝐾2 ,
𝑐 = 𝐾1 2 + 𝐾2 2 + 𝐿2 2 − 𝐿3 2 (3.66)
𝑏±√𝑏 2 +𝑎2 −𝑐 2
𝑞2 = 2𝑡𝑎𝑛−1 ( ). (3.68)
𝑎+𝑐
Como vemos, la ecuación 3.68 nos brinda 2 soluciones, las cuales corresponderán a la
configuración CODO ARRIBA y CODO ABAJO que adoptará el manipulador.
La figura 3.6 nos muestra la disposición CODO ARRIBA y CODO ABAJO para los
grados de libertad 𝑞2 y 𝑞3 de nuestro manipulador; según la disposición de los sistemas
de coordenadas del robot y el sentido de giro de la articulación 𝑞2 (Figura 3.2), realizando un
pequeño análisis, nos damos cuenta que la configuración CODO ARRIBA siempre tendrá
el ángulo menor, cuando se utiliza la configuración BRAZO IZQUIERDO; sin embargo,
cuando la configuración es BRAZO DERECHO, la configuración CODO ARRIBA
corresponderá al menor ángulo de las dos posibles soluciones de 𝑞2
Utilizaremos los parámetros BRAZO y CODO, para que la formula de cinemática inversa
(Ecuación 3.59) que nos permite calcular la variable de articulación 𝑞2 , también nos
permita seleccionar la posición deseada (CODO ARRIBA O CODO ABAJO). Para ello
tomamos en cuenta las ecuaciones 1.35 y 1.36 y con ello, la Ecuación 3.59 queda
expresada de la siguiente manera:
𝑏+𝐵𝑅𝐴𝑍𝑂.𝐶𝑂𝐷𝑂√𝑏 2 +𝑎2 −𝑐 2
𝑞2 = 2𝑡𝑎𝑛−1 ( ) (3.69)
𝑎+𝑐
66
Fig. 3.7 Las líneas punteadas indican la configuración codo abajo.
(Fuente: Craig 2006, p. 103)
67
deseada ([CODO ARRIBA, CODO ABAJO] y [BRAZO DERECHO, BRAZO
IZQUIERDO]).
Despejando 3.62:
y despejando 3.63:
𝑐𝑜𝑠𝑞2 𝐾2 −sin 𝑞2 𝐾1
sin 𝑞3 = (3.71)
𝐿3
Conocidos los valores de los primeros grados de libertad, procedemos a calcular los dos
últimos, que determinarán la orientación de nuestro brazo robótico. Nos basamos en el
procedimiento que realizó Barrientos (1997, p. 120).
0 −1 0
3𝑅 . 5𝑅 = 35𝑅 (3.73)
Para calcular 𝑞4 , tomamos los elementos (1,3) y (2,3) de cada lado de la ecuación
resultante, con lo cual obtenemos las siguientes ecuaciones:
68
Ahora tomamos los elementos (3,1) y (3,2) de cada lado de la ecuación matricial
resultante de 3.74, obtenemos:
Elegir la matriz 05𝐴 que relaciona el efector final con la base como parámetro de entrada
no es lo más conveniente; debido a que, obtener la matriz de rotación 05𝑅 que determina
su orientación requiere un cálculo previo. Por lo cual optaremos por ingresar los
69
3.4.1. Ecuaciones de decisión para los indicadores de configuración del brazo
Como |𝒁𝟏 𝑥 𝑝𝟎𝟒 ′|, siempre es positivo solo debemos analizar el numerador, por lo tanto,
a ecuación que define el indicador brazo sería:
+1 → 𝑏𝑟𝑎𝑧𝑜 𝐷𝐸𝑅𝐸𝐶𝐻𝑂
𝐵𝑅𝐴𝑍𝑂 = 𝑠𝑖𝑔𝑛 (𝑃04 𝑥 sin(𝑞1 ) − 𝑃04 𝑦 cos(𝑞1 )) = {
−1 → 𝑏𝑟𝑎𝑧𝑜 𝐼𝑍𝑄𝑈𝐼𝐸𝑅𝐷𝑂
(3.83)
Para el indicador Codo:
Analizando la figura 3.6, nos podemos dar cuenta que un parámetro que puede definir el
indicador CODO, es 𝑷𝟐𝟑 𝒚 ; es decir la componente en el eje 𝑌 del sistema de coordenadas
𝑆2 , de la posición del origen del sistema 𝑆3 respecto del sistema 𝑆2 . También podemos
percatarnos que la configuración BRAZO DERECHO/BRAZO IZQUIERDO invierte el
signo del parámetro CODO, para sus dos configuraciones posibles.
De todo lo anterior:
𝐶𝑂𝐷𝑂 = 𝐵𝑅𝐴𝑍𝑂. 𝑠𝑖𝑔𝑛(𝑃24 𝑦 )
+1 → 𝐶𝑜𝑑𝑜 𝑒𝑛𝑐𝑖𝑚𝑎 𝑑𝑒 𝑙𝑎 𝑀𝑢ñ𝑒𝑐𝑎
𝐶𝑂𝐷𝑂 = 𝐵𝑅𝐴𝑍𝑂. 𝑠𝑖𝑔𝑛(𝐿𝟑 sin(𝑞3 )) = {
−1 → 𝐶𝑜𝑑𝑜 𝑑𝑒𝑏𝑎𝑗𝑜 𝑑𝑒 𝑙𝑎 𝑀𝑢ñ𝑒𝑐𝑎
(3.84)
Utilizamos 𝑃24 𝑦 , debido a que el análisis se hace respecto del sistema 𝑆4 y no de 𝑆3 , ya
que es indiferente en el desarrollo.
Para efectos de programación, cuando 𝑃23 𝑦 = 0, no tendremos un signo definido (+1 ó −
70
3.4.2. Calculo de errores e implementación del algoritmo de verificación
Se implementó en Matlab el algoritmo mostrado en la Figura 1.17, y se realizó la
verificación para 50 conjuntos de variables de articulación (𝑞1 , 𝑞2 , 𝑞3 , 𝑞4 , 𝑞5 ) elegidos al
azar, utilizando la función “rand”, según la formula brindada por la Ayuda de Matlab
[11].
𝑟 = 𝑎 + (𝑏 − 𝑎).∗ 𝑟𝑎𝑛𝑑(𝑁, 1) (3.85)
donde, 𝑎 y 𝑏 son los extremos del intervalo en el cual se generan los valores aleatorios y
el operador “.*”, se refiere a la multiplicación de un escalar por un vector, en el lenguaje
de programación de Matlab.
Los valores de 𝑎 y 𝑏 serán tomados considerando los rangos de recorrido angular de las
articulaciones del manipulador, consignados en la Tabla 3.1 y 𝑟 será el vector que
almacene los 50 valores generados para cada articulación.
Calculamos el error según la figura 1.17, el cual representa la diferencia entre los valores
de los ángulos ingresado para realizar cinemática directa y los ángulos calculados
utilizando cinemática inversa.
Debido a que los valores calculados pueden ser mayores o menores que los ángulos
ingresados, para cuantificar correctamente la desviación, utilizamos el error absoluto;
luego promediaremos los errores de las cinco articulaciones. Así, obtenemos:
1
𝑒𝑝𝑟𝑜𝑚 = 50 ∑50
𝑖=1 𝑒𝑖 (3.87)
Utilizando el programa en Matlab del Anexo A7 se obtuvo un error muy cercano a cero,
del orden de 10−13, o menor. Lo cual nos indica que nuestras ecuaciones de cinemática
directa e inversa están correctamente formuladas.
71
3.5. GENERACIÓN DE TRAYECTORIA LINEAL USANDO CUATERNIONES
La Figura 3.8 muestra el diagrama de flujo utilizado para conseguir la trayectoria deseada.
Cuando se programe un robot, no se toma en cuenta el último paso, el cual sólo nos sirve
para trazar y evaluar la trayectoria obtenida.
Datos de entrada
0 1 0 −21.9 0 1 0 −21.9
𝐹0 = (0 0 1 113.9 ) y −0.3907
𝐹1 = ( 0.9205 0 0.9205 221.4621) (3.88)
1 0 0 240.9 0 0.3907 150.8336
0 0 0 1 0 0 0 1
Los errores de desviación para la posición y orientación tuvieron los siguientes valores:
72
Etapa de pre-planificación
Paso 0.
- Convertimos
𝑹𝟎 → 𝒄𝟎
- Convertimos
𝑹𝟏 → 𝒄𝟏
- Cinemática Inversa
𝑭𝟏 → 𝒒𝟎
- Cinemática Inversa
𝑭𝟏 → 𝒒𝟏
- Calculamos 𝒒𝒎 , según:
𝒒𝒎 → 𝑭𝒎 (𝒑𝒎 , 𝒄𝒎 )
- Calculamos 𝒑𝒄
𝒑𝟎 +𝒑𝟏
𝒑𝒄 = 𝟐
73
𝜃
Ahora calculamos 𝑹𝒄 = 𝑹𝟏 𝑅𝑜𝑡(𝒏𝟏 , − 2) en forma de cuaternion
𝒄𝟎𝟏 = 𝒄𝒐 −𝟏 𝒄𝟏
𝒄𝟎𝟏 → 𝑅𝑜𝑡(𝒏𝟏 , 𝜃)
𝜃
- Una vez conocidos 𝒏 y 𝜃 podremos calcular 𝑅𝑜𝑡 (𝒏𝟏 , − ) para luego convertirlo a
2
𝒄𝒄 → 𝑹𝒄
- Utilizando 𝒑𝒄 y 𝑹𝒄 , construimos 𝑭𝒄
𝛿𝑝 = |𝒑𝒎 − 𝒑𝒄 |
- Multiplicando cuaterniones:
𝒄𝒄 −𝟏 𝒄𝒎
𝒄𝒄 −𝟏 𝒄𝒎 → 𝑅𝑜𝑡(𝒏, ∅)
74
El error en rotación será igual al módulo de ∅.
𝛿𝑅 = |∅|
Paso 5: Comprobación de las cotas de error. Si 𝛿𝑝 < 𝛿𝑝 𝑚á𝑥 y 𝛿𝑅 < 𝛿𝑅 𝑚á𝑥 , entonces
parar. De lo contrario, calcular el vector solución de la articulación 𝑞𝑐 corresponde al
punto medio del espacio cartesiano 𝑭𝒄 , y aplicar los pasos 2 a 5 recursivamente para los
dos subsegmentos sustituyendo 𝑭𝟏 por 𝑭𝒄 y 𝑭𝒄 por 𝑭𝟎 .
Fig. 3.9 Coordenada Y de los puntos nudos generados por el Algoritmo BDJP.
(Fuente: Elaboración propia)
La figura 3.10 nos muestra la secuencia realizada para la obtención de los puntos nudos
mostrados en la Figura 3.9. La parte iterativa del algoritmo BDJP (Desde el paso 2 hasta
el paso 5) se realiza en total 15 veces para obtener los 9 puntos graficados como se
muestra en la Tabla 3.2.
75
Tabla 3.2. Deducción de la fórmula de iteraciones totales para el algoritmo BDJP
Número de Bucles Iteraciones Totales
1 1
2 3
3 7
4 15
. .
. .
. .
𝑛
n 2 −1
𝐼𝑡 = 2𝑛 − 1 (3.90)
Interpolación en el espacio de articulación y generación de trayectoria
𝑇1 − 𝑡
𝒒(𝒕) = 𝒒𝟏 − ∆𝒒𝟏
𝑇1
(𝜏 − 𝑡 ′ )2 (𝜏 + 𝑡 ′ )2
𝒒(𝑡′) = 𝒒𝟏 − ∆𝒒𝟏 + ∆𝒒𝟐
4𝜏𝑇1 4𝜏𝑇1
76
Luego, con los valores de articulación conocidos, mediante la función de Cinemática
Directa, podemos trazar la trayectoria. Las figura 3.11 muestran la trayectoria obtenida
en el espacio tridimensional, respecto de un tiempo normalizado; como se aprecia, la
trayectoria es bastante similar a una línea recta, más adelante cuantificaremos esta
similitud mediante el cálculo del error de desviación.
77
Fig. 3.13 Desplazamiento angular de las articulaciones del brazo robótico
(Fuente: Elaboración propia)
Programación en Matlab
78
Luego de eso se realizó la generación de trayectorias, que además de utilizar las funciones
antes mencionadas, utiliza la rutina de cinemática directa e inversa, mostradas en el anexo
A3 y A6 y el algoritmo BDJT.
79
3.6. VERIFICACIÓN DE ERRORES MÁXIMOS
Los errores promedio obtenidos para la posición y orientación son los siguientes:
Como vemos, se satisface con holgura los errores máximos requeridos, siendo el error en
orientación prácticamente cero.
La figura 3.12 muestra la trayectoria final obtenida para 𝛿𝑝 𝑚á𝑥 = 1 𝑚𝑚. y 𝛿𝑅 𝑚á𝑥 = 5°,
como se observa, la línea recta es más precisa que la mostrada en la figura 3.10
80
Fig. 3.15 Imágenes del recorrido realizado por la simulación del manipulador en
Solidworks.
(Fuente: Elaboración propia)
81
3.7. AHORRO COMPUTACIONAL Y TIEMPO DE CALCULO
Las tablas 3.3 y 3.4 registran estos datos para el algoritmo usando Matrices de
Transformación Homogénea y cuaterniones, respectivamente. Es importante aclarar que
en estas tablas no se considera el paso 5, debido a que se utiliza la misma función de
cinemática inversa para ambos casos.
82
Tabla 3.3. Operaciones realizadas en iteración usando MTH
(2𝑛 −1)145+46
𝑃𝑜 = (2𝑛 −1)214
𝑥100% (3.93)
83
Las fórmulas generales para calcular la cantidad adiciones y multiplicaciones de las que
se prescinde en el cálculo son:
𝐴𝑡 = 38(2𝑛 − 1) − 32 (3.94)
𝑀𝑡 = 31(2𝑛 − 1) − 14 (3.95)
El tiempo de cálculo lo contabilizamos desde el inicio del algoritmo hasta que culmina la
interpolación en el espacio de articulación, debido a que, esos serán los valores que se
ingresen a un controlador para generar la trayectoria.
84
CAPÍTULO IV: DISCUSIÓN DE RESULTADOS.
4.1. ESTRUCTURA DEL BRAZO ROBÓTICO
No se logra ensamblar el brazo robótico de tal manera que los ejes de giro de las
articulaciones de orientación se intersecten en un punto común. Esto genera
complicaciones adicionales en la solución de la cinemática del robot.
85
rápida, exacta y garantiza siempre encontrar una solución, como mencionan Craig (2006,
p.106) y Barrientos (1997, p. 108).
Debido a la dificultad adicional que conlleva el no cumplir con la condición de que los
ejes sobre los cuales giran las articulaciones de orientación se intersecten en un punto
(para nuestro caso 𝑍4 y 𝑍5 ); para poder solucionar el problema cinemático inverso,
debimos incluir conceptos vectoriales, los cuales nos brindaron condiciones que nos
sirvieron para llegar a la solución. Este aporte se considera importante porque amplia
nuestra visión sobre la configuración espacial de un manipulador.
Aydin y Kucuk (2006), logran resolver la cinemática inversa para robots manipuladores
utilizando cuaterniones, pero solo abarca robots manipuladores que cuentan con la
configuración “Muñeca de Euler”, es decir cuyos ejes de giro de las articulaciones de
orientación se intersectan en un punto común. Se intentó utilizar este método para resolver
el brazo robótico estudiado, pero las ecuaciones obtenidas fueron bastante complejas y
no se logró obtener una solución. Esto se debe a que, como se explicó líneas arriba, el
prototipo estudiado no cuenta con una muñeca de Euler, lo cual dificulta los cálculos.
La velocidad y frecuencia de cálculo para la cinemática inversa se encuentra en un valor
muy aceptable, tomando como referencia la consideración de Craig (2006, p. 127), quien
sugiere frecuencias de cálculo mayores a 30 Hz. La función que resuelve la cinemática
inversa para el manipulador considerado en éste estudio se ejecuta con una frecuencia del
orden de 103 .
86
El tiempo de cálculo se encuentra en el orden de las centésimas de segundo, según las
ecuaciones 3.97 y 3.98, por ejemplo, para un total de 1104 puntos generados el tiempo
necesario fue de 0.0227 segundos.
87
CAPITULO V: CONCLUSIONES
5.1. Se modeló un brazo robótico utilizando piezas pre-fabricadas de bajo costo, que nos
brindan la facilidad de obtener un prototipo preciso, de fácil montaje y con el que
podemos emular aplicaciones parecidas a las realizadas por los robots manipuladores
en la industria, para fines ilustrativos.
La dificultad generada fue que no se pudo realizar un diseño que cumpla con la
intersección de los ejes de giro de las articulaciones de orientación en un solo punto,
usado para facilitar el cálculo.
Debido a que el manipulador cuenta con solo cinco grados de libertad, no se pueden
alcanzar todas las posiciones y orientaciones posibles.
5.2. Se logró obtener la cinemática directa con dos métodos, utilizando el algoritmo de
Denavit-Hartenberg y utilizando cuaterniones. Se verificaron las ecuaciones
obtenidas utilizando la simulación en Solidworks y Matlab. Se cuantificaron los
requerimientos computacionales para ambos métodos, obteniendo como resultado
que la cinemática directa usando cuaternios requiere mayor cantidad de operaciones
y por ende mayor tiempo de cálculo. Se implementaron ambos algoritmos en Matlab
y se calcularon los tiempos de cálculo obteniendo que la relación entre el tiempo de
cálculo de la cinemática directa usando cuaterniones respecto del tiempo de cálculo
usando el algoritmo D-H es, en promedio, de 1.1; para 100 muestras aleatorias de
conjuntos de ángulos de articulación.
5.3. La cinemática inversa se obtuvo utilizando los métodos geométrico y algebraico,
además del uso de conceptos vectoriales básicos como recursos adicionales para
solucionar las complicaciones matemáticas que causó la estructura atípica del
prototipo estudiado.
El algoritmo generado en Matlab, nos brinda resultados precisos con errores muy
cercanos a cero y con una frecuencia de cálculo bastante más grande que la
recomendada por la literatura especializada.
5.4. Se logró implementar un algoritmo de generación de trayectorias en línea recta
utilizando cuaterniones, obteniéndose un algoritmo eficiente. Se cuantificó el ahorro
computacional respecto del uso de matrices de transformación homogénea mediante
las ecuaciones 3.93, 3.94 y 3.95. Las trayectorias generadas presentan errores
bastante pequeños con respecto a las trayectorias deseadas, además se calculan en
tiempos que están en el orden de 10−2 .
88
CAPITULO VI: REFERENCIAS BIBLIOGRÁFICAS
[1] KUKA. 2016. [Consulta: 20 octubre 2016]. Disponible en:
https://www.kuka.com/es-es/acerca-de-kuka.
[2] KUKA. 2016. [Consulta: 20 octubre 2016]. Disponible en:
https://www.kuka.com/es-mx/productos-servicios/sistemas-de-robot/robot-
industrial.
[3] UNIVERSAL ROBOTS. 2016. [Consulta: 20 octubre 2016]. Disponible en:
https://www.universal-robots.com/es/.
[4] UNIVERSAL ROBOTS. 2016. [Consulta: 20 octubre 2016]. Disponible en:
https://www.universal-robots.com/es/productos/
[5] BARRIENTOS, Antonio [et al.]. Fundamentos de Robótica. 1a. ed. España:
McGraw Hill, 1997.
[6] CRAIG, Jhon. Robótica. 3a. Ed. México: PERSON EDUACTION, 2006
[7] SAHA, Subir. Introducción a la robótica. 1a. Ed. México: McGraw Hill, 2010.
[8] FU, K.S.; GONZALES, R. C. Y LEE, C. S. G. Robótica: Control, Detección, Visión
e Inteligencia. McGraw Hill, 1998.
[9] WIKIPEDIA. 2017. [Consulta: 19 agosto 2017]. Disponible en:
https://es.wikipedia.org/wiki/Ecuaci%C3%B3n_trascendente.
[10] WIKIPEDIA. 2017. [Consulta: 19 setiembre 2017]. Disponible en:
[11] WIKIPEDIA. 2017. [Consulta: 12 octubre 2017]. Disponible en:
https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation.
[12] MathWorks. 2017. [Consulta: 13 octubre 2017]. Disponible en:
https://es.mathworks.com/help/matlab/ref/rand.html
[13] MERCHAN,Emmanuel. Metodología para generación de trayectorias de
manipuladores robóticos, su cinemática y dinámica. Trabajo de Titulación
(Maestro en ciencias con especialidad en Ingeniería Mecánica). México, D.F.:
Instituto Politécnico Nacional, Escuela de Ingeniería Mecánica y Eléctrica, 2000.
[14] RIVERA, Juan. Control de posición/fuerza para manipuladores rígidos basado en
cuaterniones unitarios. Trabajo de Titulación (Maestría en Ingeniería Área:
Eléctrica, Campo: Control). México, D.F.: Universidad Nacional Autónoma de
México.
[15] VOIGHT, John. Quaternion algebras. V0.9.8. 2017.
[16] TAYLOR, Rusell. Planning and Executiono f Straight Line Manipulator
Trajectories. IBM, J. Res. Devel., vol. 23, núm. 4, pp. 19-41
89
[16] Aydin, Yavuz; Kucuk, Serdar. Quaternion Based Inverse Kinematics for Industrial
Robot Manipulators with Euler Wrist. IEEE 3rd International Conference on
Mechatronics, 2006, pp. 581-586
90
ANEXOS
A. CODIGOS EN MATLAB
A.1 FUNCIONES PARA IMPLEMENTAR OPERACIONES BÁSICAS
USANDO CUATERNIONES.
A.1.1 MULTIPLICACIÓN DE CUATERNIONES
c1xc2(1)=(c2(1)*c1(1)-c2(2)*c1(2)-c2(3)*c1(3)-c2(4)*c1(4));
c1xc2(2)=(c2(1)*c1(2)+c2(2)*c1(1)-c2(3)*c1(4)+c2(4)*c1(3));
c1xc2(3)=(c2(1)*c1(3)+c2(2)*c1(4)+c2(3)*c1(1)-c2(4)*c1(2));
c1xc2(4)=(c2(1)*c1(4)-c2(2)*c1(3)+c2(3)*c1(2)+c2(4)*c1(1));
end
end
function [ n ] = normaquat( c )
n=c(1)^2+c(2)^2+c(3)^2+c(4)^2;
end
end
n=[c(2),c(3),c(4)]./sqrt(c(2)^2+c(3)^2+c(4)^2);
ang=2*atan2(sqrt(c(2)^2+c(3)^2+c(4)^2),c(1));
end
91
A.1.6 CONVERSIÓN DE CUATERNIÓN A MATRIZ DE ROTACIÓN.
function [ R ] = quat2mrot( c )
%UNTITLED4 Summary of this function goes here
% Detailed explanation goes here
R=[2*(c(1)^2+c(2)^2)-1 2*(c(2)*c(3)-c(1)*c(4))
2*(c(2)*c(4)+c(1)*c(3));
2*(c(2)*c(3)+c(1)*c(4)) 2*(c(1)^2+c(3)^2)-1 2*(c(3)*c(4)-
c(1)*c(2));
2*(c(2)*c(4)-c(1)*c(3)) 2*(c(3)*c(4)+c(1)*c(2)) 2*(c(1)^2+c(4)^2)-
1 ];
end
function [ C ] = mrot2quat( R )
%Función que nos entrega el quaternion
% Detailed explanation goes here
% C=zeros(1,4)
C(1)=(1/2)*sqrt(R(1,1)+R(2,2)+R(3,3)+1);
C(2:4)=(1/2).*[sign(R(3,2)-R(2,3))*sqrt(R(1,1)-R(2,2)-R(3,3)+1)
sign(R(1,3)-R(3,1))*sqrt(R(2,2)-R(3,3)-R(1,1)+1) sign(R(2,1)-
R(1,2))*sqrt(R(3,3)-R(1,1)-R(2,2)+1)];
end
92
A.2 CINEMÁTICA DIRECTA USANDO MTH
syms q1 q2 q3 q4 q5 L1 d1 d4 L1 L2 L3 L4 L5 h4
A05=A01*A12*A23*A34*A45
Px=A05(1,4)
Py=A05(2,4)
Pz=A05(3,4)
ax=A05(1,3)
ay=A05(2,3)
az=A05(3,3)
nx=A05(1,1)
ny=A05(2,1)
nz=A05(3,1)
ox=A05(1,2)
oy=A05(2,2)
oz=A05(3,2)
93
A.3 CINEMÁTICA DIRECTA USANDO CUATERNIONES
syms q1 q2 q3 q4 q5
syms L1 d1 L2 L3 L4 d4 L5
Q1=[cos(q1/2) 0 0 sin(q1/2)];
p1=[-d1*sin(q1) d1*cos(q1) L1];
Q2=[cos(q2/2) -sin(q2/2) 0 0];
p2=[ 0 L2*sin(q2) L2*cos(q2)];
Q3=[cos(q3/2) -sin(q3/2) 0 0];
p3=[ 0 L3*sin(q3) L3*cos(q3)];
Q4=[cos(q4/2) -sin(q4/2) 0 0];
p4=[-d4 L4*sin(q4) L4*cos(q4) ];
Q5=[cos(q5/2) 0 sin(q5/2) 0];
p5=[0 L5 0 ];
Qi=[0.5000 -0.5000 -0.5000 -0.5000];
94
A.4 COMPARACIÓN DE ALGORITMOS DE CINEMÁTICA DIRECTA
USANDO CUATERNIONES Y MTH
Q1=-pi/2+(pi/2+pi/2).*rand(50,1);
Q2=-pi/2+(pi/2+pi/2).*rand(50,1);
Q3=-pi/2+(pi/2+pi/2).*rand(50,1);
Q4=-pi+(0+pi).*rand(50,1);
Q5=-pi/2+(pi/2+pi/2).*rand(50,1);
a=0;
k=1;
fault=zeros(1,50);
numero=zeros(1,15);
for i=1:50
q1=Q1(i);
q2=Q2(i);
q3=Q3(i);
q4=Q4(i);
q5=Q5(i);
[c,p]=CinDirCuat(q1,q2,q3,q4,q5);
c1(i,:)=c;
r1=quat2mrot(c);
R1(:,3*i-2:3*i)=r1;
p1(i,:)=p;
[P,R]=Cin_Dir(q1,q2,q3,q4,q5);
R2(:,3*i-2:3*i)=R;
c2(i,:)=mrot2quat(R);
p2(i,:)=P;
else
numero(1,k)=i;
k=k+1;
end
end
95
A.5 TIEMPOS DE CÁLCULO PARA ALGORITMOS DE CINEMÁTICA
DIRECTA
Q1=-pi/2+(pi/2+pi/2).*rand(100,1);
Q2=-pi/2+(pi/2+pi/2).*rand(100,1);
Q3=-pi/2+(pi/2+pi/2).*rand(100,1);
Q4=-pi+(0+pi).*rand(100,1);
Q5=-pi/2+(pi/2+pi/2).*rand(100,1);
pt=0;
for i=1:100
q1=Q1(i);
q2=Q2(i);
q3=Q3(i);
q4=Q4(i);
q5=Q5(i);
[ Qf, P,tiempo] = CinDirCuat( q1,q2,q3,q4,q5 );
t1(i)=tiempo;
[P,R,Tiempo] = Cin_Dir(q1, q2, q3, q4, q5 )
t2(i)=Tiempo;
Po(i)=t1(i)/t2(i);
pt=pt+Po(i);
end
Prom=pt/100
96
A.6 CINEMÁTICA INVERSA
if Codo==0
Codo=1;
end
%CINEMÁTICA DIRECTA:
P05x=A05(1,4);
P05y=A05(2,4);
P05z=A05(3,4);
a05x=A05(1,3);
a05y=A05(2,3);
a05z=A05(3,3);
n05x=A05(1,1);
n05y=A05(2,1);
n05z=A05(3,1);
o05x=A05(1,2);
o05y=A05(2,2);
o05z=A05(3,2);
%%%%---CINEMÁTICA INVERSA---%%%%%%%%%%
%Desacoplo Cinemático
o04x_1=-o04y_1*(a05y/a05x);
o04x_2=-o04y_2*(a05y/a05x);
o04z=0;
97
P04y=P05y-(L5)*a05y;
P04z=P05z-(L5)*a05z;
u_1=(o04y_1/o04x_1)
u_2=(o04y_2/o04x_2)
v_1=(a05x*o04y_1-o04x_1*a05y)/(a05z*o04x_1)
v_2=(a05x*o04y_2-o04x_2*a05y)/(a05z*o04x_2)
n04y_1=sqrt(1/(u_1^2+v_1^2+1))
n04y_2=-sqrt(1/(u_1^2+v_1^2+1))
n04y_3=sqrt(1/(u_2^2+v_2^2+1))
n04y_4=-sqrt(1/(u_2^2+v_2^2+1))
n04x_1=-n04y_1*u_1;
n04x_2=-n04y_2*u_1;
n04x_3=-n04y_3*u_2;
n04x_4=-n04y_4*u_2;
n04z_1=n04y_1*v_1;
n04z_2=n04y_2*v_1;
n04z_3=n04y_3*v_2;
n04z_4=n04y_4*v_2;
n04x=[n04x_1,n04x_2,n04x_3,n04x_4];
n04y=[n04y_1,n04y_2,n04y_3,n04y_4];
n04z=[n04z_1,n04z_2,n04z_3,n04z_4];
O04Z=0;
o04x=[o04x_1,o04x_2];
o04y=[o04y_1,o04y_2];
j=0;
%Antes de continuar, calculamos q1, porque lo necesitaremos para
%seleccionar la solución deseada.
Q1_u=atan2((Brazo*P04x*sqrt(P04x^2+P04y^2-d4^2)-P04y*d4),(-
Brazo*P04y*sqrt(P04x^2+P04y^2-d4^2)-P04x*d4))
else
XxY=cross([n04x(i),n04y(i),n04z(i)],[o04x(2),o04y(2),0]);
98
% YxZxoyo=cross([o04x(2),o04y(2),0],[a05x,a05y,0]);
if abs(XxY(1)-a05x)<0.0001 && abs(XxY(2)-a05y)<0.0001 &&
abs(XxY(3)-a05z)<0.0001
if (-pi/2<Q1_u && Q1_u<pi/2 && o04x(2)>0)||(Q1_u==-pi/2
&& o04y(2)<0)||(Q1_u==pi/2 && o04y(2)>0)
j=j+1;
P03xv(j)=P05x-(L5)*a05x-L4*n04x(i)+d4*o04x(2);
P03yv(j)=P05y-(L5)*a05y-L4*n04y(i)+d4*o04y(2);
P03zv(j)=P05z-(L5)*a05z-L4*n04z(i)+d4*o04z;
end
end
end
end
nsol=length(P03xv);
sol=ones(nsol,6);
for i=1:nsol
fprintf('ANGULOS OBTENIDOS POR CINEMATICA INVERSA');
fprintf('\n');
%de nuevo q1
% Q1(i)=atan2(-P03xv(i),P03yv(i))
% Q1(i)=atan2(-Brazo*P04y*sqrt(P04x^2+P04y^2-d4^2)-P04x*d4,-
Brazo*P04x*sqrt(P04x^2+P04y^2-d4^2)-P04y*d4);
Q1(i)=Q1_u
% Q1_2(i)=atan2(P03xv(i),-P03yv(i))
b=2*K2*L2;
a=2*K1*L2;
c=-L3^2+K1^2+K2^2+L2^2;
Aux=b^2+a^2-c^2;
%agregamos esta parte de código, por que a veces en algunas
%configuraciones, debido a los redondeos q realiza matlab, al
calcular q2,
%el determinante de la ecuación cuadrática llega a presentar una
pequeña
%parte imaginaria del orden de 10^-6 en adelante, con lo cual se
nos genera
%una solución imaginaria que no debería generarse, esto lo
solucionamos
%asi:
if abs(Aux-0)<0.00001
Aux=0
end
if Aux < 0
99
Q2(i)=100;
sol(i,1)=0;
continue
end
Q2(i)=2*atan((b+Brazo*Codo*sqrt(Aux))/(a+c))
if a+c==0
Q2(i)=pi;
end
Q3(i)=atan2(sinq3,cosq3)
%Calculamos Q4
%Agregar condición porque algunos Q2 y Q3 son complejos, por tanto
el
%programa no avanzará por q atan no admite solucinoes complejas
cosq4=a05y*cos(Q2(i)+Q3(i))*cos(Q1(i))-a05z*sin(Q2(i)+Q3(i))-
a05x*cos(Q2(i)+Q3(i))*sin(Q1(i));
sinq4=-a05z*cos(Q2(i)+Q3(i))-
a05y*sin(Q2(i)+Q3(i))*cos(Q1(i))+a05x*sin(Q2(i)+Q3(i))*sin(Q1(i));
Q4(i)=atan2(sinq4,cosq4)
%Calculamos Q5
cosq5=o05x*cos(Q1(i))+o05y*sin(Q1(i));
sinq5=n05x*cos(Q1(i))+n05y*sin(Q1(i));
Q5(i)=atan2(sinq5,cosq5);
Q1s(i)=Q1(i)*180/pi
Q2s(i)=Q2(i)*180/pi
Q3s(i)=Q3(i)*180/pi
Q4s(i)=Q4(i)*180/pi
Q5s(i)=Q5(i)*180/pi
sol(i,:)=[1 Q1s(i) Q2s(i) Q3s(i) Q4s(i) Q5s(i)]
end
end
100
A.7 VERIFICACIÓN DE CINEMÁTICA INVERSA Y DIRECTA
Q1=-pi/2+(pi/2+pi/2).*rand(50,1);
Q2=-pi/2+(pi/2+pi/2).*rand(50,1);
Q3=-pi/2+(pi/2+pi/2).*rand(50,1);
Q4=-pi+(0+pi).*rand(50,1);
Q5=-pi/2+(pi/2+pi/2).*rand(50,1);
Q1(1)=0*pi/180;
Q2(1)=20*pi/180;
Q3(1)=87*pi/180;
Q4(1)=-130*pi/180;
Q5(1)=0*pi/180;
e_tot=0
tiempo_tot=0
for i=1:50
q1=Q1(i);
q2=Q2(i);
q3=Q3(i);
q4=Q4(i);
q5=Q5(i);
% q1s=q1*180/pi;
% q2s=q2*180/pi;
% q3s=q3*180/pi;
% q4s=q4*180/pi;
% q5s=q5*180/pi;
angulos_ing(i,:)=[q1 q2 q3 q4 q5];
A05 = [ cos(q1)*sin(q5) - sin(q2 + q3 + q4)*cos(q5)*sin(q1),
cos(q1)*cos(q5) + sin(q2 + q3 + q4)*sin(q1)*sin(q5), -cos(q2 + q3 +
q4)*sin(q1), - d4*cos(q1) - d1*sin(q1) - L2*sin(q1)*sin(q2) -
L5*cos(q2 + q3 + q4)*sin(q1) - L4*cos(q2 + q3)*sin(q1)*sin(q4) -
L4*sin(q2 + q3)*cos(q4)*sin(q1) - L3*cos(q2)*sin(q1)*sin(q3) -
L3*cos(q3)*sin(q1)*sin(q2);
sin(q1)*sin(q5) + sin(q2 + q3 + q4)*cos(q1)*cos(q5),
cos(q5)*sin(q1) - sin(q2 + q3 + q4)*cos(q1)*sin(q5), cos(q2 + q3 +
q4)*cos(q1), d1*cos(q1) - d4*sin(q1) + L2*cos(q1)*sin(q2) +
L5*cos(q2 + q3 + q4)*cos(q1) + L4*cos(q2 + q3)*cos(q1)*sin(q4) +
L4*sin(q2 + q3)*cos(q1)*cos(q4) + L3*cos(q1)*cos(q2)*sin(q3) +
L3*cos(q1)*cos(q3)*sin(q2);
cos(q2 + q3 + q4)*cos(q5),
-cos(q2 + q3 + q4)*sin(q5), -sin(q2 + q3 + q4),
L1 + L3*cos(q2 + q3) + L2*cos(q2) + L4*cos(q2 + q3 + q4) - L5*sin(q2 +
q3 + q4);
0,
0, 0,
1];
P05x=A05(1,4);
P05y=A05(2,4);
P05z=A05(3,4);
a05x=A05(1,3);
101
a05y=A05(2,3);
a05z=A05(3,3);
n05x=A05(1,1);
n05y=A05(2,1);
n05z=A05(3,1);
o05x=A05(1,2);
o05y=A05(2,2);
o05z=A05(3,2);
P04x=P05x-(L5)*a05x;
P04y=P05y-(L5)*a05y;
P04z=P05z-(L5)*a05z;
Brazo=sign(P04x*sin(q1) - P04y*cos(q1));
if Brazo==0
Brazo=1;
end
Codo=-Brazo*sign(L3*sin(q3));
[angulos,tiempo]=Cin_Inv(A05,Brazo,Codo);
angulos_cal(i,:)=angulos;
e=(abs(q1-angulos(1))+abs(q2-angulos(2))+abs(q3-
angulos(3))+abs(q4-angulos(4))+abs(q5-angulos(5)))/5;
if e>1
verf(i)=1;
end
e_tot=e_tot+e;
Brazov(i)=Brazo;
Codov(i)=Codo;
P05xv(i)=P05x;
P05yv(i)=P05y;
P05zv(i)=P05z;
tiempo_tot=tiempo_tot+tiempo;
end
tiempo_prom=tiempo_tot/50;
e_tot=e_tot/50
102
A.8 GENERACIÓN DE TRAYECTORIAS
clc
clear all
close all
%%
%Paso 1: Datos de entrada
%Errores máximos deseados
deltar_max=5*pi/180;
deltap_max=1;
%%%%%%
% POSICIÓN INICIAL
p0=[ -21.9000;
113.9000;
240.9000];
R0=[0 1 0;
0 0 1;
1 0 0];
% p0=[ -21.9000;
% 221.4621;
% 150.8336];
%
% R0=[ 0 1.0000 0;
% -0.3907 0 0.9205;
% 0.9205 0 0.3907];
%%%%%%%%%%%%%%%%%%%%%%%
%POSICIÓN FINAL
p1=[ -21.9000;
221.4621;
150.8336];
%
% R1=[ 0 1.0000 0;
% -0.3907 0 0.9205;
% 0.9205 0 0.3907];
%
% p1=[ -21.9000;
% 221.4621;
% 50];
%
R1=[0 1 0;
0 0 1;
1 0 0];
F1=[R1(1,1) R1(1,2) R1(1,3) p1(1);
R1(2,1) R1(2,2) R1(2,3) p1(2);
R1(3,1) R1(3,2) R1(3,3) p1(3);
0 0 0 1 ];
%%%%%%%%%%%%%%%%%%%%%%%%%%5
103
Brazo=-1;
Codo=1;
tic;
q0=Cin_Inv(F0,Brazo,Codo);
%
q1=Cin_Inv(F1,Brazo,Codo);
%Conversión de matriz de rotación a cuaternión.
c0=mrot2quat(R0);
c1=mrot2quat(R1);
%Almacenamos los primeros puntos nudos segun Algoritmo BDJP.
c(1:4,1)=c0;
c(1:4,3)=c1;
q(1:5,1)=q0;
q(1:5,3)=q1;
p(1:3,1)=p0;
p(1:3,3)=p1;
logic=0;
iter=0;
noconv=0;
while logic==0
% for op=1:2
deltar_t=0;
deltap_t=0;
[m,n]=size(q);
iter=iter+1;
for i=1:(n-1)/2
%Paso 1: jalamos las variables para el nuevo bucle
q0=q(1:5,2*i-1);
q1=q(1:5,2*i+1);
c0=c(1:4,2*i-1);
c1=c(1:4,2*i+1);
p0=p(1:3,2*i-1);
p1=p(1:3,2*i+1);
pc=(p0+p1)./2;
c01=quatmul(conjquat(c0),c1);
[n1,ang]=Rot_eje_ang(c01);
cc=quatmul(c1,Rot(n1,-ang/2));
Rc=quat2mrot(cc);
Fc=[Rc(1,1) Rc(1,2) Rc(1,3) pc(1);
Rc(2,1) Rc(2,2) Rc(2,3) pc(2);
Rc(3,1) Rc(3,2) Rc(3,3) pc(3);
0 0 0 1 ];
104
%Rc=quat2mrot(cc);
% cm=mrot2quat(Rm);
cc_conj=conjquat(cc);
%calculo de error
[nmn,deltar]=Rot_eje_ang(quatmul(cc_conj,cm));
deltap=norm(pm-pc);
%Rc=quat2mrot(cc);
%Almacenamos
deltap_t=deltap_t+deltap;
deltar_t=deltar_t+deltar;
%%%pc y Rc
p(1:3,2*i)=pc;
%R(1:3,6*i-2:6*i)=Rc;
%cc
c(1:4,2*i)=cc;
% q(1:5,2*i)=qc;
Fc_v(1:4,(4*i-3):4*i)=Fc;
end
deltap_prom=deltap_t/i;
deltar_prom=deltar_t/i;
if deltar_prom>=deltar_max || deltap_prom>=deltap_max
for k=1:i
q(1:5,2*k)=Cin_Inv(Fc_v(1:4,4*k-3:4*k),Brazo,Codo);
end
[m,n]=size(q);
q_2=zeros(5,2*n-1);
p_2=zeros(3,2*n-1);
%R_2=zeros(1:3,3*n+3*(n-1));
c_2=zeros(4,2*n-1);
for j=1:n
q_2(1:5,2*j-1)=q(1:5,j);
p_2(1:3,2*j-1)=p(1:3,j);
%R_2(1:3,(6*n-2):6*n)=R(1:3,(3*n-2):3*n);
c_2(1:4,2*j-1)=c(1:4,j);
end
q=q_2;
p=p_2;
c=c_2;
else
logic=1;
[u,v]=size(q);
for i=1:((v+1)/2)
q_f(1:5,i)=q(1:5,2*i-1);%
p_final(1:3,i)=p(1:3,2*i-1);
end
end
if iter>=15
105
fprintf('no convergencia')
noconv=1;
break
end
end
%
if noconv==0
%%%%%% Interpolación de trayectorias metodo de Taylor
[u,v]=size(q_f);
l_est=norm(p_final(1:3,2)-p_final(1:3,1));
pasos=l_est*8;
pasos=round(pasos);
tao=pasos/3;
tao=round(tao);
o=1;
%Calculo de periodos
for i=1:v-1
l=norm(p_final(1:3,i+1)-p_final(1:3,i));%longitud del segmento en
unidades métricas
T(i)=pasos*(l/l_est);%periodo de segmento
T(i)=round(T(i))
end
for i=1:v-1
else
%ant t_int=T(i-1)-1+t(j)
t_int=T(i-1)+t(j);%mdf:T(i-1)-1+t(j) %tiempo de
recorrido desde el inicio del periodo
t_pri=t_int-T(i-1);
path_q(1:5,o)=q_f(1:5,i)-(tao-t_pri)^2/(4*tao*T(i-
1))*(q_f(1:5,i)-q_f(1:5,i-
1))+(tao+t_pri)^2/(4*tao*T(i))*(q_f(1:5,i+1)-q_f(1:5,i));
o=o+1;
end
elseif t(j)>tao && t(j)<T(i)-tao
path_q(1:5,o)=q_f(1:5,i+1)-lamda*(q_f(1:5,i+1)-
q_f(1:5,i));
o=o+1;
else
106
else
t_int=t(j);%tiempo de recorrido en la niterseccion de
segmentos
t_pri=t_int-T(i);
path_q(1:5,o)=q_f(1:5,i+1)-(tao-
t_pri)^2/(4*tao*T(i))*(q_f(1:5,i+1)-
q_f(1:5,i))+(tao+t_pri)^2/(4*tao*T(i+1))*(q_f(1:5,i+2)-q_f(1:5,i+1));
o=o+1;
end
end
end
end
tiempo=toc;
%Encontramos trayectoria
for i=1:o-1
[path_p(1:3,i),path_R(1:3,i:i+2)]=Cin_Dir(path_q(1,i),
path_q(2,i),path_q(3,i),path_q(4,i),path_q(5,i));
path_x(i)=path_p(1,i);
path_y(i)=path_p(2,i);
path_z(i)=path_p(3,i);
end
[m n]=size(q_f)
for i=1:n
p_f_x(i)=p_final(1,i);
p_f_y(i)=p_final(2,i);
p_f_z(i)=p_final(3,i);
end
length(path_z);
t=0:1:length(path_z)-1;
tn=t./(length(path_z));
t_p=0:pasos-1:length(path_z);
t_p_n=t_p./length(path_z);
figure
plot3(path_x,path_y,path_z)
grid on
xlabel('Coordenada x')
ylabel('Coordenada y')
zlabel('Coordenada Z')
q3_sig(1,1:length(tn2))=path_q(3,length(path_y));
q3_solid=[path_q(3,:) q3_sig];
q3_vector=[10.*tnf' q3_solid'.*(180/pi)];
q2_sig(1,1:length(tn2))=path_q(2,length(path_y));
q2_solid=[path_q(2,:) q2_sig];
q2_vector=[10.*tnf' q2_solid'.*(180/pi)];
107
q4_sig(1,1:length(tn2))=path_q(4,length(path_y));
q4_solid=[path_q(4,:) q4_sig];
q4_vector=[10.*tnf' q4_solid'.*(180/pi)];
q5_sig(1,1:length(tn2))=path_q(5,length(path_y));
q5_solid=[path_q(5,:) q5_sig];
q5_vector=[10.*tnf' q5_solid'.*(180/pi)];
dlmwrite('q3_data.txt',q3_vector)
q2_vector=[10.*tn' path_q(2,:)'.*(180/pi)];
dlmwrite('q2_data.txt',q2_vector)
q4_vector=[10.*tn' path_q(4,:)'.*(180/pi)];
dlmwrite('q4_data.txt',q4_vector)
q5_vector=[10.*tn' path_q(5,:)'.*(180/pi)];
dlmwrite('q5_data.txt',q5_vector)
q1_vector=[10.*tn' path_q(1,:)'.*(180/pi)];
dlmwrite('q1_data.txt',q1_vector)
108
B. PLANOS DEL ROBOT MANIPULADOR
109
C.
110