:lang: es

//////////////////////////////////////////////////////////
use image:: para archivos png de ecuaciónes - no latexmath
//////////////////////////////////////////////////////////

[[cha:5-axis-kinematics]] (((5-Axis Kinematics)))

= Cinemática de 5 ejes

== Introducción

Las máquinas herramienta con multiejes coordinados CNC controladas con LinuxCNC requieren un componente cinemático
especial para cada tipo de máquina. Este capítulo describe algunas de las configuraciones de máquina de 5 ejes más
populares y luego desarrolla las transformaciones directas (desde el trabajo hasta las coordenadas de articulacion) e
inversa (desde la articulacion hasta el trabajo) en un proceso matemático general para dos tipos de máquina.

Se proporcionan los componentes cinemáticos y los modelos de simulación de vismach para demostrar su comportamiento en la
pantalla de la computadora. También se dan ejemplos de datos de archivos HAL.

== Configuraciones de máquinas herramienta de 5 ejes

En esta sección tratamos con máquinas de fresado o enrutadores típicos de 5 ejes, con cinco articulaciones o grados de
libertad, que se controlan en base a movimientos coordinados.

Las máquinas herramienta de 3 ejes no pueden cambiar la orientación de la herramienta. Las máquinas herramienta de 5 ejes
utilizan dos ejes adicionales para dotar a la herramienta de corte de una orientación adecuada para el mecanizado
eficiente de superficies de cualquier forma.

Las configuraciones típicas de máquinas herramienta de 5 ejes se muestran en las figs. 3, 5, 7 y 9-11 [1,2] en la sección Figuras.

La cinemática de las máquinas herramienta de 5 ejes es mucho más simple que la de los brazos robots de 6 ejes, puesto que
3 de los ejes son normalmente ejes lineales y solo dos son ejes giratorios.

== Orientación y localizacion de la herramienta

Generalmente se utilizan sistemas CAD/CAM para generar los modelos 3D CAD de la pieza de trabajo, así como los datos CAM
para la entrada a la máquina CNC de 5 ejes. La herramienta o los datos de localizacion de la herramienta (CL, Cutter
Location) se componen de la posición de la punta de la herramienta y la orientación de la misma en relación con el sistema
de coordenadas de la pieza. Esa informacion la contienen dos vectores, como los generados por la mayoría de los sistemas CAM, y que se muestran en la Fig. 1,:

image::5-axis-figures/equation__1.png[align="center"]

El vector K es equivalente al 3° vector de la matriz de pose E~6~ que se usó en la cinemática del robot de 6 ejes en [3] y el vector Q es equivalente al 4° vector de E~6~. En MASTERCAM, por ejemplo, esta información está contenida en el archivo de salida intermedio ".nci".

.Datos de localizacion de la herramienta
image::5-axis-figures/Figure-1.png[align="center",height=400]

== Matrices de translacion y rotación

Las transformaciones homogéneas proporcionan una manera simple de describir las matemáticas de
la cinemática de máquinas multieje. Una transformación del espacio H es una matriz 4x4 y puede representar
transformaciones de translacion y rotación. Dado un punto x, y, z descrito por un vector u={x, y, z, 1}^T^, su
transformación v está representada por la matriz producto.

image::5-axis-figures/equation__2.png[align="center"]

Hay cuatro matrices de transformación fundamentales en las que se basa la cinemática de 5 ejes:

image::5-axis-figures/equation__3.png[align="center"]

La matriz T(a,b,c) implica una traslación en las direcciones de coordenadas X, Y y Z, en las cantidades a, b y c respectivamente. Las matrices R implican rotaciones del ángulo theta alrededor de los ejes de coordenadas X, Y y Z, respectivamente. Los símbolos 'C' y 'S' se refieren a las funciones coseno y seno, respectivamente.

== Configuraciones  de 5 ejes con mesas giratorias/inclinables

En estas máquinas herramienta, los dos ejes giratorios se montan en la mesa de trabajo de la máquina. Se usan tipicamente dos formas:

* Una mesa giratoria que gira alrededor del eje Z vertical (rotación C, secundaria) montado en una mesa basculante que gira alrededor del eje X o Y (rotación  A o B, primaria). La pieza de trabajo está montada en la mesa giratoria.
* Una mesa inclinable que gira alrededor del eje X o Y (rotación A o B, secundaria) está montada en una mesa giratoria que gira alrededor del eje Z (rotación C, primaria), con la pieza de trabajo en el mesa basculante.

