Usage of vel FF and torque FF

I am doing my PhD in an area of humanoid robotics. The lower part of the robot our lab has 12DOF Now I am implementing usage of CAN bus for BLDC motors. We shall have 6 ODrives that control 2 motors each.
Currently I am facing a bit of ptroblem to control the rotation of the motors via CAN bus command 0x00C “Set Input Pos”. When I send position (Input Pos) only I have quite a big delay in the system response. If I add velocity (Vel FF) delay in response almost disappears but instead of it I have an overshoot. Can you please share some tips how to use this CAN bus command using all three inputs parameters (Input Pos, Vel FF and Torque FF)?

Curious. There shouldn’t be a delay in the input_pos command. Can you share any data?

These ara data for rotating one the robot joints. The reference position is predefined and is the same for both cases. In first case, response seems to be a bit slow and “lazy”. The joint does not time to follow the refernce trajectory and when the motor shall change its rotation direction actual angular position did not reach max values.

Then I added velFF value to command 0x00C “Set Input Pos”. Response turned to be much better but now I have overshoot with max values exceeding those of the reference.

PS. I can upload only one embedded picture as a new user. The second graph shall follow.


The second graph with oversoot.

1 Like

The first graph might be dominated by the velocity integrator gain… Try reducing the integrator gain by quite a lot, and increasing vel_gain instead.

1 Like

You can add torque feed forward also and I think it will track even better.
That said you can also try tuning it a bit as well.


Oh ok, so the input_pos updates immediately, the response is just slow? Yeah, that’s tuning.

I thought you meant input_pos was taking some tens of milliseconds to update.

Thank you guys for your help! I will try to tune my setup and then share with you a new reference vs actual position graph.

I resolved my problem. The parameter odrv0.axis1.controller.config.input_filter_bandwidth was equal to 1 and slowed down the overall response of the system. I changed it to 100 and got much better reference vs actual response. The motor gains were correct. I followed the tuning procedure but end up with the same gains that were initially. Thank you for your help and prompt replies.