Implementing an "Advanced Freedrive Mode"

Dear UR+ Development SupportI am a software engineer developing an application using UR e-Series robots.

The Goal I am trying to implement a custom “Advanced Freedrive Mode.” While the built-in freedrive_mode() is useful, it feels somewhat “stiff” or “heavy” because the user still has to overcome the robot’s joint friction and inertia manually.

My goal is to achieve a User Experience (UX) similar to an “Electric Bike’s Pedal Assist.”

  • The robot motors should actively compensate for friction and inertia.

  • It should move lightly with minimal force.

  • Crucially: It must stop instantly when the user releases their hand (Zero Inertia feel).

Current Attempts & Issues I tried implementing this using the official Admittance Control example (Mass-Spring-Damper model) from the UR GitHub repository.

However, I found the M-D-K (2nd order) model unsuitable for this specific “Freedrive” purpose:

  1. Drifting: Due to the simulated “Mass” and integration, the robot continues to glide/drift even after the force is released.

  2. Tuning Difficulties: It was extremely difficult to tune the parameters to achieve both “feather-light movement” and “instant stopping” at the same time.

Questions for the Community Since standard Admittance Control seems to introduce unwanted simulated inertia:

  1. What is the recommended approach or control strategy in the industry to create this kind of “Weightless & Instant-Stop” Freedrive experience?

  2. Are there any specific algorithms, logic patterns, or sample codes you would recommend for processing F/T sensor data to achieve this behavior on UR robots?

I am looking for a robust method that ensures smooth operation without jitter while eliminating the “sliding on ice” feeling.

Any advice or shared experiences would be greatly appreciated!

Thanks in advance.

1 Like

I can’t help you with your actual question, but I just want to point out that you should not need to overcome the friction and inertia of the joints, if you use the current freedrive mode and exert force to the FT sensor directly and not the joints themselves. :slight_smile:

Thank you very much for your response.

I believe the feeling I’m aiming for will become clearer if you take a look at this video:
https://www.youtube.com/watch?v=JtUhtbHDtB8

Actually, I’m afraid I didn’t fully understand your previous explanation.
What I’m trying to achieve is not really about “overcoming friction and inertia,” but rather allowing the user to directly grasp the end effector with their hand and move it intuitively and effortlessly exactly as intended.

we had the same problem that pushing the free drive button and moving the robot was cumbersome.

we made a switch on a input, we use both hands on the robot much like a welding cobot from Migatronic

Hi normaljun95

If this is the behavior, you are looking for, then I suggest that you try Constrained Freedrive after the improvements, which were released in PolyScope 5.24: Release Notes 5.24.X and PolyScopeX 10.11: Release Notes 10.11.X

In the video, it looks like the z-coordinate and maybe also x or y is locked.

Try it out,

Dan