Rosanswers logo

Dear all,

I am currently checking the ros_controllers and I am not sure I understand the way the different modes are organized. From the ros_control wiki I read the controllers can be either:

  1. effort_controllers
    1. joint_effort_controller
    2. joint_position_controller
    3. joint_velocity_controller
  2. position_controllers
    1. joint_position_controller
  3. velocity_controllers
    1. joint_velocity_controllers

From this I understand there are effort, position and velocity controllers which respectively take a desired effort, position or velocity as input and do their best to get the system state to this desired input (these controllers correspond to entries 1., 2. and 3.).

Now, what I do not understand is the meaning of sub-categories 1.1., 1.2., 1.3., 2.1 ... If I choose 1.2. for example, what's this controller? It takes a desired effort as input and probably does something related to a position as its name implies... But what?

Also controller 1.2. == 2.1. and controller 1.3. == 3.1., how is that possible? I guess it is related to my first question...

Anyone with a better understanding than me?

Thanks guys,

Antoine Rennuit.

Originally posted by arennuit on ROS Answers with karma: 955 on 2014-08-27

Post score: 0


1 Answer 1


Rosanswers logo

The effort_controllers all write their commands out to a effort interface. So in 1.1 the incoming effort is passed on (which is why the ForwardCommandController is used there, but for 1.2 and 1.3, the effort output has to be computed using a PID taking position or velocity errors as input, respectively.

Originally posted by Stefan Kohlbrecher with karma: 24361 on 2014-08-29

This answer was ACCEPTED on the original site

Post score: 3

Original comments

Comment by Adolfo Rodriguez T on 2014-09-01:
Correct. effort_controllers contains controllers for acting on a single joint belonging to an effort interface. The package contains plugins for different input commands (position, velocity, effort), which are all translated to effort commands. The same reasoning applies to the other packages.

Comment by arennuit on 2014-09-01:
Ok, so the category name is the output's dimension, and the sub-category name is the input's dimension. e.g. effort_controllers::JointPositionController 1.2 takes a desired position as input and outputs a command which is a desired effort. Now what I also understand is that controllers 1.2 != 2.1.

Comment by arennuit on 2014-09-01:
I was initially misled by 1.2 and 2.1 having the same name. They indeed have the same name but they are actually different classes (in different namespaces). Thanks guys.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.