2010-10-22 17 views
6

Estoy tratando de hacer cinemática inversa para una cadena serial de arbitrariamente muchos enlaces.Cinemática inversa: Cálculo de Jacobian

En el siguiente paper, he encontrado un ejemplo de cómo calcular la matriz jacobiana.

Entry (i, j) = v[j] * (s[i] - p[j]) 

donde:

v[j] es el vector unitario del eje de rotación para j conjunta

s[i] es la posición (mundo int coords?) De la articulación i

p[j] es la posición (en el mundo coords?) De la junta j

El documento dice que esto funciona si j es una junta giratoria con un solo grado de libertad. Pero mis articulaciones giratorias no tienen restricciones en su rotación. ¿Qué fórmula prefiero? (¿O es posible que malinterprete el término "grado de libertad"?)

Respuesta

8

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.

3

Permítanme sugerir un enfoque más simple para Jacobianos en el contexto de muchos DOF ​​arbitrarios: Básicamente, el jacobiano le dice, qué tan lejos se mueve cada articulación, si mueve el marco del efector final en alguna dirección elegida arbitrariamente. Deje f (θ) ser la cinemática hacia adelante, donde θ = [θ1, ..., θn] son ​​las articulaciones. A continuación, puede obtener el Jacobiano mediante la diferenciación de la cinemática directa con respecto a las variables conjuntas:

J ij = df i/dθ j

es Jacobiano de su manipulador. Invertirlo te daría la cinemática inversa con respecto a las velocidades. Sin embargo, aún puede ser útil si desea saber hasta qué punto debe moverse cada unión si desea mover su efector final en una pequeña cantidad Δx en cualquier dirección (porque en el nivel de posición, esto sería efectivamente una linealización): Δθ = J -1 Δx
Espero que esto ayude.