# UR10 Calibration.conf DH model generation

**URL:** <https://forum.universal-robots.com/t/ur10-calibration-conf-dh-model-generation/1638>\
**Category:** Technical Questions\
**Tags:** robotics\
**Created:** [February 16, 2018, 9:42am UTC](https://forum.universal-robots.com/t/ur10-calibration-conf-dh-model-generation/1638 "2018-02-16T09:42:35Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon3995](https://avatars.discourse-cdn.com/v4/letter/a/7cd45c/32.png) [@anon3995](https://forum.universal-robots.com/u/anon3995)\
**Post date:** [February 16, 2018, 9:42am UTC](https://forum.universal-robots.com/t/ur10-calibration-conf-dh-model-generation/1638/1 "2018-02-16T09:42:35Z")

</div>

Hi all,  
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:  
[https://www.universal-robots.com/how-tos-and-faqs/faq/ur-faq/actual-center-of-mass-for-robot-17264/](https://www.universal-robots.com/how-tos-and-faqs/faq/ur-faq/actual-center-of-mass-for-robot-17264/)

---

<div class="post-metadata">

**Author:** ![anon3995](https://avatars.discourse-cdn.com/v4/letter/a/7cd45c/32.png) [@anon3995](https://forum.universal-robots.com/u/anon3995)\
**Post date:** [February 18, 2018, 11:15pm UTC](https://forum.universal-robots.com/t/ur10-calibration-conf-dh-model-generation/1638/2 "2018-02-18T23:15:06Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![anon3995](https://avatars.discourse-cdn.com/v4/letter/a/7cd45c/32.png) [@anon3995](https://forum.universal-robots.com/u/anon3995)\
**Post date:** [February 20, 2018, 11:35pm UTC](https://forum.universal-robots.com/t/ur10-calibration-conf-dh-model-generation/1638/3 "2018-02-20T23:35:17Z")

</div>

And another question on the same problem. Within urcontrol.conf.UR10 there is also q\_home\_offset. What does this represent / get used for?

---

<div class="post-metadata">

**Author:** ![mmi](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.universal-robots.com/mmi/32/691_2.png) [@mmi](https://forum.universal-robots.com/u/mmi)\
**Post date:** [February 22, 2018, 1:51pm UTC](https://forum.universal-robots.com/t/ur10-calibration-conf-dh-model-generation/1638/4 "2018-02-22T13:51:57Z")

</div>

Hi,  
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]

---

<div class="post-metadata">

**Author:** ![anon3995](https://avatars.discourse-cdn.com/v4/letter/a/7cd45c/32.png) [@anon3995](https://forum.universal-robots.com/u/anon3995)\
**Post date:** [February 23, 2018, 12:30am UTC](https://forum.universal-robots.com/t/ur10-calibration-conf-dh-model-generation/1638/5 "2018-02-23T00:30:40Z")

</div>

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:  
[https://wikimedia.org/api/rest\_v1/media/math/render/svg/70a95f9836e5efbe052491c0d73a1a76d729bc4d](https://wikimedia.org/api/rest_v1/media/math/render/svg/70a95f9836e5efbe052491c0d73a1a76d729bc4d)

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:

[https://wikimedia.org/api/rest\_v1/media/math/render/svg/6963d0c47a3a894ff0719c8df348d188b996074e](https://wikimedia.org/api/rest_v1/media/math/render/svg/6963d0c47a3a894ff0719c8df348d188b996074e)

Once computed the resulting matrix elements represent the individual parameters that can go directly into the URDF.

---

<div class="post-metadata">

**Author:** ![mojer](https://avatars.discourse-cdn.com/v4/letter/m/ac91a4/32.png) [@mojer](https://forum.universal-robots.com/u/mojer)\
**Post date:** [July 8, 2022, 10:37am UTC](https://forum.universal-robots.com/t/ur10-calibration-conf-dh-model-generation/1638/7 "2022-07-08T10:37:39Z")

</div>

Hi following his topics.  
Which are the units in the calibration.conf file. Because I see that in the urcontrol.conf.Ur10 the denabit hatemberrs are in meters and radians.

However taking a look at the my calibration file which has these values

delta\_theta = [-9.40498298408416866e-06, 0.27068412154354593, -0.314903939784922426, 0.0442527515792477608, 9.34172007197231709e-06, 5.93755160400425455e-05]  
delta\_a = [4.68164294735672648e-05, 0.0220582008711670552, 0.00158057850161708036, -0.00035922185146348458, 0.000281769745099834986, 0]  
delta\_d = [0.000316664403174682363, 91.8991379508659634, -90.4485183223671356, -1.45123705292539418, -0.000375134660503345652, -0.000216232948727732022]  
delta\_alpha = [0.00031730707235522182, 0.0017812786528813092, -0.0174204031901766219, -0.00145566498545623979, -8.42411731953873755e-05, 0]

is imposible that delta\_d is in m since it has values around 90, an also delta\_theta in radians it seems to me that has very large values 0.3 radians is like 20º which I think is two much. So I understand the for delta\_d and delta\_a units are mm and for delta\_alpha and delta\_theta are degrees. Is that correct?

---

<div class="post-metadata">

**Author:** ![mvrooij](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.universal-robots.com/mvrooij/32/2151_2.png) [@mvrooij](https://forum.universal-robots.com/u/mvrooij)\
**Post date:** [August 8, 2022, 1:13pm UTC](https://forum.universal-robots.com/t/ur10-calibration-conf-dh-model-generation/1638/8 "2022-08-08T13:13:32Z")

</div>

It’s meters and radians. The large values are actually correct, since they cancel each other out in practice. But I agree, they do look weird 🙂

---

<div class="post-metadata">

**Author:** ![mojer](https://avatars.discourse-cdn.com/v4/letter/m/ac91a4/32.png) [@mojer](https://forum.universal-robots.com/u/mojer)\
**Post date:** [August 9, 2022, 6:12am UTC](https://forum.universal-robots.com/t/ur10-calibration-conf-dh-model-generation/1638/9 "2022-08-09T06:12:14Z")

</div>

ok, I see. Thank you very much 😃 !!

---

<div class="post-metadata">

**Author:** ![robin\_gdwl](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.universal-robots.com/robin_gdwl/32/2676_2.png) [@robin\_gdwl](https://forum.universal-robots.com/u/robin_gdwl)\
**Post date:** [April 13, 2023, 2:50pm UTC](https://forum.universal-robots.com/t/ur10-calibration-conf-dh-model-generation/1638/10 "2023-04-13T14:50:27Z")

</div>

Hello @mojer, were you able to correctly use the DH-parameter deltas?  
I am getting similar values and most of them are either very small or cancel each other, however, delta\_a[1] (which is around 22mm in your case: 0.0220582…) does not cancel out and causes a corresponding offset in the final position in my case.  
Did this work for you or did you have problems with this as well?  
See here for my topic on this problem: [Robot Calibration DH-Parameters mismatch](https://forum.universal-robots.com/t/robot-calibration-dh-parameters-mismatch/27933)
