Escolar Documentos
Profissional Documentos
Cultura Documentos
net/publication/280444733
CITATIONS READS
0 838
3 authors:
Ricardo A. Ramírez-Mendoza
Tecnológico de Monterrey
310 PUBLICATIONS 646 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
Behavioral Approach for Systems and Control and Numerical Linear Algebra View project
All content following this page was uploaded by Ricardo A. Ramírez-Mendoza on 26 July 2015.
Tesis de Maestría
Asesor:
Autor: Dr. Ricardo Zavala Yoe
Daniel Chaparro Co-asesor:
Altamirano Dr. Ricardo Ambrocio
Ramirez Mendoza
en la
23 de julio de 2015
INSTITUTO TECNOLÓGICO Y DE ESTUDIOS SUPERIORES DE MONTERREY
Abstract
Escuela de Diseño, Ingenieniería y Arquitectura
En apoyo a los cálculos, se diseñó un modelo del robot 3-SPS-1-S en Solidworks, que es
un software de dibujo mecánico en 3D, en donde se simuló el movimiento y se comprobó
que esta arquitectura presenta solamente movimientos rotacionales. Por último, se imple-
mentaron todos los algoritmos y modelos en MATLAB para poder realizar simulaciones
y obtener gráficas.
Agradecimeintos
ii
Contenido
Abstract i
Agradecimeintos ii
Lista de Figuras vi
1. Motivación 1
1.1. Trabajo a futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Introducción 3
2.1. Cadenas cinemáticas, mecanismos y máquinas . . . . . . . . . . . . . . . . 3
2.2. Grados de libertad de un mecanismo . . . . . . . . . . . . . . . . . . . . . 4
2.3. Espacio de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4. Clasificación de robots manipuladores . . . . . . . . . . . . . . . . . . . . 7
2.4.1. Según sus grados de libertad . . . . . . . . . . . . . . . . . . . . . 7
2.4.2. Según su estructura cinemática . . . . . . . . . . . . . . . . . . . . 8
2.4.3. Según la geometría del espacio de trabajo . . . . . . . . . . . . . . 8
2.5. Arquitectura y configuración . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.6. Cinemática directa e inversa . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.7. Robots paralelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4. Cinemática 23
4.1. Cinemática Inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2. Cinemática directa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.1. Método geométrico . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2.2. Newton-Raphson y redes neuronales artificiales . . . . . . . . . . . 31
iii
Contenido iv
5. Espacio de trabajo 38
5.1. Cálculo del espacio de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.1.1. Longitud permitida . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.1.2. Ángulo máximo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.1.3. Colisión entre patas . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2. Optimización mediante un algoritmo genético . . . . . . . . . . . . . . . . 44
6. Análisis Jacobiano 50
6.1. Singularidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7. Dinámica 54
7.1. Dinámica Inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.1.1. Trabajo virtual (Principio de d0 Alembert) . . . . . . . . . . . . . . 54
7.1.2. Método presentado por Merlet . . . . . . . . . . . . . . . . . . . . 64
7.2. Dinámica Directa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
8. Control de posición 72
8.1. Control PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
8.2. Control PD difuso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
9. Trayectoria 80
9.1. Trayectorias de posición . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
9.1.1. Interpolación lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
9.1.2. Mapa de caminos probabilístico (PRM) . . . . . . . . . . . . . . . 81
9.2. Trayectorias de velocidad y aceleración . . . . . . . . . . . . . . . . . . . . 85
9.2.1. Movimiento uniformemente acelerado . . . . . . . . . . . . . . . . . 85
9.2.2. Trayectoria polinomial . . . . . . . . . . . . . . . . . . . . . . . . . 88
10.Conclusiones 94
A. Códigos de MATLAB 95
A.1. Cinemática inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
A.2. Cinemática directa por método geométrico . . . . . . . . . . . . . . . . . . 96
A.3. Cinemática directa por Newton-Raphson y RNA . . . . . . . . . . . . . . 102
A.3.1. Entrenamiento de red neuronal . . . . . . . . . . . . . . . . . . . . 103
A.3.2. Método de Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . 104
A.3.2.1. Función f utilizada en el método de Newton-Raphson . . 107
A.3.2.2. Función df utilizada en el método de Newton-Raphson . . 108
A.4. Cálculo del espacio de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . 109
A.4.1. Condición de longitud . . . . . . . . . . . . . . . . . . . . . . . . . 114
A.4.2. Condición de ángulo . . . . . . . . . . . . . . . . . . . . . . . . . . 115
A.4.3. Condición de colisión . . . . . . . . . . . . . . . . . . . . . . . . . . 116
A.5. Algoritmo genético . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
A.5.1. Función de aptitud . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
A.5.2. Selección mediante torneo . . . . . . . . . . . . . . . . . . . . . . . 120
A.5.3. Recombinación genética . . . . . . . . . . . . . . . . . . . . . . . . 121
A.5.4. Mutación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Contenido v
Bibliografía 169
Lista de figuras
vi
Lista de Figuras vii
viii
Capítulo 1
Motivación
Existen muchas actividades en la industria que son peligrosas para las personas, otras
en donde las actividades son muy repetitivas y otras en las cuales se necesita una gran
precisión y velocidad. Para realizar este tipo de actividades se han desarrollado varios
tipos de robots, los cuales se dividen en dos grandes tipos de acuerdo al tipo de cadena
cinemática que los constituye: seriales y paralelos.
Los robots seriales se han utilizado más que los paralelos, razón por la cual se han
estudiado más, sin embargo, hay ciertas ventajas que tienen los robots paralelos, las
cuales se mencionarán más adelante.
Hay ciertas configuraciones de robots paralelos que sirven de una mejor manera que otros
en una aplicación específica, sin embargo, incluso teniendo la mejor arquitectura para una
cierta aplicación, si el tamaño del robot no es el adecuado, puede tener un rendimiento
menor que un manipulador con una peor arquitectura para esa aplicación, pero con un
tamaño adecuado [23]. Por esta razón uno de los objetivos de este trabajo es diseñar un
método que genere un tamaño óptimo del robot.
Por esta razón contar con sistemas de seguridad automatizados se ha convertido en una
necesidad, ya que se ha llegado a un punto en donde no se puede confiar ni siquiera en
los elementos de seguridad del país.
1
Capítulo 1. Motivaón 2
Es por esto que este proyecto busca diseñar un sistema para detectar, apuntar y disparar
hacia las personas que se encuentren en una zona prohibida con una pistola de aire
comprimido y balas de gas pimienta, de tal manera que sean neutralizados por unos
momentos mientras los elementos de seguridad son alertados.
Este tipo de armas por lo general no son peligrosas, sin embargo, han existido algunos
casos en donde alguna persona ha muerto a causa de un disparo en zonas críticas, como
el cuello o el ojo, con este tipo de armas. Por esta razón es muy importante generar un
sistema que sea capaz de calcular el lugar donde se encuentra el pecho de la persona y
disparar exactamente ahí para evitar que el disparo pueda causar la muerte.
Esta gran precisión que se busca hace que la mejor opción para utilizar en este sistema
sea un manipulador paralelo que controle el movimiento de la pistola, ya que cuentan
con una gran precisión.
Para esta aplicación se necesita solamente orientar el arma, por lo que un robot con tres
grados de libertad, el cual pueda orientar su efector final es suficiente. Este tipo de robots
ha sido menos estudiado que los de seis grados de libertad. La mayoría de este tipo de
robots cuenta con ciertas restricciones de manufactura y ensamble, es por esto que se
decidió estudiar la variante 3-SPS-1-S, la cual no cuenta con estas desventajas.
En este trabajo se estudia a fondo el robot 3-SPS-1-S, pero para completar la aplicación
deseada, es necesario identificar a los objetivos mediante alguna técnica de visión artificial
para calcular el punto al que se debe orientar el robot antes de disparar.
Además de esto es necesario generar una interfaz para comunicar al robot con el sistema
de visión, y una interfaz de usuario para interactuar con el robot.
Capítulo 2
Introducción
En este capítulo se revisarán algunos conceptos básicos de mecanismos que son utilizados
en la robótica, así como algunos conceptos de esta área que se deben de conocer ya que
serán utilizados en este trabajo.
Existen distintos tipos de uniones o juntas, sin embargo, las más usadas son:
Unión rotacional (R). Esta unión permite solamente rotación sobre un eje.
Unión esférica (S ). Esta unión permite rotación sobre los tres ejes.
3
Capítulo 2. Introducción 4
energía mecáica [25]. También se puede decir que un mecanismo es una cadena cinemática
que tiene al menos uno de sus extremos fijos en una superficie, comunmente llamda base.
Una máquina es un ensamble de uno o varios mecanismos, junto con otros componentes
eléctricos y/o hidráulicos que se usa para transformar algún tipo de energía externa en
trabajo o algún otro tio de energía [34].
Un robot PUMA como el que se muestra en la figura 2.3 tiene seis grados de libertad, lo
que significa que puede moverse en cualquier dirección del espacio y orientar su efector
final hacia donde desee.
Existe una fórmula general conocida como fórmula de Grübler [23] con la cual podemos
calcular la movilidad de un mecanismo en el espacio (3 dimensiones):
n
X
m = 6 (l − n − 1) + di (2.1)
i=1
Capítulo 2. Introducción 6
Esta fórmula sirve en la mayoría de los casos, sin embargo, en ocasiones se pueden
obtener resultados falsos. Esto se debe en ocasiones a la geometría de los mecanismos o
relaciones entre articulaciones. Por ejemplo, una plataforma Stewart-Gough 6-SPS nos
da un resultado de 12, pero existen 6 grados de libertad ociosos, uno por cada pata, ya
que las patas pueden girar sobre su propio eje, no obstante, esto no afecta a la posición
de la plataforma.
El espacio de trabajo de un robot se compone de todos los puntos del espacio que puede
alcanzar el efector final de un robot, tomando en cuenta las restricciones de tamaño de
los eslabones, movimiento permitido por las articulaciones, colisiones entre eslabones y
limitaciones debido a singularidades.
En robots seriales el espacio de trabajo se representa mediante el volúmen que puede ser
alcanzado por el centro del efector final. En robots paralelos suele ser más complicado,
por lo que se han generado distintas representaciones del espacio de trabajo [23]. Las
más comunes son:
Espacio de trabajo máximo o alcanzable⇒ Todas las ubicaciones que puede alcanzar
C con al menos una orientación de la plataforma.
Espacio de trabajo de orientación total ⇒ Todas las ubicaciones de C que pueden ser
alcanzadas con todas las orientaciones definidas mediante un rango en los ángulos
de orientación.
Los robots manipuladores se pueden clasificar utilizando varios criterios como número de
grados de libertad, estructura cinemática, tipo de actuadores o espacio de trabajo [34].
Otra forma de clasificar a los robots es la manera como se encuentran conectados sus
eslabones. Mediante este criterio podemos dividir a los robots en dos categorías: seriales
y paralelos.
Los robots seriales son aquellos en los cuales cada eslabón se encuentra unido a dos
eslabones, con excepción de la base y el efector final, los cuales se encuentran unidos
solamente a un eslabón. En otras palabras, la base está unida al efector final mediante
una cadena cinemática abierta. Un ejemplo de este tipo de robots es el PUMA que se
observa en la figura 2.3.
Los robots paralelos por otra parte son manipuladores en donde el efector final está
unido a la base a través de varias cadenas cinemáticas independientes. La plataforma
Stewart-Gough, mostrada en la figura 2.6 es uno de los robots paralelos más estudiados.
Por otra parte se le llama configuración a cada una de las distintas combinaciones que
pueden tomar los eslabones de una arquitectura. En otras palabras, son todas las posi-
ciones en las que se puede encontrar el robot.
Estos dos problemas existen tanto en robots seriales como en robots paralelos, sin em-
bargo, la forma de resolverlos es distinta. En el caso de los robots seriales resolver la
cinemática directa es bastante sencillo, ya que se puede especificar la posición y orienta-
ción de un eslabón respecto al eslabón anterior mediante una matriz de transformación
[4]: " #
AR AP
A B B0
TB = (2.2)
01×3 I1×1
La cinemática inversa de robots seriales es un poco más complicada ya que existen varias
combinaciones de posiciones en los actuadores que pueden resultar en una misma posición
y orientación del efector final.
Se mencionó en la sección 2.4.2 que podemos clasificar a los robots en seriales y paralelos.
Los robots seriales tienen la ventaja de contar con espacios de trabajo mayores que los
robots paralelos, sin embargo presentan ciertos problemas.
En primer lugar tenemos que en promedio la relación entre la carga que soporta un robot
serial y el peso del mismo es de 25 % aproximadamente [23], ya que cada motor debe de
ser capaz de sostener a todos los eslabones que se encuentran entre él y el efector final.
Otro problema es que cada eslabón presenta un error en su posición que puede ser
causado por deformaciones en el mismo debido al peso que está sosteniendo o errores
en los actuadores que se encuentran en las articulaciones. Estos errores pequeños se van
acumulando conforme avanzan los eslabones, y al final se puede convertir en un error
considerable.
Los robots paralelos tienen espacios de trabajo menores que los de los robots seriales, sin
embargo no presentan los problemas antes mencionados ya que los actuadores no necesi-
tan sostener el peso de los demás actuadores. Esto permite que se utilicen actuadores más
pequeños, por lo que la relación entre el peso del robot y la carga que soporta aumenta.
Además de esto los errores debido a las deformaciones no afectan tanto al efector final
ya que no se suman directamente, de hecho se puede dar el caso de que la deformación
de una pata se compense con la deformación en otra pata.
Merlet [23] presenta una serie de puntos que se deben de tomar en cuenta para que un
manipulador se considere como paralelo:
Por lo menos dos cadenas cinemáticas deben de soportar al efector final. Cada una
de estas cadenas debe contar con, por lo menos, un actuador. Debe de existir un
sensor que permita medir la variable actuada.
La movilidad del robot debe de ser cero cuando los actuadores están bloqueados
(no se mueven).
fija, unidas entre sí por al menos dos cadenas cinemáticas. El movimiento se lleva a cabo
mediante n actuadores simples [23].
Los robots paralelos pueden ser clasificados de diversas maneras, por ejemplo dependien-
do del número de grados de libertad o del tipo de movimiento que presentan. Según el
tipo de movimiento que presentan, los robots paralelos se pueden dividir en tres grupos:
traslacionales, esféricos o de orientación y mixtos.
3. Los robots paralelos mixtos son aquellos cuyo efector final posee tanto movi-
mientos de traslación como de rotación. A diferencia de los manipuladores paralelos
de traslación y esféricos, este tipo de robots puede tener hasta 6 grados de libertad.
Un ejemplo de este tipo de robots es la plataforma Stewart-Gough mostrada en la
figura 2.6.
en utilizar un número para indicar la cantidad de patas, y luego letras que indican el
tipo de articulación que existe entre cada eslabón de las patas. Por ejemplo la plataforma
Stewart-Gough tiene seis patas unidas a la base mediante articulaciones universales, des-
pués se tiene una articulación prismática actuada y por último una articulación esférica
entre el efector final y los últimos eslabones. Si se utiliza esta notación el nombre de este
robot sería 6-UPS.
En ocasiones un robot no tiene todas sus patas iguales, por lo que se escriben primero
unas patas y luego otras, separadas por un guión, por ejemplo el manipulador estudiado
en este trabajo se conoce como 3-SPS-1S. Esto quiere decir que el robot tiene cuatro
patas, tres de las cuales tienen una articulación esférica, seguida de una prismática y por
último una esférica, mientras que la cuarta pata es una unión esférica entre la plataforma
y la base.
Cuando se desea mencionar a las articulaciones que contienen a los actuadores, se coloca
una línea sobre o bajo la letra que corresponde a la articulación actuada, por ejemplo co-
mo en la plataforma Stewart-Gough tenemos que la articulación prismática es la actuada,
podemos escribir su nombre como 6-SPS.
Capítulo 3
Si utilizamos mecanismos con una base, una plataforma con tres grados de libertad y
movimientos solamente de orientación y tres patas, cada una con dos eslabones, podemos
escribir la fórmula de Grübler como
9
X 9
X
3 = 6 (8 − 9 − 1) + di = di − 12 (3.1)
i=1 i=1
9
X
di = 15 (3.2)
i=1
Si se utilizan robots con sus tres patas iguales se tiene que entre las tres articulaciones
de cada pata deben de existir cinco grados de libertad. Las posibles combinaciones de
articulaciones se muestran en la tabla 3.1.
Usar una combinación de las que se observan en la tabla 3.1, no garantiza que el robot
tendrá tres movimientos rotacionales. La figura 3.1 muestra algunos manipuladores que
sí cumplen con tener solamente tres movimientos rotacionales.
14
Capítulo 3. Manipuladores paralelos esféricos 15
3.1. 3-RRRRR
Este tipo de robots cuentan con cinco articulaciones rotacionales ya sea de manera ais-
lada, ordenadas en pares para formar uniones tipo U, o en tercias para formar uniones
tipo S. Podemos encontrar distintas variantes de robots que utilizan cinco articulaciones
rotacionales como los robots 3-RUU, 3-URU y 3-RSR.
3.1.1. 3-RUU
Esta configuración propuesta por Di Gregorio [8] consiste en un robot con tres patas
iguales, cada una con una articulación rotacional y dos universales. La figura 3.2 nos
muestra un robot 3-RUU dibujado en Solidworks.
Esta configuración fue propuesta originalmente como un robot traslacional [10], sin em-
bargo se comporta como un robot de orientación si se presentan ciertas condiciones de
manufactura y ensamblaje:
2. Los seis ejes rotacionales, colocados en pares en los tres eslabones adyacentes a la
base, deben de converger en un punto de la base.
4. En cada pierna los dos ejes de rotación que no convergen a un mismo punto, deben
de ser paralelos entre sí y perpendiculares a la línea que cruza por el centro de la
articulación universal.
La figura 3.3 nos muestra las condiciones que se deben de cumplir para que el robot
3-RUU tenga movimientos rotacionales.
Este robot presenta algunos problemas al ser utilizado en esta modalidad de orientación.
En primer lugar, está sujeto a condiciones de manufactura muy estrictas, lo cual significa
Capítulo 3. Manipuladores paralelos esféricos 17
que pequeños errores en la manufactura de las piezas del robot pueden ocasionar que no
se comporte como se desea. Además existen posiciones singulares que pueden hacer que
el robot tenga movimientos de traslación.
3.1.2. 3-URU
Figura 3.4: Robot DYMO en (a) Modo de traslación y (b) modo de rotación [38].
Este robot conocido como Double-Y Multi-Operational o DYMO por sus siglas en inglés,
se comporta como un manipulador de orientación cuando el eje de la primera articulación
de revolución de la base coincide con el eje de la primera articulación de revolución de
la plataforma como se muestra en la figura 3.5.
Zlatanov también nos menciona que es posible salirse del modo de rotación y entrar al
modo de traslación sin tener que desarmar el robot [38].
Capítulo 3. Manipuladores paralelos esféricos 18
3.1.3. 3-RSR
Para que este robot se comporte como un robot de orientación, es necesario que tanto
los ejes de las articulaciones rotacionales de la base como los de la plataforma intersecten
en el mismo punto (P ). La figura 3.7 nos muestra la manera en la que deben de estar
acomodadas las articulaciones de una pata para que los ejes coincidan en el punto p.
3.2. 3-UPU
El robot 3-UPU fue propuesto inicialmente como un robot de traslación [32], sin embargo,
puede ser utilizado como un robot de orientación si existe una disposición de los ejes de
las articulaciones pasivas [16] como se observa en la figura 3.8.
Este robot es muy similar al 3-URU ya que los ejes de la primera articulación rotacional
de cada articulación tipo U deben de coincidir en un mismo punto. En caso de que el
robot no se ensamble adecuadamente, éste puede presentar movimientos de traslación.
3.3. 3-RRR
La condición que se debe cumplir para que un robot 3-RRR tenga solamente movimientos
de rotación es que los ejes de las nueve articulaciones rotacionales coincidan en el centro
de la plataforma.
Al igual que en los robots 3-RSR, 3-URU, 3-RUU y 3-UPU, en este robot es necesario
contar con una buena manufactura y ensamble de los componentes, de lo contrario puede
presentar movimientos no deseados.
Capítulo 3. Manipuladores paralelos esféricos 20
3.4. 3-SPS-1-S
En [5] se propone el modelo general del robot 3-SPS-1-S el cual tiene tres grados de
libertad y solamente movimientos de rotación. Este robot, el cual se observa en la figura
3.10, cuenta con tres patas actuadas las cuales tienen la estructura SPS pero además tiene
una articulación tipo S entre la plataforma y la base, que funciona como una restricción (y
soporte) y es gracias a ella que el robot solamente puede tener movimientos rotacionales.
10
X 10
X
3 = 6 (8 − 10 − 1) + di = di − 18 (3.3)
i=1 i=1
Capítulo 3. Manipuladores paralelos esféricos 21
9
X
di = 21. (3.4)
i=1
Figura 3.11: Robot 3-UPS-1S. Los cuadros negros representan articulaciones univer-
sales [23].
El modelo propuesto por Cui y Zhang se puede observar en la figura 3.12. La unión tipo
S que se encuentra entre la base y la plataforma es el punto sobre el cual va a rotar esta
última.
Si se desea que la plataforma gire sobre su propio eje, debemos de colocar la unión esférica
en el centro de la plataforma como se observa en la figura 3.13.
Esta arquitectura tiene una gran rigidez gracias a la pata central, la cual transmite hacia
la base las fuerzas ejercidas sobre la plataforma (incluyendo el peso de la misma). Esto a
su vez, permite que la fuerza necesaria para mover la plataforma sea menor que en otro
tipo de configuraciones, lo cual se traduce en actuadores de menor costo. Esto, junto con
el hecho de que no se necesite un proceso de manufactura y ensamble tan preciso como en
otros manipuladores paralelos, es la razón por la que se decidió utilizar esta arquitectura
en el presente trabajo.
Capítulo 4
Cinemática
La cinemática estudia el movimiento de los cuerpos sin tomar en cuenta las fuerzas que
lo producen. Al diseñar un robot es muy importante revisar la cinemática del mismo ya
que de esta manera se puede conocer la relación que existe entre la posición del efector
final y la de los actuadores. Dependiendo del tipo de relación que se desee conocer, se
debe resolver la cinemática inversa o la directa.
Antes de iniciar el análisis cinemático del robot es necesario describirlo. Como se men-
cionó en el capítulo 3 el robot 3-SPS-1-S tiene tres patas con uniones esféricas tanto en
la base como en la plataforma. Estas patas están compuestas por dos eslabones unidos
mediante una articulación prismática la cual está actuada, esto quiere decir que para
mover el robot se controla la longitud de la pata mediante este actuador lineal. Por otra
parte, la base y la plataforma se encuentran unidas directamente a través de una pata
central con una articulación esférica.
En la figura 4.1 podemos ver la estructura básica del manipulador 3-SPS-1-S en donde Ai
representa la unión esférica entre la base y el primer eslabón de la pata i, Bi la unión entre
el segundo eslabón de la pata i y la plataforma, O representa el marco de referencia de
la base (fijo), mientras que P representa el marco de referencia de la plataforma (móvil).
Observando el modelo del robot de la figura 4.1, podemos ver que se cumple la siguiente
suma de vectores:
23
Capítulo 4. Cinemática 24
Para poder resolver la ecuación (4.1) obtenemos las componentes x, y y z de cada ele-
mento de la siguiente manera:
0
OP = 0
(4.3a)
h
rp
A A B
P Bi = RB Rbi
0 = RB bi
(4.3b)
0
rb
OAi = Rai 0
(4.3c)
0
donde Rai y Rbi son matrices de rotación sobre el eje z siendo γa/bi el ángulo que existe
entre el eje x de la plataforma (o de la base) y la línea que va del centro de la plataforma
Capítulo 4. Cinemática 25
cγai −sγai 0
Rai =
sγai cγai 0
(4.4)
0 0 1
cγbi −sγbi 0
Rbi = sγbi
cγbi 0
(4.5)
0 0 1
Por otra parte AR es la matriz de rotación que representa la orientación del sistema
B
de coordenadas de la plataforma respecto al de la base. Si definimos la rotación de la
plataforma como un giro ψ alrededor del eje z de la plataforma, un giro φ alrededor del
eje v ’(el eje y rotado) y por último un giro ω alrededor del eje u”(el eje x rotado dos
veces), obtenemos la siguiente matriz de rotación:
cφcψ −cφsψ sφ
A
RB =
cωsψ + cψsωsφ cωcψ − sωsφsψ −cφsω
(4.6)
sωsψ − cωcψsφ cψsω + cωsφsψ cωcφ
Capítulo 4. Cinemática 26
Para manejar una notación más sencilla escribimos las ecuaciones 4.3a. 4.3b y 4.3c de la
siguiente manera:
0
OP = p = 0
(4.7a)
h
bxi
P Bi = bi =
byi
(4.7b)
bzi
axi
OAi = ai = ayi
(4.7c)
0
0 bxi axi bxi − axi
ABi = 0 + byi − ayi = byi − ayi (4.8)
h bzi 0 bzi + h
Para encontrar la longitud que debe de tener cada actuador(di ) simplemente se necesita
resolver la ecuación (4.2), es decir, encontrar la magnitud del vector presentado en la
ecuación (4.8). La solución de la cinemática inversa se muestra a continuación:
q
di = kABi k = (bxi − axi )2 + (byi − ayi )2 + (bzi + h)2 (4.9)
Capítulo 4. Cinemática 27
En el caso de que el valor conocido sea la posición de los actuadores y el valor que se desea
encontrar es la orientación de la plataforma, entonces se debe de resolver el problema de
la cinemática directa.
Gan, Seneviratne y Dias nos muestran un método utilizando la fórmula de Cayley [11]. Al
utilizar este método se obtienen ocho resultados que resuelven la cinemática directa, sin
embargo, algunos de ellos contienen números comlpejos, por lo tanto no son soluciones
que se puedan lograr físicamente. En esta sección se propone un método geométrico
Capítulo 4. Cinemática 28
Se sabe que la plataforma gira sobre su centro, razón por la cual los puntos Bi se encon-
trarán forzosamente sobre una esfera con centro en el origen de la plataforma y de radio
rp . Por otra parte se sabe que dado que la pata i con una longitud di gira alrededor del
punto Ai , el punto Bi se encontrará también sobre una esfera centrada en Ai de radio
di . Podemos ver estas esferas en la figura 4.5.
Dado que el punto Bi tiene que estar sobre estas dos esferas al mismo tiempo, el punto
Bi tiene que encontrarse en algún punto en donde estas dos esferas se intersecten. La
intersección de dos esferas forma una circunferencia en el espacio, sobre la cual se debe
encontrar el punto Bi .
√
Bb rp 3
Bj = 2 = [− , rp , 0]T , entonces podemos escribir la ecuación (4.10) como
2 2
√ !2
v
u
u 3r 2 3rp √
p
dB = t + = rp 3 (4.11)
2 2
Una vez que se conoce dB , se deben encontrar los puntos pertenecientes al primer círculo
que se encuentren a una distancia dB del segundo círculo. Después se debe buscar para
cada par de puntos si existe un punto perteneciente al tercer círculo cuya distancia a
ambos puntos sea dB . El resultado es un conjunto de pares de puntos pertenecientes al
primer y segundo círculo, como se observa en la figura 4.6.
√
Figura 4.6: Pares de puntos de los círculos 1 y 2 con una separación de rp 3
φ = arcsin (wx )
wz
ω = arc cos
cφ
vx
ψ = arcsin − (4.18)
cφ
El método geométrico nos da más de una solución dada una longitud de actuadores, por
lo que si se quiere saber la posición a la que llegará la plataforma dada su orientación
inicial y la longitud final de los actuadores, sería necesario analizar la cinemática directa
de toda la trayectoria, eligiendo en cada momento la solución que se encuentre más
cercana a la posición anterior de la plataforma.
Otro método para encontrar la cinemática directa puede ser escribir la ecuación (4.9)
tres veces, una para cada actuador, y así obtener un sistema de tres ecuaciones con tres
Capítulo 4. Cinemática 32
incógnitas:
Sabemos que B bi = [B bix , B biy , 0]T , por lo que podemos obtener de la ecuación (4.3b) los
términos bix , biy y biz de la siguiente manera
Sustituyendo las ecuaciones (4.20a), (4.20b) y (4.20c) en las ecuaciones (4.19a), (4.19b)
y (4.19c) tenemos el sistema de ecuaciones listo para resolver, sin embargo no podemos
despejar los ángulos y por lo tanto no podemos resolverlo de manera analítica.
Para poder resolver este sistema es necesario utilizar algún método numérico capaz de
resolver un sistema de ecuaciones no lineales como el método de Newton-Raphson. El
problema con los métodos numéricos es que para que funcionen de una manera correcta
es necesario dar un valor inicial cercano al valor real, el cual no se conoce ya que es lo
que se desea calcular.
Una neurona biológica tiene dos componentes principales: axón y dendritas. El funcio-
namiento de una neurona de manera simplificada es el siguiente: una neurona recibe (o
no) impulsos eléctricos a través de las dendritas provenientes de los axones de otras neu-
ronas. La neurona suma los impulsos y si esta suma excede un nivel de umbral, entonces
la neurona manda un impulso a través de se axón [28].
Una neurona artificial imita este comportamiento. Recibe una o varias señales que son
multiplicadas por un peso. La neurona suma todos los valores de sus entradas y evalúa
el resultado en una función de activación. La salida de la neurona es el valor entregado
por esa función de activación. El modelo de una neurona artificial se puede observar en
la figura 4.8.
Capítulo 4. Cinemática 33
Existen distintas funciones de activación, algunas de ellas son: lineal, escalón, tangente
hiperbólica, sigmoidal y gaussiana. La figura 4.9 muestra algunas de estas funciones.
Una RNA se puede definir como un sistema de mapeo no lineal [27]. Las RNA están
compuestas por varias neuronas artificiales divididas en capas, las cuales se conectan con
las neuronas de las otras capas. La primera capa se conoce como capa de entrada. Las
neuronas de esta capa reciben las entradas de la RNA y constituye la primera etapa de
procesamiento. La última capa se llama capa de salida, la cual entrega los valores de
salida de la RNA. Pueden o no existir capas intermedias entre la capa de entrada y la
capa de salida, las cuales son conocidas como capas ocultas y funcionan como etapas de
procesamiento. Si no existen capas ocultas se dice que la RNA es una red monocapa,
mientras que si la RNA cuenta con capas ocultas se dice que es una red multicapa.
Capítulo 4. Cinemática 34
Además de clasificar a las RNA por el número de capas que tiene, existen otras for-
mas de hacerlo, por ejemplo por su tipo de aprendizaje (supervisadas, no supervisadas,
competitivas) o por su estructura (hacia adelante, recurrentes).
Cuando en una RNA las neuronas solamente reciben información de las neuronas de la
capa anterior y entregan información a las de la capa siguiente, se dice que tiene una
estructura de tipo feed-forward o hacia adelante debido a que el flujo de la información
va de una capa hacia la siguiente [27]. En ocasiones la salida de una neurona se conecta
a la entrada de una neurona de una capa anterior, en este caso se dice que es una red
recurrente.
Existen cinco principales problemas para los que se utilizan las RNA [28], los cuales se
muestran en la tabla 4.1.
Tabla 4.1: Problemas que se resuelven mediante RNA.
Problema Descripción
• Aproximación de fun- Aproximar funciones lineales o no lineales.
ciones
• Clasificación Clasificación de datos para encontrar patrones o clasi-
ficación de señales para identificar objetos.
• Agrupamiento no su- Agrupar los datos en un número determinado de gru-
pervisado pos.
• Pronosticación Predecir los siguientes valores de una serie temporal.
• Sistemas de control Modelado y control de sistemas.
Para que una RNA resuelva el problema para el que fue diseñada, es necesario que
pase por una etapa de aprendizaje. El aprendizaje consiste en ajustar los pesos que se
encuentran en la entrada de cada neurona, de tal forma que al final la RNA tenga el
comportamiento deseado. En un aprendizaje supervisado, se le proporciona a la red un
conjunto de valores de entrada y sus respectivas salidas, de tal manera que la red ajuste
sus pesos para imitar esta relación entrada-salida. En un aprendizaje no supervisado no
se tiene esta relación entre entradas y salidas, por lo que la red intenta encontrar patrones
en la entrada para realizar el aprendizaje.
El algoritmo de retropropagación del error calcula el error entre el valor de salida obtenido
y el deseado, el cual se va propagando hacia las neuronas anteriores y encuentra un valor
de error para cada neurona. Mediante estos errores calcula los nuevos pesos de cada
neurona. Este procedimiento se repite para todos los valores de entrenamiento. Se repite
Capítulo 4. Cinemática 35
esto hasta que se clasifiquen correctamente todos los valores de entrada o hasta que se
cumpla un criterio de término.
En la tabla 4.1 observamos que una RNA puede apoximar una función no lineal, por lo
que es posible generar un conjunto de datos (longitudes y ángulos de Euler) y entrenar a
una RNA para que calcule los ángulos dadas las longitudes, es decir genere tres funciones
que calculen los ángulos dadas las longitudes de las patas.
Este problema se puede resolver generando una función local de la cinemática directa a
través de una RNA. Esto quiere decir que dada la posición actual de la plataforma y la
longitud deseada, se calcule la posición final de la plataforma.
La RNA utilizada se puede observar en la figura 4.10 y consiste en seis entradas (tres
que corresponden a las longitudes de los actuadores y tres indicando el cuadrante de la
plataforma), cuatro neuronas en la capa de entrada, ocho en la capa oculta y tres de
salida, una para cada ángulo.
d1
d2
ω
d3
φ
sgn(b1x )
ψ
sgn(b1y )
sgn(b1z )
Figura 4.10: Red neuronal artificial utilizada para hacer la aproximación inicial
Una vez que la RNA es entrenada, ésta funciona como un método para encontrar una
solución aproximada al sistema de ecuaciones formado por las ecuaciones (4.19a), (4.19b)
y (4.19c), que finalmente puede ser resuelto mediante el método de Newton-Raphson.
Observamos que en este caso el error es prácticamente cero durante toda la trayectoria,
lo cual significa que la aproximación mediante la RNA fue bastante buena, lo cual facilitó
que el método de Newton-Raphson encontrara una solución adecuada.
Para demostrar que no siempre se encuentra la posición deseada se generó otra trayec-
toria para la posición de la plataforma. Mediante cinemática inversa se calcularon las
longitudes de los actuadores y después mediante cinemática directa se calculó la posición
de la plataforma.
El resultado lo podemos ver en la figura 4.12, en donde todos los ángulos son iguales con
excepción del último, cuyo error es de casi 400◦ . Este error se debe a que la aproximación
inicial de ese ángulo no fue muy buena, lo que ocasionó que el método de Newton-Raphson
además de no encontrar la solución, se alejó demasiado de la aproximación inicial. El
código para implementar este método se puede observar en el apéndice A.3.
Capítulo 5
Espacio de trabajo
Otra posibilidad es calcular la posición de un punto del robot en todas las posibles
orientaciones y graficar estas posiciones. Esta forma nos permite ver de una manera
más clara lo que está sucediendo físicamente con el robot, pero tiene la desventaja de
que puede que el punto elegido tenga la misma posición para dos o más orientaciones
distintas, por lo que no se aprecia el espacio de trabajo completamente. A pesar de esta
desventaja, esta representación puede ser más útil que la del espacio de configuraciones
en algunos casos como el del robot presentado en este trabajo, ya que solamente importa
la posición del punto al que va a estar apuntando el robot, en este caso el punto B1 .
38
Capítulo 5. Espacio de trabajo 39
También se ha representado como el volúmen que se genera mediante todas las rotaciones
posibles de un manipulador paralelo esférico [1].
Una manera de encontrar el espacio de trabajo es probar para todas las combinaciones
de ω, φ y ψ, y calcular si el punto b1 resultante pertenece al espacio de trabajo. Para
esto es necesario definir la resolución deseada para nuestro espacio de trabajo, ya sea de
10◦ , 1◦ , 0,1◦ , etc.
Para este robot es necesario que en cada punto se cumplan tres condiciones mecánicas:
longitud permitida, ángulo máximo y colisión entre patas. El algoritmo 1 nos muestra el
procedimiento para calcular el espacio de trabajo. El código de este algoritmo se observa
en el apéndice A.4.
El robot cuenta con tres actuadores lineales que físicamente tienen una longitud máxima
a la que se pueden estirar y una mínima a la que se pueden contraer.
Esta condición se cumple si físicamente posible para el robot estirar o contraer sus ac-
tuadores a la distancia requerida por la orientación deseada. El algoritmo 3 nos muestra
como calcular si se cumple esta condición mientras que el apéndice A.4.1 nos muestra el
código utilizado para el cálculo de la misma.
Capítulo 5. Espacio de trabajo 40
Físicamente una articulación de tipo S puede estar hecha de dos formas distintas. La
primera es mediante una rótula que permite el giro de la articulación sobre sus tres ejes.
La segunda es mediante tres articulaciones rotacionales, cada una correspondiendo a uno
de los tres ejes de giro.
Sin importar la articulación que se utilice, el ángulo máximo que puede girar la pata
sobre su eje x y el eje y (siendo z el eje que apunta del punto Ai al punto Bi ) no puede
ser mayor que 90◦ . Dependiendo del diseño mecánico de la articulación este ángulo puede
ser todavía menor, especialmente en el caso de las rótulas, lo cual hay que considerar
para saber si una configuración pertenece al espacio de trabajo.
Sea αij el ángulo entre la pata i y el plano j, β el ángulo máximo que pueden girar las
articulaciones, nj el vector normal al plano j y ui el vector que va del punto Ai a Bi . El
ángulo αij se puede calcular como
|nj · ui |
αij = arcsin (5.1)
|nj | · |ui |
donde
bxi − axi
ui = Bi − Ai =
byi − ayi .
(5.2)
bzi
Dado que αij es el ángulo entre la pata i y el plano j, pero el ángulo máximo (β) se mide
entre la recta normal al plano j y la pata i, para poder comparar estos ángulos definimos
π
γij = − αij .
2
Tenemos que n1 = [0, 0, 1]T ya que es el vector normal al plano xy. Para calcular n2
necesitamos conocer tres puntos sobre el plano 2. De la ecuación (4.14) podemos obtener
las coordenadas x, y y z de los puntos bi , utilizando estos tres puntos obtenemos el vector
n2 de la siguiente manera
P1 = b1 − b2 (5.3)
P2 = b3 − b2 (5.4)
n2 = P1 × P2 (5.5)
Para ver si se cumple la condición de ángulo máximo hay que seguir los pasos del algorit-
mo 4. En el apéndice A.4.2 podemos ver un ejemplo de código para revisar si se cumple
esta condición.
La tercera condición que se necesita para que una configuración pertenezca al espacio de
trabajo es que las patas no choquen entre ellas. Tsai y Lin presentan un método para
Capítulo 5. Espacio de trabajo 42
detectar colisiones en una plataforma Stewart-Gough [31], el cual puede ser adaptado
al robot 3-SPS-1-S. Para cada conjunto de patas i, j (incluyendo la pata central no
actuada) se debe calcular:
d = |n · (Ai − Aj )| (5.6)
si × sj
n= , (5.7)
||si × sj ||
bi − Ai
si = . (5.8)
||bi − Ai ||
Podemos escribir las ecuaciones paramétricas de las líneas rectas asociadas a cada una
de las patas como
(Li − Lj ) · si = 0 (5.11)
Capítulo 5. Espacio de trabajo 43
(Li − Lj ) · sj = 0 (5.12)
∆k = λk (1 − λk ) para k = i, j (5.13)
Para ver si se cumple la condición de colisión entre patas se deben seguir los pasos del
algoritmo 5. Un ejemplo de código para probar esta condición lo podemos encontrar en
el apéndice A.4.3.
Mediante estas tres condiciones se calculó el espacio de trabajo para un robot con los
siguientes parámetros: h = 20 cm, rb = 15 cm, rp = 15 cm, β = 80◦ y D = 3 cm. El
resultado se observa en las figuras 5.1, 5.2 y 5.3.
Capítulo 5. Espacio de trabajo 44
Entre los métodos de optimización se encuentran los algoritmos genéticos (AG), los cuales
son métodos que imitan el proceso de evolución natural para encontrar la solución a un
problema mediante las operaciones de selección, recombinación y mutación.
Capítulo 5. Espacio de trabajo 45
La función de aptitud de los nuevos elementos deja de mejorar por varias genera-
ciones.
La función de aptitud es una forma de evaluar numéricamente que tan bueno es cada
cromosoma. Retomando el ejemplo de este robot, dado que se quiere aumentar el espacio
de trabajo, la función de aptitud puede ser la suma del rango que pueden alcanzar los
ángulos de Euler.
Dos puntos: Se seleccionan dos puntos al azar. El primer hijo contiene la informa-
ción del padre hasta el primer punto, después la información del segundo padre
entre los dos puntos y después la información del primer padre a partir del segundo
punto. Con el otro hijo sucede lo opuesto.
Para optimizar los parámetros del robot se diseñó un algoritmo genético con las siguientes
características:
Los cromosomas son cadenas de treinta y nueve bits. A cada parámetro (h, rb y
rp ) le corresponden trece bits.
donde ∆α = αmax − αmin y hd , rbd y rpd son los valores deseados de los parámetros
del robot.
aquellos cuyo tamaño sea distitno al deseado. Esto nos ayuda a cumplir el objetivo de
maximizar el espacio de trabajo sin que varíe mucho el tamaño del robot respecto al
deseado.
Si comparamos el espacio de trabajo del robot con los parámetros iniciales y con los
generados por el algoritmo genético nos damos cuenta que el espacio de trabajo con
los parámetros generados con el algoritmo genético es mucho mayor que el otro. La
comparación de los valores máximos y mínimos de los ángulos ω, φ y ψ de los dos casos
se puede observar en la tabla 5.1.
Capítulo 5. Espacio de trabajo 49
Observamos en la tabla 5.1 que en la mayoría de los casos el ángulo utilizando los pará-
metros calculados por el algoritmo genético es 50 % más grande que con los parámetros
iniciales y 80 % en el caso más extremo.
Capítulo 6
Análisis Jacobiano
f (x, q) = 0 (6.1)
Si derivamos la ecuación (6.1) respecto al tiempo obtenemos una relación entre la veloci-
dad de entrada de los actuadores y la velocidad de salida del efector final de la siguiente
manera:
Jx ẋ = Jq q̇ (6.2)
donde
∂f ∂f
Jx = y Jq =
∂x ∂q
50
Capítulo 6. Análisis Jacobiano 51
OP + P Bi = OAi + Ai Bi (6.4)
Derivando esta ecuación y tomando en cuenta que OP y OAi son vectores constantes
obtenemos:
ωp × bi = di ωi × si + d˙i si para i =1, 2, 3 (6.5)
Si escribimos la ecuación (6.6) tres veces(una para cada actuador) obtenemos tres ecua-
ciones escalares, las cuales ordenadas en forma matricial nos da:
ωx ˙
d1
Jx ˙
ωy = Jq d2 (6.7)
ωz ˙
d3
donde
1 0 0
Jq =
0 1 0
(6.8)
0 0 1
(b1 × s1 )T
Jx = J = T , (6.9)
(b2 × s2 )
(b3 × s3 )T
6.1. Singularidades
Observamos en la ecuación (6.9) que cuando los vectores bi y si son paralelos, un renglón
de la matriz Jx se vuelve cero, por ende el determinante de la matriz jacobiana se vuelve
cero.
Capítulo 6. Análisis Jacobiano 52
Las singularidades son todas las posiciones en las cuales el determinante de la matriz
Jacobiana del manipulador es igual a cero. Las singularidades causan distintos problemas
en los robots paralelos, entre los cuales se encuentran: aumento de grados de libertad
en ese punto, cambio del tipo de movimiento (un robot paralelo esférico puede adquirir
movimientos de traslación por ejemplo) y pérdida de la controlabilidad.
Se puede ver claramente que el determinante de esta matriz es cero, por lo tanto esta es
una configuración singular. Si utilizamos φ = 0.274 y φ = −0.395 obtenemos
0 −13.3243 0
J =
11.5285 6.4215 ,
−0.0886 (6.11)
−11.5285 6.4215 0.0886
0 −12.2219 0
J =
11.9179 6.3024 .
−0.2185 (6.12)
−11.9179 6.3024 0.2185
Observamos que siempre nos da el determinante igual a cero, es decir, es una posición
singular. Mediante estas observaciones podemos decir que cuando ψ = 0 y ω = 0, en-
tonces det(J) = 0. En el robot 3-SPS-1S la unión directa entre la base y la plataforma
evita que el robot adquiera más grados de libertad o movimientos de traslación, otra
razón por la cual este robot es muy bueno en este tipo de aplicaciones, sin embargo, no
es posible calcular la dinámica inversa, lo cual tendría repercusiones en un controlador
que utilizara la dinámica.
Dinámica
54
Capítulo 7. Dimámica 55
f̂px
f̂py
f̂pz
F̂p = (7.2a)
n̂px
n̂py
n̂pz
f̂ix
f̂iy
f̂iz
F̂i = (7.2b)
n̂ix
n̂iy
n̂iz
Donde f̂ representa la suma de una fuerza aplicada y una debida a la inercia y n̂ la suma
de un momento aplicado y uno debido a la inercia.
δq = Jp δxp (7.3)
Además, el desplazamiento virtual del eslabón i de una pata se puede relacionar con el
desplazamiento virtual de la plataforma mediante una matriz jacobiana Ji :
X
JpT τ + F̂p + JiT F̂i = 0 (7.5)
i
Hay que tomar en cuenta que para resolver la ecuación (7.6) es necesario encontrar la
matriz inversa de Jp , por lo que si la matriz tiene una singularidad en algún punto no se
puede resolver la dinámica inversa.
Para el robot 3-SPS-1S tenemos tres patas, por lo que la sumatoria de la ecuación (7.6) va
de 1 hasta 3. Li y Xu [20] mencionan que en un robot con tres grados de libertad podemos
utilizar un subconjunto de F̂p de tres elementos, en donde los elementos restantes (fuerzas
o momentos) son soportados por las uniones pasivas. Dado que la plataforma no tiene
movimientos lineales sino que solamente gira, el subconjunto de F̂p a utilizar solamente
debe de contener momentos, además la pata central genera una fuerza de reacción que
contrarresta a la fuerza ejercida por la gravedad sobre la plataforma, por lo que en este
caso podemos escribir a F̂p como
n̂px
A A
n̂py = − Ip ω̇ p − ω p × ( Ip ω p )
F̂p = (7.7)
n̂pz
Por otra parte podemos dividir a F̂i en dos wrenches, uno para cada elemento de la pata
i (cilindro y pistón). Al hacer esto la ecuación (7.6) nos queda de la siguiente manera:
3
!
X
τ = −Jp−T F̂p + i Ti
J1i F̂1i + i J2i
Ti
F̂2i (7.8)
1
Capítulo 7. Dimámica 57
donde i J1i y i F̂1i son la matriz jacobiana y el wrench relacionados con el cilindro i, i J2i
y i F̂2i son la matriz jacobiana y el wrench relacionados con el pistón i:
i f̂
1ix
i f̂
1iy
" #
i f̂
m i R g − m i v̇
i
1iz 1i A 1i 1i
F̂1i = = (7.9)
i n̂
− I1i ω̇ i − ω i × (i I1i i ω i )
i i i
1ix
i n̂
1iy
i n̂
1iz
i f̂
2ix
i f̂
2iy
" #
i f̂
m i R g − m i v̇
i
2iz 2i A 2i 2i
F̂2i = = (7.10)
i n̂
−i I2i i ω̇ i − i ω i × (i I2i i ω i )
2ix
i n̂
2iy
i n̂
2iz
Para obtener los momentos de inercia de cada uno de los cuerpos se harán las siguientes
consideraciones. El cilindro se considera como un cilindro hueco con paredes gruesas de
masa m1 , radio externo r1 , radio interno rr1 y longitud 2e1 , el pistón como un cilindro
hueco de paredes gruesas de masa m2 , radio externo r2 , radio interno rr2 y longitud 2e2
y la plataforma se como un cilindro sólido de masa mp , radio rp y altura hp .
1
m1 3 r12 + rr12 + (2e1 )2 + m1 e21
Ix1 = Iy1 = (7.11a)
12
1
Iz1 = m1 r12 + rr12
(7.11b)
2
1
= m2 3 r22 + rr22 + (2e2 )2 + m2 e22
Ix2 = Iy2 (7.11c)
12
1
Iz2 = m2 r22 + rr22
(7.11d)
2
1
Ixp = Iyp = mp 3rp 2 + hp 2 (7.11e)
12
mp rp 2
Izp = (7.11f)
2
Capítulo 7. Dimámica 58
Para resolver la ecuación (7.8) es necesario encontrar las tres matrices jacobianas Jp , i J1i
y i J2i . Para esto se debe hacer un análisis de posiciones, velocidades y aceleraciones de
cada uno de los elementos que conforman al robot.
En primer lugar tenemos que la posición de la plataforma está dada por la matriz de
rotación descrita en la ecuación (4.6). La velocidad angular en términos de los mismos
movimientos utilizados para calcular la matriz de rotación A RB es
Si denotamos al vector unitario que apunta del punto Ai al punto Bi podemos escribir
la ecuación (4.8) como
si di + ai = p + bi . (7.16)
Capítulo 7. Dimámica 59
p + bi − ai
si = (7.17)
di
donde
di = |p + bi − ai | (7.18)
cφi sθi
si = A Ri i si =
sφi sθi
(7.21)
cθi
cθi = siz
q
sθi = s2ix + s2iy
sφi = siy /sθi
sφi = six /sθi (7.22)
La posición del centro de masa del cilindro (r1i ) y del pistón (r2i ) de la pata i los podemos
expresar de la siguiente manera:
r1i = ai + e1 si (7.23)
r2i = ai + (di − e2 ) si (7.24)
Por otra parte podemos encontrar la velocidad del punto Bi si derivamos el lado derecho
de la ecuación (7.16) respecto al tiempo
vbi = ω p × bi (7.25)
i
vbi = di i ω i × i si + d˙i i si (7.27)
i
vbiz = d˙i (7.28)
Capítulo 7. Dimámica 61
Si ahora aplicamos el producto cruz de ambos lados de la ecuación (7.27) con si obtenemos
la velocidad angular de la pata i:
−i vbiy
i 1 i 1
si × i vbi =
ωi = iv (7.29)
bix
di di
0
Una vez que se conoce i ω i podemos encontrar las velocidades del cilindro y del pistón
derivando las ecuaciones (7.23) y (7.24) respectivamente:
iv
bix
i e1
v1i = e1 i ω i × i si =
i vbiy (7.30)
di
0
(di − e2 )i vbix
1
i
v2i = (di − e2 )i ω i × i si + d˙i i si =
(di − e2 )i vbiy (7.31)
di
i
di vbiz
i
v̇bi = i RA v̇bi (7.33)
2i vbiz i vbiy
−i v̇biy +
di
2d˙i i
i 1 i i
1 2i vbiz i vbix
ω̇ i = si × v̇bi − ωi = i v̇ (7.34)
di di di bix −
di
0
Capítulo 7. Dimámica 62
i
v̇2i = d¨i i si + (di − e2 )i ω̇ i × i si + (di − e2 )i ω i × (i ω i × i si )
2e2 i vbiz i vbix
i
(di − e2 ) v̇bix + di
i i
1 2e 2 v biz v biy
+ 2d˙i ω i × si =
i
(di − e2 )i v̇biy + (7.36)
di di
e2 i vbix
2 + iv2
bix
i
di v̇biz +
di
Una vez que se conocen las posiciones, velocidades y aceleraciones se procede a calcular
las matrices jacobianas. Si escribimos la ecuación (7.25) en forma matricial tenemos:
donde
0 biz −biy
Jbi =
−biz 0 bix
(7.38)
biy −bix 0
i
vbi = i Jbi ẋp (7.39)
donde
iJ
bix
i
Jbi = i RA Jbi =
iJ
biy
iJ
biz
−biz cθi sφi − biy sθi biz cθi cφi + bix sθi −biy cθi cφi + bix cθi sφi
=
−biz cφi −biz sφi biy sφi + bix cφi
(7.40)
−biz sθi sφi + biy cθi biz cφi sθi − bix cθi −biy cφi sθi + bix sθi sφi
Capítulo 7. Dimámica 63
Utilizando los renglones de la matriz anterior, podemos escribir la ecuación (7.28) como:
Si escribimos la ecuación (7.41) tres veces, una para cada actuador, y las acomodamos
en forma de matriz obtenemos:
q̇ = Jp ẋp (7.42)
donde
1J
b1z
Jp = 2J (7.43)
b2z
3J
b3z
De manera similar podemos escribir las ecuaciones (7.29), (7.30) y (7.31) como:
−i Jbiy
i 1 iJ
ωi = bix
(7.44)
di
01×3
iJ
bix
i e1 iJ
v1i = biy
(7.45)
di
01×3
(di − e2 )i Jbix
i 1
(di − e2 )i Jbiy
v2i = (7.46)
di
i
di Jbiz
i
ẋ1i = i J1i ẋp , (7.47)
i
ẋ2i = i J2i ẋp , (7.48)
donde
e1 i Jbix
e1 i Jbiy
1 01×3
iJ1i = , (7.49)
di −i Jbiy
iJ
bix
01×3
Capítulo 7. Dimámica 64
(di − e2 )i Jbix
(di − e2 )i Jbiy
di i Jbiz
1
iJ2i = (7.50)
di
−i Jbiy
iJ
bix
01×3
son las llamadas matrices jacobianas de eslabón del cilindro y pistón i respectivamente.
Una vez calculando las matrices jacobianas mediante las ecuaciones (7.43), (7.49) y (7.50),
podemos resolver la ecuación (7.8) y de esta manera encontrar el vector τ = [f1 , f2 , f3 ]T .
El apéndice A.7 nos muestra el código para calcular el vector de fuerzas τ .
El método que utiliza Merlet para calcular la dinámica del robot 6-UPS [23] puede
ser adaptado para calcular la dinámica del robot 3-SPS-1S, tomando en cuenta ciertas
consideraciones que se mencionarán más adelante.
3
X
F= τi si + FN (7.54)
i=1
3
X
M= τi (PBi × si ) + MN . (7.55)
i=1
" #
F
σ= . (7.57)
M
σ = J T τ + σN (7.58)
Observamos que dado que σ y σN son vectores de dimensión seis, necesitaríamos tener
un vector de fuerzas τ de dimensión seis y una matriz jacobiana de 6 × 6, sin embargo,
nuestro vector de fuerzas es de dimensión tres y nuestra matriz jacobiana es de 3 × 3.
Aunque es posible encontrar una matriz jacobiana de 6 × 6 para un robot paralelo con
menos de seis grados de libertad, conocida como matriz jacobiana completa, y multipli-
carla por un vector de fuerzas τ de dimensión seis, el cual contiene N fuerzas (siendo
N el número de actuadores) y 6 − N valores igual a cero, en este caso se simplificará el
modelo tomando como consideración, al igual que en el método de trabajo virtual, que la
pata pasiva del robot provee fuerzas de reacción que contrarrestan a las fuerzas aplicadas
sobre la plataforma, de tal forma que solamente utilizaremos los momentos para hacer
el cálculo de la dinámica. Las ecuaciones (7.57) y (7.56) quedan de la siguiente manera
σN = MN , (7.59)
Capítulo 7. Dimámica 66
σ = M. (7.60)
τ = J −T (σ − σN ) (7.61)
donde
T 1 = Ip , T2 = ω p × (Ip ω p ) (7.64)
ai = ω̇ p × bi + ω p × (ω p × bi ) (7.65)
donde
U1i = −b∗i (7.67)
U2i = ω p × (ω p × bi ) (7.68)
aN i = (si × ai ) × si (7.69)
Si la componente MN de σN es
3
X
MN = bi × fN i , (7.72)
i=1
σN = V1 ẍp + V2 (7.73)
donde
3 3
X Ji ∗ ∗ 2 X Ji ∗ ∗ 2
V1 = 2 bi si U1i , V2 = 2 bi si U2i (7.74)
d
i=1 i
d
i=1 i
El apéndice A.9 contiene el código que resuelve la dinámica inversa por el método pre-
sentado por Merlet.
Mediante la dinámica inversa se encontraron las fuerzas necesarias para que el robot se
mueva de la posición inicial [ω, φ, ψ]T = [1◦ , −15◦ , −10◦ ]T a la posición final [ω, φ, ψ]T =
[1◦ , −5◦ , −35◦ ]T con las velocidades y aceleraciones mostradas en la figura 7.2.
Capítulo 7. Dimámica 68
Figura 7.3: Fuerzas calculadas mediante los dos métodos de dinámica inversa
La figura 7.3 nos muestra el resultado obtenido tanto por el método de trabajo virtual,
como por el método de Merlet. Se utilizaron los valores: r1 = 1.5 cm, r2 = 1.25 cm, rr1 =
Ix1 + Ix2
1.3 cm, rr2 = 1 cm, e1 = 8.4333 cm, e2 = 8.4333 cm y Ji = . Se hizo la suposi-
4
ción de que los elementos están hechos de aluminio, cuya densidad es ρAl = 2700 kg/m3
aproximadamente. Las masas se calcularon mediante las siguientes ecuaciones
de las otras patas siempre y cuando el momento resultante sobre la plataforma sea el
mismo.
Para revisar la validez de los códigos y a su vez de las gráficas obtenidas, se adaptó el
código del apéndice A.7 para un robot 6-UPS, el cual se muestra en el apéndice A.8.
Utilizando este código se graficaron las fuerzas cuando existe una aceleración sobre el eje
x de 5 m/s2 . La figura 7.4 muestra del lado izquierdo las fuerzas obtenidas mediante el
código del apéndice A.8, mientras que en el lado derecho se observan las fuerzas calculadas
por Tsai[34].
donde
1 0 sφ
ωp
Rωφψ =
0 cω −cφsω
(7.81)
0 sω cωcφ
con
(2k + 1)π
φ 6= para k = 0, 1, 2, ... (7.83)
2
Una posible solución a este problema es dividir el tiempo en partes muy pequeñas, de tal
forma que se cumpla que α(t) ≈ α(t−1) y α̇(t) ≈ α̇(t−1). Mediante estas aproximaciones
podemos calcular la aceleración de los ángulos de Euler y a su vez la posición y velocidad.
Utilizando las fuerzas de la gráfica superior de la figura 7.3 y la posición inicial [ω, φ, ψ]T =
[1◦ , −15◦ , −10◦ ]T , se simuló la dinámica directa del robot. La figura 7.5 nos muestra una
comparación de las aceleraciones iniciales (con las que se calcularon las fuerzas) y las
aceleraciones calculadas mediante la dinámica directa.
Capítulo 7. Dimámica 71
Podemos ver que aunque el comportamiento es similar existe una variación, ésto debido a
que como las aceleraciones son grandes y no se calcularon puntos intermedios de posición,
las aproximaciones α(t) ≈ α(t − 1) y α̇(t) ≈ α̇(t − 1) no son muy buenas.
La figura 7.6 nos muestra la trayectoria del robot simulada mediante la dinámica directa,
y aunque no es igual a la trayectoria original de la figura 7.2, es bastante parecida, lo
cual significa que si se aplican las fuerzas mostradas en un robot real, la trayectoria no
será igual a la simulada, sin embargo será muy parecida. Esto mismo sucede en la figura
7.5.
Control de posición
Existen diversas maneras de controlar al manipulador, entre las que tenemos un control
que utilice una longitud de las patas deseada como variable a controlar, con lo cual se
controla la posición del manipulador, aunque hay ciertos casos donde la posición final es
errónea como se verá más adelante.
Este tipo de controladores se utilizan ya que son muy sencillos de generar y funcionan
bastante bien, sin embargo, en ocasiones es mejor utilizar un controlador que utilice la
dinámica, especialmente si las fuerzas necesarias son muy grandes.
El controlador PID utiliza el error de alguna variable (longitud de las patas en este
caso), su derivada y su integral, para calcular la salida que debe de ejercer el controlador
con el fin de desaparecer el error. Este tipo de controladores son muy utilizados debido
a su simplicidad y facilidad de uso y es por esta misma razón por la cual se decidió
implementar un controlador de este tipo para el manipulador 3-SPS-1-S.
Gracias a la arquitectura simétrica del robot podemos utilizar las mismas constantes Kp ,
Kd y Ki para cada uno de los controladores. Las constantes se ajustaron manualmente,
observando el comportamiento de la respuesta.
72
Capítulo 8. Control de posición 73
será la aproximación. En este ejemplo donde ∆t = 0.002, los cambios de posición entre
un punto y el siguiente son pequeños, por lo que se puede decir que la aproximación es
buena, sin embargo el modelo real tendrá una ligera variación en los tiempos de respuesta.
Una vez que se logró controlar al sistema mediante un controlador PID bastante sencillo,
se diseñó un controlador difuso tipo PD.
Este tipo de controladores se basa en la lógica difusa para calcular el valor de salida. La
base de la lógica difusa son los conjuntos difusos presentados por Zadeh [36], en donde
un elemento tiene un grado de pertenencia a cada conjunto entre cero y uno, es decir
puede pertenecer parcial o totalmente a un conjunto.
Para las personas resulta más fácil pensar en términos lingüísticos que en términos numé-
ricos, por ejemplo es más fácil imaginarse la temperatura del agua si escuchamos la frase
“el agua está caliente"que si escuchamos la frase “el agua está a 31◦ C ". Para imitar forma
de pensamiento “natural ”, la lógica difusa utiliza las llamadas variables lingüísticas que
son palabras que permiten describir el estado de un objeto [27]. Las variables lingüísticas
toman valores lingüísticos (temperatura= “caliente ”) y pueden ser representadas por
conjuntos difusos.
Un sistema de control difuso cuenta con tres etapas básicas: difusificación, inferencia y
desdifusificación.
Observando el resultado de ambas reglas, notamos que tenemos que cerrar la llave de
agua fría 20 %, abrir la llave de agua caliente 20 %, abrir la llave de agua fría 80 % y
cerrar la llave de agua caliente 80 %. El resultado de estas reglas lo podemos observar
en la figura 8.2, en donde el primer renglón nos muestra la primer regla, el segundo la
segunda regla y el tercero la unión de los resultados.
En el ejemplo mencionado solamente existe una entrada, sin embargo es posible tener
varias entradas unidas por los operadores Y y O, los cuales se representan matemáti-
camente con los operadores mínimo y máximo respectivamente. También en ocasiones
existen distintas reglas cuya salida es el mismo conjunto difuso. Para elegir la pertenencia
de ese conjunto de salida generalmente se utiliza el operador de agregación máximo.
Las variables lingüísticas utilizadas para el desarrollo del controlador PD fueron el error,
la derivada del error y la fuerza, en donde el error se refiere a la diferencia entre el valor
deseado del actuador i y el valor actual.
Por otra parte podemos observar las reglas en forma de matriz de asociación difusa (FAM)
en la tabla 8.1. Para la implicación se utilizó el operador mínimo, para la agergación el
operador máximo y para la desdifusificación el método del centroide.
Error (derr )
MN N C P MP
MN MN MN MN N C
N MN MN N C P
d˙err C MN N C P MP
P N C P MP MP
MP C P MP MP MP
Para simular el control difuso utilizamos el algoritmo 9, el cual es muy similar al algoritmo
del control PID.
Capítulo 8. Control de posición 77
Se utilizaron los mismos parámetros (posiciones y tiempo) del ejemplo del controlador
PID para la simulación del controlador difuso. Podemos ver en la parte superior de la
figura 8.6 el error en los actuadores y en la parte inferior la posición de la plataforma. Se
puede observar que el error de la plataforma en estado estacionario es de 0.004◦ y entra
a la banda de estabilidad del 5 % a los 1.284 segundos en el peor de los casos.
Utilizando la posición inicial ωini = 1◦ , φini = 10◦ y ψini = −5◦ , la posición final
ωf in = 1◦ , φf in = −10◦ , ψf in = −5◦ , T = 2 y ∆t = T /1000, se simularon ambos
controladores simultáneamente y los resultados los podemos observar en la figura 8.7.
Observamos que en esta ocasión el error máximo al final del tiempo de simulación fue de
0.372◦ para el controlador PID, mientras que para el controlador difuso fue de 0.179◦ en
el peor de los casos, lo cual nos muestra que la respuesta del controlador difuso fue un
poco mejor.
Por último se compararon nuevamente los controladores pero esta vez se utilizó la posición
inicial ωini = 1◦ , φini = 10◦ y ψini = −50◦ y la posición final ωf in = 1◦ , φf in = 10◦ ,
Capítulo 8. Control de posición 78
ψf in = 35◦ . El resultado se puede observar en la figura 8.8. Podemos ver que aunque
el error en los actuadores es de 0.00129 cm en el peor de los casos, la posición de la
plataforma en estado estacionario no es la posición buscada.
Esta diferencia entre la posición deseada y la real de la plataforma se debe a que como
se mencionó en el capítulo 4.2, es posible encontrar varias orientaciones del robot que
tengan las mismas longitudes di . Por esta razón no se debe de realizar el control dado
el punto inicial y el punto final, sino que se debe de calcular una trayectoria con puntos
intermedios y se debe realizar el control a través de estos puntos intermedios para asegurar
Capítulo 8. Control de posición 79
que la posición final sea la deseada. Si no se hace esto en las aplicaciones de seguridad
para las cuales se está diseñando el robot, se podría desear mover el manipulador a una
orientación y el robot se movería a otra, por lo que perdería de vista al objetivo.
Trayectoria
Para asegurarse que el robot de seguridad apunte al lugar donde se encuentra el objetivo,
es necesario generar una trayectoria que guíe a la plataforma a la orientación deseada
mediante el uso de puntos intermedios. Con el número suficiente de puntos, podemos
asegurar que el robot se moverá siempre hacia la posición donde se encuentre el intruso.
Un método muy sencillo es mediante una interpolación lineal entre la posición inicial y
la deseada, el algoritmo 10 muestra la manera de utilizar este método.
El resultado del algoritmo 10 será una trayectoria en línea recta para cada uno de los
ángulos de Euler como se muestra en la figura 9.1
El principal problema con este tipo de trayectoria es que puede ocasionar que en algún
punto en el tiempo el robot se encuentre en una posición singular, lo cual no es deseable.
80
Capítulo 9. Trayectoria 81
A lo largo de los años se han desarrollado varios métodos para planear trayectorias
en robots evitando colisiones con obstáculos, uno de los cuales es el mapa de caminos
probabilistico [17].
En el caso de esta aplicación, no existen obstáculos físicos que el robot tenga que evitar,
sin embargo es posible utilizar las singularidades como obstáculos de tal forma que se
planee una trayectoria que vaya del punto inicial al final y esquive estas singularidades.
El algoritmo 11 muestra el procedimiento para calcular este tipo de trayectorias.
Este tipo de trayectoria nos permite ir del punto inicial al punto final asegurándonos que
el robot evitará colocarse en una posición singular, sin embargo, hay que tener en cuenta
Capítulo 9. Trayectoria 82
que este algoritmo depende de los parámetros n, k y r elegidos, por lo que si no tenemos
cuidado, el algoritmo puede fallar.
Si graficamos el resultado del algoritmo 11 y el algoritmo 12, las gráficas serán iguales
(suponiendo que los valores aleatorios fueron los mismos), sin embargo, el algoritmo 12
nos asegura que aunque se de el caso en el que la trayectoria no nos lleve hasta el punto
final, como en el 10 % de las pruebas para calcular n y k, simplemente se repetirá el
algoritmo hasta llegar a una solución. Por otra parte si se da el caso de que r es muy
grande y se generaron muy pocos puntos, la interpolación lineal hecha a la trayectoria
generada por el PRM generará puntos intermedios para evitar que la plataforma se
posicione en un lugar no deseado.
En el capítulo 6 se observó que cuando ψ = 0 los otros dos ángulos deben de ser distintos
a cero para no caer en una posición singular, lo que significa que la trayectoria generada
llevó a nuestro robot a una singularidad.
Sabiendo que la recta del ángulo φ no cruza con cero, podemos realizar una trayectoria
mediante interpolación lineal para este ángulo y una trayectoria mediante PRM para los
otros dos, esto con fin demostrativo, ya que de esta manera la gráfica es más sencilla y
fácil de apreciar.
En la figura 9.2 podemos ver el resultado del algoritmo 11 en donde el punto negro es el
punto inicial y el punto rosa el final. Las posiciones generadas están representadas por
taches rojos, mientras que las líneas negras representan las uniones entre puntos lij . El
cuadro azul representa la singularidad dada por φ = 0 y ω = 0. Por último, la línea roja
es la trayectoria encontrada por el algoritmo de búsqueda a lo ancho.
La figura 9.3 por otra parte muestra la trayectoria de los tres ángulos a través del tiempo,
es decir, el último paso del algoritmo 11. Podemos observar que a diferencia de la gráfica
de la figura 9.1, en este caso el robot llega a la misma posición final evitando caer en
singularidades.
Capítulo 9. Trayectoria 85
En la sección 9.1 se muestran métodos para obtener una trayectoria que nos lleve de una
posición iicial a una final. Esta trayectoria no es mas que un conjunto de puntos por los
que debe pasar el robot en un determinado tiempo.
Un detalle que debemos de observar es que tendríamos velocidades constantes entre cada
par de puntos, pero la velocidad no sería necesariamente constante para toda la trayec-
toria. Esto gráficamente se vería como una serie de escalones de velocidad que cambian
de valor en un tiempo infinitamente pequeño. El resultado de esto es que tendríamos
aceleraciones infinitas cada que hay un cambio de escalón, lo cual no es posible mas que
en una simulación.
Por esta razón es importante generar trayectorias que no solamente cumplan con los
requisitos de posición, sino además con algunas restricciones de velocidad y aceleración.
La manera más sencilla es generar un movimiento uniformemente acelerado (MUA) entre
cada par de puntos. Sabemos que las ecuaciones del movimiento uniformemente acelerado
Capítulo 9. Trayectoria 86
son
1
r(t) = r0 + v0 t + at2 , (9.1)
2
v(t) = v0 + at (9.2)
2
a= (r(t) − r0 − v0 t) . (9.3)
t2
Observamos que la aceleración es constante entre cada par de puntos, lo cual ocasiona que
la aceleración tenga un comportamiento lineal. También vemos que cuando la plataforma
llega al punto deseado, la velocidad es distinta de cero, lo cual significa que se debería
generar una aceleración extremadamente grande al final del movimiento para detener
completamente al robot y evitar que se mueva una vez que llegó a la posición deseada.
En la figura 9.5 se muestra el mismo problema pero ahora generando nueve puntos in-
termedios solamente. A diferencia del ejemplo pasado observamos que en este caso la
Capítulo 9. Trayectoria 87
velocidad final es igual a cero. Si observamos el comportamiento general del sistema uti-
lizando este tipo de trayectorias nos damos cuenta que si el número de puntos intermedios
es par, la velocidad final será distinta a cero, mientras que si es impar, la velocidad final
será cero.
Parecería que simplemente con utilizar un número de puntos impar logramos llevar al
robot a la posición deseada y tener una velocidad final de cero, sin embargo esto es
cierto solamente cuando la trayectoria se generó mediante interpolación lineal. En la
figura 9.6 podemos ver la trayectoria generada mediante el método de mapa de caminos
probabilístico y se observa que el número de puntos entre la posición inicial y la final es
de 5, es decir, es impar. Según lo que se observó anteriormente al ser impar, la velocidad
Capítulo 9. Trayectoria 88
final debería de ser cero, lo cual no ocurre y por esa razón no podemos generalizar que
con un número de puntos impar y trayectoria de velocidad mediante MUA la velocidad
final será cero.
donde tini es el tiempo que se encuentra el penúltimo punto generado inicialmente. Si de-
rivamos la ecuación (9.4) obtenemos la ecuación de la velocidad, si derivamos la velocidad
obtenemos la ecuación de la aceleración:
Para calcular los coeficientes normalizamos al tiempo entre 0 y 1 de tal forma que tini = 0
y tf in = 1. Dado que conocemos la posición y velocidad del penúltimo punto podemos
Capítulo 9. Trayectoria 89
a3 = rini , (9.7)
a2 = vini . (9.8)
Resolviendo el sistema de ecuaciones formado por las ecuaciones (9.9) y (9.10) obtenemos
Como se normalizó el tiempo entre cero y uno para obtener los coeficientes, es necesario
normalizar el tiempo cuando se va a calcular una posición, velocidad o aceleración. Por
ejemplo supongamos que el tiempo total de nuestra trayectoria es de un segundo y que
el penúltimo punto se encuentra en el tiempo t = 0.9. La diferencia de tiempo entre
estos dos puntos es de 0.1 segundos, por lo que para normalizar el tiempo es necesario
dividirlo entre 0.1. Si se genera una subtrayectoria de 5 puntos, éstos se encontrarían en
los tiempos t = 0.02, 0.04, 0.06, 0.08, 0.1. Al dividirlos entre 0.1, se encontrarían en los
tiempos t = 0.2, 0.4, 0.6, 0.8, 1, con lo que podemos aplicar las ecuaciones (9.4), (9.5) y
(9.6). Una vez calculado el valor de cada punto simplemente los regresamos a su tiempo
original.
Utilizando el mismo ejemplo de la figura 9.4 se generó una trayectoria con final polinomial
la cual se puede observar en la figura 9.7. Mientras que en la figura 9.4 la velocidad final es
distinta de cero, en la figura 9.7 el valor de la velocidad final es cero. Este comportamiento
es mucho mejor que el anterior, ya que la aceleración requerida para frenar al robot fue
muy pequeña en comparación con la que se hubiera necesitado si no se hubiera usado la
función polinomial en el último punto.
Capítulo 9. Trayectoria 90
Figura 9.7: Trayectoria mediante interpolación lineal y MUA con final polinomial
De la misma manera se simuló una trayectoria generada mediante PRM utilizando una
trayectoria polinomial para el último punto. El resultado lo observamos en la figura 9.8
y nuevamente observamos que la velocidad final es igual a cero.
Para resolver el primer problema podemos hacer la aproximación y verificar que la tra-
yectoria no haya sido modificada lo suficiente como para caer en una singularidad. En
caso de que si caiga en una singularidad tenemos dos opciones:
En caso de ser una trayectoria aleatoria como PRM, simplemente generar una
nueva trayectoria.
El segundo problema es más preocupante ya que la posición y velocidad inicial del robot
ya está dada, así que para resolver este problema podemos hacer lo siguiente. Hacemos
la aproximación de la función desde el segundo punto hasta el penúltimo y después
utilizamos el método ya mencionado para encontrar la subtrayectoria entre los últimos
dos puntos. Por último hacemos algo similar en el primer par de puntos, pero esta vez
utilizando un polinomio de quinto orden, cuya ecuación es
r(t) = a0 t5 + a1 t4 + a2 t3 + a3 t2 + a4 t + a5 (9.13)
Como conocemos los valores de posición, velocidad y aceleración iniciales podemos eva-
luar las ecuaciones (9.13), (9.14) y (9.15) en t = 0:
r(1) = a0 + a1 + a2 + a3 + a4 + a5 = rf in (9.19)
a1 = rf in − a0 − a2 − a3 − a4 − a5 . (9.24)
Una vez que se tienen los coeficientes podemos generar n puntos intermedios entre la
posición inicial y el primer punto. Al final obtenemos el resultado que se observa en la
figura 9.9.
Se probó este mismo método pero ahora basándose en una trayectoria generada mediante
PRM y el resultado se observa en la figura 9.10.
Conclusiones
Al estudiar el espacio de trabajo podemos optimizar los parámetros del manipulador para
maximizarlo y a su vez mantener el tamaño del robot lo más cercano a uno deseado. De
esta manera el robot de seguridad tiene un campo de visión mayor y al mantener el
tamaño cerca de uno deseado, se puede diseñar para que quepa tanto en un espacio
pequeño como en uno grande.
Si se toman en cuenta todos los aspectos del manipulador, es posible diseñar un manipu-
lador paralelo de orientación que tenga un movimiento considerable, un tamaño deseado,
sea capaz de seguir a sus objetivos con gran precisión y pueda sostener grandes cargas,
como sistema de visión o algún tipo de arma.
94
Apéndice A
Códigos de MATLAB
13 Bn=(Rot∗Bi’)’;
14
15 L1=norm(Bn(1,:)−Ai(1,:));
16 L2=norm(Bn(2,:)−Ai(2,:));
17 L3=norm(Bn(3,:)−Ai(3,:));
95
Apéndice A. Códigos de MATLAB 96
1 function Bt=cinematica_directa(h,rb,rp,L1,L2,L3,graficar,paso)
2 % Funcion que recibe las longitudes de patas deseadas, el paso y los
3 % paraametros del robot y regresa las posibles combinaciones de puntos Bi que
4 % cumplan.
5 Ai=[rb 0 −h; −.5∗rb sqrt(3)∗rb/2 −h ; −.5∗rb −sqrt(3)∗rb/2 −h ];
6 Bi=[rp 0 0; −.5∗rp sqrt(3)∗rp/2 0 ; −.5∗rp −sqrt(3)∗rp/2 0 ];
7 verts1=[];
8 faces=[];
9 i=1;
10 for t = 0:0.1:2∗pi;
11 verts1 = [verts1;cos(t)∗rb sin(t)∗rb −h];
12 faces=[faces i];
13 i=i+1;
14 end
15
16 %Circulo para l1
17 A=−2∗Ai(1,1);
18 B=−2∗Ai(1,2);
19 C=−2∗Ai(1,3);
20 D=rp^2+(A/2)^2+(B/2)^2+(C/2)^2−L1^2;
21 circ1=[];
22 circ12=[];
23
24
25 t1=[0 0 1i];
26 t2=[0 0 1i];
27 for x=−rp:paso:rp
28 yint=B^2∗(2∗D+2∗A∗x)^2−4∗(B^2+C^2)∗...
29 (D^2−C^2∗rp^2+2∗A∗D∗x+A^2∗x^2+C^2∗x^2);
30 zint=C^2∗(2∗D+2∗A∗x)^2−4∗(C^2+B^2)∗...
31 (D^2−B^2∗rp^2+2∗A∗D∗x+A^2∗x^2+B^2∗x^2);
32 y1=(−2∗B∗D−2∗A∗B∗x−sqrt(yint))/(2∗(B^2+C^2));
33 z1=(−2∗C∗D−2∗A∗C∗x−sqrt(zint))/(2∗(C^2+B^2));
34 y2=(−2∗B∗D−2∗A∗B∗x+sqrt(yint))/(2∗(B^2+C^2));
35 z2=(−2∗C∗D−2∗A∗C∗x+sqrt(zint))/(2∗(C^2+B^2));
36
37 if isreal(t1)&&isreal(t2)
38 agregar=1;
39 elseif isreal(y1)&&isreal(y2)&&isreal(z1)&&isreal(z2)
40 agregar=1;
41 else
42 agregar=0;
43 end
44
Apéndice A. Códigos de MATLAB 97
45 if agregar==1
46 circ1=[circ1; x real(y1) real(z1)];
47 circ12=[circ12; x real(y2) real(z2)];
48 end
49 t1=[x y1 z1];
50 t2=[x y2 z2];
51 end
52 circ1=[circ1;sortrows((circ12),−1)];
53
54
55
56
57 %Circulo para l2
58 A2=−2∗Ai(2,1);
59 B2=−2∗Ai(2,2);
60 C2=−2∗Ai(2,3);
61 D2=rp^2+(A2/2)^2+(B2/2)^2+(C2/2)^2−L2^2;
62 circ2=[];
63 circ22=[];
64
65 t1=[0 0 1i];
66 t2=[0 0 1i];
67
68 for x=−rp:paso:rp
69 yint=B2^2∗(2∗D2+2∗A2∗x)^2−4∗(B2^2+C2^2)∗...
70 (D2^2−C2^2∗rp^2+2∗A2∗D2∗x+A2^2∗x^2+C2^2∗x^2);
71 zint=C2^2∗(2∗D2+2∗A2∗x)^2−4∗(C2^2+B2^2)∗...
72 (D2^2−B2^2∗rp^2+2∗A2∗D2∗x+A2^2∗x^2+B2^2∗x^2);
73 y1=(−2∗B2∗D2−2∗A2∗B2∗x−sqrt(yint))/(2∗(B2^2+C2^2));
74 z1=(−2∗C2∗D2−2∗A2∗C2∗x−sqrt(zint))/(2∗(C2^2+B2^2));
75 y2=(−2∗B2∗D2−2∗A2∗B2∗x+sqrt(yint))/(2∗(B2^2+C2^2));
76 z2=(−2∗C2∗D2−2∗A2∗C2∗x+sqrt(zint))/(2∗(C2^2+B2^2));
77
78
79 if isreal(t1)&&isreal(t2)
80 agregar=1;
81 elseif isreal(y1)&&isreal(y2)&&isreal(z1)&&isreal(z2)
82 agregar=1;
83 else
84 agregar=0;
85 end
86
87 if agregar==1
88 circ2=[circ2; x real(y1) real(z1)];
89 circ22=[circ22; x real(y2) real(z2)];
90 end
91 t1=[x y1 z1];
92 t2=[x y2 z2];
Apéndice A. Códigos de MATLAB 98
93 end
94 circ2=[circ2;sortrows((circ22),−1)];
95
96 %Circulo para l3
97 A3=−2∗Ai(3,1);
98 B3=−2∗Ai(3,2);
99 C3=−2∗Ai(3,3);
100 D3=rp^2+(A3/2)^2+(B3/2)^2+(C3/2)^2−L3^2;
101 circ3=[];
102 circ32=[];
103
104
118
119 if isreal(t1)&&isreal(t2)
120 agregar=1;
121 elseif isreal(y1)&&isreal(y2)&&isreal(z1)&&isreal(z2)
122 agregar=1;
123 else
124 agregar=0;
125 end
126
127 if agregar==1
128 circ3=[circ3; x real(y1) real(z2)];
129 circ32=[circ32; x real(y2) real(z1)];
130 end
131 t1=[x y1 z1];
132 t2=[x y2 z2];
133 end
134 circ3=[circ3;sortrows((circ32),−1)];
135
136 %En este punto ya se tienen los tres circulos, falta buscar los puntos de
137 %union
138 c1=[0 0 0];
139 c2=[0 0 0];
140
Apéndice A. Códigos de MATLAB 99
141 u=[];
142 u2=[];
143 for i=1:size(circ1,1)
144 for j=1:size(circ2,1)
145 posible=0;
146
147 temp1=circ1(i,:)−circ2(j,:);
148 d1=round(1000∗(temp1∗temp1’)/(3∗rp^2))/1000;
149
150 if d1==1
151 c1=[circ1(i,1) circ1(i,2) circ1(i,3)];
152 c2=[circ2(j,1) circ2(j,2) circ2(j,3)];
153 posible=1;
154 u2=[u2;c1 c2];
155 end
156
157
158 if posible==1
159 for k=1:size(circ3,1)
160 temp1=c1(1,:)−circ3(k,:);
161 temp2=c2(1,:)−circ3(k,:);
162 d2=round(1000∗(temp1∗temp1’)/(3∗rp^2))/1000;
163 d3=round(1000∗(temp2∗temp2’)/(3∗rp^2))/1000;
164 if d2==1&&d3==1
165 u=[u;c1 c2 circ3(k,:)];
166 end
167 end
168 end
169 end
170 end
171
172 u=unique(u,’rows’);
173 q=u;
174 verts=[];
175 face=[];
176 borr=[];
177 thres=5;
178
179 if size(q,1)>1
180 for i=size(q,1):−1:2
181 for j=i−1:−1:1
182 dist=sqrt(sum((q(i,:)−q(j,:)).^2));
183 if dist<thres
184 borr=[borr j];
185 end
186 end
187 end
188 end
Apéndice A. Códigos de MATLAB 100
189 borr=unique(borr);
190 if ~isempty(borr)
191 for i=1:length(borr)
192 u(borr(i),:)=[];
193 borr=borr−1;
194 end
195 end
196
197 if graficar==1
198 for i=1:size(u,1)
199 verts=[verts;u(i,1),u(i,2),u(i,3);...
200 u(i,4),u(i,5),u(i,6);u(i,7),u(i,8),u(i,9)];
201 face{i}=[(i−1)∗3+1 (i−1)∗3+2 (i−1)∗3+3];
202 end
203
214 grid on
215
237 %
238 % plot3(l1(1,:),l1(2,:),l1(3,:),’LineWidth’,4,’Color’,co(i,:))
239 % plot3(l2(1,:),l2(2,:),l2(3,:),’LineWidth’,4,’Color’,co(i,:))
240 % plot3(l3(1,:),l3(2,:),l3(3,:),’LineWidth’,4,’Color’,co(i,:))
241 % end
242 % end
Apéndice A. Códigos de MATLAB 102
7 l1 = L1;
8 l2 = L2;
9 l3 = L3;
10
11 Bi=[rp 0 0];
12
18 B=(Rot∗Bi’)’;
19
22 y=sim(red,in);
23
24 MaxIter=500;
25 TolX=1e−10;
26 x = newtonraphson(@f, @df, y(:,1)∗pi/180, TolX, MaxIter);
27 salidas = x(:,size(x,2));
28
29 fi = salidas(1);
30 psi = salidas(2);
31 omega = salidas(3);
Apéndice A. Códigos de MATLAB 103
3 % Entradas−>[L1 L2 L3 x y z]
4 % Salidas−>[fi psi omega]
5
21 net = train(net,I,O);
22 save(’red.mat’,’net’)
Apéndice A. Códigos de MATLAB 104
31 if nargin == 0
32 error(’Function, Derivative of the Function, Initial Values and Options’)
33 end
34
35 if isempty(TolX)
36 TolX = 1e−8;
37 end
38
39 if isempty(MaxIter)
40 MaxIter = 500;
41 end
42
45 index = 1; % Index
46 e=1; % Error
47 iter=0; % Iterations
48 n=length(x0); % Number of Parameters
49 m1=’No Jacobian Vector was presented, continue estimation with’;
50 m2=’initial Broyden procedure followed by Sherman−Morrison formula’;
51 if isempty(Df)
52 disp([m1 m2]);
53 results.method = ’Newton Raphson, Broyden Method initial Jacobian estimation’;
54 Dt=1e−0; % Specify Time Step, Function Dependent
55 else
56 results.method = ’Newton Raphson’;
57 end
58
87 % Saving Results
88 results.parameters = x; % Parameters
89 results.function=F; % Saving the function values at each step
90 results.Jacobian=D; % Saving the Jacobian Matrix at each step
91 results.iter=iter; % Number of iterations required for convergence
92
Apéndice A. Códigos de MATLAB 106
1 function y = f(x)
2 %x(1)−>fi
3 %x(2)−>psi
4 %x(3)−>omega
5 global h rb rp l1 l2 l3
6
7 y(1) = h^2−l1^2+rb^2+rp^2−2∗rb∗rp∗cos(x(1))∗cos(x(2))...
8 −2∗h∗rp∗cos(x(2))∗cos(x(3))∗sin(x(1))+2∗h∗rp∗sin(x(2))∗sin(x(3));
9 y(2) = 1/2∗(2∗h^2−2∗l2^2+2∗rb^2+2∗rp^2+sqrt(3)∗rb∗rp∗cos(x(3))...
10 ∗sin(x(2))+2∗sqrt(3)∗h∗rp∗cos(x(3))∗sin(x(1))∗sin(x(2))−rb∗rp∗...
11 cos(x(1))∗(cos(x(2))+sqrt(3)∗sin(x(2)))−2∗h∗rp∗sin(x(2))∗sin(x(3))...
12 +3∗rb∗rp∗sin(x(1))∗sin(x(2))∗sin(x(3))+rp∗cos(x(2))∗(cos(x(3))...
13 ∗(−3∗rb+2∗h∗sin(x(1)))+sqrt(3)∗(2∗h+rb∗sin(x(1)))∗sin(x(3))));
14 y(3) = 1/4∗(−4∗l3^2+(rb+rp∗cos(x(1))∗(−cos(x(2))+sqrt(3)∗sin(x(2))))^2+...
15 (−2∗h+sqrt(3)∗rp∗cos(x(3))∗sin(x(1))∗sin(x(2))+rp∗sin(x(2))...
16 ∗sin(x(3))+cos(x(2))∗(−rp∗cos(x(3))∗sin(x(1))+sqrt(3)∗rp...
17 ∗sin(x(3))))^2+(rp∗cos(x(3))∗sin(x(2))+rp∗cos(x(2))∗...
18 (sqrt(3)∗cos(x(3))+sin(x(1))∗sin(x(3)))−sqrt(3)∗...
19 (rb+rp∗sin(x(1))∗sin(x(2))∗sin(x(3))))^2);
20 end
Apéndice A. Códigos de MATLAB 108
1 function J=df(x)
2 % x(1)−>fi
3 % x(2)−>psi
4 % x(3)−>omega
5 global h rb rp
6
7 f1x1 = 2∗rp∗cos(x(2))∗(−h∗cos(x(1))∗cos(x(3))+rb∗sin(x(1)));
8 f2x1 = 1/2∗rp∗(rb∗sin(x(1))∗(cos(x(2))+sqrt(3)∗sin(x(2)))+cos(x(1))...
9 ∗(sin(x(2))∗(2∗sqrt(3)∗h∗cos(x(3))+3∗rb∗sin(x(3)))+cos(x(2))...
10 ∗(2∗h∗cos(x(3))+sqrt(3)∗rb∗sin(x(3)))));
11 f3x1 = 1/2∗rp∗(rb∗sin(x(1))∗(cos(x(2))−sqrt(3)∗sin(x(2)))+cos(x(1))...
12 ∗(sin(x(2))∗(−2∗sqrt(3)∗h∗cos(x(3))+3∗rb∗sin(x(3)))+cos(x(2))...
13 ∗(2∗h∗cos(x(3))−sqrt(3)∗rb∗sin(x(3)))));
14 f1x2 = 2∗rp∗(rb∗cos(x(1))∗sin(x(2))+h∗cos(x(3))∗sin(x(1))∗sin(x(2))...
15 +h∗cos(x(2))∗sin(x(3)));
16 f2x2 = 1/2∗rp∗(rb∗cos(x(1))∗(−sqrt(3)∗cos(x(2))+sin(x(2)))+sin(x(2))...
17 ∗(cos(x(3))∗(3∗rb−2∗h∗sin(x(1)))−sqrt(3)∗(2∗h+rb∗sin(x(1)))...
18 ∗sin(x(3)))+cos(x(2))∗(sqrt(3)∗cos(x(3))∗(rb+2∗h∗sin(x(1)))...
19 +(−2∗h+3∗rb∗sin(x(1)))∗sin(x(3))));
20 f3x2 = 1/2∗rp∗(rb∗cos(x(1))∗(sqrt(3)∗cos(x(2))+sin(x(2)))−cos(x(2))...
21 ∗(sqrt(3)∗cos(x(3))∗(rb+2∗h∗sin(x(1)))+(2∗h−3∗rb∗sin(x(1)))...
22 ∗sin(x(3)))+sin(x(2))∗(cos(x(3))∗(3∗rb−2∗h∗sin(x(1)))+sqrt(3)...
23 ∗(2∗h+rb∗sin(x(1)))∗sin(x(3))));
24 f1x3 = 2∗h∗rp∗(cos(x(3))∗sin(x(2))+cos(x(2))∗sin(x(1))∗sin(x(3)));
25 f2x3 = 1/2∗rp∗(cos(x(2))∗(sqrt(3)∗cos(x(3))∗(2∗h+rb∗sin(x(1)))...
26 +(3∗rb−2∗h∗sin(x(1)))∗sin(x(3)))−sin(x(2))∗(cos(x(3))...
27 ∗(2∗h−3∗rb∗sin(x(1)))+sqrt(3)∗(rb+2∗h∗sin(x(1)))∗sin(x(3))));
28 f3x3 = 1/2∗rp∗(−cos(x(2))∗(sqrt(3)∗cos(x(3))∗(2∗h+rb∗sin(x(1)))...
29 +(−3∗rb+2∗h∗sin(x(1)))∗sin(x(3)))+sin(x(2))∗(cos(x(3))...
30 ∗(−2∗h+3∗rb∗sin(x(1)))+sqrt(3)∗(rb+2∗h∗sin(x(1)))∗sin(x(3))));
31
32 J = [f1x1 f1x2 f1x3; f2x1 f2x2 f2x3; f3x1 f3x2 f3x3]; %Jacobiano
33 end
Apéndice A. Códigos de MATLAB 109
18 maxf=0;
19 maxp=0;
20 maxo=0;
21 minf=0;
22 minp=0;
23 mino=0;
24 %% Calculo de fi
25 Ra=[1 0 0;0 1 0;0 0 1];
26 Rc=[1 0 0;0 1 0;0 0 1];
27
28 for l=0:1:180
29 fi=pi∗l/180;
30 Rb=[cos(fi) 0 sin(fi);0 1 0;−sin(fi) 0 cos(fi)];
31 R=Ra∗Rb∗Rc;
32 %Calculo de plano de la plataforma
33 B=(R∗Bi’)’;
34 pos=angulo(Ai,B,ang);
35 if pos==1
36 pos=longitud(Ai,B,lmin,lmax);
37 if pos==1
38 pos=colision(Ai,B,h,D);
39 end
40 end
41 if pos==1
42 maxf=fi;
43 else
44 break
Apéndice A. Códigos de MATLAB 110
45 end
46 end
47
48 for l=0:−1:−180
49 fi=pi∗l/180;
50 Rb=[cos(fi) 0 sin(fi);0 1 0;−sin(fi) 0 cos(fi)];
51 R=Ra∗Rb∗Rc;
52 %Calculo de plano de la plataforma
53 B=(R∗Bi’)’;
54 pos=angulo(Ai,B,ang);
55 if pos==1
56 pos=longitud(Ai,B,lmin,lmax);
57 if pos==1
58 pos=colision(Ai,B,h,D);
59 end
60 end
61 if pos==1
62 minf=fi;
63 else
64 break
65 end
66 end
67
68 %% Calculo de psi
69 Ra=[1 0 0;0 1 0;0 0 1];
70 Rb=[1 0 0;0 1 0;0 0 1];
71
72 for l=0:1:180
73 psi=pi∗l/180;
74 Rc=[cos(psi) −sin(psi) 0;sin(psi) cos(psi) 0;0 0 1];
75 R=Ra∗Rb∗Rc;
76 %Calculo de plano de la plataforma
77 B=(R∗Bi’)’;
78 pos=angulo(Ai,B,ang);
79 if pos==1
80 pos=longitud(Ai,B,lmin,lmax);
81 if pos==1
82 pos=colision(Ai,B,h,D);
83 end
84 end
85 if pos==1
86 maxp=psi;
87 else
88 break
89 end
90 end
91
92 for l=0:−1:−180
Apéndice A. Códigos de MATLAB 111
93 psi=pi∗l/180;
94 Rc=[cos(psi) −sin(psi) 0;sin(psi) cos(psi) 0;0 0 1];
95 R=Ra∗Rb∗Rc;
96 %Calculo de plano de la plataforma
97 B=(R∗Bi’)’;
98 pos=angulo(Ai,B,ang);
99 if pos==1
100 pos=longitud(Ai,B,lmin,lmax);
101 if pos==1
102 pos=colision(Ai,B,h,D);
103 end
104 end
105 if pos==1
106 minp=psi;
107 else
108 break
109 end
110 end
111
141 B=(R∗Bi’)’;
142 pos=angulo(Ai,B,ang);
143 if pos==1
144 pos=longitud(Ai,B,lmin,lmax);
145 if pos==1
146 pos=colision(Ai,B,h,D);
147 end
148 end
149 if pos==1
150 mino=om;
151 else
152 break
153 end
154 end
155
156 %%
157 o=[mino;maxo];
158 f=[minf;maxf];
159 p=[minp;maxp];
160
161 minf=round(minf∗180/pi);
162 mino=round(mino∗180/pi);
163 minp=round(minp∗180/pi);
164 maxf=round(maxf∗180/pi);
165 maxo=round(maxo∗180/pi);
166 maxp=round(maxp∗180/pi);
167
168 %%
169 % Calculo de los puntos pertenecientes al espacio de trabajo
170 x=[];
171 y=[];
172 z=[];
173
189 posible=longitud(Ai,B,lmin,lmax);
190 if posible==1
191 posible=colision(Ai,B,h,D);
192 end
193 end
194 if posible==1
195 %agregar punto al arreglo
196 fip=round(10∗k)/10∗pi/180;
197 psip=round(10∗l)/10∗pi/180;
198 omp=round(10∗j)/10∗pi/180;
199 p = [fip;psip;omp];
200 puntos=[puntos p];
201 end
202 end
203 end
204 end
Apéndice A. Códigos de MATLAB 114
1 function pos=longitud(A,B,lmin,lmax)
2 % Funcion que recibe la matriz A, la matriz B (rotada), la longitud minima
3 % y maxima de las patas y regresa 1 si es posible alcanzar esa posicion
4 % con la longitud permirida de las patas o cero si no es posible
5 L=A−B;
6 L1=norm(L(1,:));
7 L2=norm(L(2,:));
8 L3=norm(L(3,:));
9 pos=1;
10
11 if L1<lmin||L2<lmin||L3<lmin
12 pos=0;
13 end
14
15 if L1>lmax||L2>lmax||L3>lmax
16 pos=0;
17 end
Apéndice A. Códigos de MATLAB 115
1 function pos=angulo(A,B,ang)
2 % Funcion que recibe la matriz A, la matriz B (rotada), el angulo maximo
3 % permitido por las articulaciones y regresa 1 si es posible alcanzar esa
4 % posicion con un angulo menor al maximo o cero si no es posible
5
6 P=B(1,:)−B(2,:);
7 p=B(3,:)−B(2,:);
8 n=cross(P,p);
9 b=[0 0 1];
10
11 pos=1;
12
13 for i=1:3
14 u=B(i,:)−A(i,:);
15 a1=round(100∗asin((norm(dot(b,u)))/(norm(b)∗norm(u)))∗180/pi)/100;
16 a2=round(100∗asin((norm(dot(n,u)))/(norm(n)∗norm(u)))∗180/pi)/100;
17 if a1<ang||a2<ang
18 pos=0;
19 end
20 end
Apéndice A. Códigos de MATLAB 116
1 function pos=colision(A,B,h,D)
2 % Funcion que recibe la matriz A, la matriz B (rotada), la altura de la
3 % plataforma y el di’ametro de las paras y regresa 1 si es posible alcanzar
4 % esa posicion sin que choquen las patas o cero si no es posible
5
6 pos = 1;
7 A = [A; 0 0 −h];
8 B = [B; 0 0 0];
9 for i=1:3
10 si = (B(i,:)−A(i,:))/norm(B(i,:)−A(i,:));
11 for j=i+1:4
12 sj = (B(j,:)−A(j,:))/norm(B(j,:)−A(j,:));
13 n = cross(si,sj)/norm(cross(si,sj));
14 d = abs(dot(n,(A(i,:)−A(j,:))));
15 if d<=D
16 % Puede existir una colision. Calcular deltas
17 C=B−A;
18 l1=−(−(−C(j,1)∗si(1)−C(j,2)∗si(2)−C(j,3)∗si(3))∗(A(i,1)∗...
19 sj(1)−A(j,1)∗sj(1)+A(i,2)∗sj(2)−A(j,2)∗sj(2)+A(i,3)∗...
20 sj(3)−A(j,3)∗sj(3))+(A(i,1)∗si(1)−A(j,1)∗si(1)+A(i,2)∗...
21 si(2)−A(j,2)∗si(2)+A(i,3)∗si(3)−A(j,3)∗si(3))∗(−C(j,1)∗...
22 sj(1)−C(j,2)∗sj(2)−C(j,3)∗sj(3)))/(−(−C(j,1)∗si(1)−C(j,2)∗...
23 si(2)−C(j,3)∗si(3))∗(C(i,1)∗sj(1)+C(i,2)∗sj(2)+C(i,3)∗...
24 sj(3))+(C(i,1)∗si(1)+C(i,2)∗si(2)+C(i,3)∗si(3))∗(−C(j,1)∗...
25 sj(1)−C(j,2)∗sj(2)−C(j,3)∗sj(3)));
26 l2=−((−A(i,1)∗sj(1)+A(j,1)∗sj(1)−A(i,2)∗sj(2)+A(j,2)∗...
27 sj(2)−A(i,3)∗sj(3)+A(j,3)∗sj(3))/(C(j,1)∗sj(1)+C(j,2)∗...
28 sj(2)+C(j,3)∗sj(3)))+((C(i,1)∗sj(1)+C(i,2)∗sj(2)+C(i,3)∗...
29 sj(3))∗(−(−C(j,1)∗si(1)−C(j,2)∗si(2)−C(j,3)∗si(3))∗...
30 (A(i,1)∗sj(1)−A(j,1)∗sj(1)+A(i,2)∗sj(2)−A(j,2)∗sj(2)+...
31 A(i,3)∗sj(3)−A(j,3)∗sj(3))+(A(i,1)∗si(1)−A(j,1)∗si(1)+...
32 A(i,2)∗si(2)−A(j,2)∗si(2)+A(i,3)∗si(3)−A(j,3)∗si(3))∗...
33 (−C(j,1)∗sj(1)−C(j,2)∗sj(2)−C(j,3)∗sj(3))))/((−C(j,1)∗...
34 sj(1)−C(j,2)∗sj(2)−C(j,3)∗sj(3))∗(−(−C(j,1)∗si(1)−C(j,2)∗...
35 si(2)−C(j,3)∗si(3))∗(C(i,1)∗sj(1)+C(i,2)∗sj(2)+C(i,3)∗...
36 sj(3))+(C(i,1)∗si(1)+C(i,2)∗si(2)+C(i,3)∗si(3))∗(−C(j,1)∗...
37 sj(1)−C(j,2)∗sj(2)−C(j,3)∗sj(3))));
38
39 d1=l1∗(1−l1);
40 d2=l2∗(1−l2);
41 if d1>=0&&d2>=0
42 pos=0;
43 end
44 end
Apéndice A. Códigos de MATLAB 117
45 end
46 end
Apéndice A. Códigos de MATLAB 118
37 save(’parametros.mat’,’h’,’rp’,’rb’)
Apéndice A. Códigos de MATLAB 119
4 hdeseado = 20;
5 rbdeseado = 15;
6 rpdeseado = 15;
7
8 for i = 1 : length(fit)
9 [h,rp,rb] = decodificar(pob(i,:));
10 [fi,psi,omega] = espacioTrabajo(h,rb,rp);
11 fit(i) = 2∗fi + 2∗psi + .05∗omega − abs(h−hdeseado)∗10 − ...
12 abs(rb−rbdeseado)∗5 − abs(rp−rpdeseado)∗5;
13 end
Apéndice A. Códigos de MATLAB 120
1 function p = seleccion(fit)
2 % Seleccion por medio de torneo
3 p=[0 0];
4 for i = 1 : 2
5 parents = ceil(rand(2,1)∗length(fit));
6 parent1 = fit(parents(1));
7 parent2 = fit(parents(2));
8 if parent1>parent2
9 ganador = parents(1);
10 perdedor = parents(2);
11 else
12 ganador = parents(2);
13 perdedor = parents(1);
14 end
15
1 function h = cruzar(p1,p2)
2 punto1 = ceil(rand()∗length(p1));
3 punto2 = ceil(rand()∗length(p1));
4
5 temp = max(punto1,punto2);
6 punto1 = min(punto1,punto2);
7 punto2 = temp;
8
9 h = zeros(2,length(p1));
10 h(1,punto1:punto2) = p1(punto1:punto2);
11 h(2,punto1:punto2) = p2(punto1:punto2);
12
13 temp = find(h(1,:)~=0);
14 for i=1:length(temp)
15 p2(find(p2==h(1,temp(i))))=[];
16 end
17 for i=1:length(p2)
18 h(1,find(h(1,:)==0,1)) = p2(i);
19 end
20
21 temp = find(h(2,:)~=0);
22 for i=1:length(temp)
23 p1(find(p1==h(2,temp(i))))=[];
24 end
25 for i=1:length(p1)
26 h(2,find(h(2,:)==0,1)) = p1(i);
27 end
Apéndice A. Códigos de MATLAB 122
A.5.4. Mutación
3 if rand()<.01
4 bit = ceil(rand()∗length(h1));
5 h1(bit) = not(h1(bit));
6 end
7
8 if rand()<.01
9 bit = ceil(rand()∗length(h2));
10 h2(bit) = not(h2(bit));
11 end
Apéndice A. Códigos de MATLAB 123
3 h= bin2dec(num2str(elemento(1:6)))+bin2dec(num2str(elemento(7:13)))/100;
4 rp= bin2dec(num2str(elemento(14:19)))+bin2dec(num2str(elemento(20:26)))/100;
5 rb= bin2dec(num2str(elemento(27:32)))+bin2dec(num2str(elemento(33:39)))/100;
Apéndice A. Códigos de MATLAB 124
7 obstaculos = [];
8
9 Bi=[rp , 0, 0;...
10 rp ∗ cos(120∗pi/180), rp ∗ sin(120∗pi/180), 0;...
11 rp ∗ cos(240∗pi/180), rp ∗ sin(240∗pi/180), 0];
12 Ai=[rb 0 0;...
13 rb ∗ cos(120∗pi/180), rb ∗ sin(120∗pi/180), 0;...
14 rb ∗ cos(240∗pi/180), rb ∗ sin(240∗pi/180), 0];
15 p = [0; 0; h];
16
17 for j=1:size(puntos,2)
18 om=puntos(1,j);
19 fi=puntos(2,j);
20 psi=puntos(3,j);
21
22 % Obtener puntos bi
23 Ra=[1 0 0; 0 cos(om) −sin(om);0 sin(om) cos(om)];
24 Rb=[cos(fi) 0 sin(fi);0 1 0;−sin(fi) 0 cos(fi)];
25 Rc=[cos(psi) −sin(psi) 0;sin(psi) cos(psi) 0;0 0 1];
26 aRb=Ra∗Rb∗Rc;
27
28 Bn = (aRb∗Bi’)’;
29 J = zeros(3,3);
30 for i=1:3
31 bi = Bn(i,:)’;
32 ai = Ai(i,:)’;
33 d = norm(p + bi − ai);
34 s = (p + bi − ai) / d;
35 J(i,:) = cross(bi,s);
36 end
37 if rank(J)<3
38 obstaculos = [obstaculos puntos(:,j)];
39 end
40 end
Apéndice A. Códigos de MATLAB 125
9 Bi=[rp , 0, 0;...
10 rp ∗ cos(120∗pi/180), rp ∗ sin(120∗pi/180), 0;...
11 rp ∗ cos(240∗pi/180), rp ∗ sin(240∗pi/180), 0];
12 Ai=[rb 0 0;...
13 rb ∗ cos(120∗pi/180), rb ∗ sin(120∗pi/180), 0;...
14 rb ∗ cos(240∗pi/180), rb ∗ sin(240∗pi/180), 0];
15
16 p = [0; 0; h];
17 g = [0; 0; −981]; %Gravedad en cm/s^2
18
24 Bn=(aRb∗Bi’)’;
25
36 wpp=[wpp1;wpp2;wpp3];
37
45
51
54 Fa = zeros(3,1);
55 d=zeros(3,1);
56 Jp = zeros(3,3);
57 J = Jp;
58 for i=1:3
59 bi = Bn(i,:)’;
60 ai = Ai(i,:)’;
61 d(i) = norm(p + bi − ai);
62 s = (p + bi − ai) / d(i);
63 ca = s(3);
64 sa = sqrt(s(1)^2 + s(2)^2);
65 sb = s(2) / sa;
66 cb = s(1) / sa;
67 aRi(:,:) = [cb∗ca −sb cb∗sa;...
68 sb∗ca cb sb∗sa;...
69 −sa 0 ca];
70 iRa(:,:) = aRi(:,:)’;
71
72 bx = bi(1);
73 by = bi(2);
74 bz = bi(3);
75
76 vb = cross(wp,bi);
77 vb=vb(:);
78 ivb = iRa ∗ vb;
79
80 iw = [−ivb(2);ivb(1);0]/d(i);
81
93
98 Jb = [0 bz −by;...
99 −bz 0 bx;...
100 by −bx 0];
101 iJb= iRa(:,:) ∗ Jb;
102 iJbx = iJb(1,:);
103 iJby = iJb(2,:);
104 iJbz = iJb(3,:);
105
1 clc
2 clear all
3 close all
4
5 t = 0:.05:.4;
6 bbi = .5;
7 ai = 1;
8 e1 = .2;
9 e2 = .75;
10 mp = 32;
11 m1 = 2;
12 m2 = 2;
13 g = [0; 0; −9.8];
14 pp = [0; 0; 1];
15
16 % Aceleraciones
17
18 thpp = 0;
19 psipp = 0;
20 fipp = 0;
21 vppx= 5;
22 vppy= 0;
23 vppz= 0;
24 vpp = [vppx;vppy;vppz];
25 Bi=[bbi ∗ cos(50∗pi/180), bbi ∗ sin(50∗pi/180), 0;...
26 bbi ∗ cos(60∗pi/180), bbi ∗ sin(60∗pi/180), 0;...
27 bbi ∗ cos(170∗pi/180), bbi ∗ sin(170∗pi/180), 0;...
28 bbi ∗ cos(180∗pi/180), bbi ∗ sin(180∗pi/180), 0;...
29 bbi ∗ cos(290∗pi/180), bbi ∗ sin(290∗pi/180), 0;...
30 bbi ∗ cos(300∗pi/180), bbi ∗ sin(300∗pi/180), 0];
31 Ai=[ai 0 0;...
32 ai ∗ cos(110∗pi/180), ai ∗ sin(110∗pi/180), 0;...
33 ai ∗ cos(120∗pi/180), ai ∗ sin(120∗pi/180), 0;...
34 ai ∗ cos(230∗pi/180), ai ∗ sin(230∗pi/180), 0;...
35 ai ∗ cos(240∗pi/180), ai ∗ sin(240∗pi/180), 0;...
36 ai ∗ cos(350∗pi/180), ai ∗ sin(350∗pi/180), 0];
37 f = zeros(6,length(t));
38 I1 = [1 0 0;0 1 0;0 0 .001];
39 I2 = [.4 0 0;0 .4 0;0 0 .0001];
40 bIp = [2 0 0;0 2 0;0 0 4];
41 for l = 1:length(t)
42 fi = fipp ∗ t(l)^2/2;
Apéndice A. Códigos de MATLAB 129
43 fip = t(l)∗fipp;
44 th = thpp ∗ t(l)^2/2;
45 psi = psipp ∗ t(l)^2/2;
46 thp = t(l)∗thpp;
47 psip = t(l)∗psipp;
48 vp = [vppx∗t(l);vppy∗t(l);vppz∗t(l)];
49 p = pp + [vppx∗t(l)^2 /2;vppy∗t(l)^2/2;vppz∗t(l)^2/2];
50
91 vb=vb(:) + vp;
92 ivb = iRa ∗ vb;
93 iw = [−ivb(2);ivb(1);0] / d(i);
94 vbp = cross(wpp,bi) + cross(wp,cross(wp,bi));
95 vbp = vpp + vbp(:);
96 ivbp = iRa ∗ vbp;
97 iwp = [−ivbp(2) + (2 ∗ ivb(3) ∗ ivb(2) / d(i));...
98 ivbp(1) − (2 ∗ ivb(3) ∗ ivb(1) / d(i)); 0] / d(i);
99 iv1p = [ivbp(1) − (2 ∗ ivb(3) ∗ ivb(1) / d(i));...
100 ivbp(2) − (2 ∗ ivb(3) ∗ ivb(2) / d(i));...
101 −(ivb(1)^2 + ivb(2)^2) / d(i)] ∗ e1 / d(i);
102 iv2p = [(d(i) − e2) ∗ ivbp(1) + (2 ∗ e2 ∗ ivb(3) ∗ ivb(1) / d(i));...
103 (d(i) − e2) ∗ ivbp(2) + (2 ∗ e2 ∗ ivb(3) ∗ ivb(2) / d(i));...
104 d(i) ∗ ivbp(3) + (e2 ∗ (ivb(1)^2 + ivb(2)^2) / d(i))] / d(i);
105 Jb = [1 0 0 0 bz −by;...
106 0 1 0 −bz 0 bx;...
107 0 0 1 by −bx 0];
108 iJb= iRa(:,:) ∗ Jb;
109 iJbx = iJb(1,:);
110 iJby = iJb(2,:);
111 iJbz = iJb(3,:);
112 Jp(i,:) = iJbz;
113 iJ1 = [e1 ∗ iJbx;...
114 e1 ∗ iJby;...
115 0 0 0 0 0 0;...
116 −iJby;...
117 iJbx;...
118 0 0 0 0 0 0] / d(i);
119 iJ2 = [(d(i) − e2) ∗ iJbx;...
120 (d(i) − e2) ∗ iJby;...
121 d(i) ∗ iJbz;...
122 −iJby;...
123 iJbx;...
124 0 0 0 0 0 0] / d(i);
125 iF1 = [m1 ∗ iRa ∗ g − m1 ∗ iv1p;...
126 −I1 ∗ iwp − cross(iw,I1∗iw)];
127 iF2 = [m2 ∗ iRa ∗ g − m2 ∗ iv2p;...
128 −I2 ∗ iwp − cross(iw,I2∗iw)];
129 Fa = Fa + iJ1’ ∗ iF1 + iJ2’ ∗ iF2;
130 end
131 % Resolver sistema Ax = B
132 f(:,l) = linsolve(Jp’,(−Fa − Fp));
133 end
134
135 plot(t,f(1,:),’−g’)
136 hold on
137 plot(t,f(2,:),’or’)
138 plot(t,f(3,:),’−.k’)
Apéndice A. Códigos de MATLAB 131
139 plot(t,f(4,:),’+b’)
140 plot(t,f(5,:),’−−m’)
141 plot(t,f(6,:),’∗k’)
142 xlim([0 .45])
143 xlabel(’Tiempo(s)’)
144 ylabel(’Fuerza(N)’)
145 legend(’Actuador 1’,’Actuador 2’,’Actuador 3’,’Actuador 4’,...
146 ’Actuador 5’,’Actuador 6’)
Apéndice A. Códigos de MATLAB 132
9 Bi=[rp , 0, 0;...
10 rp ∗ cos(120∗pi/180), rp ∗ sin(120∗pi/180), 0;...
11 rp ∗ cos(240∗pi/180), rp ∗ sin(240∗pi/180), 0];
12 Ai=[rb 0 0;...
13 rb ∗ cos(120∗pi/180), rb ∗ sin(120∗pi/180), 0;...
14 rb ∗ cos(240∗pi/180), rb ∗ sin(240∗pi/180), 0];
15
16 p = [0; 0; h];
17
23 Bn=(aRb∗Bi’)’;
24
35 wpp=[wpp1;wpp2;wpp3];
36
45 %% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
46
47 T1 = aIp;
48 T2 = cross(wp,aIp∗wp);
49 V1=zeros(3,3);
50 V2=zeros(3,1);
51 J = zeros(3,3);
52 for i=1:3
53 bi = Bn(i,:)’;
54 ai = Ai(i,:)’;
55 d = norm(p + bi − ai);
56 s = (p + bi − ai) / d;
57 SB = skewmatrix(bi);
58 ni = skewmatrix(s);
59 U1 = − SB;
60 U2 = cross(wp,cross(wp,bi));
61 I = (I1x+I2x) / 4;
62 V1 = V1 + I / d ∗ SB ∗ ni^2 ∗ U1;
63 V2 = V2 + I / d ∗ SB ∗ ni^2 ∗ U2;
64 J(i,:) = cross(bi,s);
65 end
66
67 f = inv(J)’∗((T1−V1)∗wpp+(T2−V2));
68
72 function SM=skewmatrix(a)
73 SM = [0 −a(3) a(2) ; a(3) 0 −a(1); −a(2) a(1) 0] ;
Apéndice A. Códigos de MATLAB 134
3 f = f ∗ 1000 ∗ 100;
4
5 Bi=[rp , 0, 0;...
6 rp ∗ cos(120∗pi/180), rp ∗ sin(120∗pi/180), 0;...
7 rp ∗ cos(240∗pi/180), rp ∗ sin(240∗pi/180), 0];
8 Ai=[rb 0 0;...
9 rb ∗ cos(120∗pi/180), rb ∗ sin(120∗pi/180), 0;...
10 rb ∗ cos(240∗pi/180), rb ∗ sin(240∗pi/180), 0];
11
12 p = [0; 0; h];
13
14 om = w(1);
15 fi = w(2);
16 psi = w(3);
17
23 Bn=(aRb∗Bi’)’;
24
28
36 T1 = aIp;
37 T2 = cross(wp,aIp∗wp);
38 V1=zeros(3,3);
39 V2=zeros(3,1);
40 J = zeros(3,3);
41 for i=1:3
42 bi = Bn(i,:)’;
43 ai = Ai(i,:)’;
44 d = norm(p + bi − ai);
Apéndice A. Códigos de MATLAB 135
45 s = (p + bi − ai) / d;
46 SB = skewmatrix(bi);
47 ni = skewmatrix(s);
48 U1 = − SB;
49 U2 = cross(wp,cross(wp,bi));
50 I = (I1x+I2x) / 4;
51 V1 = V1 + I / d ∗ SB ∗ ni^2 ∗ U1;
52 V2 = V2 + I / d ∗ SB ∗ ni^2 ∗ U2;
53 J(i,:) = cross(bi,s);
54 end
55 f=f(:);
56 TV = inv(T1−V1);
57
60
61 function SM=skewmatrix(a)
62 SM = [0 −a(3) a(2) ; a(3) 0 −a(1); −a(2) a(1) 0] ;
Apéndice A. Códigos de MATLAB 136
8 w = [wi;fi;pi];
9
10 dt=T/1000;
11 t=0:dt:T;
12 L = zeros(3,length(t));
13 E = L;
14 W = E;
15 F = E;
16 Wp = E;
17 www = ones(1,length(t)) ∗ wf;
18 fff = ones(1,length(t)) ∗ ff;
19 ppp = ones(1,length(t)) ∗ pf;
20 W2 = [www;fff;ppp];
21 e = lf − l;
22 ie = e ∗ 0;
23 for i=0:dt:T
24 k = round(1 + i/dt);
25 W(:,k) = w(:);
26 Wp(:,k) = wp(:);
27 ea = e;
28 E(:,k) = ea(:);
29 [l(1),l(2),l(3)] = inversa(w(1),w(2),w(3),h,rb,rp);
30 e = lf − l;
31 de = (e − ea) / dt;
32 if i>0
33 ie = ie + e ∗ dt;
34 end
35 f = kp ∗ e + kd ∗ de + ki ∗ ie;
36 F(:,k) = f(:);
37 wpp = dinamicaDirecta(f(:),w,wp,h,rb,rp,hp,r1,r2,rr1,rr2,e1,e2,mp,m1,m2);
38 temp=wp;
39 wp = wp + dt ∗ wpp(:);
40 [o,ff,p,op,fp,pp,opp,fpp,ppp] = angulosDirecta(wpp(:),wp,w,dt,temp);
41 w = [o;ff;p];
42 wp = [op;fp;pp];
43 end
Apéndice A. Códigos de MATLAB 137
6 wpp = wwpp;
7 dt = ddt;
8 omi = w(1);
9 fii = w(2);
10 psii = w(3);
11
15 omp = wp2(1);
16 fip = wp2(2);
17 psip = wp2(3);
18
19 ompi = wpi(1);
20 fipi = wpi(2);
21 psipi = wpi(3);
22
23 r1=fip∗psip∗cos(fii);
24 r2=fip∗psip∗sin(fii)∗sin(omi)−psip∗omp∗cos(fii)∗cos(omi)−fip∗omp∗sin(omi);
25 r3=−fip∗psip∗sin(fii)∗cos(omi)−psip∗omp∗cos(fii)∗sin(omi)+fip∗omp∗cos(omi);
26 R = [r1;r2;r3];
27 wpp2 = Rt \ (wpp − R);
28
33 o = x(1);
34 f = x(2);
35 p = x(3);
36 op = x(4);
37 fp = x(5);
38 pp = x(6);
39 opp = x(7);
40 fpp = x(8);
41 ppp = x(9);
Apéndice A. Códigos de MATLAB 138
6 [l(1),l(2),l(3)] = inversa(wi,fi,pi,h,rb,rp);
7 [lf(1),lf(2),lf(3)] = inversa(wf,ff,pf,h,rb,rp);
8
9 w = [wi;fi;pi];
10
11 dt=T/400;
12 t=0:dt:T;
13 L = zeros(3,length(t));
14 E = L;
15 W = E;
16 F = E;
17 DE = E;
18 www = ones(1,length(t)) ∗ wf;
19 fff = ones(1,length(t)) ∗ ff;
20 ppp = ones(1,length(t)) ∗ pf;
21 W2 = [www;fff;ppp];
22 e = lf − l;
23 ie = e ∗ 0;
24 warning(’off’)
25 for i=0:dt:T
26 k = round(1 + i/dt);
27 W(:,k) = w(:);
28 ea = e;
29 E(:,k) = ea(:);
30 [l(1),l(2),l(3)] = inversa(w(1),w(2),w(3),h,rb,rp);
31 e = lf − l;
32 de = (e − ea) / dt;
33 DE(:,k) = de;
34 if i>0
35 ie = ie + e ∗ dt;
36 end
37 f = evalfis([e’ de’],fismat); %Evaluar los valores en el sistema difuso
38 F(:,k) = f(:);
39 wpp = dinamicaDirecta(f(:),w,wp,h,rb,rp,hp,r1,r2,rr1,rr2,e1,e2,mp,m1,m2);
40 temp=wp;
41 wp = wp + dt ∗ wpp(:);
42 [o,ff,p,op,fp,pp,opp,fpp,ppp] = angulosDirecta(wpp(:),wp,w,dt,temp);
43 w = [o;ff;p];
44 end
Apéndice A. Códigos de MATLAB 139
12 % Numero de puntos
13 puntos = 8;
14
15 %pendientes
16 mfi = (fi − fia) / T;
17 mpsi = (psi − psia) / T;
18 mom = (om − oma) / T;
19
20 Fi = zeros(1,puntos+1);
21 Psi = zeros(1,puntos+1);
22 Om = zeros(1,puntos+1);
23
24 Fi(1) = fia;
25 Psi(1) = psia;
26 Om(1) = oma;
27
28 t=zeros(1,puntos+1);
29
34 [longitudes(1,1),longitudes(2,1),longitudes(3,1)] = ...
35 inversa(Om(1),Fi(1),Psi(1),h,rb,rp);
36
37 for i=1:puntos − 1
38 t(i+1) = T ∗ i / puntos;
39 Fi(i+1) = mfi ∗ t(i+1) + Fi(1);
40 Psi(i+1) = mpsi ∗ t(i+1) + Psi(1);
41 Om(i+1) = mom ∗ t(i+1) + Om(1);
42
Apéndice A. Códigos de MATLAB 140
45
46 [longitudes(1,i+1),longitudes(2,i+1),longitudes(3,i+1)] = ...
47 inversa(Om(i+1),Fi(i+1),Psi(i+1),h,rb,rp);
48
53 angulos2(:,i+1) = [omn;fin;psin];
54
55 end
56
12 posible = 1;
13 dmax = .3;
14
15 xi = oma;
16 xf = om;
17 yi = psia;
18 yf = psi;
19
45 i=i+1;
46 end
47 end
48
49 m = 1;
50 d = zeros(nodo,nodo);
51 da = d;
52 db = d;
53 vecinos = [];
54 %Calcular distanca entre nodos
55
56 for i=1:nodo
57 menores=100∗ones(1,vecino);
58 for j=1:nodo
59 d(i,j)=norm(nodos(:,i)−nodos(:,j));
60 da(i,j)=norm(nodos(1,i)−nodos(1,j));
61 db(i,j)=norm(nodos(2,i)−nodos(2,j));
62 if da(i,j)<dmax&&db(i,j)<dmax&&d(i,j)<max(menores)&&d(i,j)>0
63 menores(find(menores==max(menores),1))=d(i,j);
64 end
65 end
66 for k=1:vecino
67 if menores(k)<dmax
68 vec=find(d(i,:)==menores(k));
69 if i<vec
70 vecinos(m,1)=i;
71 vecinos(m,2)=vec;
72 else
73 vecinos(m,2)=i;
74 vecinos(m,1)=vec;
75 end
76 m=m+1;
77 end
78 end
79 end
80
87 borrar=[];
88 % Checar que la linea entre vecinos no choque con ningun obstaculo
89 for i=1:size(vecinos,1)
90 x = obstaculo(:,1)’;
91 y = obstaculo(:,2)’;
92 xcruza = polyxpoly([nodos(1,vecinos(i,1)) nodos(1,vecinos(i,2))],...
Apéndice A. Códigos de MATLAB 143
120 di=sortrows(di,1);
121 df=sortrows(df,1);
122
140 if r>length(di)
Apéndice A. Códigos de MATLAB 144
141 pin=[];
142 end
143
161 if r>length(df)
162 pf=[];
163 end
164
165 fila=pin;
166 fin=0;
167
168 t=pin;
169 it=1;
170
171 m2=zeros(size(matriz,1));
172
189 end
190
191 % Ya que se llego al punto deseado, se busca quienes generaron ese camino
192 q=pf;
193 e=1;
194 tray=q;
195 while e<=it&q~=pin
196 Q=find(m2(:,q)); %punto final
197 q=Q;
198 tray=[q tray];
199 e=e+1;
200 end
201
204 if tray(1)==pin
205 % Ya que se tienen los puntos, se ponen las coordenadas
206 puntos(:,1) = [xi yi];
207 for i = 1:size(tray,2)
208 puntos(:,i+1) = nodos(:,tray(i));
209 end
210 puntos = [puntos [xf;yf]];
211 else
212 posible = 1;
213 end
214
230
231
237 mapshow(xf,yf,’DisplayType’,’point’,’Marker’,’^’,...
238 ’MarkerFaceColor’,[.4 .4 .4],’MarkerSize’,13,’MarkerEdgeColor’,’none’)
239 mapshow(nodos(1,:),nodos(2,:),’DisplayType’,’point’,’Marker’,’x’,...
240 ’MarkerSize’,8,’MarkerFaceColor’,’k’,’MarkerEdgeColor’,’k’)
241
247
5 tam = size(puntos);
6 dt = T / (tam(2)−1);
7 t = 0:dt:T;
8
9 r = puntos;
10 v = zeros(tam);
11 a = v;
12
13 for i = 2:tam(2)
14 dt = t(i)−t(i−1);
15 a(:,i) = 2 ∗ (r(:,i) − r(:,i−1) − v(:,i−1) ∗ dt) / dt^2;
16 v(:,i) = v(:,i−1) + a(:,i) ∗ dt;
17 end
Apéndice A. Códigos de MATLAB 148
7 tam = size(puntos);
8 dt = T / (tam(2)−1);
9 t = 0:dt:T−dt;
10 r = puntos(:,1:tam(2)−1);
11 v = zeros(size(r));
12 a = v;
13 for i = 2:tam(2)−1
14 dt = t(i)−t(i−1);
15 a(:,i) = 2 ∗ (r(:,i) − r(:,i−1) − v(:,i−1) ∗ dt) / dt^2;
16 v(:,i) = v(:,i−1) + a(:,i) ∗ dt;
17 end
18
19 % Ultimos puntos
20 vi=v(:,i);
21 ri=r(:,i);
22 rf=puntos(:,tam(2));
23
24 f = 2 ∗ ri + vi − 2 ∗ rf;
25 g = rf − ri − vi − f;
26 h = vi;
27 i = ri;
28
29
30 t2=dt/5:dt/5:dt;
31
32 rr=zeros(tam(1),length(t2));
33 vv = rr;
34 aa = rr;
35
36 for j=1:length(t2)
37 tt = t2(j) / dt;
38 t2(j) = t2(j) + t(length(t));
39 rr(:,j) = f ∗ tt^3 + g ∗ tt^2 + h ∗ tt + i;
40 vv(:,j) = 3 ∗ f ∗ tt^2 + 2 ∗ g ∗ tt + h;
41 aa(:,j) = 6 ∗ f ∗ tt + 2 ∗ g;
42 end
Apéndice A. Códigos de MATLAB 149
43
44 r = [r rr];
45 v = [v vv];
46 a = [a aa];
47 t = [t t2];
Apéndice A. Códigos de MATLAB 150
5 tam = size(puntos);
6 dt = T / (tam(2)−1);
7 t=0:dt:T−2∗dt;
8 p = zeros(tam(1),5);
9 r = zeros(tam(1),tam(2)−3);
10 v = r;
11 a = r;
12
13
14 % puntos(i,3:tam(2)−1)
15 for i=1:tam(1)
16 p(i,:) = polyfit(t,puntos(i,2:tam(2)−1),4);
17 end
18 for i=1:length(t)
19 r(:,i) = p(:,1) ∗ t(i)^4 + p(:,2) ∗ t(i)^3 + p(:,3) ∗ t(i)^2 ...
20 + p(:,4) ∗ t(i) + p(:,5);
21 v(:,i) = p(:,1) ∗ t(i)^3 ∗ 4 + p(:,2) ∗ t(i)^2 ∗ 3 + p(:,3)...
22 ∗ t(i) ∗ 2 + p(:,4);
23 a(:,i) = p(:,1) ∗ t(i)^2 ∗ 3 ∗ 4 + p(:,2) ∗ t(i) ∗ 2 ∗ 3 + p(:,3) ∗ 2;
24 end
25
26 % Ultimos puntos
27 vi=v(:,i);
28 ri=r(:,i);
29 rf=puntos(:,tam(2));
30
31 f = 2 ∗ ri + vi − 2 ∗ rf;
32 g = rf − ri − vi − f;
33 h = vi;
34 i = ri;
35
36
37 t2=dt/5:dt/5:dt;
38
39 rr=zeros(tam(1),length(t2));
40 vv = rr;
41 aa = rr;
42 t=t+dt;
Apéndice A. Códigos de MATLAB 151
43 for j=1:length(t2)
44 tt = t2(j) / dt;
45 t2(j) = t2(j) + t(length(t));
46 rr(:,j) = f ∗ tt^3 + g ∗ tt^2 + h ∗ tt + i;
47 vv(:,j) = 3 ∗ f ∗ tt^2 + 2 ∗ g ∗ tt + h;
48 aa(:,j) = 6 ∗ f ∗ tt + 2 ∗ g;
49 end
50
51
52 %Primer punto
53 t1=0:dt/5:dt;
54
55 ri=puntos(:,1);
56 rf=r(:,1);
57 vf=v(:,1);
58 af=a(:,1);
59
60 a3 = ai/2;
61 a4 = vin;
62 a5 = ri;
63 a0 = (af − 6 ∗ vf + 12 ∗ rf − 2 ∗ a3 − 6 ∗ a4 − 12 ∗ a5) / 2;
64 a2 = 4 ∗ rf − vf + a0 − 2 ∗ a3 − 3 ∗ a4 − 4 ∗ a5;
65 a1 = rf − a0 − a2 − a3 − a4 − a5;
66
67 rini = zeros(3,length(t1));
68 vini = rini;
69 aini = rini;
70
71 for j=1:length(t1)
72 tt = t1(j) / dt;
73 rini(:,j) = a0 ∗ tt^5 + a1 ∗ tt^4 + a2 ∗ tt^3 + a3 ∗ tt^2 +...
74 a4 ∗ tt + a5;
75 vini(:,j) = 5 ∗ a0 ∗ tt^4 + 4 ∗ a1 ∗ tt^3 + 3 ∗ a2 ∗ tt^2 +...
76 2 ∗ a3 ∗ tt + a4;
77 aini(:,j) = 20 ∗ a0 ∗ tt^3 + 12 ∗ a1 ∗ tt^2 + 6 ∗ a2 ∗ tt + 2 ∗ a3;
78 end
79
80 r = [rini r rr];
81 v = [vini v vv];
82 a = [aini a aa];
83 t = [t1 t t2];
Apéndice A. Códigos de MATLAB 152
1 clear all
2 close all
3 clc
4 %%
5 mens=’Desea calcular el espacio de trabajo? 0 = no, 1 = si ’;
6 calculaEspacio = input(mens);
7 if ~isnumeric(calculaEspacio)||isempty(calculaEspacio)
8 calculaEspacio = 0;
9 end
10 fprintf(’\n’)
11
43 datos = xlsread(’datosSPS.xls’);
44 net = red(datos);
Apéndice A. Códigos de MATLAB 153
45
46 save(’parametros.mat’,’h’,’rp’,’rb’,’net’,’e1’,’e2’,’hp’,...
47 ’r1’,’rr1’,’r2’,’rr2’,’mp’,’m1’,’m2’)
48 end
49
50 %%
51 %Espacio de trabajo
52 if calculaEspacio == 0 && exist(’eTrabajo.mat’,’file’) == 2
53 disp(’Cargando espacio de trabajo’)
54 load(’eTrabajo.mat’)
55 else
56 disp(’Calculo del espacio de trabajo’)
57 mens=’Cual es el angulo maximo que pueden girar las articulaciones? ’;
58 ang = input(mens);
59 if ~isnumeric(ang)||isempty(ang)
60 ang = 10;
61 else
62 ang = 90 − ang;
63 end
64 D = 2 ∗ r1;
65 mens=’Cual es el paso (en grados) para el cual desea calcular el’;
66 mens1=’ espacio de trabajo? ’;
67 paso = input([mens mens2]);
68 if ~isnumeric(paso)||isempty(paso)
69 paso = 5;
70 else
71 if paso<1
72 disp(’Paso muy pequeno, se cambiara a 5 grados’)
73 paso = 5;
74 end
75 end
76 fprintf(’\n’)
77 disp(’Iniciar calculo de puntos posibles’)
78 [puntos,Domega,Dfi,Dpsi] = Wspace(h,rb,rp,ang,D,paso);
79 disp(’Puntos calculados’)
80 fprintf(’\n’)
81 disp(’Calculando singularidades’)
82 obstaculos = Qspace(rb,rp,h,puntos);
83 disp(’Espacio de configuraciones calculado’)
84 fprintf(’\n’)
85 save(’eTrabajo.mat’,’puntos’,’Domega’,’Dfi’,’Dpsi’,’obstaculos’,’paso’)
86 end
87
88
89
90
91 %%
92 %Posiciones actuales y deseadas
Apéndice A. Códigos de MATLAB 154
144
145 %%
146 %Dinamica inversa
147 % angulos=[omega;fi;psi]
148
151 f = zeros(3,length(t));
152 Jp = zeros(3,3,length(t));
153 f2=f;
154 Jp2=Jp;
155
167 %%
168 % Dinamica directa
169 disp(’Calculando aceleraciones’)
170
189 end
190 disp(’Aceleraciones calculadas’)
191 fprintf(’\n’)
192
193 %%
194 %Control PID
195 disp(’Calculando control PID’)
196 TT = 2;
197 ffi = fiIni;
198 ppi = psiIni;
199 wi = omIni;
200 ff = fi;
201 pf = psi;
202 wf = om;
203 kp=4;
204 % kd=1;
205 % ki=0.01;
206 kd=0;
207 ki=0;
208 wp=[0;0;0];
209 [E,W,Wp,W2,F,ti] = controlPID(wi,ffi,ppi,wf,ff,pf,TT,h,rp,rb,hp,r1,r2,...
210 rr1,rr2,e1,e2,mp,m1,m2,kp,ki,kd,wp);
211 disp(’Control calculado’)
212 fprintf(’\n’)
213
214 %%
215 %Control difuso
216 disp(’Calculando control difuso’)
217 fismat = readfis(’controlDifuso’);
218 [Ef,DEf,Wf,W2f,Ff,tif] = controlFuzzy(wi,ffi,ppi,wf,ff,pf,TT,h,rp,rb,...
219 hp,r1,r2,rr1,rr2,e1,e2,mp,m1,m2,fismat,wp);
220 disp(’Control calculado’)
221 fprintf(’\n’)
222 %%
223 %Graficas
224 graficar(rb,rp,h,puntos,r,omIni,om,fiIni,fi,psiIni,psi,obstaculos,an,...
225 an2,t,v,a,f,f2,T,Dfi,wpp,r3,v3,a3,E,W,W2,F,ti,Ef,Wf,W2f,...
226 Ff,tif,DEf,traye,Domega,Dpsi,l)
Apéndice A. Códigos de MATLAB 157
1 function graficar(rb,rp,h,puntos,r,omIni,om,fiIni,fi,psiIni,psi,...
2 obstaculos,an,an2,t,v,a,f,f2,T,Dfi,wpp,rr,vv,aa,E,W,W2,F,ti,Ef,...
3 Wf,W2f,Ff,tif,DEf,traye,Domega,Dpsi,l)
4
10
11 fprintf(’\n’)
12 graf1 = input(’Desea graficar el espacio de trabajo? 0 = no, 1 = si ’);
13 if ~isnumeric(graf1)||isempty(graf1)
14 graf1 = 0;
15 end
16 fprintf(’\n’)
17 mens=’Desea graficar la trayectoria en el espacio de trabajo?’;
18 mens2=’ 0 = no, 1 = si ’;
19 graf2 = input([mens mens2]);
20 if ~isnumeric(graf2)||isempty(graf2)
21 graf2 = 0;
22 end
23 fprintf(’\n’)
24 graf3 = input(’Desea graficar las singularidades? 0 = no, 1 = si ’);
25 if ~isnumeric(graf3)||isempty(graf3)
26 graf3 = 0;
27 end
28 fprintf(’\n’)
29 graf11 = input(’Desea graficar la cinematica inversa? 0 = no, 1 = si ’);
30 if ~isnumeric(graf11)||isempty(graf11)
31 graf11 = 0;
32 end
33 fprintf(’\n’)
34 mens=’Desea graficar el error de la cinematica directa? 0 = no, 1 = si ’;
35 graf4 = input(mens);
36 if ~isnumeric(graf4)||isempty(graf4)
37 graf4 = 0;
38 end
39 fprintf(’\n’)
40 mens=’Desea graficar las posiciones, velocidades y aceleraciones?’;
41 mens2=’ 0 = no, 1 = si ’;
42 graf5 = input([mens mens2]);
43 if ~isnumeric(graf5)||isempty(graf5)
44 graf5 = 0;
Apéndice A. Códigos de MATLAB 158
45 end
46 fprintf(’\n’)
47 graf6 = input(’Desea graficar las fuerzas? 0 = no, 1 = si ’);
48 if ~isnumeric(graf6)||isempty(graf6)
49 graf6 = 0;
50 end
51 fprintf(’\n’)
52 mens1=’Desea graficar las posiciones, velocidades y’;
53 graf7 = input([mens1 ’ aceleraciones (dinamica directa)? 0 = no, 1 = si ’]);
54 if ~isnumeric(graf7)||isempty(graf7)
55 graf7 = 0;
56 end
57 fprintf(’\n’)
58 graf8 = input(’Desea graficar las aceleraciones? 0 = no, 1 = si ’);
59 if ~isnumeric(graf8)||isempty(graf8)
60 graf8 = 0;
61 end
62 fprintf(’\n’)
63 graf9 = input(’Desea graficar el control PID? 0 = no, 1 = si ’);
64 if ~isnumeric(graf9)||isempty(graf9)
65 graf9 = 1;
66 end
67 fprintf(’\n’)
68 graf10 = input(’Desea graficar el control difuso? 0 = no, 1 = si ’);
69 if ~isnumeric(graf10)||isempty(graf10)
70 graf10 = 0;
71 end
72 fprintf(’\n’)
73 %% % % % % % % % % % % % % % % % % % % % %
74 % Espacio de Trabajo
75 verts1=[];
76 verts2=[];
77 faces=[];
78 u=1;
79 for tq = 0:0.1:2∗pi;
80 verts1 = [verts1;cos(tq)∗rb sin(tq)∗rb −h];
81 verts2 = [verts2;cos(tq)∗rp sin(tq)∗rp 0];
82 faces=[faces u];
83 u=u+1;
84 end
85
86 if graf1==1
87 figure
88 if length(puntos)<1000000
89 if length(puntos)>100000
90 mens1=’Graficando espacio de trabajo, por favor espere ya’;
91 disp([mens1 ’ que se calcularon mas de cien mil puntos’])
92 end
Apéndice A. Códigos de MATLAB 159
93 [xb1,yb1,zb1] = ang2xyz(Bi(1,:),puntos);
94 rmax=max(rp,rb);
95 axis([−rmax rmax −rmax rmax −h rp]);
96 scatter3(xb1,yb1,zb1,12,’k’,’filled’)
97 title(’Espacio de Trabajo’)
98 xlabel(’x’)
99 ylabel(’y’)
100 zlabel(’z’)
101 hold on
102 patch(’Faces’,faces,’Vertices’,verts1,’FaceColor’,’b’,...
103 ’FaceAlpha’,0.5);
104 patch(’Faces’,faces,’Vertices’,verts2,’FaceColor’,’g’,...
105 ’FaceAlpha’,0.25);
106 l1=[Ai(1,1) Bi(1,1);Ai(1,2) Bi(1,2);Ai(1,3) Bi(1,3)];
107 l2=[Ai(2,1) Bi(2,1);Ai(2,2) Bi(2,2);Ai(2,3) Bi(2,3)];
108 l3=[Ai(3,1) Bi(3,1);Ai(3,2) Bi(3,2);Ai(3,3) Bi(3,3)];
109 plot3(l1(1,:),l1(2,:),l1(3,:),’LineWidth’,4,’Color’,’r’)
110 plot3(l2(1,:),l2(2,:),l2(3,:),’LineWidth’,4,’Color’,’r’)
111 plot3(l3(1,:),l3(2,:),l3(3,:),’LineWidth’,4,’Color’,’r’)
112 scatter3(Ai(:,1),Ai(:,2),Ai(:,3),’filled’,’MarkerFaceColor’,’k’)
113 scatter3(Bi(:,1),Bi(:,2),Bi(:,3),’filled’,’MarkerFaceColor’,’k’)
114 else
115 mens1=’No se ha graficado el espacio de trabajo debido a que se ’;
116 mens2=’calcularon mas de un millon de puntos, intentar’;
117 disp([mens1 mens2 ’ utilizar menos puntos’])
118 end
119 end
120
121
122
123 %%
124 %% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
125 %Trayectoria en espacio de trabajo
126 if graf2==1
127 figure
128 [xb,yb,zb] = ang2xyz(Bi(1,:),[r(1,:);r(2,:);r(3,:)]);
129 rmax=max(rp,rb);
130 axis([−rmax rmax −rmax rmax −h rp]);
131 plot3(xb,yb,zb,’LineWidth’,3,’Color’,[1,.1,.85])
132 grid on
133 title(’Trayectoria’)
134 xlabel(’x’)
135 ylabel(’y’)
136 zlabel(’z’)
137 hold on
138 %Plataforma inicial
139 Ra = [1 0 0; 0 cos(omIni) −sin(omIni);0 sin(omIni) cos(omIni)];
140 Rb = [cos(fiIni) 0 sin(fiIni);0 1 0;−sin(fiIni) 0 cos(fiIni)];
Apéndice A. Códigos de MATLAB 160
177 end
178 %%
179 %% % % % % % % % % % % % % % % % % % % % % % % % %
180 %Espacio de Configuraciones
181 if graf3==1
182 if isempty(obstaculos)
183 j=1;
184 for i=Dfi(1):.0175:Dfi(2)
185 obstaculos(:,j) = [0;i;0];
186 j=j+1;
187 end
188 end
Apéndice A. Códigos de MATLAB 161
189 figure
190 omq=obstaculos(1,:)∗180/pi;
191 fiq=obstaculos(2,:)∗180/pi;
192 psiq=obstaculos(3,:)∗180/pi;
193 scatter3(omq(:),fiq(:),psiq(:),4,[.4,.1,.7],’filled’)
194 title(’Singularities’)
195 % legend(’Posiciones singulares’)
196 xlabel(’\omega (degrees)’)
197 ylabel(’\phi (degrees)’)
198 zlabel(’\psi (degrees)’)
199 axis([Domega(1) Domega(2) Dfi(1) Dfi(2) Dpsi(1) Dpsi(2)]∗180/pi);
200 end
201
202 %%
203 %% % % % % % % % % % % % % % % % % % % % % % %
204 %Cinematica inversa
205 if graf11==1
206 figure
207 subplot(2,1,1)
208 plot(t,an(1,:),’k−’,t,an(2,:),’k−−’,t,an(3,:),’k:’)
209 title(’Platform position’)
210 legend(’\omega’,’\phi’,’\psi’)
211 xlabel(’Time (seconds)’)
212 ylabel(’Angle (degrees)’)
213 subplot(2,1,2)
214 plot(t,l(1,:),’k−’,t,l(2,:),’k−−’,t,l(3,:),’k:’)
215 title(’Length of the limbs’)
216 legend(’Limb 1’,’Limb 2’,’Limb 3’)
217 xlabel(’Time (seconds)’)
218 ylabel(’Length (centimeters)’)
219 end
220
221 %%
222 %% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
223 % Trayectoria planeada vs trayectoria de cinematica directa
224 if graf4==1
225 figure
226 % subplot(2,1,1)
227 plot(t,an(1,:),’k−’,t,an(2,:),’k−−’,t,an(3,:),’k:’)
228 hold on
229 plot(t,an2(1,:),’kd’,t,an2(2,:),’ko’,t,an2(3,:),’kx’)
230 title(’Angle trajectory’)
231 legend(’\omega’,’\phi’,’\psi’,’calculated \omega’,...
232 ’calculated \phi’,’calculated \psi’,’Location’,’NorthEastOutside’)
233 xlabel(’Time (seconds)’)
234 ylabel(’Angle (degrees)’)
235 ylim([min(min(an))−10 max(max(an))+10])
236 % subplot(2,1,2)
Apéndice A. Códigos de MATLAB 162
237 figure
238 % stem(t,(an−an2)’)
239 an3=(an−an2);
240 plot(t,an3(1,:),’k−’,t,an3(2,:),’k−−’,t,an3(3,:),’k:’)
241 title({’Angle error’})
242 legend(’\omega error’,’\phi error’,’\psi error’,...
243 ’Location’,’NorthEastOutside’)
244 xlabel(’Time (seconds)’)
245 ylabel(’Error (degrees)’)
246 end
247
248 %%
249 %% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
250 %Posiciones, velocidades y aceleraciones
251 if graf5==1
252
253 figure
254 green=[0,.41,0];
255 subplot(3,1,1)
256 plot(t,r(1,:),’k−’)
257 hold on
258 plot(t,r(2,:),’k:’)
259 plot(t,r(3,:),’k−−’)
260 title(’Position’)
261 legend(’\omega’,’\phi’,’\psi’,’Location’,’NorthEastOutside’)
262 xlabel(’Time (seconds)’)
263 ylabel(’rad’)
264 ylim([min(min(r))−.05 max(max(r))+.05])
265 subplot(3,1,2)
266 plot(t,v(1,:),’k−’)
267 hold on
268 plot(t,v(2,:),’k:’)
269 plot(t,v(3,:),’k−−’)
270 title(’Velocity’)
271 h=legend(’$\dot{\omega}$’,’$\dot{\phi}$’,...
272 ’$\dot{\psi}$’,’Location’,’NorthEastOutside’);
273 set(h,’Interpreter’,’latex’)
274 xlabel(’Time (seconds)’)
275 ylabel(’rad/s’)
276 ylim([min(min(v))−.05 max(max(v))+.05])
277 subplot(3,1,3)
278 plot(t,a(1,:),’k−’)
279 hold on
280 plot(t,a(2,:),’k:’)
281 plot(t,a(3,:),’k−−’)
282 % stairs(t,[a(1,2:length(a)) 0],’k−’)
283 % hold on
284 % stairs(t,[a(2,2:length(a)) 0],’k:’)
Apéndice A. Códigos de MATLAB 163
295
296 %%
297 %% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
298 %Fuerzas
299 if graf6==1
300 figure
301 %subplot(2,1,1)
302 f = [f(:,2:length(f)) [0;0;0]];
303 f2 = [f2(:,2:length(f)) [0;0;0]];
304 stairs(t,f(1,:)’,’k−’)
305 hold on
306 stairs(t,f(2,:)’,’k:’)
307 stairs(t,f(3,:)’,’k−−’)
308 title(’Required forces’)
309 legend(’Actuator 1’,’Actuator 2’,’Actuator 3’,...
310 ’Location’,’NorthEastOutside’)
311 xlabel(’Time (seconds)’)
312 ylabel(’Force (Newtons)’)
313 figure
314 subplot(2,1,2)
315 stairs(t,f2’)
316 title(’Trayectoria de fuerzas (Mediante el metodo de Merlet)’)
317 legend(’Actuador 1’,’Actuador 2’,’Actuador 3’,...
318 ’Location’,’NorthEastOutside’)
319 xlabel(’Tiempo (segundos)’)
320 ylabel(’Fuerza (Newtons)’)
321 % subplot(3,1,3)
322 % stairs(t,(f−f2)’)
323 % title(’Diferencia de trayectorias (Trayectoria 1 − Trayecrotia 2)’)
324 % legend(’Actuador 1’,’Actuador 2’,’Actuador 3’)
325 % xlabel(’Tiempo (segundos)’)
326 % ylabel(’Fuerza (Newtons)’)
327 end
328
329 %%
330 %% % % % % % % % % % % % % % % % % % % % % % % % % % % %
331 %Aceleraciones 1
332 if graf7==1
Apéndice A. Códigos de MATLAB 164
333 figure
334 green=[0,.41,0];
335 subplot(3,1,1)
336 plot(t,rr(1,:),’b’)
337 hold on
338 plot(t,rr(2,:),’Color’,green)
339 plot(t,rr(3,:),’r’)
340 title(’Posicion’)
341 legend(’\omega’,’\phi’,’\psi’,’Location’,’NorthEastOutside’)
342 xlabel(’Tiempo (segundos)’)
343 ylabel(’rad’)
344 subplot(3,1,2)
345 plot(t,vv(1,:),’b’)
346 hold on
347 plot(t,vv(2,:),’Color’,green)
348 plot(t,vv(3,:),’r’)
349 title(’Velocidad’)
350 h=legend(’$\dot{\omega}$’,’$\dot{\phi}$’,...
351 ’$\dot{\psi}$’,’Location’,’NorthEastOutside’);
352 set(h,’Interpreter’,’latex’)
353 xlabel(’Tiempo (segundos)’)
354 ylabel(’rad/s’)
355 subplot(3,1,3)
356 stairs(t,[aa(1,2:length(aa)) 0],’b’)
357 hold on
358 stairs(t,[aa(2,2:length(aa)) 0],’Color’,green)
359 stairs(t,[aa(3,2:length(aa)) 0],’r’)
360 title(’Aceleracion’)
361 h=legend(’$\ddot{\omega}$’,’$\ddot{\phi}$’,...
362 ’$\ddot{\psi}$’,’Location’,’NorthEastOutside’);
363 set(h,’Interpreter’,’latex’)
364 xlabel(’Tiempo (segundos)’)
365 ylabel(’rad/s^2’)
366 end
367
368 %%
369 %% % % % % % % % % % % % % % % % % % % % % % % % % % % %
370 %Aceleraciones 2
371 if graf8==1
372 rt=r(:,1);
373 vt=v(:,1);
374 rr = zeros(3,length(t));
375 vv=rr;
376 rr(:,1) = rt;
377 vv(:,1) = vt;
378 app=zeros(3,length(t));
379 for i = 1:length(t)
380 if i>1
Apéndice A. Códigos de MATLAB 165
381 dt = t(i)−t(i−1);
382 else
383 dt = 0;
384 end
385 ompp=a(1,i);
386 fipp=a(2,i);
387 psipp=a(3,i);
388 omp=v(1,i);
389 fip=v(2,i);
390 psip=v(3,i);
391 om=r(1,i);
392 fi=r(2,i);
393 app1=ompp + psipp ∗ sin(fi) + psip ∗ fip ∗ cos(fi);
394 app2=fipp ∗ cos(om) − fip ∗ omp ∗ sin(om) − psipp ∗ cos(fi)...
395 ∗ sin(om) + psip ∗ fip ∗ sin(fi) ∗ sin(om) − psip...
396 ∗ omp ∗ cos(fi) ∗ cos(om);
397 app3=fipp ∗ sin(om) − fip ∗ omp ∗ cos(om) + psipp ∗ cos(fi)...
398 ∗ cos(om) − psip ∗ fip ∗ sin(fi) ∗ cos(om) − psip...
399 ∗ omp ∗ cos(fi) ∗ sin(om);
400 app(:,i)=[app1;app2;app3];
401 end
402
403 figure
404 app = [app(:,2:length(app)) [0;0;0]];
405 wpp = [wpp(:,2:length(wpp)) [0;0;0]];
406 stairs(t,app’)
407 hold on
408 stairs(t,wpp’,’−−’)
409 title(’Aceleracion’)
410 xlabel(’Tiempo (segundos)’)
411 ylabel(’rad/s^2’)
412 h=legend(’$\ddot{\omega}$ real’,’$\ddot{\phi}$ real’,...
413 ’$\ddot{\psi}$ real’,...
414 ’$\ddot{\omega}$ calculada’,’$\ddot{\phi}$ calculada’,...
415 ’$\ddot{\psi}$ calculada’,’Location’,’NorthEastOutside’);
416 set(h,’Interpreter’,’latex’)
417 end
418
419 %%
420 %% % % % % % % % % % % % % % % % % % % % % % % % % % % %
421 %Controles
422 if graf9==1&&graf10==1
423 figure
424 subplot(2,2,1)
425 plot(ti,E)
426 title(’Error en actuadores (Control PID)’)
427 xlabel(’Tiempo (segundos)’)
428 ylabel(’Error (centimetros)’)
Apéndice A. Códigos de MATLAB 166
10 for i = 1:size(puntos,2)
11 om = puntos(1,i);
12 fi = puntos(2,i);
13 psi = puntos(3,i);
14 Ra = [1 0 0; 0 cos(om) −sin(om);0 sin(om) cos(om)];
15 Rb = [cos(fi) 0 sin(fi);0 1 0;−sin(fi) 0 cos(fi)];
16 Rc = [cos(psi) −sin(psi) 0;sin(psi) cos(psi) 0;0 0 1];
17 R = Ra ∗ Rb ∗ Rc;
18 Bn = R ∗ b;
19 x(i) = Bn(1);
20 y(i) = Bn(2);
21 z(i) = Bn(3);
22 end
Bibliografía
[2] Clavel, R. DELTA, a fast robot with parallel geometry. In Proc 18th International
Symposium on Industrial Robots (1988), pp. 91–100.
[3] Craig, J. J. Introduction to Robotics: Mechanics and Control. Prentice Hall, 2004.
[4] Crane, C. D., and Duffy, J. Kinematic analysis of robot manipulators. Cam-
bridge University Press, 1998.
[5] Cui, G., and Zhang, Y. Kinetostatic Modeling and Analysis of a New 3-DOF Pa-
rallel Manipulator. In 2009 International Conference on Computational Intelligence
and Software Engineering (Dec. 2009), IEEE, pp. 1–4.
[7] Deep, K., and Mebrahtu, H. New Variations of Order Crossover for Travelling
Salesman Problem. International Journal of Combinatorial Optimization Problems
and Informatics 2, 1 (2011), 2–13.
[8] Di Gregorio, R. A new parallel wrist using only revolute pairs: the 3-RUU wrist.
Robotica 19, 03 (2001), 305–309.
169
Bibliografía 170
[11] Gan, D., Dias, J., and Seneviratne, L. Design and Analytical Kinematics of a
Robot Wrist Based on a Parallel Mechanism. In World Automation Congress (2012),
pp. 1–6.
[12] Geng, Z., Haynes, L. S., Lee, J. D., and Carroll, R. L. On the dynamic mo-
del and kinematic analysis of a class of Stewart platforms. Robotics and Autonomous
Systems 9, 4 (1992), 237–254.
[14] Hervé, J. M., and Karouia, M. A family of novel orientational 3-DOF parallel
robots. In Proc. RoManSy 14 (Udine, Italy, 2002), pp. 359–368.
[15] Huda, S., and Takeda, Y. Dimensional Synthesis of 3-URU Pure Rotational
Parallel Mechanism with Respect to Singularity and Workspace. In International
Federation for the Theory of Mechanisms and Machines World Congress (Besançon,
2007), pp. 1–6.
[16] Karouia, M., and Hervé, J. M. A Three-dof Tripod for Generating Spherical
Rotation. In Advances in Robot Kinematics. Springer, 2000, pp. 395–402.
[17] Kavraki, L. E., Svestka, P., Latombe, J.-C., and Overmars, M. H. Proba-
bilistic roadmaps for path planning in high-dimensional configuration spaces. IEEE
Transactions on Robotics and Automation 12, 4 (1996), 566–580.
[18] Khan, S., and Andersson, K. Optimal Design of a 6-DoF Haptic device. In
International Conference on mechatronics (Istambul, 2011), IEEE, pp. 713–718.
[19] Kong, X., and Gosselin, C. Type Synthesis of 3-DOF Spherical Parallel Ma-
nipulators Based on Screw Theory. Journal of Mechanical Design 126, 1 (2004),
101.
[20] Li, Y., and Xu, Q. Kinematics and inverse dynamics analysis for a general 3-PRS
spatial parallel mechanism. Robotica 23, 2 (Mar. 2005), 219–229.
[21] Liu, M.-j., Li, C.-X., and Li, C.-n. Dynamics analysis of the Gough-Stewart
platform manipulator. IEEE Transactions on Robotics and Automation 16, 1 (2000),
94–98.
[22] Lou, Y., Liu, G., and Li, Z. Randomized Optimal Design of Parallel Manipu-
lators. IEEE Transactions on Automation Science and Engineering 5, 2 (2008),
223–233.
Bibliografía 171
[23] Merlet, J. P. Parallel Robots. Solid Mechanics and its Applications. Springer,
2006.
[27] Ponce Cruz, P. Inteligencia Artificial con Aplicaciones a la Ingeniería, first ed.
Alfaomega, 2010.
[28] Ponce Cruz, P., and Ramírez Figueroa, F. D. Intelligent Control Systems
with LabView, first ed. Springer, 2010.
[30] Shang, Y., and Li, G.-J. New crossover operators in genetic algorithms. In Pro-
ceedings of The Third International Conference on Tools for Artificial Intelligence
(1991), pp. 150–153.
[31] Tsai, K., and Lin, J. Determining the compatible orientation workspace of Ste-
wart–Gough parallel manipulators. Mechanism and Machine Theory 41, 10 (Oct.
2006), 1168–1184.
[32] Tsai, L.-W. Kinematics of A Three-Dof Platform with Three Extensible Limbs.
In Recent Advances in Robot Kinematics. Springer, 1996, ch. 8, pp. 401–410.
[33] Tsai, L.-W. Solving The Inverse Dynamics of Parallel Manipulators by The Prin-
ciple of Virtual Work. In ASME Design Eng. Tech. Conf. (1998), pp. 451–457.
[34] Tsai, L.-W. Robot Analysis: The Mechanics of Serial and Parallel Manipulators.
John Wiley & Sons, Inc., 1999.
[35] Wang, Z., Wang, G., Ji, S., Wan, Y., and Yuan, Q. Optimal design of a linear
Delta robot for the prescribed cuboid dexterous workspace. In 2007 IEEE Interna-
tional Conference on Robotics and Biomimetics ROBIO (2007), Ieee, pp. 2183–2188.
[37] Zhang, L., and Song, Y. Optimal design of the Delta robot based on dynamics.
In 2011 IEEE International Conference on Robotics and Automation (2011), School
of Mechanical Engineering, Tianjin University, 300072, China, IEEE, pp. 336–341.
[38] Zlatanov, D., Bonev, I., and Gosselin, C. Constraint Singularities as C-Space
Singularities. In 8th International Symposium on Advances in Robot Kinematics
(Caldes de Malavella, Spain, 2002).