17
$\begingroup$

When computing the Jacobian matrix for solving an Inverse Kinematic analytically,I read from many places that I could use this formula to create each of the columns of a joint in the Jacobian matrix:

enter image description here

Such that $a'$ is the rotation axis in world space, $r'$ is the pivot point in world space, and $e_{pos}$ is the position of end effector in world space.

However, I don't understand how this can work when the joints have more than one DOFs. Take the following as example:

enter image description here

The $\theta$ are the rotational DOF, the $e$ is the end effector, the $g$ is the goal of the end effector, the $P_1$, $P_2$ and $P_3$ are the joints.

First, if I were to compute the Jacobian matrix based on the formula above for the diagram, I will get something like this:

$$J=\begin{bmatrix} ((0,0,1)\times \vec { e } )_{ x } & ((0,0,1)\times (\vec { e } -\vec { P_{ 1 } } ))_{ x } & ((0,0,1)\times (\vec { e } -\vec { P_{ 2 } } ))_{ x } \\ ((0,0,1)\times \vec { e } )_{ y } & ((0,0,1)\times (\vec { e } -\vec { P_{ 1 } } ))_{ y } & ((0,0,1)\times (\vec { e } -\vec { P_{ 2 } } ))_{ y } \\ ((0,0,1)\times \vec { e } )_{ z } & ((0,0,1)\times (\vec { e } -\vec { P_{ 1 } } ))_{ z } & ((0,0,1)\times (\vec { e } -\vec { P_{ 2 } } ))_{ z } \\ 0 & 0 & 0 \\ 0 & 0 & 0 \\ 1 & 1 & 1 \end{bmatrix} $$

This is assumed that all the rotation axes are $(0,0,1)$ and all of them only have one rotational DOF. So, I believe each column is for one DOF, in this case, the $\theta_\#$.

Now, here's the problem: What if all the joints have full 6 DOFs? Say now, for every joint, I have rotational DOFs in all axes, $\theta_x$, $\theta_y$ and $\theta_z$, and also translational DOFs in all axes, $t_x$, $t_y$ and $t_z$.

To make my question clearer, suppose if I were to "forcefully" apply the formula above to all the DOFs of all the joints, then I probably will get a Jacobian matrix like this:

enter image description here

(click for full size)

But this is incredibly weird because all the 6 columns of the DOF for every joint is repeating the same thing.

How can I use the same formula to build the Jacobian matrix with all the DOFs? How would the Jacobian matrix look like in this case?

$\endgroup$
  • $\begingroup$ Actually, I am not sure if I should have posted this question here, in Math, in GamesDev, or in Physics. I have a feeling that I have posted this question at the wrong place. $\endgroup$ – xenon Nov 26 '12 at 10:44
  • $\begingroup$ I think your mistake is that you didn't change the a' for each DOF, that's why they look all the same. $\endgroup$ – user1138 Apr 8 '13 at 11:05
9
$\begingroup$

I have to admit that i haven't seen that specific formula very often, but my guess would be that in case of more than one DOF, you would evaluate it for every joint in every column and then (perhaps?) multiply those results in each column.

But let me suggest a simpler apporach 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(\theta)$ be the forward kinematics, where $\theta = [\theta_1, ... , \theta_n]$ are the joints, $f_{\text{pos}}$ is the positional part of the forward kinematics and $f_{\text{rot}}$ the rotational part. Then you can obtain the Jacobian by differentiating the forward kinematics with respect to the joint variables: $$ J = \frac{\partial f}{\partial \theta} = \begin{bmatrix} \frac{\partial f_{\text{pos}}}{\partial \theta_1}, & \frac{\partial f_{\text{pos}}}{\partial \theta_2} & ..., \frac{\partial f_{\text{pos}}}{\partial \theta_n} \\ \frac{\partial f_{\text{rot}}}{\partial \theta_1}, & \frac{\partial f_{\text{rot}}}{\partial \theta_2} & ..., \frac{\partial f_{\text{rot}}}{\partial \theta_n} \end{bmatrix} $$ is your manipulator's Jacobian. Inverting it would give you the inverse kinematics with respcet 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 $\Delta x$ in any direction (because on position level, this would effectively be a linearization): $$ \Delta \theta = J^{-1}\Delta x $$

Hope that this helps.

