:lang: es

[[cha:dh-parameters]] (((DH parameters Examples)))

= Configuración de parámetros "modificados" Denavit-Hartenberg (DH) para
'genserkins'

== Preludio

LinuxCNC admite varios módulos cinemáticos, incluido uno que
admite un conjunto generalizado de cinemáticas serie comúnmente especificado a través de
parámetros Denavit-Hartenberg.

Este documento ilustra un método para configurar los parámetros DH para un robot
Mitsubishi RV-6SDL en LinuxCNC utilizando la cinemática 'genserkins'.

[NOTE]

Este documento no cubre la creación de un modelo 'vismach' que,
aunque ciertamente es muy útil, requiere un modelado igual de cuidadoso
para que coincida con el modelo 'genserkins' derivado en este documento.

[NOTE]

Puede haber errores y/o defectos: ¡use bajo su propio riesgo!

== General

Con la proliferación de robots industriales ha aumentado el
interés por controlar robots usados ​​con LinuxCNC. Un tipo común de robot
utilizado en la industria y la fabricación es el "manipulador en serie"
diseñado como una serie de articulaciones motorizadas conectadas por eslabones rígidos.
Los robots en serie a menudo tienen seis articulaciones requeridas para los seis grados de
libertad necesarios tanto para posicionar (XYZ) como para orientar (ABC o pitch, roll,
yaw) un objeto en el espacio. A menudo, estos robots tienen una estructura de brazo
que se extiende desde una base hasta un efector final.

El control de dicho robot en serie requiere el cálculo de la
posición y orientación del efector final en relación con un sistema de coordenadas de referencia
cuando se conocen los ángulos articulares (* cinemática directa*) y también el cálculo inverso, 
más complejo, de los ángulos articulares requeridos para una posición de efector final dada y
la orientación en relación con el sistema de coordenadas de referencia (* cinematica inversa *). 
Las herramientas matemáticas estándar utilizadas para estos
cálculos son matrices que son, básicamente, tablas de parámetros y
fórmulas que facilitan el manejo de rotaciones y traslaciones
involucrado en cálculos de cinemática directa e inversa.

No es necesaria familiaridad detallada con las matemáticas para un robot en serie
ya que LinuxCNC proporciona un módulo de cinemática que implementa un
algoritmo llamado 'genserkins' para calcular cinemática directa e inversa
para un robot serie genérico. Para controlar un robot serie específico, 
'genserkins' debe contar con datos para que pueda
construir un modelo matemático de la estructura mecánica del robot y
así hacer las matemáticas.

Los datos requeridos deben estar en una forma estandarizada, 
introducida por Jacques Denavit y Richard Hartenberg en los
años cincuenta y se llaman parámetros DH. Denavit y Hartenberg utilizan
cuatro parámetros para describir cómo se vincula una articulación con la siguiente.
Estos parámetros describen básicamente dos rotaciones ('alfa' y
'theta') y dos translaciones ('a' y 'd').

== Parámetros DH modificados

Como suele ser el caso, este "estándar" ha sido modificado por otros
autores que han introducido "parámetros DH modificados" y se debe ser
muy cuidadoso porque 'genserkins' usa "parámetros DH modificados" como los
descritos en la publicación "Introducción a la robótica, mecánica y
Control" de John J. Craig. Tenga en cuenta que se puede encontrar mucha información 
sobre los 'parámetros DH', pero rara vez el autor define qué convención se usa realmente. 
Además, algunas personas han encontrado
necesario cambiar el parámetro llamado 'a' a 'r' y así hemos agregado
mas confusión Este documento se adhiere a la convención en la
publicación mencionada anteriormente por Craig con la diferencia de que
la enumeración de parámetros y articulaciones comienza con el número '0' para ser
consistente con 'genserkins' y sus pines HAL.

Los parámetros DH estándar y modificados constan de cuatro valores numéricos para
cada articulación ('a', 'd', 'alpha' y 'theta') que describen cómo
el sistema de coordenadas (CS) asociado a una articulación tiene que ser movido y
girado para alinearse con la siguiente articulación. Alineado significa que el
el eje Z de nuestro CS coincide con el eje de rotación de la articulación y
apunta en la dirección positiva de modo que, usando la regla de la mano derecha
con el pulgar apuntando en la dirección positiva del eje Z,
los dedos apuntan en la dirección positiva de rotación de la articulación.
Queda claro que para hacer esto, uno debe decidir sobre
las direcciones positivas de todas las articulaciones antes de comenzar a derivar
parámetros!

La diferencia entre notaciones "estándar" y "modificadas" está en cómo se asignan
los parámetros a los enlaces. Usando 
los parámetros DH  "estándar" en 'genserkins' *no* dará el modelo matemático correcto.

== Parámetros DH modificados usados en 'genserkins'

