ZebraDevs / robot_controllers

Robot control infrastructure
92 stars 79 forks source link

How to enable a custom effort-based controller in fetch driver #76

Closed sid-dey closed 2 years ago

sid-dey commented 2 years ago

Hi, I have been trying to implement a custom effort/torque-based controller for the Fetch robot arm and have been unsuccessful.

I have added the torque controller to the fetch_bringup/config/default_controllers.yaml and restarted the robot service to load my controller. And from print debug statements, I can tell that I am able to stop the default follow_joint_trajectory and gravity_compensation controllers and start the torque controller.

However, the robot arm does not seem to respond to the setEffort commands within the controller. And so the arm remains stationary instead of tracking the trajectory. I have been able to check that my controller works in Gazebo and that the simulated robot follows the torque commands, but cannot get the hardware to comply.

Are there some specific steps I have to follow or constraints I have to adhere to in order to send effort commands via setEffort from my controller?

Any and all comments are greatly appreciated!

p.s. the robot is running Ubuntu 14.04 if that information is helpful.

mikeferguson commented 2 years ago

Seeing as the gravity_compensation controller uses the setEffort interface, and your arm isn't falling during normal operation, I think the setEffort interface works. Are you sure that your torque commands are enough to actually move the joints?

As a side note, you probably want to keep the gravity_compensation running unless your controller implements gravity compensation.

sid-dey commented 2 years ago

Thank you for your reply.

As you said, it seemed the torque command I sent was small and so the arm did not respond. When I sent large open-loop torques to the continuous joints as a test, the joints would start rotating. So the setEffort interface is working for me!

I am guessing that the torque commands I sent were smaller than the static friction of the joints. However, I could not find friction values in the Fetch URDF. I guess this is why I did not face any issues when simulating in Gazebo?

Also, yep, our controller implements gravity compensation.

I am closing this issue as the original problem has been resolved. Thanks!

mikeferguson commented 2 years ago

However, I could not find friction values in the Fetch URDF.

This is unfortunately not a value that the URDF is designed to encode