{"action":"closed","issue":{"url":"https://api.github.com/repos/ros-controls/ros_controllers/issues/166","labels_url":"https://api.github.com/repos/ros-controls/ros_controllers/issues/166/labels{/name}","comments_url":"https://api.github.com/repos/ros-controls/ros_controllers/issues/166/comments","events_url":"https://api.github.com/repos/ros-controls/ros_controllers/issues/166/events","html_url":"https://github.com/ros-controls/ros_controllers/issues/166","id":62788106,"number":166,"title":"what is an \"x controller\"","user":{"login":"goretkin","id":581043,"avatar_url":"https://avatars.githubusercontent.com/u/581043?v=3","gravatar_id":"","url":"https://api.github.com/users/goretkin","html_url":"https://github.com/goretkin","followers_url":"https://api.github.com/users/goretkin/followers","following_url":"https://api.github.com/users/goretkin/following{/other_user}","gists_url":"https://api.github.com/users/goretkin/gists{/gist_id}","starred_url":"https://api.github.com/users/goretkin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/goretkin/subscriptions","organizations_url":"https://api.github.com/users/goretkin/orgs","repos_url":"https://api.github.com/users/goretkin/repos","events_url":"https://api.github.com/users/goretkin/events{/privacy}","received_events_url":"https://api.github.com/users/goretkin/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-03-18T20:15:57Z","updated_at":"2015-03-20T15:38:06Z","closed_at":"2015-03-20T15:38:06Z","body":"I think the naming of \"x\" and \"controller\"  is confusing.\r\n\r\n`joint_state_controller/src/joint_state_controller.cpp`  doesn't do any control. I get that it runs in the control loop, but it's not a controller by standard definition. The name is probably here to stay because \"Controller Manager\" is not going to be renamed either, but it should be explained.\r\n\r\nThen there is this structure `x_controllers/src/joint_y_controller.cpp` where, for example, x=velocity, y=position.\r\nWhat this actually means is that \"you are controlling y by controlling x\", which is two different meanings of control. You are at liberty to set the x (velocity) and you will regulate y (position). (in another thread I see the word \"interface\", so in this case you have a velocity interface) Am I correct in this?\r\n\r\nI am also wondering, for general applications (where you have non-negligible inertia) you should only be using effort controllers (things that are at liberty to set the effort), right? Otherwise you can't actually set the velocity, the velocity is regulated, and you have a major-minor control loop structure and you have to care about the gains of the minor loop. I suppose you could have nearly unbounded force control and make a joint appear as if its velocity controlled.\r\n\r\nAlso if you actually have velocity control, then you really only need the P term of a velocity-controlled position regulator. You'll never overshoot, since it's a first-order linear system. And you'll also not have steady state error.\r\n\r\n"}}