Pregunta

Estoy tratando de hacer cinemática inversa para una cadena en serie de forma arbitraria muchos enlaces.

En la siguiente papel , he encontrado un ejemplo para la forma de 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 (int mundo coords?) de i conjunta

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

En el documento se dice que esto funciona si j es una articulación de rotación con un solo grado de libertad. Pero mis articulaciones rotacionales no tienen limitaciones en su rotación. ¿Qué fórmula entonces yo quiero? (O soy posiblemente la mala interpretación del término "grado de libertad"?)

¿Fue útil?

Solución

This question is old, but I'll answer anyway, as it is something I have thought about but never really gotten around to implement.

Rotational joints with no constraints are called ball joints or spherical joints; they have 3 degrees of freedom. You can use the formula in the tutorial for spherical joints also, if you parameterize each spherical joint in terms of 3 rotational (revolute) joints of one degree of freedom each.

For example: Let N be the number of spherical joints. Suppose each joint has a local transformation T_local[i] and a world transformation

T_world[i] = T_local[0] * ... * T_local[i]

Let R_world[i][k], k = 0, 1, 2, be the k-th column of the rotation matrix of T_world[i]. Define the 3 * N joint axes as

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 the Jacobian J for some end-effector s[i], using the formula of the tutorial. All coordinates are in the world frame.

Using for example the pseudo-inverse method gives a displacement dq that moves the end-effector in a given direction dx.

The length of dq is 3 * N. Define

R_dq[j] = 
    R_x[dq[3 * j + 0]] *
    R_y[dq[3 * j + 1]] *
    R_z[dq[3 * j + 2]]

for j = 0, 1, ..., N-1, where R_x, R_y, R_z are the transformation matrices for rotation about the x-, y-, and z-axes.

Update the local transformations:

T_local[j] := T_local[j] * R_dq[j]

and repeat from the top to move the end-effector in other directions dx.

Otros consejos

Let me suggest a simpler approach to Jacobians in the context of arbitrary many DOFs: Basically, the Jacobian tells you, how far each joint moves, if you move the end effector frame in some arbitrarily chosen direction. Let f(θ) be the forward kinematics, where θ=[θ1,...,θn] are the joints. Then you can obtain the Jacobian by differentiating the forward kinematics with respect to the joint variables:

Jij = dfi/dθj

is your manipulator's Jacobian. Inverting it would give you the inverse kinematics with respect to velocities. It can still be useful though, if you want to know how far each joint has to move if you want to move your end effector by some small amount Δx in any direction (because on position level, this would effectively be a linearization): Δθ=J-1Δx
Hope that this helps.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top