Universal Robots Forum

Payload measurement

Is it possible to find out the payload a UR is carrying at any point in time and whats the accuracy of the measurement? If this cannot be done as is, is there a sensor such as loadcell that can be attached to the arm to achieve the same?

You could use the force at the TCP but the built-in force feedback is fairly coarse. We use an OptoForce FT sensor on one of our robots to weigh a part in process to make a decision about how to process it. We’re pretty easily detecting a 1 kg difference between the two parts with a very minimal delay. If we were to allow the system to come fully to test and allow the sensor to stabilize more you should be able to detect forces in the 1-2 N range rather easy. Since you can zero out the sensor prior to picking the part you should be able to get repeatable measurements. I know some folks are doing the same thing with the FT sensor from Robotiq as well.

If you don’t know what an FT sensor is it’s basically a 6 axis load cell that measures the force and torque at the end of arm.

1 Like

Normally you would use one of FT sensors like @mbush suggested.
For example with Robotiq FT sensor we were able to achieve repeatable precision around +/- 10grams when lifting workpiece slowly slightly above a table, and using torque measurement around sensor X axis. Zeroing sensor before closing gripper was necessary.
With bare arm you could try to use holding torque of 4th or 5th axis to roughly estimate payload +/- few hundred grams. It needs careful moves before measurement (getting to measuring position slowly from the same direction every time). However that was done on new robot, it will drift with age for sure.

1 Like

Bumping this old thread, because I think my question belongs here.

get_tcp_force()
Returns the wrench (Force/Torque vector) at the TCP
The external wrench is computed based on the error between the joint
torques required to stay on the trajectory and the expected joint
torques. The function returns “p[Fx (N), Fy(N), Fz(N), TRx (Nm), TRy (Nm),
TRz (Nm)]”. where Fx, Fy, and Fz are the forces in the axes of the robot
base coordinate system measured in Newtons, and TRx, TRy, and TRz
are the torques around these axes measured in Newton times Meters.
The maximum force exerted along each axis is 300 Newtons.
Return Value
the wrench (pose)

Is this affected by TCP configuration? I mean, does it take into account currently set TCP center of gravity and mass?

Yes, the effects of the defined payload will be removed from these values. So if you’ve got your gripper holding a payload and have the payload weight and CoG correctly defined you should see zero TCP force (although in reality we never get zero values for these because of the indirect measurement method).

This is why we always stress the need to set payload weight and CoG as accurately as possible, as otherwise the forces generated due to those will be considered external (collision) forces and could lead to protective stops.

2 Likes

Hi all!

But, independently of using an external sensor or the “get_tcp_force()” function, how do you convert from this force/torque value to weigh?

Thanks in advance,

This was helpful

Something along the lines of:

wrench=get_tcp_force()
F_x=wrench[0]
F_y=wrench[1]
F_z=wrench[2]
F_m=sqrt(pow(F_x,2)+pow(F_y,2)+pow(F_z,2))
mass=F_m/9.81
1 Like