.Configuración general y sistemas de coordenadas
image::5-axis-figures/Figure-2.png[align= "center"]

Se puede considerar que una máquina multieje consiste en una serie de eslabones conectados por articulaciones. Al
asignar un sistema de coordenadas en cada eslabon de la máquina, y usando transformaciones homogéneas, podemos describir
la posición relativa y la orientación entre estos sistemas de coordenadas.

Necesitamos describir una relación entre el sistema de coordenadas de la pieza de trabajo y el sistema de coordenadas de
la herramienta. Esto se puede definir mediante una matriz de transformación '^w^A~t~', que se puede encontrar mediante
transformaciones sucesivas entre los diferentes elementos estructurales o eslabones de la máquina, cada uno con su propio
sistema de coordenadas definido. En general, tal transformación puede verse de la siguiente manera:

image::5-axis-figures/equation__4.png[align="center"]

donde cada matriz '^i-1^A~j~' es una matriz de traslacion 'T' o una matriz de rotación 'R' de la forma (2),(3).

La multiplicación de matrices es un proceso simple en el que los elementos de cada fila de la matriz A de la izquierda se
multiplican por los elementos de cada columna de la matriz B de la derecha y se suman para obtener un elemento en la
matriz resultante C, es decir.

image::5-axis-figures/equation__5.png[align="center"]

En la Fig. 2 se muestra una configuración genérica con sistemas de coordenadas [4]. Incluye ejes giratorios/basculantes en
mesa o en husillo. En una máquina herramienta se usan realmente solo dos de los tres ejes giratorios.

Primero desarrollaremos las transformaciones para el primer tipo de configuración mencionado anteriormente, es decir. un
tipo de mesa inclinable/giratoria (la llamaremos "trt") sin offsets de ejes giratorios. Podemos darle el nombre de
configuración xyzac-trt.

También desarrollamos las transformaciones para el mismo tipo (xyzac-trt), pero con offsets de eje giratorios.

Luego desarrollamos las transformaciones para una configuración xyzbc-trt con offsets de ejes giratorios.

=== Transformaciones para una máquina herramienta xyzac-trt con offsets de pieza de trabajo ===

.Modelo vismach de xyzac-trt con ejes de rotación coincidentes
image::5-axis-figures/Figure-3.png[align= "center"]

Tratamos aquí con una configuración simplificada en la que el eje basculante y el eje giratorio se cruzan en un punto
llamado punto pivote como se muestra en la figura 4. Por lo tanto, los dos sistemas de coordenadas 'O~ws~' y 'O~wp~' de
la fig. 2 son coincidentes.

.Configuración mesa inclinable/giratoria
image::5-axis-figures/Figure-4.png[align="center",height=400]

==== Transformación directa ====

La transformación puede definirse por la multiplicación secuencial de las matrices:

image::5-axis-figures/equation__6.png[align="center"]

con las matrices construidas de la siguiente manera:

image::5-axis-figures/equation__7.png[align="center"]

En estas ecuaciones, L~x~, L~y~, L~z~ define los desplazamientos del punto pivote de los dos ejes giratorios A y C con
relación al origen del sistema de coordenadas de la pieza. Además, P~x~, P~y~, P~z~ son las distancias relativas del punto
pivote a la posición de la punta de la herramienta, que también se pueden llamar las "coordenadas de articulacion" del
punto pivote. El punto pivote está en la intersección de los dos ejes giratorios. Los signos de los términos S~A~ y
S~C~ son diferentes a los de [2,3] dado que las rotaciones de la tabla son negativas con respecto a los ejes de
coordenadas de la pieza de trabajo (tenga en cuenta que sen(-theta) = -sen(theta)), cos(-theta) = cos(theta)).

Cuando se multiplica de acuerdo con (5), obtenemos:

image::5-axis-figures/equation__8.png[align="center"]

Ahora podemos equiparar la tercera columna de esta matriz con nuestro vector de orientación de herramienta K, es decir:

image::5-axis-figures/equation__9.png[align="center"]

A partir de estas ecuaciones podemos resolver los ángulos de rotación theta~A~, theta~C~. De la tercera fila encontramos:

image::5-axis-figures/equation__10.png[align="center"]

y al dividir la primera fila por la segunda fila encontramos:

image::5-axis-figures/equation__11.png[align="center"]

Estas relaciones se usan típicamente en el postprocesador CAM para convertir los vectores de orientación de la herramienta
en ángulos de rotación.

