Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

List controller claimed interfaces #407

Conversation

jordan-palacios
Copy link
Member

With this PR the controller manager list_controllers service now also informs about the claimed interfaces by each controller akin to what was done in the ROS1 version of the service.

ros2 service call /controller_manager/list_controllers controller_manager_msgs/srv/ListControllers
requester: making request: controller_manager_msgs.srv.ListControllers_Request()

response:
controller_manager_msgs.srv.ListControllers_Response(controller=[controller_manager_msgs.msg.ControllerState(name='joint_trajectory_controller', state='active', type='joint_trajectory_controller/JointTrajectoryController', claimed_interfaces=['joint1/position', 'joint2/position']), controller_manager_msgs.msg.ControllerState(name='joint_state_broadcaster', state='active', type='joint_state_broadcaster/JointStateBroadcaster', claimed_interfaces=[])])

Successfull controller switches require more than one call to update()
in order to update the controller list
@jordan-palacios jordan-palacios force-pushed the list_controller_claimed_interfaces branch from bbcccc0 to 87a6906 Compare May 3, 2021 12:58
@bmagyar bmagyar self-requested a review May 5, 2021 07:53
Copy link
Member

@bmagyar bmagyar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks good to me on first read, however it seems to have potential for small breaking changes. It seems justified though

Copy link
Member

@destogl destogl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great!

@jordan-palacios : Do you think it would be useful also to list state interfaces a controller has access to?

@jordan-palacios
Copy link
Member Author

@jordan-palacios : Do you think it would be useful also to list state interfaces a controller has access to?

@destogl More information does not hurt. Though since you can not really fail to claim state interfaces maybe I'd argue that information can be extracted from the controller itself? Anyway, if you think it could be useful open an issue and I'll take a look. Extending this should be straight forward.

@Abishalini
Copy link

Building the ROS2 driver breaks after this commit with the following error -

--- stderr: controller_manager                                      
In file included from /opt/ros/foxy/src/gtest_vendor/include/gtest/gtest.h:60,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/internal/gmock-internal-utils.h:47,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/gmock-actions.h:49,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/gmock.h:59,
                 from /home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:15:
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp: In member function 'virtual void TestControllerManagerSrvs_list_controllers_srv_Test::TestBody()':
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:150:37: error: '__gnu_cxx::__alloc_traits<std::allocator<controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::value_type' {aka 'struct controller_manager_msgs::msg::ControllerState_<std::allocator<void> >'} has no member named 'claimed_interfaces'
  150 |   ASSERT_TRUE(result->controller[0].claimed_interfaces.empty());
      |                                     ^~~~~~~~~~~~~~~~~~
/opt/ros/foxy/src/gtest_vendor/include/gtest/internal/gtest-internal.h:1368:34: note: in definition of macro 'GTEST_TEST_BOOLEAN_'
 1368 |       ::testing::AssertionResult(expression)) \
      |                                  ^~~~~~~~~~
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:150:3: note: in expansion of macro 'ASSERT_TRUE'
  150 |   ASSERT_TRUE(result->controller[0].claimed_interfaces.empty());
      |   ^~~~~~~~~~~
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:156:37: error: '__gnu_cxx::__alloc_traits<std::allocator<controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::value_type' {aka 'struct controller_manager_msgs::msg::ControllerState_<std::allocator<void> >'} has no member named 'claimed_interfaces'
  156 |   ASSERT_TRUE(result->controller[0].claimed_interfaces.empty());
      |                                     ^~~~~~~~~~~~~~~~~~
/opt/ros/foxy/src/gtest_vendor/include/gtest/internal/gtest-internal.h:1368:34: note: in definition of macro 'GTEST_TEST_BOOLEAN_'
 1368 |       ::testing::AssertionResult(expression)) \
      |                                  ^~~~~~~~~~
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:156:3: note: in expansion of macro 'ASSERT_TRUE'
  156 |   ASSERT_TRUE(result->controller[0].claimed_interfaces.empty());
      |   ^~~~~~~~~~~
In file included from /opt/ros/foxy/src/gtest_vendor/include/gtest/gtest.h:384,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/internal/gmock-internal-utils.h:47,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/gmock-actions.h:49,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/gmock.h:59,
                 from /home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:15:
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:167:27: error: '__gnu_cxx::__alloc_traits<std::allocator<controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::value_type' {aka 'struct controller_manager_msgs::msg::ControllerState_<std::allocator<void> >'} has no member named 'claimed_interfaces'
  167 |     result->controller[0].claimed_interfaces,
      |                           ^~~~~~~~~~~~~~~~~~
/opt/ros/foxy/src/gtest_vendor/include/gtest/gtest_pred_impl.h:76:52: note: in definition of macro 'GTEST_ASSERT_'
   76 |   if (const ::testing::AssertionResult gtest_ar = (expression)) \
      |                                                    ^~~~~~~~~~
/opt/ros/foxy/src/gtest_vendor/include/gtest/gtest_pred_impl.h:117:3: note: in expansion of macro 'GTEST_PRED_FORMAT1_'
  117 |   GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)
      |   ^~~~~~~~~~~~~~~~~~~
