{"action":"created","issue":{"url":"https://api.github.com/repos/ros-controls/ros_control/issues/204","labels_url":"https://api.github.com/repos/ros-controls/ros_control/issues/204/labels{/name}","comments_url":"https://api.github.com/repos/ros-controls/ros_control/issues/204/comments","events_url":"https://api.github.com/repos/ros-controls/ros_control/issues/204/events","html_url":"https://github.com/ros-controls/ros_control/pull/204","id":73954521,"number":204,"title":"Allow controllers to claim resources from multiple interfaces","user":{"login":"adolfo-rt","id":1128028,"avatar_url":"https://avatars.githubusercontent.com/u/1128028?v=3","gravatar_id":"","url":"https://api.github.com/users/adolfo-rt","html_url":"https://github.com/adolfo-rt","followers_url":"https://api.github.com/users/adolfo-rt/followers","following_url":"https://api.github.com/users/adolfo-rt/following{/other_user}","gists_url":"https://api.github.com/users/adolfo-rt/gists{/gist_id}","starred_url":"https://api.github.com/users/adolfo-rt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adolfo-rt/subscriptions","organizations_url":"https://api.github.com/users/adolfo-rt/orgs","repos_url":"https://api.github.com/users/adolfo-rt/repos","events_url":"https://api.github.com/users/adolfo-rt/events{/privacy}","received_events_url":"https://api.github.com/users/adolfo-rt/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/ros-controls/ros_control/labels/enhancement","name":"enhancement","color":"84b6eb"},{"url":"https://api.github.com/repos/ros-controls/ros_control/labels/in%20progress","name":"in progress","color":"ededed"}],"state":"open","locked":false,"assignee":{"login":"adolfo-rt","id":1128028,"avatar_url":"https://avatars.githubusercontent.com/u/1128028?v=3","gravatar_id":"","url":"https://api.github.com/users/adolfo-rt","html_url":"https://github.com/adolfo-rt","followers_url":"https://api.github.com/users/adolfo-rt/followers","following_url":"https://api.github.com/users/adolfo-rt/following{/other_user}","gists_url":"https://api.github.com/users/adolfo-rt/gists{/gist_id}","starred_url":"https://api.github.com/users/adolfo-rt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adolfo-rt/subscriptions","organizations_url":"https://api.github.com/users/adolfo-rt/orgs","repos_url":"https://api.github.com/users/adolfo-rt/repos","events_url":"https://api.github.com/users/adolfo-rt/events{/privacy}","received_events_url":"https://api.github.com/users/adolfo-rt/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/ros-controls/ros_control/milestones/2","html_url":"https://github.com/ros-controls/ros_control/milestones/Jade%20release","labels_url":"https://api.github.com/repos/ros-controls/ros_control/milestones/2/labels","id":1100485,"number":2,"title":"Jade release","description":"","creator":{"login":"adolfo-rt","id":1128028,"avatar_url":"https://avatars.githubusercontent.com/u/1128028?v=3","gravatar_id":"","url":"https://api.github.com/users/adolfo-rt","html_url":"https://github.com/adolfo-rt","followers_url":"https://api.github.com/users/adolfo-rt/followers","following_url":"https://api.github.com/users/adolfo-rt/following{/other_user}","gists_url":"https://api.github.com/users/adolfo-rt/gists{/gist_id}","starred_url":"https://api.github.com/users/adolfo-rt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adolfo-rt/subscriptions","organizations_url":"https://api.github.com/users/adolfo-rt/orgs","repos_url":"https://api.github.com/users/adolfo-rt/repos","events_url":"https://api.github.com/users/adolfo-rt/events{/privacy}","received_events_url":"https://api.github.com/users/adolfo-rt/received_events","type":"User","site_admin":false},"open_issues":1,"closed_issues":0,"state":"open","created_at":"2015-05-07T16:22:53Z","updated_at":"2015-05-07T16:25:01Z","due_on":"2015-05-21T22:00:00Z","closed_at":null},"comments":4,"created_at":"2015-05-07T11:39:56Z","updated_at":"2015-05-12T14:17:04Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/ros-controls/ros_control/pulls/204","html_url":"https://github.com/ros-controls/ros_control/pull/204","diff_url":"https://github.com/ros-controls/ros_control/pull/204.diff","patch_url":"https://github.com/ros-controls/ros_control/pull/204.patch"},"body":"### DO NOT MERGE YET \r\n\r\nFixes #75.\r\n\r\nThis PR contains the core changes required to allow controllers to claim resources from more than one hardware interface. It targets *jade-devel* because it breaks both C++ and ROS APIs (see #201 ). The changes are very localized, and mostly affect:\r\n * The `controller_manager/ListControllers` service.\r\n * The `initRequest` method of `ControllerBase` (mostly power users).\r\n\r\nThe work isn't finalized yet, pending tasks:\r\n * Add more tests exercising the new features\r\n * Propagate the changes to `rqt_controller_manager`\r\n * Propagate the changes to `ros_controllers`\r\n\r\nThe timeline is to get this reviewed and (if the review is positive) merged for the official jade release.\r\n\r\nWhat will not be in the scope of this work package is a `ControllerBase` subclass allowing for more than one HW interface, i.e., a multi-interface analog of `Controller`. Since that is an API addition, it can be iterated on with more time and incorporated later in the jade cycle.\r\n"},"comment":{"url":"https://api.github.com/repos/ros-controls/ros_control/issues/comments/101297892","html_url":"https://github.com/ros-controls/ros_control/pull/204#issuecomment-101297892","issue_url":"https://api.github.com/repos/ros-controls/ros_control/issues/204","id":101297892,"user":{"login":"adolfo-rt","id":1128028,"avatar_url":"https://avatars.githubusercontent.com/u/1128028?v=3","gravatar_id":"","url":"https://api.github.com/users/adolfo-rt","html_url":"https://github.com/adolfo-rt","followers_url":"https://api.github.com/users/adolfo-rt/followers","following_url":"https://api.github.com/users/adolfo-rt/following{/other_user}","gists_url":"https://api.github.com/users/adolfo-rt/gists{/gist_id}","starred_url":"https://api.github.com/users/adolfo-rt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adolfo-rt/subscriptions","organizations_url":"https://api.github.com/users/adolfo-rt/orgs","repos_url":"https://api.github.com/users/adolfo-rt/repos","events_url":"https://api.github.com/users/adolfo-rt/events{/privacy}","received_events_url":"https://api.github.com/users/adolfo-rt/received_events","type":"User","site_admin":false},"created_at":"2015-05-12T14:17:04Z","updated_at":"2015-05-12T14:17:04Z","body":"> What will not be in the scope of this work package is a ControllerBase subclass allowing for more than one HW interface, i.e., a multi-interface analog of Controller. Since that is an API addition, it can be iterated on with more time and incorporated later in the jade cycle.\r\n\r\nI went against this statement and implemented a proposal for a **multi-interface controller API**. I felt that a decent reference implementation would allow to make design shortcomings evident. So far so good :-). If you want to browse the proposed API, please look at the [MultiInterfaceController](https://github.com/ros-controls/ros_control/blob/dbb8e77a189796f7f5838692afd44c1d23025f34/controller_interface/include/controller_interface/multi_interface_controller.h) class. One nifty power-user feature is that **interfaces can be made optional**, so you can write a controller that for instance requires two interfaces, one of which is optional, and its absence won't prevent the controller from initializing and starting.\r\n\r\nI also took the opportunity in 2b0a823 to **unit test** this new class, and to test the `controller_manager` more thoroughly, in general."}}