# Cartesian Angular Velocity

Let's say I have a Jacobian which gives the relationship between the velocity of a robot's joints, and the Cartesian velocity of its end-effector, relative to the end-effector's local frame. And let's say I also have a target pose to move the end-effector to, expressed relative to the end-effector's local frame, in Euler angles (a, b, c).

I want to move the end-effector to this target pose, and I want this rotation to happen in 1 second. To achieve this, I need to calculate the Cartesian velocity of the end-effector, so that I can use inverse kinematics to calculate the required joint velocities.

My first idea is to say that the Cartesian velocity is equal to the Euler angles (a, b, c), divided by the time (which is 1). So the angular velocity around the x-axis is a, the angular velocity around the y-axis is b, and the angular velocity around the z-axis is c.

After doing some reading, I'm not sure whether this is correct, and even if it is correct, if it is optimal.

Below, I have written three different things that might happen if I were to implement my controller like this. Which of these three is correct?

1) The end-effector rotates to the target pose in a smooth line (the most direct path).

2) The end-effector rotates to the target pose, but the motion is not smooth (it does not follow the most direct path).

3) The end-effector rotates but it does not end up at the target pose.

Using Euler angles and the velocities expressed as a difference between Euler angles over time will work, but it does not give you the minimum distance between the angles.

If you calculate the velocity once like this, the end effector will move towards your goal. If you actually want to stop at your goal you will need to periodically recalculate velocities and times.

The questions you formulated are not easy to adress:

1) The end-effector rotates to the target pose in a smooth line (the most direct path).

Smooth does not mean "most direct". Smooth is defined in terms of discontinuities in the derivates of the position (i.e. velocity, acceleration and jerk). The trajectories obtained this way will not be smooth! They will have discontinuities already at the velocity level. It is not clear what exactly do you mean my most direct. It can mean shortest trajectory in joint space or in Cartesian space. Rotations are expressed in a somewhat special coordinate system. More about this here. (Ironically this question was asked years ago by me). So to answer your question, the velocities you obtain this way will take you to the desired position and orientation, but they will not be smooth and they will not be the shortest path (for the orientation)

2) The end-effector rotates to the target pose, but the motion is not smooth (it does not follow the most direct path).

This is correct, if the velocity is recalculated periodically, based on current position. The velocity profile will not be smooth and the path will not be the shortest. Setting the velocity once means that robot will try follow this direction until a joint limit is reached, not until the target is reached. Furthermore s velocity is not reached instantaneously an different joints have different acceleration times, setting the velocity only once will result in a slightly different direction then intended.

3) The end-effector rotates but it does not end up at the target pose.

This depends on the way you control the velocity over time. It is expected that in different positions you will need different velocities. The absolute minium is that you stop the robot at the targer, better would be to slow it down when it is close to the target (but then the travel time would be longer, so you have to plan for this in advance).

• Thank you! That's very helpful. In your response to number 2, you said that the end-effector will reach the target pose only if the velocity is recalculated periodically. Why is this? Is it because the robot will not actually be able to perfectly achieve the target velocity, and so there will be an accumulation of errors? Jun 15 '20 at 15:35
• The answer is edited to further explain number 2
– 50k4
Jun 15 '20 at 17:43
• I understand now, thanks! Jun 15 '20 at 18:27