I am attempting to build a URDF for the UR10 that can be automatically generated using DH parameters.
What I currently do is read urcontrol.conf.UR10 and apply calibration.conf to them as follows:
corrected_a = delta_a (calibration.conf) + a (urcontrol.conf.UR10)
corrected_d = delta_d (calibration.conf) + d (urcontrol.conf.UR10)
corrected_alpha = delta_alpha (calibration.conf) + alpha (urcontrol.conf.UR10)
corrected_theta = delta_theta (calibration.conf)
I then use the corrected values to build my DH model. This works correctly if my values from calibration.conf are 0, but as soon as I use real robot values the transformation from ur_base to ee_link does not match the ee_link / tcp position readout on the UR simulator.
So my question is, how does the UR internally perform it’s IK using the calibration.conf to calculate its TCP position. Are all the values used? Are some omitted?
Note: My DH model is structured the same as the one posted on this page:
A follow up question on the same topic, what specifically is delta_theta in calibration.conf. Is it the 'angle about previous Z axis from old X to new X" as in a normal DH model?
And another question on the same problem. Within urcontrol.conf.UR10 there is also q_home_offset. What does this represent / get used for?
Adding DH calibration coefficients to urcontrol coefficients is the right way to go, and all values are used. Either robot is not using calibration file (wrong place, wrong format, wrong name, etc…) or your calculations are wrong.
delta_theta is an offset from joint “zero” position, to true zero for achieving repeatable home position.
q_home_offset is home position error magnitude in joint space. Home position - q_home_offset = [0, 0, 0, 0, 0, 0]
For anyone in the future going down this path, the final approach I used which worked was to add the coefficients together, giving a set of a, d, theta and alpha which were the sum of the calibration.conf and urcontrol files.
To use these with your system they need to be applied in order as specified by the unmodified DH model on wiki. So the final tansform from link to link will be:
In ROS tranformations are applied in XYZ R_x R_Y R_Z order so you cannot just feed the raw offset DH parameters into the joint definition in a URDF. First compute the final combined transform as follows:
Once computed the resulting matrix elements represent the individual parameters that can go directly into the URDF.