Internal Force Sensor properties

We are very interested in an application using the force sensor, right now we compare the Robotiq FT 300 and the internal sensor of the UR.
There are some interesting measurement results and I really like to dicuss these with other people, because they are not easily understandable for me.

Questions are e.g. Why is the red line descending after some time? Why is there an additional offset between both sensors, already considering the 680g of the tool and the FT300?

The setup is:
The UR 5 robot is lifting a defined weight in the Z- Axis. The payload of the UR is assigned to the weight including a small hook for attaching the weight to the TCP. Additionaly, the FT 300 is attached to the TCP.
The weighing process starts by zeroing the FT 300 when the weight is just lying on a table.
After that the UR lifts the weight and the measurement starts after a waiting time of 1s.
The measurement takes 30seconds.

The results look like this:

Measurement 1:

Measurement 2:

Measurement 3 with 680g weight:

The blue line is the FT 300 external sensor, the red line is the internal sensor calling values with get_tcp_force()
The FT 300 should weigh around 4680g minus the tool and sensor weight of 680g, that is 4000g. This corresponds to a force of around 4kg * 9,81N/ms^2 = 39,2N

Another measurement was to repeat the weighing process ten times, in the following with 3680g respectively 3000g for the FT300 sensor (blue line).

I used a statistic software to calculate mean value and standard deviation as to check if the data is normally / gaus distributed. You can´t read the results in the screenshots so here in letters:
Internal sensor mean value: 35,5 N
Standard deviation: 3,6 N

FT300 mean value: 28,0 N
Standard deviation: 0,6 N

1 Like

The precision of the internal force sensor is:

Force: +/- 10 N
Torque: +/- 5 Nm
2 Likes

How does the internal force sensor work? Is there documentation to calibrate the force-torque sensors on a manipulator (CB3 or e-series)? Lastly, do the CB-series manipulators have force sensing capabilities?@jbm

On e-Series robots, there is a Force Torque sensor built in to the tool mount (after the last wrist) of the robot. This measures the forces and torques applied to the end of the robot arm. The software reports back the forces and torques computed to be at the Tool Center Point and is reported in base coordinates.

On CB3 robots, there is no Force Torque sensor built into the robot. The forces and torques are determined from the currents being applied to the joints to react the force.

What is the precision of the internal force sensor on the CB3 robots. And how do you best convert the values into N & N/m?

The precision on CB3 is not a published specification but it is roughly +/- 10N (torque is not something I’ve ever looked at). I would recommend averaging the values you get back within a thread as they are rather noisy. As PHO mentions, the values returned by urscript function get_tcp_force() are "at the TCP but relative to the base frame’. To get the forces AT the TCP relative to TCP use this equation :
Get force and torque values in tool coordinate system - 44911

Hi, I have been asked to use the robot to measure the torque of bolts being screwed into a plate. To check if they have the right torque or not ? Would you recommend the e-Series for such work ? If yes, how would you do it ?

Thank you,

Attila

The e-Series is capable of that, yes. :slight_smile: Just be aware of the specifications of the FT-sensor (UR10e: Precision 0.2 Nm and Accuracy 0.5 Nm).

It can be done in multiple ways, but I would do the following:

  1. Move robot above screw and zero FT-sensor (script: zero_ftsensor()).
  2. Move tool onto screw
  3. Use Force-command in Frame to rotate the tool with a predefined torque in Rz.
    3.1. Use Force/Rotate a given time (Wait X) or make a thread that monitors when the robot stops rotating and use that as the expression with the Wait.
  4. You can use an Assignment to write the current torque figure into a variable before moving the robot away from the screw.

This should ensure that the screw has at least the correct torque (the torque figure can still be too high).

If you want to measure the release torque of the screw, you should be able to do the same, but with a higher torque than needed. Then use a thread to monitor the highest torque applied to Rz during the unscrewing process.

Does this make sense? :slight_smile:

Hi,

thanks for the quick reply. Yes, it does make sense. I managed to use the Force and rotate around the frame, but I can’t set it to stop when I reach the required torque. If I set a Wait 2 seconds, it will rotate for 2 seconds. So the question is, how do I stop until I have the required torque ? And how do I assign a variable to read the torque value ? If I use get_tcp_force_tool() I get coordinates. So still a lot of fuzzy things. Can you recommend a link to a page where I could read a little bit more ?

Thank you,

Attila

I don’t know of a specific article on how to do this, I’m afraid.

When you use the Force-command, the robot will move until the specified force/torque value has been reached. So you should just set the value, that you want to the robot to reach.

Then you can make a thread, that monitors the speed of Rz with get_actual_tcp_speed() (6th value can be isolated by writing the script-function to a variable and using that variable’s 6th value (var_1[5])). You can then do Wait with an expression that says var_1[5]<0.01. Something like this:

zero_ftsensor()
Force
Wait 2.0
Wait var_1[5]<0.01
var_2 = var_1[5]
(End Force)

Thread
var_1 = force()
sync()
(End Thread)

The Wait 2.0 for getting the movement started, before waiting for the movement to stop. var_2 should then read the force applied when the force-command ends.