# ros control effort controllers explained?

Hi everyone,

I am trying to model the response of my robot in gazebo. My gazebo is really based around its torque, it is a logistics robot. I am currently using the following for control:

left_controller:
type: "velocity_controllers/JointGroupVelocityController"
joints: ['front_left_wheel', 'center_left_wheel', 'rear_left_wheel']

right_controller:
type: "velocity_controllers/JointGroupVelocityController"
joints: ['front_right_wheel', 'center_right_wheel', 'rear_right_wheel']


However upon further investigation I believe I have chosen to control velocity regardless of motor torque. So my question is, do the effort controllers control torque? if so, can I set a maximum torque for the controllers and control them with velocity commands? I have done some research and believe that is known as an effort velocity controller? Is it possible to specify the torque of a velocity joint controller (as I have used)?

I cannot find any use cases for this, can anyone provide a link to a use case?

If I instead control the joints through effort, what unit is that? is it torque? (Nm)?

thanks, Grant.

edit retag close merge delete

Sort by » oldest newest most voted

Yes effort controllers control torque in the case of rotary joints, or force in the case of linear joints. They are named that way since they are agnostic to the type of joint they're controlling.

Controllers are defined by the type of control input and the type of output they use to drive the joint. By the sounds of it you want a controller which accepts velocity commands going in, and produces torque (effort) commands going up. This will allow you to set an upper limit on the torque. You want an effort_controllers/joint_velocity_controller for this.

ROS uses SI units as standard, so yes an effort_controller connected to a rotary joint will output torque in Nm.

Hope this helps.

more

Hi, great answer! exactly what I was after :) I have 3 wheels driven from a chain system connected to a single motor, for this reason I was using the velocity group controller, is there such a controller for effort_controllers/joint_velocity_controllers

( 2019-08-26 20:54:20 -0600 )edit

Hello @PeterBlackerThe3rd, @PG_GrntDare,
I know it is a late question but I have a problem relative to the same point you spook about. I have an articulated truck which has front and rear part connected by a joint to change the articulation angle between them. The truck is weighting multiple tonnes. I created two controllers (effort_controllers/joint_velocity_controller) to control the movement of the truck. First one is to move the truck linearly by rotating the wheel axle. The second is to change the articulation angle between the two parts. I have three problems with that:
1- changing the articulation angle between the parts is done too heavily and slow (as it could be ignored).
2- The truck move linearly when applying a velocity to the wheel axle and its movement depends somehow on the PID parameter values but unfortunately I do not know what is the best value could be used in my case (heavy models).
3- Even though I have controllers to control the joints which means the joint have not to move freely, but they do.
My suspicions about the reasons: 1- The effort limit in the joint description in the urdf/xacro should be adjusted to deal with the heavy weights.
2- The controlled joints move freely because of the weight of the truck. I have tried many times to find the reasons based on my suspicions but I do not know if I do it in the right way. I will appreciate your help and thanks in advance.

more

2

This is not a forum and this is not an answer to the question posted by @PG_GrantDare.

( 2020-05-27 03:31:18 -0600 )edit

In my case i cant use effort_controllers/JointGroupVelocityController due to dont exist you need to separate each wheel and use like the example

left_front_wheel_controller:
type: "effort_controllers/JointVelocityController"
joint: left_front_wheel_joint
pid: {p: 1.0, i: 0, d: 0.1}

more

The robot I am attempting to simulate has 6 wheels with only 2 motors. This is why I am looking for this sort of behaviour

( 2019-11-11 15:55:48 -0600 )edit