Universal Robots Forum

How to adjust TCP with a offset/calibration?


I like some suggestions in how to solve a problem I believe should be pretty common.

We have a glue dispensing UR5, the tip of the dispenser might vary a little bit depending on how the operator tighten it or sometimes they are slightly off center from the supplier. Id like to start the program on the robot by doing a simple calibration by simple use a microswitch and move the dispenser tip towards it until the switch triggers in 2 directions and after that calculate a new TCP value.
I’d like to keep the program simple with the normal GUI waypoints to make it easy adjust and read the program. I could probably use scripts and have all the waypoints as variables and calculate new waypoints after the calibration but this will make the program very hard to follow and to adjust waypoints.

Is this possible or will I have to go the complicated way by using variables?

Create a plane/point in your features section of your installation. create your program by referencing all your waypoints to that plane/point. if you wanted to be more automatic, you could do your touch off using force (or direction node) and record your positions (X,Y) and write them to your plane/point variable origin at the beginning of the program.

1 Like

Thank you!
I was almost certain that features where constants but I tested this now and they are not.

But I still think that moving the TCP should be possible and in some cases easier and better as it is the TCP that is actually adjusted not the feature but I can live with adjusting the feature.

The “move here” on the waypoint does seem to use the default feature value but its not very big adjustments I make so its okey.

There are two versions of a Feature. You can see your feature under the “Pose” dropdown as well as under the “Variable” dropdown. The Pose version will have _const at the end of it, and is set the moment you save the feature, and cannot be programmatically changed. The version you can access under “Variables” does not have the “_const” and therefore can be changed. When the moves execute, they reference the Variable version. I didn’t know the “Move Here” moves didn’t, but I guess I do now!

1 Like

You could also use the Set_tcp Script. do the same thing with your touch off at the beginning but use set_tcp to update to your new offsets. Would be a few lines of script code to achieve but might be cleaner in the long run.

1 Like

Thank you both, that will explain why I thought the feature was a const Eric.

dbarton: Great! I like this idea much better. I made a quick test:

TcpOffset = get_tcp_offset()
TcpOffset[2] = TcpOffset[2]+0.4

It looks like success on the simulator and it also saves the new tcp and works with “move here” so if we run a calibration and change the waypoints we will always have the correct position of the tcp.

Thank you so much for the ideas that helped my brain to start working again :slight_smile: