# How to understand the angular velocity of link i+1?

My question is a basic one about velocity propagation from link to link, that is how to understand the following equation.

$${^i\omega_{i+1}} = {^i\omega_{i}} + {_{i+1}^{\;\;\;i}{R}} \cdot {\dot{\theta}_{i+1}} \cdot {^{i+1}\hat{Z}_{i+1}}$$

The interpretation of this equation from Introduction to Robotics by John J. Craig is:

The angular velocity of link i+1 is the same as that of link i plus a new component caused by rotational velocity at joint i+1. This can be written in terms of frame {i}

Take the following figure as an example, I assume this equation is trying to compute the angular velocity of Link 2 with respect to the frame {1}. i.e., $$^1\omega_2$$

What bewilders me most is I don't think every point on Link 2 share the same angular velocity with respect to joint 1, because the axis of rotation is not joint 1. Then how come $$^1\omega_2$$ be computed?

• Every frame attached to a rigid link does have the same rotational velocity. (See my answer for more details).
– RLH
Commented Apr 12, 2020 at 16:34

I don't think it's that difficult. If you look closely the statement from Craig's book is self-explanatory. Let me explain this further. When you measure the angular velocity of link $$2$$ it has a unit vector in frame $$2$$. Then you multiply it with a rotation matrix which transforms this angular velocity to frame $$1$$. But since it is not necessary that link 1 will be in a stationary position so the angular velocity of link $$1$$ will be added with the final angular velocity of link $$2$$ which is a common sense.

Then comes the last part of your question. You might know the convention in this book but let me mention it here. $${^i\omega_{i+1}}$$ means that you are measuring the velocity of frame $$i+1$$ in frame $$i$$.

Edit: The last part of your question. I thought you were were confused in linear velocity.

The angular velocity in rigid bodies is same. Thanks to the one who pointed it correctly in the comments.

• Thank you very much for the precise and quick answer. I mistook ${^i\omega_{i+1}}$ for the angular velocity of the whole link $i+1$. Now I get it. Commented Apr 11, 2020 at 11:04
• All frames on a rigid body do have the same rotational velocity. (See my answer for more details).
– RLH
Commented Apr 12, 2020 at 16:58

What bewilders me most is I don't think every point on Link 2 share the same angular velocity with respect to joint 1, because the axis of rotation is not joint 1. Then how come $$^1\omega_2$$ be computed?

Every point (more specifically, every frame) on a rigid body does indeed share the same rotational velocity, and the rigid body can thus be said to have a rotational velocity.

To see this, it is helpful to remember that the rotational velocity of a frame is the rate of change of the angle between a line drawn in that frame and a fixed reference line. For a rigid body, the angle between any two lines drawn on the body is constant, and so all frames must have the same rotational velocity.

More abstractly, when thinking about the rotational velocity, it is the axis vector that matters, not the center of rotation. The center of rotation (and its generalization to three dimensions) matters when calculating the difference in the translational velocities of two frames on a rotating rigid body.

• Thank you very much for providing the intuition of angular velocity. Honestly, this concept blows my mind for a time. Now it finally seems not so hard to comprehend. I write below an answer to organize my thoughts. Commented Apr 14, 2020 at 14:03

Thanks @RLH for clarifying about the angular velocity of a rigid body. For the ones who are also confused by the naming convention in the book Introduction to Robotics like I was, here's my thoughts.

the most important result of the chapter Jacobians: velocities and static force in the origin convention is:

$${^i\omega_{i+1}} = {^i\omega_{i}} + {_{i+1}^{\;\;\;i}{R}} \cdot {\dot{\theta}_{i+1}} \cdot {^{i+1}\hat{Z}_{i+1}}$$

$${^iv_{i+1}} = {^iv_i} + {^i\omega_i} \times {^iP_{i+1}}$$

where $$^bv_a$$ means the velocity of point $$a$$ with respect to the reference frame (no specified) as observed in frame $$b$$. Now I am going to rewrite these two equations in a more tedious convention, in which $$^Iv_{i/o}$$ means the velocity of point $$i$$ (or frame $$i$$) with respect to point $$o$$ (or frame $$o$$) as observed in the reference frame $$I$$ :

$${^I\omega_{i+1/o} = {^I\omega_{i/o}}} + {^I\omega_{i+1/i}}$$

$${^Iv_{i+1/o}} = {^Iv_{i/o}} + {^Iv_{i+1/i}} + {^I\omega_{i/o}} \times {^IP_{i+1/i}}$$

The first equation relates to a wonderful property of angular velocity:

$${^I\omega_{P/O}} = {^I\omega_{P/Q}} + {^I\omega_{Q/R}} + \dots + {^I\omega_{M/N}} + {^I\omega_{N/O}}$$

In other words, angular velocities add over intermediate frames. I once thought it impossible every frame on a rigid body share the same angular velocity while the rotational axis is not attached to the origin of the reference frame. It is completely not the case. @RLH has provided a good intuition about the angular velocity of a rigid body.

To see this, it is helpful to remember that the rotational velocity of a frame is the rate of change of the angle between a line drawn in that frame and a fixed reference line. For a rigid body, the angle between any two lines drawn on the body is constant, and so all frames must have the same rotational velocity.

