force_mode - task frame explanation

when using the force_mode command and defining the task frame what does it mean? does it mean that the robot TCP will apply forces and torques as desired (wrench command) relative to the task frame specified?

as an example, if I define the 6D VEC tcp_pose (tcp_pose=get_actual_tcp_pose)
as the task_frame, does it mean that the robot will apply a wrench relative to the TCP?

thank’s

Anyone is able to help? @Ebbe @ajp

Hi @ela3135, how the task frame is interpreted depends on the value you pass for your “type” parameter.

If you use type 2, then it will behave in the way you describe above. Type 1 will result in a point mode behavior, and type 3 in a motion type behavior.

If you take a look at the Force more template in Polyscope and the corresponding page in the user manual (screenshot below), it should help to explain the difference. In most cases you will probably want to stick with type 2.

thank you for your responess @ajp ,
I will try to explain the thing I am confused about.
lets say i will send the follow force command:
robot.set_force_remote(task_frame=[0, 0, 0, 0, 0, 0], selection_vector=[1, 1, 1, 1, 1, 1],
wrench=np.array([0, 0, -10, 0, 0, 0]), f_type=2, limits=[2, 2, 1.5, 1, 1, 1]).

this command will make the TCP apply a 10[N] force in the -z direction relative to the base frame but also a torque in x/y direction (10[N] * moment_arm). now, since I send a 0[Nm] torque command in x/y directions isn’t it a contradiction to the result I will get?

the thing I tried to stress in this example is that I can’t understand relative to which frame the torque command is computed.

Hi @ela3135, your understanding is correct, there should only be a movement in Z. I’d say the torque is probably most likely to imperfect calibration of the F/T sensor, I have often observed some drift while trying to maintain 0 force/torque.

You could try adjusting damping and gain for force control to see if that helps:

force_mode_set_damping()
force_mode_set_gain_scaling()

You could also monitor the FT sensor values using the below command, might help you to visualize the forces and torques the robot thinks it is compensating for/trying to cancel out.

get_actual_tcp_force()