# How to numerically calculate the Jacobian?

I'm trying to calculate the Jacobian for days now. But first some details. Within my Master's Thesis I have to numerically calculate the Jacobian for a tendon-driven continuum Robot. I have all homogeneous transformation matrices as I already implemented the kinematics for this Robot. Due to it's new structure there are no discrete joint variables anymore but rather continuous parameters. Therefore I want to compute the Jacobian numerically. It'd be awesome if someone could provide a detailed way how to compute the numerical Jacobian for a 6-DoF rigid-link robot (only rotational joints => RRRRRR). From that I can transfer it to the continuum robot.

I've already started computing it. Let T be the homogeneous transformation matrix for the Endeffector (Tip) with

$$T=\begin{bmatrix}R & r \\ 0 & 1 \end{bmatrix}$$

with R = rotational matrix (contains orientation) and $r = \begin{bmatrix} x & y & z \end{bmatrix}^T$ endeffector position. My approach is to compute the first three rows of J by successively increasing the joints, computing the difference to the "original" joint values and dividing it by the increment delta, the joint-space is $q = \begin{bmatrix} q_1 & q_2 & q_3 & ... &q_6 \end{bmatrix}T$

$q_1 = q_1 + \delta$ => $J(1,1) = (X_{increment} - X_{orig})/\delta$

$q_2 = q_2 + \delta$ => $J(1,2) = (X_{increment} - X_{orig})/\delta$

and so on. I do the same for the y and z coordinates. So I get the first 3 rows of J.

Now I don't know how to compute the last three rows as they refer to the rotational Matrix R. Since it's a 3x3 matrix and no scalar value I don't know how to handle it.

• Can you elaborate on the comment that there are "no discrete joint variables but rather continuous parameters"? Because from your implementation it sure sounds like you have 6 discrete joint variables. – Ben Aug 29 '15 at 23:38

Well, although, I didn't well understand what have wrote as a solution to the first part (upper) half of the Jacobian, but AFAIK, the manipulator Jacobian is a $6\times n$ matrix, for that let's say $J$ is the Jacobian thus:
$$J = \begin{bmatrix} J_v \\ J_\omega \end{bmatrix} \\$$ where both the upper part $J_v$ and the lower one $J_\omega$ are $3 \times n$ now: $J_{v_i} = z_{i−1} \times (o_n − o_{i−1})$ is the upper half of the Jacobian for the joint $i$ and
$$z^0_{i−1} = R^0_{i−1}k \\$$
where $R^0_{i-1}$ is the transformation between the two neighboring frames, and $z^0_0= k = (0, 0, 1)^T$, also $o_i$ is the position vector for the joint $i$. and the lower part $\textbf{which you're looking for}$ is simply: $$J_{\omega_i} = z_{i−1}$$ the upper transcript could be ignored. All this for $\textbf{for revolute joint, as your case.}$
$\textbf{If we have a prismatic joint}$, then: $$J_{v_i} = z_{i−1}$$ and $$J_{\omega_i} = 0 \\$$ You may consult Spong: robot dynamics and control for more details (ch4).