$\endgroup$
  • $\begingroup$ Thanks for replying! But this would mean that I will have to compute the values numerically? Actually, I saw this analytical example from graphics.cs.cmu.edu/nsp/course/15-464/Fall09/handouts/IK.pdf from Slide 19 and graphics.ucsd.edu/courses/cse169_w05/CSE169_13.ppt on Slide 78. From the slides, it seem that I may not have to go through the numerical methods. In situations when I don't have the actual functions to differentiate, I can use this formula. But the problem is what happens when I have more DOFs for each joint. $\endgroup$ – xenon Nov 26 '12 at 11:11
  • $\begingroup$ If I understand the slides correctly, you would handle the case of arbitrary many (rotational) DOFs by determining the vectors $(e_i - P_i)$ for each of those joints, where $P_i$ is the joint's position. So, if you have, say 46 joints, you would indeed get a Jacobian with 46 columns and 6 rows (or 3, if you neglect the end effector's orientation). Long story short: you can apply that formula for any number of joints and don't have to "combine" it with other joints. $\endgroup$ – Daniel Eberts Nov 26 '12 at 11:36
  • $\begingroup$ But what happens if a joint has many DOFs like $\theta_x$, $\theta_y$, $\theta_z$, and translational DOFs like $t_x$, $t_y$, $t_z$? Now, each joint has 6 DOFs. From my understanding of how the Jacobian matrix work for IK, the first 6 columns will be the derivatives of the end-effector with respect to the 6 different DOFs, and these first 6 columns are to describe the first joint. The subsequent next 6 columns will describe the second joint with respect to the 6 DOFs and so on. Using the equation $(e_i - P_i)$, does it mean each joint's 6 columns are automatically packed into one column? $\endgroup$ – xenon Nov 26 '12 at 11:49
  • 2
    $\begingroup$ Ah, I see. No, in that case, the formula wouldn't work because it was designed for rotational joints with one axis of rotation. If you want to treat e.g. spherical joints, you would either need a different formula which treats that specific joint type or you need a closed form of the robot's forward kinematics. If you have that, you can differentiate it w.r.t. the joints $\theta$ and obtain the Jacobian. $\endgroup$ – Daniel Eberts Nov 26 '12 at 12:22
  • $\begingroup$ Thanks! :) Just curious though, is Slide 58 in graphics.ucsd.edu/courses/cse169_w05/CSE169_13.ppt hinting that it is possible to use the formula for rotational joints with 3 DOFs? Which means if a joint has no translational DOFs and have purely 3 rotational DOFs, it is still possible? Though I am not sure why it is taking $(1,0,0,0)$ to multiply with various rotations to get the different DOFs. $\endgroup$ – xenon Nov 26 '12 at 12:55
1
$\begingroup$

Your formula for a 6 dof joint assumes that all 6 joints have the axis $(0, 0, 1)$ in the world frame and that all joints are revolute. Since the 6 joints are thus identical, their columns in the Jacobian are also identical.

Starting over, suppose a joint has an axis $a$ going through a point $r$. Let $e$ be the position of the end-effector. The coordinates of $a$, $r$, and $e$ are all given in the world frame and are being updated as the robot is being moved. The axis $a$ has length $1$.

If the joint is revolute, the column of the Jacobian for the joint is

$J_{\theta}(a, r) = \left[\begin{matrix} a \times (e - r) \\ a \end{matrix}\right]$

If the joint is prismatic, the column is

$J_{p}(a) = \left[\begin{matrix} a \\ 0 \end{matrix}\right]$

Suppose we have a 6 dof joint which is not only spherical but can translate in space too. Suppose the axes of the joint are $a_x$, $a_y$, and $a_z$ and that each revolute and prismatic joint shares an axis, so that the Jacobian for the joint becomes

$J = \left[\begin{matrix} J_p(a_x) & J_p(a_y) & J_p(a_z) & J_{\theta}(a_x, r) & J_{\theta}(a_y, r) & J_{\theta}(a_z, r) \end{matrix}\right]$

The axes $a_x$, $a_y$, and $a_z$ depend on the forward kinematics of the robot. To illustrate, let the transformation of the $k$th joint in the world frame be given by

$F_k = \prod_{i=1}^{k} L_i T_i$

where the transformations $L_i$ are constants, and the transformations $T_i$ depend on the joint variables. Let $R_c(q)$ and $P_c(q)$ be the transformations that rotate and translate by $q$ about the coordinate axis named $c$ (either $x$, $y$, or $z$).

Let $\Delta q = (\Delta p_x, \Delta p_y, \Delta p_z, \Delta \theta_x, \Delta \theta_y, \Delta \theta_z)$ be a displacement, computed by help of the Jacobian, for the $i$th joint. Let $\Delta T = P_x(\Delta p_x) P_y(\Delta p_y) P_z(\Delta p_z) R_x(\Delta \theta_x) R_y(\Delta \theta_y) R_z(\Delta \theta_z)$ and update the local transformation of the joint by:

$T_i \leftarrow T_i \, \Delta T$

In this formulation of the forward kinematics, the axes $a_x$, $a_y$, and $a_z$ of joint $i$ are exactly the columns of the rotation matrix of $F_i$. Also the position $r$ is the translation vector of $F_i$.

$\endgroup$

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.