Al igualar la última columna de (8) con el vector Q de posición de herramienta, podemos escribir:

image::5-axis-figures/equation__12.png[align="center"]

El vector en el lado derecho también se puede escribir como el producto de una matriz y un vector, que da como resultado:

image::5-axis-figures/equation__13.png[align="center"]

Esto se puede expandir para dar

image::5-axis-figures/equation__14.png[align="center"]

que es la "transformación directa" de la cinemática.

==== Transformación inversa

Podemos resolver para P de la ecuación (13) como 'P = (^Q^A~P~)^-1^ * Q'. Observando la matriz cuadrada, es una matriz
4x4 homogénea que contiene una matriz de rotación R y un vector de translacion q, por lo que el inverso se puede escribir como:

image::5-axis-figures/equation__15.png[align="center"]

donde R^T es la transpuesta de R (filas y columnas intercambiadas). Por lo tanto, obtenemos:

image::5-axis-figures/equation__16.png[align="center"]

Las ecuaciones que se necesitan para la "transformación inversa" de la cinemática se pueden escribir así:

image::5-axis-figures/equation__17.png[align="center"]

=== Transformaciones para una máquina xyzac-trt con offsets en ejes rotativos

.Modelo vismach de xyzac-trt con offsets con ejes rotatorios (positivos)
image::5-axis-figures/Figure-5.png[align= "center"]

Tratamos aquí con una configuración extendida en la que el eje basculante y el eje rotativo no se cruzan en un punto, sino
que tienen un desplazamiento D~y~. Además, también hay un desplazamiento z entre los dos sistemas de coordenadas 'O~ws~' y
'O~wp~' de la figura 2, llamado D~z~. En la fig. 5 se muestra un modelo vismach y los desplazamientos se muestran en la
fig. 6 (desplazamientos positivos en este ejemplo). Para simplificar la configuración, los desplazamientos L~x~, L~y~,
L~z~ del caso anterior  no estan incluidos. Probablemente no sean necesarios si se usan los offsets G54 en LinuxCNC por
medio de la función "touch of".

.Configuración inclinable/giratoria xyzac-trt, con offsets de ejes
image::5-axis-figures/Figure-6.png[align= "center",height=350]


==== Transformación directa

La transformación puede definirse por la multiplicación secuencial de las matrices:

image::5-axis-figures/equation__18.png[align="center"]

con las matrices construidas de la siguiente manera:

image::5-axis-figures/equation__19.png[align="center"]

En estas ecuaciones, D~y~ y D~z~ definen los desplazamientos del punto pivote de los ejes rotativos A relativos al origen
del sistema de coordenadas de la pieza. Además, P~x~, P~y~, P~z~ son las distancias relativas del punto pivote a la
posición de la punta de la herramienta, que también se pueden llamar "coordenadas de articulacion" del punto pivote. El
punto pivote está en el eje de rotación A.

Cuando se multiplica de acuerdo con (18), obtenemos:

image::5-axis-figures/equation__20.png[align="center"]

Ahora podemos equiparar la tercera columna de esta matriz con nuestro vector de orientación de herramienta K, es decir:

image::5-axis-figures/equation__21.png[align="center"]

A partir de estas ecuaciones podemos resolver los ángulos de rotación theta~A~, theta~C~. De la tercera fila encontramos:

image::5-axis-figures/equation__22.png[align="center"]

y al dividir la segunda fila por la primera fila encontramos:

image::5-axis-figures/equation__23.png[align="center"]

Estas relaciones se usan típicamente en el postprocesador CAM para convertir los vectores de orientación de la herramienta en ángulos de rotación.

Al igualar la última columna de (21) con el vector de posición de herramienta Q, podemos escribir:

image::5-axis-figures/equation__24.png[align="center"]

El vector en el lado derecho también se puede escribir como el producto de una matriz y un vector, que da como resultado:

image::5-axis-figures/equation__25.png[align="center"]

que es la "transformación directa" de la cinemática.

==== Transformación inversa

Podemos resolver para P de la ecuación (25) como 'P=(^Q^A~P~)^-1^*Q' usando (15) como antes.
Por lo tanto obtenemos:

image::5-axis-figures/equation__26.png[align="center"]

Las ecuaciones que se necesitan para la "transformación inversa" de la cinemática se pueden escribir así:

image::5-axis-figures/equation__27.png[align="center"]

=== Transformaciones para una máquina xyzbc-trt con offsets de ejes rotativos

