{"action":"created","issue":{"url":"https://api.github.com/repos/ros-controls/ros_controllers/issues/144","labels_url":"https://api.github.com/repos/ros-controls/ros_controllers/issues/144/labels{/name}","comments_url":"https://api.github.com/repos/ros-controls/ros_controllers/issues/144/comments","events_url":"https://api.github.com/repos/ros-controls/ros_controllers/issues/144/events","html_url":"https://github.com/ros-controls/ros_controllers/issues/144","id":46697921,"number":144,"title":"hold position behavior in face of steady state error","user":{"login":"dcconner","id":66255,"avatar_url":"https://avatars.githubusercontent.com/u/66255?v=3","gravatar_id":"","url":"https://api.github.com/users/dcconner","html_url":"https://github.com/dcconner","followers_url":"https://api.github.com/users/dcconner/followers","following_url":"https://api.github.com/users/dcconner/following{/other_user}","gists_url":"https://api.github.com/users/dcconner/gists{/gist_id}","starred_url":"https://api.github.com/users/dcconner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dcconner/subscriptions","organizations_url":"https://api.github.com/users/dcconner/orgs","repos_url":"https://api.github.com/users/dcconner/repos","events_url":"https://api.github.com/users/dcconner/events{/privacy}","received_events_url":"https://api.github.com/users/dcconner/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":9,"created_at":"2014-10-24T02:11:14Z","updated_at":"2015-05-06T17:32:41Z","closed_at":null,"body":"We're seeing an issue on robot where a joint is physically unable to reach desired position due to actuator force limitation.  This results in a steady state error.\r\n\r\nThus we get a constant control command= k_p * error.\r\n\r\nWhen the trajectory enters the setHoldPosition it uses getPosition (actual position) on https://github.com/ros-controls/ros_controllers/blob/indigo-devel/joint_trajectory_controller/include/joint_trajectory_controller/joint_trajectory_controller_impl.h#L689\r\nThis takes error to zero, and reduces the servo command value causing a perturbation in the system.\r\n\r\nFor cases with potential steady state error (e.g. holding a heavy load), should we not hold to the previous desired position to provide constant control.\r\n\r\nOnly on controller (re)start should we initialize desired position equal to the actual position."},"comment":{"url":"https://api.github.com/repos/ros-controls/ros_controllers/issues/comments/99545525","html_url":"https://github.com/ros-controls/ros_controllers/issues/144#issuecomment-99545525","issue_url":"https://api.github.com/repos/ros-controls/ros_controllers/issues/144","id":99545525,"user":{"login":"sachinchitta","id":2379731,"avatar_url":"https://avatars.githubusercontent.com/u/2379731?v=3","gravatar_id":"","url":"https://api.github.com/users/sachinchitta","html_url":"https://github.com/sachinchitta","followers_url":"https://api.github.com/users/sachinchitta/followers","following_url":"https://api.github.com/users/sachinchitta/following{/other_user}","gists_url":"https://api.github.com/users/sachinchitta/gists{/gist_id}","starred_url":"https://api.github.com/users/sachinchitta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sachinchitta/subscriptions","organizations_url":"https://api.github.com/users/sachinchitta/orgs","repos_url":"https://api.github.com/users/sachinchitta/repos","events_url":"https://api.github.com/users/sachinchitta/events{/privacy}","received_events_url":"https://api.github.com/users/sachinchitta/received_events","type":"User","site_admin":false},"created_at":"2015-05-06T17:32:41Z","updated_at":"2015-05-06T17:32:41Z","body":"Had forgotten about this when I did #177. I like adolfo's last idea - go from desired to actual state - was going to suggest it as the next step for #177. The method that's currently implemented in setHold (looking for a sample at stop_time for a segment that's 2x stop_time and hoping it has zero velocity) will not work though. I think we need a better solution overall - the choice of stop_time is currently user-driven so kind of arbitrary, setHold can try to choose a target that is outside joint limits. Ultimately, we are looking for something that will bring the robot to a stop as fast as possible when you abort a trajectory (maybe along the trajectory itself). "}}