The second equation is called transport theorem in kinematics. It uses the concept of angular velocity to avoid taking time derivatives of unit vectors on intermediate frames. This theorem is useful especially when trying to solve the velocity of end effector moving on parts moving on parts ...

There is a way to derive the joint velocity kinematics from the joint position kinematics.

For me it is easier to express everything on a common coordinate system (the inertial frame) such that vector algebra can be done between terms on different links.

Each link $$i$$ has a local to world transformation matrix $$\mathbf{R}_i$$ such that for example the local joint axis $${}^i\boldsymbol{\hat{Z}}_i$$ expressed in world coordinates is $$\boldsymbol{\hat{Z}}_i = \mathbf{R}_i {}^i\boldsymbol{\hat{Z}}_i \tag{1}$$

The rotational kinematics of the next joint is

$$\mathbf{R}_{i+1} = \mathbf{R}_i \, {\rm rot}({}^i\boldsymbol{\hat{Z}}_i, \theta_{i+1}) \tag{2}$$

Now take the derivative of the above and note the following sub-expressions, derived from the time derivative of vectors in rotating frames

\begin{aligned} \tfrac{\rm d}{{\rm d}t} \mathbf{R}_i & = \boldsymbol{\omega}_i \times \mathbf{R}_i \\ \tfrac{\rm d}{{\rm d}t} \mathbf{R}_{i+1} & = \boldsymbol{\omega}_{i+1} \times \mathbf{R}_{i+1} \\ \tfrac{\rm d}{{\rm d}t} {\rm rot}({}^i\boldsymbol{\hat{Z}}_i, \theta_{i+1}) & = \left( {}^i\boldsymbol{\hat{Z}}_i, \dot\theta_{i+1} \right) \times {\rm rot}({}^i\boldsymbol{\hat{Z}}_i, \theta_{i+1}) \end{aligned} \tag{3}

Now use (3) into (2) and use the product rule to get

\begin{aligned} \tfrac{\rm d}{{\rm d}t} \mathbf{R}_{i+1} &=\left( \tfrac{\rm d}{{\rm d}t}\mathbf{R}_i \right)\, {\rm rot}({}^i\boldsymbol{\hat{Z}}_i\, \theta_{i+1}) + \mathbf{R}_i \,\left( \tfrac{\rm d}{{\rm d}t}{\rm rot}({}^i\boldsymbol{\hat{Z}}_i\, \theta_{i+1})\right) \\ \boldsymbol{\omega}_{i+1} \times \mathbf{R}_{i+1} & = \boldsymbol{\omega}_i \times \mathbf{R}_i\, {\rm rot}({}^i\boldsymbol{\hat{Z}}_i\, \theta_{i+1}) + \mathbf{R}_i \,\left( {}^i\boldsymbol{\hat{Z}}_i\, \dot\theta_{i+1} \right) \times {\rm rot}({}^i\boldsymbol{\hat{Z}}_i, \theta_{i+1}) \\ & =\boldsymbol{\omega}_i \times \mathbf{R}_{i+1} + \left( \mathbf{R}_i \,{}^i\boldsymbol{\hat{Z}}_i, \dot\theta_{i+1} \right) \times \left( \mathbf{R}_i \,{\rm rot}({}^i\boldsymbol{\hat{Z}}_i, \theta_{i+1}) \right) \\ & = \boldsymbol{\omega}_i \times \mathbf{R}_{i+1} + \boldsymbol{\hat{Z}}_i\, \dot\theta_{i+1} \times \mathbf{R}_{i+1} \end{aligned} \tag{4}

From which you factor out $$\mathbf{R}_{i+1}$$ to get

$$\boxed{ \boldsymbol{\omega}_{i+1} = \boldsymbol{\omega}_{i} + \boldsymbol{\hat{Z}}_i\, \dot\theta_{i+1} } \tag{5}$$

The interpretation is clear now. Add the velocity of link $$i$$ to the rotation about this axis (in word coordinates) $$\boldsymbol{\hat{Z}}_i$$ with speed $$\dot{\theta}_i$$.

• Thank you so much! That's the rigorous derivation I want. It would be perfect if substituting the ${^i\hat{Z}_i}$ to an arbitrary rotational axis which makes it a general formula. Commented Apr 16, 2020 at 4:20
• ${^i\hat{Z}_i}$ is an arbitrary rotation axis. It is the joint axis direction as in link $i$ coordinates. So it could be ${^i\hat{Z}_i} = \pmatrix{1 & 0 & 0}$ or ${^i\hat{Z}_i} = \pmatrix{0 & 0 & 1}$ or whatever. Commented Apr 16, 2020 at 12:18
• @WenzhouLi you will find that you can chain up to 3 rotation axis this way to get $$\omega_{i+1} = \omega_{i} + \hat{Z}_1 \dot \theta_1 + {\rm rot}(\hat Z_1,\, \theta_1) \left( \hat{Z}_2 \dot \theta_2 + {\rm rot}(\hat Z_2,\,\theta_2) \hat{Z}_3 \dot \theta_3 \right)$$ Commented Apr 16, 2020 at 12:23