ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

rc_control controllers modes

asked 2014-08-27 10:24:32 -0500

arennuit gravatar image

updated 2014-08-29 02:24:48 -0500

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.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2014-08-29 07:57:27 -0500

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.

edit flag offensive delete link more


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.

Adolfo Rodriguez T gravatar image Adolfo Rodriguez T  ( 2014-09-01 08:37:17 -0500 )edit

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.

arennuit gravatar image arennuit  ( 2014-09-01 10:10:13 -0500 )edit

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.

arennuit gravatar image arennuit  ( 2014-09-01 10:12:27 -0500 )edit

Question Tools

1 follower


Asked: 2014-08-27 10:24:32 -0500

Seen: 211 times

Last updated: Aug 29 '14