Tenga en cuenta que 'genserkins' no maneja offsets de valores theta - theta
es la variable articular que es *controlada* por LinuxCNC. Con el CS
alineado con la articulación, una rotación alrededor de su eje Z es idéntica a
la rotación ordenada a esa articulación por LinuxCNC. Esto hace
imposible definir la posición 0° de nuestras articulaciones de robots de forma arbitraria.

Los tres parámetros configurables son:

. *alpha*: rotación positiva o negativa (en radianes) alrededor del eje X
del "sistema de coordenadas actual"

. *a*: distancia positiva, a lo largo de X, entre dos ejes de articulacion especificados en
'unidades máquina' (mm o pulgadas) definidas en el archivo ini del sistema.

. *d*: longitud positiva o negativa a lo largo de Z (también en 'unidades máquina')

Los conjuntos de parámetros siempre se derivan en el mismo orden y un conjunto es
completado configurando el parámetro d. Esto no deja el eje Z
de nuestro CS alineado con la próxima articulación! Esto puede parecer confuso pero
apegarse a esta regla producirá un conjunto de parámetros de trabajo. Una vez
el parámetro *d* está configurado, el eje X de nuestro CS necesita apuntar al
eje de la siguiente articulación.

== Numeración de articulaciones y parámetros

La primera articulación en LinuxCNC es joint-0 (porque en el software
el conteo comienza con 0) mientras que la mayoría de las publicaciones comienzan con el número
'1'. Eso también se aplica a todos los parámetros. Es decir, la numeración
comienza con a-0, alpha-0, d-0 y termina con a-5, alpha-5 y d-5. Mantener
esto en mente al seguir una publicación para configurar parámetros 'genserkins'.

== Cómo comenzar

La convención debe comenzar colocando el CS de referencia en la base del
robot con su eje Z coincidiendo con el eje de la primera articulación
y su eje X apuntando hacia el siguiente eje de articulación.

Esto también dará como resultado que los valores de DRO en LinuxCNC haga referencia a 
a ese punto. Una vez hecho esto, establece a-0 y alfa-0 en 0. Lo anterior
La publicación mencionada (Craig) también establece d-0 a 0, lo cual es confuso
cuando se necesita un offset de desplazamiento para tener la
referencia-CS en la parte inferior de la base. Establecer d-0 = al
desplazamiento da resultados correctos. De esta manera, el primer conjunto de
parámetros son alpha-0 = 0, a-0 = 0, d0 = desplazamiento y el eje X
de CS apuntando al eje de la siguiente articulación (articulación-1).

Sigue la derivación del conjunto neto (alpha-1, a-1, d-1) - siempre usando
la misma secuencia hasta el sexto conjunto (alpha-5, a-5, d-5).

Y así, el TCP-CS del efector final está sentado en el centro de la
mano.

== Casos especiales

Si el siguiente eje articular es paralelo al último, entonces uno podría
elejir arbitrariamente un valor para el parámetro d pero no hay
apunte a establecerlo de otra manera que 0.

== Ejemplo detallado (RV-6SL)

A continuación se describe un método para derivar los "Parámetros DH modificados" para un 
Mitsubishi RV-6SDL y cómo configurar los parámetros en el archivo HAL que se utilizará con la cinemática 'genserkins' en
LinuxCNC. Las dimensiones necesarias se toman mejor de un dibujo dimensional
proporcionado por el fabricante del robot.

imagen::rv-6sl/rv-6sl-001.jpg[align="center"]

imagen::rv-6sl/rv-6sl-002.jpg[align="center"]

imagen::rv-6sl/rv-6sl-003.jpg[align="center"]

imagen::rv-6sl/rv-6sl-004.jpg[align="center"]

imagen::rv-6sl/rv-6sl-005.jpg[align="center"]

imagen::rv-6sl/rv-6sl-006.jpg[align="center"]

imagen::rv-6sl/rv-6sl-007.jpg[align="center"]

imagen::rv-6sl/rv-6sl-008.jpg[align="center"]

imagen::rv-6sl/rv-6sl-009.jpg[align="center"]

imagen::rv-6sl/rv-6sl-010.jpg[align="center"]

imagen::rv-6sl/rv-6sl-011.jpg[align="center"]

imagen::rv-6sl/rv-6sl-012.jpg[align="center"]

imagen::rv-6sl/rv-6sl-013.jpg[align="center"]

imagen::rv-6sl/rv-6sl-014.jpg[align="center"]

imagen::rv-6sl/rv-6sl-015.jpg[align="center"]

imagen::rv-6sl/rv-6sl-016.jpg[align="center"]

imagen::rv-6sl/rv-6sl-017.jpg[align="center"]

imagen::rv-6sl/rv-6sl-018.jpg[align="center"]

== Créditos

Gracias al usuario Aciera por todo el texto y los gráficos.
para el robot RV-6SL!