.modelo vismach de xyzbc-trt con compensaciones de eje rotacional (negativo)
image::5-axis-figures/Figure-7.png[align= "center"]

Tratamos aquí de nuevo con una configuración extendida en la que el eje de inclinación (alrededor del eje y) y el eje
giratorio no se cruzan en un punto, pero tienen un desplazamiento D~x~. Además, también hay un desplazamiento z entre los
dos sistemas de coordenadas 'O~ws~' y 'O~wp~' de la figura 2, llamado D~z~. Un modelo vismach se muestra en la fig. 7 (desplazamientos negativos en este ejemplo) y los desplazamientos positivos se muestran en la fig. 8.

.Configuración inclinable/giratoria xyzbc-trt, con offsets de ejes
image::5-axis-figures/Figure-8.png[align= "center",height=350]

==== Transformación directa

La transformación puede definirse por la multiplicación secuencial de las matrices:

image::5-axis-figures/equation__28.png[align="center"]

con las matrices construidas de la siguiente manera:

image::5-axis-figures/equation__29.png[align="center"]

En estas ecuaciones D~x~, D~z~ define los desplazamientos del punto pivote de los ejes giratorios B en relación con el
origen del sistema de coordenadas de la pieza. Además, P~x~, P~y~, P~z~ son las distancias relativas del punto pivote a
la posición de la punta de la herramienta, que también se pueden llamar las "coordenadas de articulacion" del punto
pivote. El punto pivote está en el eje rotativo B.

Cuando se multiplica de acuerdo con (29), obtenemos:

image::5-axis-figures/equation__30.png[align="center"]

Ahora podemos equiparar la tercera columna de esta matriz con nuestro vector de orientación de herramienta K, es decir:

image::5-axis-figures/equation__31.png[align="center"]

A partir de estas ecuaciones podemos resolver los ángulos de rotación theta~B~, theta~C~. De la tercera fila encontramos:

image::5-axis-figures/equation__32.png[align="center"]

y al dividir la segunda fila por la primera fila encontramos:

image::5-axis-figures/equation__33.png[align="center"]

Estas relaciones se usan típicamente en el postprocesador CAM para convertir los vectores de orientación de la herramienta en ángulos de rotación.

Al igualar la última columna de (32) con el vector de posición de herramienta Q, podemos escribir:

image::5-axis-figures/equation__34.png[align="center"]


El vector en el lado derecho también se puede escribir como el producto de una matriz y un vector que da como resultado:

image::5-axis-figures/equation__35.png[align="center"]

que es la "transformación directa" de la cinemática.

==== Transformación inversa

Podemos resolver para P de la ecuación (37) como 'P=(^Q^A~P~)^-1^*Q'. Con el mismo enfoque que antes, obtenemos:

image::5-axis-figures/equation__36.png[align="center"]

Las ecuaciones que se necesitan para la "transformación inversa" de la cinemática se pueden escribir así:

image::5-axis-figures/equation__37.png[align="center"]

== Ejemplos de mesa giratoria/inclinable

LinuxCNC incluye módulos cinemáticos para las topologías 'xyzac-trt' y 'xyzbc-trt'
descrito en las matemáticas detalladas arriba. Para usuarios interesados, el código fuente
está disponible en el árbol git en el directorio 'src/emc/kinematics/'.

Los ejemplos de configuraciones de simulación de xyzac-trt y xyzbc-trt
en las estan en Configuraciones de Ejemplo ('configs/sim/axis/vismach/5axis/table-rotary-tilting/').

Las configuraciones de ejemplo incluyen los archivos ini requeridos y un subdirectorio de ejemplos
con archivos g-code (.ngc). Estas configuraciones sim invocan un modelo tridimensional realista
usando la utilidad vismach de LinuxCNC.

=== Modelos de simulación de Vismach

Vismach es una biblioteca de rutinas Python para mostrar una simulación dinámica de una máquina CNC en la pantalla de la
PC. La secuencia de comandos python para una máquina en particular se carga en HAL y los datos se pasan a los pines HAL.
El modelo de vismach de espacio de usuario se carga con un comando hal como:

----
loadusr -W xyzac-trt-gui
----

y las conexiones se realizan usando comandos HAL como:
----
net  :table-x   joint.0.pos-fb xyzac-trt-gui.table-x
net  :saddle-y  joint.1.pos-fb xyzac-trt-gui.saddle-y
...
----

Consulte los archivos ini de simulación para obtener detalles sobre las conexiones HAL utilizadas para el modelo de vismach.

