Velocity kinematics in 3D



We're going to go back to considering the rotational part of this matrix derivative. We're going to rearrange its expression and isolate the skew-symmetric matrix. That means we have to take the rotation matrix over to the other side of the equation. We need to compute its inverse but we know for a rotation metrics that the inverse is the same as its transpose.

So now we have the skew-symmetric matrix in terms of the derivative of the rotation matrix with respect to Q1 and that's the approximation that we've got highlighted here in red. The rotation matrix transpose and the rate of change of the robot's joint angle. We can compute this numerically and we end up with this matrix which should be a skew-symmetric matrix.

Let's have a look at it in a bit more detail. We know that a skew-symmetric matrix has got a form something like this so let's check whether this is a skew-symmetric matrix and if it is what are the values of the angular velocity?

At the start if we look at the diagonals we can see that they are either zero or very, very close to zero and remember that this is an approximation so I'm going to say hand on heart that these are zeroes on the diagonal. It's looking like a skew-symmetric matrix to me. Let's look at the elements that correspond to Omega X. In this case they're both zero so we can write that Omega X is approximately equal to zero times Q1dot. Let's look at the Omega Y elements and they are both identically equal to zero so I'm happy to say that Omega Y is approximately equal to zero times Q1dot.

Let's look now at Omega Z and this is pretty consistent with Omega Z being approximately equal to 1 times Q1dot. So what we've done is match the elements in an exact skew-symmetric matrix and are approximate skew-symmetric matrix and written some relationships between the components of the robot end-effector angular velocity and the rate of change of the first joint angle that's Q1dot.

So I can write it now in matrix form like this, and here's that expression again and to bring back the expression we computed earlier for the transitional velocity of the robot's end-effector. And I can combine these two by stacking up the two vectors and bringing out the common term Q1dot.

And I now have this relationship between the spatial velocity of the robot's end-effector and the velocity of the robot's first joint angle. So here's the expression that we just computed and we can do the same thing for joint 2 and joint 3 all the way up to joint 6.

You'll notice that the numbers in the vectors at the top and the columns of the matrix are slightly different and that's because the vectors at the top are an approximation to the true derivative while the columns with the matrix are the true derivative. Here's the matrix again and it relates the spatial velocity to the robot's joint velocity by this matrix in the middle which is another instance of a Jacobian matrix. It's a 6 x 6 matrix and it’s referred to as the manipulator Jacobian matrix. We can write this expression much more succinctly.

We use the Greek letter 'nu' as we have done previously to represent spatial velocity and we represent joint velocity by Qdot. I've used capital J to represent the manipulator Jacobian and I've indicated that it is a function of Q. The elements of the Jacobian matrix depend on the joint angles.

Now we're going to compute the exact Jacobian for the Puma 560 robot and I've already loaded a model of the robot into my workspace. I'm going to put the Jacobian into the workspace for variable J and my robot object is called P560 and the method that I'm going to invoke is called Jacobian and the only argument that I've passed in is the set of joint angles.

And here is the Jacobian matrix and that's being computed for the set of joint angles QN and this is what it looks like in radians and this is a robot configuration a set of robot joint angles that puts the robot’s end-effector somewhere in the middle of its useful workspace.

A useful way to think about the Jacobian matrix is in terms of what the individual columns mean. The first column of the Jacobian matrix multiplied by the rate of change of the first joint gives me a contribution to the end-effector’s spatial velocity.

And this column gives me a component of end-effector velocity due to Q2. This is the component due to Q3, Q4, Q5 and Q6. And we add the components due to each of these joints to get the sum total end-effector spatial velocity.


There is no code in this lesson.

We resume our analysis of the 6-link robot Jacobian and focus on the rotational velocity part.

Professor Peter Corke

Professor of Robotic Vision at QUT and Director of the Australian Centre for Robotic Vision (ACRV). Peter is also a Fellow of the IEEE, a senior Fellow of the Higher Education Academy, and on the editorial board of several robotics research journals.

Skill level

This content assumes high school level mathematics and requires an understanding of undergraduate-level mathematics; for example, linear algebra - matrices, vectors, complex numbers, vector calculus and MATLAB programming.

More information...

Rate this lesson


Check your understanding


  1. Vibhutha says:

    Doesn’t the representation of End-Effector (I mean Eular angles, Eular parameters, Direction Cosines) matter in calculating the Jacobian ?

    1. Peter Corke says:

      The orientation of the end-effector does matter. I show how to compute the Jacobian as a function of the six joint angles, which implicitly represent the end-effector orientation.

  2. mp says:

    I’m trying to calculate the same skew symmetric matrix as shown in video at 0:40. But I just can’t get the same result. Calculation is defined as:
    S(omega) = derivative of rotation matrix * transpose(rotation matrix) * q1

    What is the rotation matrix used in transpose(rotation matrix) ?


    1. Peter Corke says:

      Here’s the way I’d do it in MATLAB, starting in Lesson 3. Let me know where your solution diverges from mine.

      >> mdl_puma560
      >> p560.plot(qn)
      >> T=p560.fkine(qn)
      T =
      0 0 1 0.5963
      0 1 0 -0.1501
      -1 0 0 -0.01435
      0 0 0 1
      >> Td = p560.fkine(qn + [0.01 0 0 0 0 0])
      Td =
      0 -0.0100 1.0000 0.5978
      0 1.0000 0.0100 -0.1441
      -1 0 0 -0.01435
      0 0 0 1
      >> dT = (Td-T)/.01
      dT =
      0.0000 -1.0000 -0.0050 0.1471
      -0.0000 -0.0050 1.0000 0.5970
      0 0 0 0
      0 0 0 0
      >> format long % let's increase the number of digits displayed
      >> dT
      dT =
      0.000000000000000 -0.999983333416666 -0.004999958333474 0.147066008282182
      -0.000000000000000 -0.004999958333474 0.999983333416666 0.597043453986434
      0 0 0 0
      0 0 0 0
      >> R=T.R % grab out the rotation matrix
      R =
      -0.000000000000000 0.000000000000000 1.000000000000000
      -0.000000000000000 1.000000000000000 -0.000000000000000
      -1.000000000000000 -0.000000000000000 -0.000000000000000
      >> dT(1:3,1:3) * R' % now compute the approximate skew-symmetric matrix
      ans =
      -0.004999958333474 -0.999983333416666 -0.000000000000000
      0.999983333416666 -0.004999958333474 -0.000000000000000
      0 0 0

      1. mp says:

        Thanks, now I got it.

        Great tutorials!

      2. Martin says:

        Why is it dT(1:3,1:3) * R’ ? Why not dT(1:3,1:3) * R’ * dq .. and what should dq be in this case? Is it dq = 0.01, or do we just pick dq = 1, when we compute the scew-symmetric matrix?

  3. Steve says:

    Hi Peter,

    great videos and explanations, thanks. I have a specific question to spatial velocity. Say we are given a discrete time robotic control system, then it is clear that the translational speed would uniquely define a point in 3D that I need to be at at time t-dt. But for the rotational speed things are not so clear to me. Is there any discrete-time equivalent to the translational example before? Meaning: Given that at time t the rotational matrix is R_t, what should it be at t-dt so that the rotational speed is omega (3D vector) at t? It seems that because rotation matrices do not commute there might be multiple rotational matrices at t-dt that can be brought to R_t so that the rotational speed is omega.

    Many thanks.


Leave a comment

Previous lesson Next lesson