Assistive torque source

I’m trying to achieve a specific type of BLDC motor behaviour and would appreciate advice on whether this is possible with ODrive (and which controller would support it).
Goal:
I want the motor to apply a constant torque that is just below the threshold required to rotate the load shaft on its own. When an external force is applied to the load shaft (less than the torque needed to move it freely), the motor should assist the motion so that both rotate together at whatever RPM the load shaft dictates. Essentially, I want the motor to behave like an “assistive torque source,” following the user‑driven motion rather than imposing its own velocity.
Additional requirement:
The system must track absolute position (0–360° range), but it should not attempt to return to any fixed home position unless explicitly commanded. In other words, position feedback is required, but not closed‑loop position control unless requested.
Questions:

Is this behaviour achievable using ODrive’s torque control mode or a combination of its control modes?
Does this require a specific ODrive model or encoder setup?
Are there recommended configurations for achieving this “assist-as-needed” style of torque support?

Thanks in advance for any guidance.

Regards,
Martyn

Hey! Yeah, this is totally possible. This sounds like torque limited velocity control mode, or velocity limited torque control mode (they’re both mathematically equivalent).

No requirement on which specific encoder to use, though I’d strongly recommend against hall encoders - their low resolution will cause the velocity control fidelity (in either mode) to be pretty poor.

Thanks for the reply Solomondg.

Sounds like it will do the job, we’ll get some part ordered.

Hi @solomondg,

We now have the S1 setup on a BLDC using onboard encoder and have run through calibration, I had an issue with vibration at idle but that seems to be resolved by reducing gains to zero.

I can control position and velocity as expected using Dashboard but not sure if torque control is doing anything, it just seems to hold motor in position no matter what setting.

Is it possible to bench test to get the ‘power assist’ effect in the ODrive GUI? I’ve looked through the Docs but can’t find the answer so far. Any extra pointers greatly appreciated

it just seems to hold motor in position no matter what setting

Velocity-limited torque mode requires a correctly tuned vel_gain – this seems like a symptom of zeroing the gains. I’d recommend checking out the tuning guide. Or, here’s my 60-second “good enough” tuning routine – it’ll get you to around 80-90% of theoretically optimal, with very little effort:

  1. Put the motor in velocity control, with a velocity setpoint of zero. Zero out the vel_integrator_gain. Set vel_gain to some small number, maybe start with 0.001.
  2. Perturb the motor by hand (just move it a bit then release), and increase vel_gain until you feel it start to vibrate (either while perturbing by hand, or after releasing) – essentially right at the point where the system starts to go unstable. Now drop the vel_gain by 50%.
  3. Keeping that value of vel_gain, do the same but with vel_integrator_gain, setting the final value to 50% of the just-starting-to-vibrate gain.
  4. Done! Make sure to save the configuration for the future.

Is it possible to bench test to get the ‘power assist’ effect in the ODrive GUI? I’ve looked through the Docs but can’t find the answer so far. Any extra pointers greatly appreciated

Main question – does the amount of torque the ODrive outputs ever need to vary? Or can it always be at that “almost enough to move the shaft” point, no matter the velocity (e.g. even when the shaft is turning)?

Thanks I’ll have a go at your tuning technique.

Main question – does the amount of torque the ODrive outputs ever need to vary? Or can it always be at that “almost enough to move the shaft” point, no matter the velocity (e.g. even when the shaft is turning)?

When in the ‘power assist’ mode the torque can remain the same.

In that case, you should just have to find the torque value that gives your almost-moving-the-shaft torque, and then leave it at that!

Great thanks, that has helped a lot. I’m now getting a pretty good ‘power assist’ feel using the Dashboard with Torque setpoint at 0.014NM. Just need to get this working in machine environment.

I’m also interested in the anti-cogging feature, It looks like that is only an option through python and not the GUI, is that correct?

Great thanks, that has helped a lot. I’m now getting a pretty good ‘power assist’ feel using the Dashboard with Torque setpoint at 0.014NM. Just need to get this working in machine environment.

Great to hear!

I’m also interested in the anti-cogging feature, It looks like that is only an option through python and not the GUI, is that correct?

Nope, anything you can do in Python/ODrivetool you can do in the GUI, and vice versa – you can use the inspector tab in the GUI for setting the parameters just like you’d do on the Python command line.