0
$\begingroup$

some time ago, i built an inverse kinematics solver for industrial 6R robot arm. It work fine and i was able to use different robot brands, usually i took the DH parameters from robot's drawing and use them. Now I'm working with a new robot and I noticed something weird. I built the kinematics chain as usually and I have a deviation of about 1mm from my calculations and the position readed from the robot. I searched for the real DH parameters and it seems that they are a little different from the nominal parameters. If i use the real parameters all seems to work fine.

I've always thaught that the difference from nominal and real parameters was very little, in order of 0.1mm or less for small robots, but in this case the error is large IMO. The precision is a critical task for me and I'm wondering if i have bad luck with this new robot or if this error magnitude is normal in general. In this case I really should take the real parameters for the next applications!

EDIT: I've readed from UR forum that the deviation error from nominal to real values are from 2 to 10mm that it's extremely high IMO. I think I should update my kinematics with a numerical inverse kinematics with real DH parameters...

$\endgroup$
1
  • $\begingroup$ I think you can turn your edit here into an answer and accept your own answer to the question, especially with a link to the relevant forum discussion and quote. $\endgroup$ Feb 28 at 1:42

1 Answer 1

0
$\begingroup$

Yes, in my experience UR5e arms have areas in the workspace that show a couple millimeters difference between the reported end-effector position which uses the internal factory calibration and my own IK using the nominal DH parameters. I suspect that ~10mm errors are more likely on the larger arms like the UR10e, or possibly older arms. I had access to UR5e, UR3e, and UR5 units and personally never saw something as extreme as 10mm. The worst-case was less than 3mm. Extracting and using the calibration parameters is certainly possible and I've done it myself for DH-based calculations.

I don't know if you are using or considering ROS, but the ROS drivers have a calibration package that does this for you. The ROS 2 driver is here:

https://github.com/UniversalRobots/Universal_Robots_ROS2_Driver/tree/main/ur_calibration

A note to consider as you develop numerical IK that I had to discover the hard way:

If you only need the end-effector pose, the calibrated DH parameters by themselves will be fine without extra work, but if you have any reason to compute the pose of an intermediate joint in the kinematic chain, like the elbow, you may find the calibrated DH parameters cumbersome. Since several axes of the UR arms are nominally parallel, the DH convention allows a free choice of the along-axis offset, and that choice can be in the center of the nominal robot's links.

Due to manufacturing tolerances, parallel axes are never actually parallel, and their intersection point defines the joint position. In my experience, and discussed elsewhere, this results in a huge offset in intermediate joints' positions compared to the actual physical robot links. Some of my robots had a DH frame origin for the elbow almost a kilometer away from the physical robot's elbow link.

This is discussed more here:

https://github.com/UniversalRobots/Universal_Robots_ROS_Driver/issues/457

and here

https://github.com/ros-industrial/universal_robot/pull/414

I believe both the ROS 1 and ROS 2 calibration packages do a correction for you to pull the URDF frames back to something physically reasonable as best they can. If you're developing your own kinematic chain calculations for use with the calibrated DH parameters, and you have an interest in computing the pose of other points on the robot besides the arm, I'd look into what the ROS drivers do, because otherwise it's kind of a hassle.

$\endgroup$

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.