Universal Robots Forum

Only compliance at TCP, not rest of robot


Currently, I am working on a project to create an impedance controller for the ur5e. I managed to create an impedance controller with force_mode().

However, in forcemode(compliance=[1,1,1,1,1,1]) the robot is only compliant at the TCP, there is no compliance when touching the robot anywhere but the TCP. For my project, it is important that the robot is compliant everywhere, not only at the TCP.

Is it possible to also have compliance in forcemode when you touch the robot somewhere else than the TCP?


assuming you are using an eSeries with the Force/Torque-Sensor at the tool flange, this is the only point where the applied force is registered.

Would putting the robot in freedrive be an alternative for your application?

1 Like

Thanks for the quick response.

Yes, I use the UR5e, sorry I forgot to mention that.

Freedrive did pass my mind however, I was in the assumption that this could not be controlled externally. But now you mentioned it, I found this support article: https://www.universal-robots.com/articles/ur/external-freedrive-button/

Right now I am controlling the Wrench vector externally with the RTDE. The external application calculates the wrench based on the joint state of the robot, and force_mode() is continuously running in a loop on the robot in a URScript program.

Is it possible, with the method in the link above, to enable compliance on the whole robot?

I now use the freedrive_mode() command before the forcemode() loop:

1.- freedrive_mode()
2.- Loop while run==True:
3.- …sync()
4.- …force_mode()
6.- end_force_mode()
7.- halt

However, I still have only compliance at the TCP.

Placing freedrive_mode() inside the loop with force_mode() and an extra sync function, the program constantly switches from freedrive to not freedrive to freedrive… So it seems that the robot cannot be in freedrive_mode and force_mode at the same time.
Does this mean that it is not possible to have compliance on the whole robot while the robot is in force_mode()?

Yes, the robot either is in force mode or freedrive.