/opt/ros/foxy/src/gmock_vendor/include/gmock/gmock-matchers.h:4512:37: note: in expansion of macro 'ASSERT_PRED_FORMAT1'
 4512 | #define ASSERT_THAT(value, matcher) ASSERT_PRED_FORMAT1(\
      |                                     ^~~~~~~~~~~~~~~~~~~
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:166:3: note: in expansion of macro 'ASSERT_THAT'
  166 |   ASSERT_THAT(
      |   ^~~~~~~~~~~
In file included from /opt/ros/foxy/src/gtest_vendor/include/gtest/gtest.h:60,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/internal/gmock-internal-utils.h:47,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/gmock-actions.h:49,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/gmock.h:59,
                 from /home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:15:
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:178:37: error: '__gnu_cxx::__alloc_traits<std::allocator<controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::value_type' {aka 'struct controller_manager_msgs::msg::ControllerState_<std::allocator<void> >'} has no member named 'claimed_interfaces'
  178 |   ASSERT_TRUE(result->controller[0].claimed_interfaces.empty());
      |                                     ^~~~~~~~~~~~~~~~~~
/opt/ros/foxy/src/gtest_vendor/include/gtest/internal/gtest-internal.h:1368:34: note: in definition of macro 'GTEST_TEST_BOOLEAN_'
 1368 |       ::testing::AssertionResult(expression)) \
      |                                  ^~~~~~~~~~
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:178:3: note: in expansion of macro 'ASSERT_TRUE'
  178 |   ASSERT_TRUE(result->controller[0].claimed_interfaces.empty());
      |   ^~~~~~~~~~~
In file included from /opt/ros/foxy/src/gtest_vendor/include/gtest/gtest.h:384,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/internal/gmock-internal-utils.h:47,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/gmock-actions.h:49,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/gmock.h:59,
                 from /home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:15:
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:191:27: error: '__gnu_cxx::__alloc_traits<std::allocator<controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::value_type' {aka 'struct controller_manager_msgs::msg::ControllerState_<std::allocator<void> >'} has no member named 'claimed_interfaces'
  191 |     result->controller[0].claimed_interfaces,
      |                           ^~~~~~~~~~~~~~~~~~
/opt/ros/foxy/src/gtest_vendor/include/gtest/gtest_pred_impl.h:76:52: note: in definition of macro 'GTEST_ASSERT_'
   76 |   if (const ::testing::AssertionResult gtest_ar = (expression)) \
      |                                                    ^~~~~~~~~~
/opt/ros/foxy/src/gtest_vendor/include/gtest/gtest_pred_impl.h:117:3: note: in expansion of macro 'GTEST_PRED_FORMAT1_'
  117 |   GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)
      |   ^~~~~~~~~~~~~~~~~~~
/opt/ros/foxy/src/gmock_vendor/include/gmock/gmock-matchers.h:4512:37: note: in expansion of macro 'ASSERT_PRED_FORMAT1'
 4512 | #define ASSERT_THAT(value, matcher) ASSERT_PRED_FORMAT1(\
      |                                     ^~~~~~~~~~~~~~~~~~~
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:190:3: note: in expansion of macro 'ASSERT_THAT'
  190 |   ASSERT_THAT(
      |   ^~~~~~~~~~~
In file included from /opt/ros/foxy/src/gtest_vendor/include/gtest/gtest.h:60,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/internal/gmock-internal-utils.h:47,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/gmock-actions.h:49,
                 from /opt/ros/foxy/src/gmock_vendor/include/gmock/gmock.h:59,
                 from /home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:15:
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:202:37: error: '__gnu_cxx::__alloc_traits<std::allocator<controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >, controller_manager_msgs::msg::ControllerState_<std::allocator<void> > >::value_type' {aka 'struct controller_manager_msgs::msg::ControllerState_<std::allocator<void> >'} has no member named 'claimed_interfaces'
  202 |   ASSERT_TRUE(result->controller[0].claimed_interfaces.empty());
      |                                     ^~~~~~~~~~~~~~~~~~
/opt/ros/foxy/src/gtest_vendor/include/gtest/internal/gtest-internal.h:1368:34: note: in definition of macro 'GTEST_TEST_BOOLEAN_'
 1368 |       ::testing::AssertionResult(expression)) \
      |                                  ^~~~~~~~~~
/home/picknik/ws_light_demo/src/ros2_control/controller_manager/test/test_controller_manager_srvs.cpp:202:3: note: in expansion of macro 'ASSERT_TRUE'
  202 |   ASSERT_TRUE(result->controller[0].claimed_interfaces.empty());
      |   ^~~~~~~~~~~
make[2]: *** [CMakeFiles/test_controller_manager_srvs.dir/build.make:63: CMakeFiles/test_controller_manager_srvs.dir/test/test_controller_manager_srvs.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:425: CMakeFiles/test_controller_manager_srvs.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:141: all] Error 2
---
Failed   <<< controller_manager [24.9s, exited with code 2]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants