07-15-2026, 03:16 AM
(This post was last modified: 07-15-2026, 02:09 PM by Albert.
Edit Reason: fixed text size
)
I am using a Techman TM7S to dispense glue using remote TCP. However, I noticed that there was a large discrepancy between real life/TMFlow and what was shown on the simulation. For example, I jogged the robot so a known point was concentric with a CNC milled hole, and level with the table. Then, I compared the joint angles and flange position in real life with RoboDK. I have also attached photos of the situation as a .zip for your understanding.
This situation is captured in the RDK file I attached, and my goal is to make the RoboDK flange position and TMFlow flange position as close as possible.
Joint position (same for both RoboDK and TMFlow controller):
[3.530000, 19.860000, 134.880000, 27.370000, -88.410000, -179.450000]
RoboDK end flange position:
[377.529, -128.543, 51.950, 92.109, -0.491, 91.921]
TMFlow controller end flange position:
[376.04, -129.14, 50.51, 92.49, -0.89, 91.95]
How could it be that the joints are the same, but the end flange positions are so different? I estimated that the discrepancy was because of the difference in DH parameters. When they make the robot, Techman does a factory calibration so their simulation in TMFlow is accurate. So, my goal is to have a model representative of this factory calibration in RoboDK.
To start I used the command "get kinematic signature" while connecting to the robot, which produced the following:
D_Theta,D_Alpha,D_a,D_d,D_Beta
Joint 1: 0.0000404,0.0179395,0.0165720,0.0000000,-0.0000246
Joint 2: 0.0733208,0.0259537,0.0041697,-0.0224419,-0.0247371
Joint 3: 0.2353199,0.1616824,0.0040169,-0.0224523,-0.0232760
Joint 4: -0.0959575,0.0439753,-0.1085193,-0.0224715,-0.0962841
Joint 5: 0.0340569,-0.0535858,0.0452030,-0.0297354,0.0338707
Joint 6: 0.3494795,0.2145668,-0.0680398,-0.0248465,0.2242535
But wait, what is this D_Beta term?? The table in RoboDK only has the usual four DH parameters, and the D_Beta term seems significant. I couldn't find any documentation about this term online, so I went to other methods for representing the factory calibration - if anyone knows how I can easily put this Delta_DH table into RoboDK in its entirety, please let me know.
My next goal was to get a URDF/.xacro that I could import using RoboDK's "Import URDF" app.
The first step was getting my specific robot's URDF. I achieved this using Techman's dedicated github repo, which provided me with a step by step guide. The end result of this was both a .URDF and .URDF.xacro, both of which I have attached as a zip. I have had success importing the .xacro and selecting the tm_description folder when prompted.
However, this is where my progress has halted. I expected the .xacro to import the full robot, in a working state but it imported the TM7S in separate links (1000x too big at first due to meter to mm conversion so I applied a 0.001 scale XD ).
When I tried making them into a "collaborative robot" mechanism, it did not achieve similarity to the TMFlow numbers (seen above in colour, the current state of the RDK mechanism in the RDK file demonstrates those joint angles so you can see it is not correct). I used as many of the factory-calibrated values from inspecting the .xacro as the mechanism builder would allow, but still there is a discrepancy.
When I tried rotating each of the joints, I can see that they haven't been joined correctly as they wiggle. I have attached a video of me rotating the joints to demonstrate this. My best guess would be that this discrepancy is closely related to the "D_Beta" values, as the value of D_Beta goes up for each joint which is what is observed in the video I sent.
Does anyone have experience with getting a factory calibrated model into RoboDK? Would it be possible to have a robot created using my URDF?
***Further research indicates this could be fixed by adding another term onto the end of the current transformation matrix - to the best of my knowledge a usual joint transformation matrix is:
T = Rz(theta) * Tz(d) * Tx(a) * Rx(alpha)
And according to Techman directly, "The D_Beta means “Compensation value for rotation about the y-direction for each axis”."
So this would mean that the joint transformation matrix could be:
T = Rz(theta) * Tz(d) * Tx(a) * Rx(alpha) * Ry(Beta)
Does that make sense? Is that correct? Would it be possible to implement this into RoboDK lickety-split so my boss doesn't fire me? Let me know in the comments below!
I would attach the latest version of my RDK station here, but I got the following error:
There has been an error due to your post data being empty. This could be due to a browser page refresh or direct access to this page. We recommend you press the browser back button and begin again.
So I uploaded it to a file sharing service, here is the link:
https://limewire.com/d/sbdDL#AkPJi6HldD
This situation is captured in the RDK file I attached, and my goal is to make the RoboDK flange position and TMFlow flange position as close as possible.
Joint position (same for both RoboDK and TMFlow controller):
[3.530000, 19.860000, 134.880000, 27.370000, -88.410000, -179.450000]
RoboDK end flange position:
[377.529, -128.543, 51.950, 92.109, -0.491, 91.921]
TMFlow controller end flange position:
[376.04, -129.14, 50.51, 92.49, -0.89, 91.95]
How could it be that the joints are the same, but the end flange positions are so different? I estimated that the discrepancy was because of the difference in DH parameters. When they make the robot, Techman does a factory calibration so their simulation in TMFlow is accurate. So, my goal is to have a model representative of this factory calibration in RoboDK.
To start I used the command "get kinematic signature" while connecting to the robot, which produced the following:
D_Theta,D_Alpha,D_a,D_d,D_Beta
Joint 1: 0.0000404,0.0179395,0.0165720,0.0000000,-0.0000246
Joint 2: 0.0733208,0.0259537,0.0041697,-0.0224419,-0.0247371
Joint 3: 0.2353199,0.1616824,0.0040169,-0.0224523,-0.0232760
Joint 4: -0.0959575,0.0439753,-0.1085193,-0.0224715,-0.0962841
Joint 5: 0.0340569,-0.0535858,0.0452030,-0.0297354,0.0338707
Joint 6: 0.3494795,0.2145668,-0.0680398,-0.0248465,0.2242535
But wait, what is this D_Beta term?? The table in RoboDK only has the usual four DH parameters, and the D_Beta term seems significant. I couldn't find any documentation about this term online, so I went to other methods for representing the factory calibration - if anyone knows how I can easily put this Delta_DH table into RoboDK in its entirety, please let me know.
My next goal was to get a URDF/.xacro that I could import using RoboDK's "Import URDF" app.
The first step was getting my specific robot's URDF. I achieved this using Techman's dedicated github repo, which provided me with a step by step guide. The end result of this was both a .URDF and .URDF.xacro, both of which I have attached as a zip. I have had success importing the .xacro and selecting the tm_description folder when prompted.
However, this is where my progress has halted. I expected the .xacro to import the full robot, in a working state but it imported the TM7S in separate links (1000x too big at first due to meter to mm conversion so I applied a 0.001 scale XD ).
When I tried making them into a "collaborative robot" mechanism, it did not achieve similarity to the TMFlow numbers (seen above in colour, the current state of the RDK mechanism in the RDK file demonstrates those joint angles so you can see it is not correct). I used as many of the factory-calibrated values from inspecting the .xacro as the mechanism builder would allow, but still there is a discrepancy.
When I tried rotating each of the joints, I can see that they haven't been joined correctly as they wiggle. I have attached a video of me rotating the joints to demonstrate this. My best guess would be that this discrepancy is closely related to the "D_Beta" values, as the value of D_Beta goes up for each joint which is what is observed in the video I sent.
Does anyone have experience with getting a factory calibrated model into RoboDK? Would it be possible to have a robot created using my URDF?
***Further research indicates this could be fixed by adding another term onto the end of the current transformation matrix - to the best of my knowledge a usual joint transformation matrix is:
T = Rz(theta) * Tz(d) * Tx(a) * Rx(alpha)
And according to Techman directly, "The D_Beta means “Compensation value for rotation about the y-direction for each axis”."
So this would mean that the joint transformation matrix could be:
T = Rz(theta) * Tz(d) * Tx(a) * Rx(alpha) * Ry(Beta)
Does that make sense? Is that correct? Would it be possible to implement this into RoboDK lickety-split so my boss doesn't fire me? Let me know in the comments below!
I would attach the latest version of my RDK station here, but I got the following error:
There has been an error due to your post data being empty. This could be due to a browser page refresh or direct access to this page. We recommend you press the browser back button and begin again.
So I uploaded it to a file sharing service, here is the link:
https://limewire.com/d/sbdDL#AkPJi6HldD
