Esta pregunta es antigua, pero responderé de todos modos, ya que es algo que he pensado pero que nunca he logrado implementar.
Las juntas rotativas sin restricciones se llaman juntas esféricas o articulaciones esféricas; ellos tienen 3 grados de libertad. También puede usar la fórmula en el tutorial para uniones esféricas, si parametriza cada junta esférica en términos de 3 juntas giratorias (revolutas) de un grado de libertad cada una.
Por ejemplo: Deje N
ser el número de uniones esféricas. Supongamos que cada articulación tiene una transformación local T_local[i]
y una transformación mundo
T_world[i] = T_local[0] * ... * T_local[i]
Vamos R_world[i][k]
, k = 0, 1, 2
, sea la columna de la k- º de la matriz de rotación de T_world[i]
. Definir los 3 * N
ejes de articulación como
v[3 * j + 0] = R_world[i][0]
v[3 * j + 1] = R_world[i][1]
v[3 * j + 2] = R_world[i][2]
Compute el Jacobiano J
por algún efector final s[i]
, utilizando la fórmula de la tutorial. Todas las coordenadas están en el marco mundial.
Usando por ejemplo el método pseudoinverso da un desplazamiento dq
que mueve el efector final en una dirección dada dx
.
La longitud de dq
es 3 * N
. Definir
R_dq[j] =
R_x[dq[3 * j + 0]] *
R_y[dq[3 * j + 1]] *
R_z[dq[3 * j + 2]]
para j = 0, 1, ..., N-1
, donde R_x
, R_y
, R_z
son las matrices de transformación para rotación alrededor del x-
, y-
, y z
-axes.
Actualización de las transformaciones locales:
T_local[j] := T_local[j] * R_dq[j]
y repetir desde la parte superior para mover el efector final en otras direcciones dx
.