=== Offsets de longitud de la herramienta

Para utilizar las herramientas de una tabla de forma secuencial con offset de la longitud de la herramienta aplicada
automáticamente, se requiere un offset Z adicional. Para una herramienta que es más larga que la herramienta "maestra",
que normalmente tiene una longitud de herramienta cero, LinuxCNC tiene una variable llamada "motion.tooloffset.z". Si esta
variable se transfiere al componente cinemático (y a la secuencia de comandos vismach python), se puede tener en cuenta el
offset Z adicional necesario para una nueva herramienta agregando la instrucción del componente, por ejemplo:

image::5-axis-figures/equation__38.png[align="center"]

La conexión HAL requerida (para xyzac-trt) es:

----
net :tool-offset motion.tooloffset.z xyzac-trt-kins.tool-offset
----

dónde:

----
:tool-offset ---------------- nombre de la señal
motion.tooloffset.z --------- pin de salida HAL del módulo motion de LinuxCNC
xyzac-trt-kins.tool-offset -- pin HAL de entrada a xyzac-trt-kins
----

== Componentes cinemáticos personalizados

LinuxCNC implementa la cinemática utilizando un componente HAL que está cargado
al inicio de LinuxCNC. El módulo cinemático más común, 'trivkins',
implementa la cinemática de identidad (trivial) donde hay correspondencia uno-a-uno
entre una letra de coordenadas del eje y una articulación del motor.
Están disponibles módulos cinemáticos adicionales para sistemas más complejos (incluido 'xyzac-trt'
y 'xyzbc-trt' descritos anteriormente).

Consulte la página de manual de kins (*\$ man kins*) para obtener descripciones breves de los
módulos cinemáticos.

Los módulos cinemáticos proporcionados por LinuxCNC suelen escribirse en
lenguaje C. Dado que se utiliza una estructura estándar, la creación de un módulo cinemático personalizado
se facilita copiando un archivo fuente existente a un archivo de usuario
con un nombre nuevo, modifícandolo y luego instálandolo.

La instalación se realiza utilizando halcompile:

----
sudo halcompile --install kinsname.c
----

donde "kinsname" es el nombre que se le da a su componente. El prefijo sudo es
requerido para instalarlo y se le pedirá su contraseña de root. Ver la
página del comando halcompile para obtener más información (*\$ man halcompile*)

Una vez compilado e instalado, puede hacer referencia a él en la configuración de su máquina.
Esto se hace en el archivo ini de su directorio config. Por ejemplo, la especificación ini común:

----
[KINS]
KINEMATICS = trivkins
----

seria reemplazada por

----
[KINS]
KINEMATICS = kinsname
----

donde "kinsname" es el nombre de su programa. Los pines HAL adicionales pueden
ser creados por el módulo para elementos de configuración variable tales como
D~x~, D~y~, D~z~, offset de herramienta-offset utilizado en el módulo de cinemática xyzac-trt.
Estos pines se pueden conectar a una señal para control dinámico
o establecer conexiones HAL como:

----
# establecer los parámetros de offsets
net :tool-offset motion.tooloffset.z xyzac-trt-kins.tool-offset
setp xyzac-trt-kins.y-offset 0
setp xyzac-trt-kins.z-offset 20
----

== Figuras

.Configuración de mesa basculante/giratoria
image::5-axis-figures/Figure-9.png[align= "center",height=300]

.Configuración con inclinación de husillo/mesa
image::5-axis-figures/Figure-10.png[align= "center",height=300]

.Configuracion husillo oscilante / giratoria
image::5-axis-figures/Figure-11.png[align= "center",height=300]

////////////////////////////////////////////////// ///
== Referencias nope nope nope pdf nope
////////////////////////////////////////////////// ///

== REFERENCIAS

 . A Postprocessor Based on the Kinematics Model for General Five-Axis machine
Tools: C-H She, R-S Lee, J Manufacturing Processes, V2 N2, 2000.

 . NC Post-processor for 5-axis milling of table-rotating/tilting type: YH Jung,
DW Lee, JS Kim, HS Mok, J Materials Processing Technology,130-131 (2002)
641-646.

 . 3D 6-DOF Serial Arm Robot Kinematics, RJ du Preez, SA-CNC-CLUB, Dec.
5, 2013.

 . Design of a generic five-axis postprocessor based on generalized kinematics
model of machine tool: C-H She, C-C Chang, Int. J Machine Tools & Manufacture,
47 (2007) 537-545.

