I have a robot wrist with a non-typical joint configuration that I have been trying to come up with kinematics equations for. Not sure if there is a common name for it but I have not been able turn anything up during my searches.Joint Layout

In short, it consists of 4 slew bearings with the middle pair being inclined at 22.5 degrees and geared together. Rotating the center section 0 - 180 degrees bends the wrist along the Y axis from 0 - 90 degrees. Joint 1 is a revolute joint where the wrist connects to the arm and joint 3 connects to the end effector.

The main issue I am having is that as joint 2 travels through its range of motion, part of the wrist "bend" is not in the XZ plane. I have been trying to come up with an equation for joint 1 angle as a function of joint 2 that would counter the out-of-plane tilt.

My current attempt is using the Rodrigues Rotation formula with unit vector in direction of axis A to calculate a rotation matrix as function of joint 2 angle. I then multiplied an X direction unit vector through this rotation matrix and came up with the following vector:

(0.146 - 0.854 * cos(theta), -0.924 * sin(theta), 0.354 - 0.354 * cos(theta))

I then calculated the angle of this vector from the x axis with atan2(Y, X) thinking that would be my joint 1 rotation but that did not cancel the rotation.

I have also attempted this using transformation matrices from frame of A to joint 1 but the result was also not correct.

Any ideas on what I am missing here?


1 Answer 1


This type of wrist is called 'Doppelwinkelhand': see this google search for references.

This is a reference paper on the kinematics calculation, however not open access.

A quick search yielded this other paper (open access) that seems to cover similar kinematics for a 7DOF robot. I did not read it, but wrt calculating the DWH I assume the priciples are identical.

Years ago I worked with a Kuka IR 361 DWH, which has such a wrist. An implementation of the kinematics and dynamics was available through the Orocos Component Library (OCL). I don't think it is still included in the current OCL version, but I found the files here: check out the Kuka361*.cpp files.

  • $\begingroup$ Thank you for providing the name, this makes it much easier to research. The links you provided are also very helpful. With the paper and the Orocos code for an example I should be able to get this implemented. $\endgroup$
    – Justin
    Aug 3, 2023 at 0:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.