Ask Your Question

ros control effort controllers explained?

asked 2019-08-22 20:45:27 -0600

PG_GrantDare gravatar image

updated 2019-08-23 05:48:30 -0600

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:

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

  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 flag offensive close merge delete

3 Answers

Sort by ยป oldest newest most voted

answered 2019-08-23 03:48:33 -0600

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.

edit flag offensive delete link 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

PG_GrantDare gravatar image PG_GrantDare  ( 2019-08-26 20:54:20 -0600 )edit

answered 2020-05-27 02:34:18 -0600

adel gravatar image

updated 2020-05-27 02:42:33 -0600

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.

edit flag offensive delete link more



Please do not post (follow-up) questions as answers here.

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

In addition: you appear to already have posted #q352210. Please do not post duplicates.

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

answered 2019-11-08 03:21:03 -0600

nabihandres gravatar image

updated 2019-11-08 14:34:37 -0600

jayess gravatar image

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

    type: "effort_controllers/JointVelocityController"
    joint: left_front_wheel_joint
    pid: {p: 1.0, i: 0, d: 0.1}
edit flag offensive delete link 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

PapaG gravatar image PapaG  ( 2019-11-11 15:55:48 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools



Asked: 2019-08-22 20:45:27 -0600

Seen: 2,496 times

Last updated: May 27 '20