Velocity kinematics in 2D
In this lecture we're going to consider how the velocity of a single robot joint affects the velocity of the end effector. Here a couple of animations that show a simple two-linked planar robot. On the left we see an example where joint 1 of the robot is varying sinusoidally. On the right we see an example where joint 2 of the robot is varying sinusoidally. But, what we're interested in is the relationship between the velocities of the individual joints Q1 or Q2 and the velocity of the end effector. In what we will be able to show is that instantaneously the velocity of the end effector is the sum of the end effector velocity components due to motion of joint 1 and the motion due to joint 2.
Here's the two-linked robot manipulator which should be very familiar to us now. We showed in the previous lecture about forward kinematics how we can write an expression for the x and y coordinate for the robot end effector. That is the robot’s end effector pose in two dimensions.
Now if we consider that the joint angles are now are the function of time, then we can compute the derivative of x and y with respect to time and the dot notation here means the derivative with respect to time. So xdot is the derivative of x with respect to time. Q1 dot is the derivative of the joint angle Q1 with respect to time.
Computing the derivative is fairly straight forward. It's pretty much introductory differential calculus and we need to apply the chain rule. Let's bring the previous equations on to a fresh page. And here again is the expressions for the xdot and ydot.
Now in this expressions you notice that there are a number of Q1dot and Qdot terms. What we can do is we can factor them out. And that enables us to write the expression in a very compact matrix form. If you uncomfortable with this or don't understand how we got from the first expression to the matrix form, multiply out the matrix form. Multiply the 2x2 matrix by 2x1 vector and convince yourself that it's the same expression that we started with.
We can now write this in a very succinct form. The vector xdot and ydot is the velocity of the robot end effector. The matrix which is typically denoted by the symbol J is referred to as a Jacobian matrix. Note that this Jacobian matrix is a function of the joint angles Q1 and Q2. So what we have here is a linear relationship between the joint angle velocity, vector Qdot, which comprises Q1dot and Q2dot and the tip velocity in Cartesian space xdot and ydot.
The Jacobian matrix that we just introduced is named after this gentleman. A 19th century mathematician Carl Gustav Jacob Jacoby. He's been very familiar with a functional expression like this, y is a function of x, x is a scalar and y is a scalar. And then we could write the derivative of the function x with respect to x. It's the same as the derivative of y with respect to x. The Jacobian is simply the matrix equivalent of the derivative. It's the derivative of a function whose argument is a vector and whose result is a vector. Now those vectors don't have to be the same length. In this example, x is a vector of n dimensions and y is a vector of m dimensions.
So the Jacobian as I said is a matrix and it will be in this case an n by m matrix. The elements of the matrix are the partial derivatives of each of the outputs of the function with respect to each of the inputs to the function. In a nutshell that's what a Jacobian is.
When we talked about kinematics, we introduce a functional form.
We introduced the function K which operates on the robot joint angles and returns the robot pose. Now for the two-link robot that we're considering now, the joint angles belong to the two dimensional space of real numbers and the end effector post also belongs to the two dimensional space or real numbers.
The joint angle vector Q belongs to the space of two dimensional real numbers, it's the set of numbers Q1 and Q2. And the end effector post belongs to the two dimensional space of real numbers. That saying that the end effector post is represented by two real numbers x and y. The other symbol that we introduced a moment ago is the spatial velocity. And we used the Greek letter nu, it looks like a V and its handy because it is a type of velocity but it's not just a velocity in the plain. It also includes rotational velocity, That becomes really important when we talk about robots that operates on three dimensional space.
For a simple 2-link planar robot we introduce and derive its Jacobian matrix, and also introduce the concept of spatial velocity.
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.
I must have been asleep in Linear algebra because no way can i do the matrix multiplication at 2.16 and get your original equation?
If you multiply out the matrix-vector product under “Put into matrix form” you should the equations at the top. It’s a 2×2 matrix multiplied by a 2×1 vector. What result do you get?
I multiply this Jacobian matrix(2×2) and derivative vector(2×1) and I get not correct value.
My robot only moving in the X axis direction but this equation give me same time X and Y velocity, what is my problem ?
I’ll need a bit more detail in order to help resolve this. which part of this video is confusing? if you are working your own example please describe the robot model, share the code you’re running, the answers you get and what you think they should be.
Please accept my apology for late reply.
I work on scara type robot (2 joint like this example). I write this formula calculate for tool velocity (in video 1:45);
Tool X Velocity = -a1 * qdot1 * SIN(q1) – a2 * (qdot1 + qdot2) * SIN(q1+ q2);
Tool Y Velocity = a1 * qdot1 * COS(q1) + a2 * (qdot1 + qdot2) * COS(q1+ q2);
But when I just moving along X direction, this formula give me X and Y velocity, why ?
I just moving X direction, where is my fault ?
I’m going to need a lot more detail to help resolve this. Perhaps post to the support forum tiny.cc/rvcforum and include your code. My first question is how do you know you are moving along the X-direction?