What's the residual when you perform the transformation?
4.85mm... over what distance? In what directions? Relative to what? Are you using anti-backlash techniques? How far is the robot being stretched? How rigid is your EOAT? How good is your TCP? How much is the TCP orientation changing across your test sample? How large is your test sample -- how many points across what spatial volume?
Every one of these can contribute to accuracy errors, and isolating and testing for each one is required to get good performance. Robots are not accurate devices -- they are built for precision/repeatability, but sacrifice accuracy to achieve their expansive motion envelopes and low price point compare to CNC machines of comparable working volume.
I'm not sure what you mean by 'residual', given that I am not comparing my measurements with predicted values or a mean, but to the actual true values. To answer your questions:
- my error is just the average distance in space (so sqrt((x1-x2)2 + (y1-y2)2 +(z1-z2)2) ), so not in a specific direction
- the distance is relative to where the points SHOULD be. I work with the assumption that the robot has a neglijable error when it stores the coordinates of its tool. I compare these coordinates (x, y, z) to the coordinates measured with the total station (I take these by pointing the total station at the tool tip - a reflector, in my case, leica gmp 101)
- I don't know what anti-backlash techniques are
- the 6 points measured are never farther from the robot's base than 1.7 m on any axis
- I calibrated the TCP recently, but I don't remember what was the error for that
- it is changing a lot, and I prefer it that way becasue I want to have a less than 2 mm error for any orientation (or sequence of changes in orientation)
- I measure 6 points; I will add the 2 sets here, in case anyone would like to try finding a XYZ-ABC base that maps from one to the other:
XYZ_GLOBAL = [720.9, -1608.7, 1140.1; 316.4, -1599.9, 1649.1; 444.3, -1284.2, 509.8; 626.6, -1041.0, 956.1; 632.7, -538.3, 1349.3; 220.2, -519.3, 1241.7];
XYZABC_ROBOT = [542.573792, -1015.0, 1139.8335; 944.124817, -1015.0, 1652.27429; 823.826416, -689.0, 512.620239; 645.906067, -447.0, 959.713867; 645.90625, 53.4078636, 1356.29163; 1058.31787, 67.6461945, 1251.17578];