Universal Robots Forum

Get_tcp_force() in tcp frame

Hi everyone,

with the command get_tcp_force() I obtain the external force on the TCP but in base_frame, I try to use the function wrench_trans() in this way:

 F_base_list=[F[0], F[1], F[2], F[3], F[4], F[5]]
 F_tcp=wrench_trans(get_actual_tcp(), F_base_list)

The force give me the result that I expected , but the momentums are not correct.

There is a way to read direct the result of the force/torque sensor in TCP frame?
How to use the function wrench_trans() in the correct way?


Hello @Kiuv ,

Try this script to get your force in the tool reference frame:

def get_tcp_force_tool():

force_torque = get_tcp_force()
force_B = p[ force_torque[0], force_torque[1], force_torque[2], 0, 0, 0 ]
torque_B = p[ force_torque[3], force_torque[4], force_torque[5], 0, 0, 0 ]
tcp = get_actual_tcp_pose()
rotation_BT = p[ 0, 0, 0, tcp[3], tcp[4], tcp[5] ]
force_T = pose_trans( pose_inv(rotation_BT), force_B )
torque_T = pose_trans( pose_inv(rotation_BT), torque_B )
force_torque_T = p[ force_T[0], force_T[1], force_T[2], torque_T[0], torque_T[1], torque_T[2] ]
return force_torque_T


The reference variables are saved as pose variables to be used with the pose_trans() function.


ok thanks, perfect,
but now I have a doubt, why I can’t use the wrench function, and on which occasion
is it recommended?


I am using an ATI Gamma sensor in UR10 robot and I have some doubts about the FT readings frame-of-reference conversion.

My question is - is the force bias vector somehow explicitly taken into account during the conversion? E.g. do we try to figure out what the orientation of the sensor was during biasing? Or do the force values from sensor get transformed to the new frame of reference as-is?

1 Like