# Creating linear end effector motion using joint speeds: Converting tool speed to joint speeds

Background Information: I'm new to robotics and my school currently has access to a 6DOF Universal Robot (UR-10). I'm programming it using its scripting language URscript and the arm has these two commands...

1. speedl(vector of speeds [x, y, z, Rx, Ry, Rz])

where the list of speeds are linked to the end effector.

1. speedj(joints speeds[base, shoulder, elbow, wrist1, wrist2, wrist3]), given in rads/s

The built-in speedj is by far superior in terms of smooth motion, however using a PS3 controller it is much harder to control and thus I would like to be able send controls linear commands (left, right, fwd, back, up, and down) and have them be converted inappropriate joint speeds.

Problem: I want to move the arm linearly, but I don't know how to convert linear motion into an equivalent representation in terms of the joint speeds. Where should I start researching? Is there a topic that covers my question?

I doubt there's an immediate answer to my problem, but I'm unsure where to start looking. Any keywords that might facilitate my research would be awesome.

• Is what you are looking for is inverse kinematics? – fibonatic Jul 19 '18 at 22:10
• no really what I want is to be able to convert Tool tip speed (end effector speeds) into corresponding joint speeds. Say I'm given that my tooltip moves in x,y, and z direction at a particular velocity how can I convert those values into their equivalent joint speeds. – NoviceCoder Jul 19 '18 at 22:22
• There are not arbitrary joint velocities that map to a desired velocity in Cartesian space because the current positions of the joint angles matter. Imagine putting the arm in one position and only command one joint to move- then start it in a different configuration and apply the same joint speed command. You will notice that the Cartesian velocity is not the same! I agree with @fibonatic to look into inverse kinematics. – Ari Onasafari Jul 19 '18 at 22:48

Joint velocities and tool velocities are directly related through the following equation $$\dot{x} = J(q)\dot{q},$$ where $\dot{x} \in \mathbf{R}^6$ is the tool (linear and angular) velocities, $\dot{q} \in \mathbf{R}^n$ is the joint velocities ($n$ is the number of joints), and $J(q)$ is the Jacobian matrix, which depends on the robot joint values $q$.