This week I got to look at the YuMi collaborative robot one of my labmates uses for his research. YuMi is ABB’s dual-arm small-parts assembly robot, designed from the start to be safe enough to work side by side with people.

My real reason for choosing it was to get more insight into homogeneous transformation matrices — how they’re used to predict the error at a robot’s end effector.
Each YuMi arm has seven degrees of freedom, not counting the gripper, which makes it extremely versatile inside a human-sized workspace.

Bear with me, because HTMs involve a lot of maths. But I’m hoping this can turn into a sort of “HTMs for Dummies” that other people who are stuck can use as a guide.
Setting up the frames
Start by defining the reference coordinate system at the base of the first revolute joint, then define successive coordinate systems at the centre of each remaining joint travelling down the arm, ending at the end effector.

The rotation matrix, the easy way

The trick that made this click for me is that simple rule about columns and rows — each column is an axis of the frame you are going to, each row an axis of the frame you are coming from. Then account for the joint rotating by multiplying by a rotation about the previous frame’s z axis.
The same logic gives every successive transformation down the arm.


Multiply them together in series and you have the complete transformation carrying end effector coordinates back into the reference frame.

The calculation is genuinely lengthy, so I haven’t included the full expansion — but it is easy to code symbolically in MATLAB, and I’d strongly suggest doing that for future work.
Adding the errors
Reading the HTM section of Precision Machine Design (Ch. 2.2), what helped most was considering each error on its own and then building them all up into a single error matrix. The text describes the process, but it only really landed once I did the calculations myself in MATLAB.
The insight: think of it as first transforming into the new coordinate system, then transforming that new system into the same system as affected by errors.

The errors themselves are three translational (δx, δy, δz) and three rotational (εx, εy, εz). Each becomes its own elementary transform, and multiplying the six together gives the total transformational error.


Setting second-order terms to zero under the small-angle approximation gives a much more tractable error matrix — the one you can actually work with by hand.

Multiply the coordinate transformations by the error transformations in series and you get the actual end effector position relative to the reference frame. Difference that against the ideal position and you have the error in x, y and z.
The open question
Which leaves the part I don’t yet know: how do you predict the translational and rotational errors in the first place? I’ve seen a few examples online, and I’m looking forward to discussing it in class.
(If my interpretation of any of this is wrong, please tell me.)