Skip to content

Commit af10525

Browse files
authored
Fix multiple calls to export reference interfaces (#1108)
1 parent 3c5ad10 commit af10525

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

controller_manager/src/controller_manager.cpp

+10-4
Original file line numberDiff line numberDiff line change
@@ -1639,11 +1639,17 @@ void ControllerManager::list_controllers_srv_cb(
16391639
}
16401640
}
16411641
// check reference interfaces only if controller is inactive or active
1642-
auto references = controllers[i].c->export_reference_interfaces();
1643-
controller_state.reference_interfaces.reserve(references.size());
1644-
for (const auto & reference : references)
1642+
if (controllers[i].c->is_chainable())
16451643
{
1646-
controller_state.reference_interfaces.push_back(reference.get_interface_name());
1644+
auto references =
1645+
resource_manager_->get_controller_reference_interface_names(controllers[i].info.name);
1646+
controller_state.reference_interfaces.reserve(references.size());
1647+
for (const auto & reference : references)
1648+
{
1649+
const std::string prefix_name = controllers[i].c->get_node()->get_name();
1650+
const std::string interface_name = reference.substr(prefix_name.size() + 1);
1651+
controller_state.reference_interfaces.push_back(interface_name);
1652+
}
16471653
}
16481654
}
16491655
response->controller.push_back(controller_state);

controller_manager/test/test_controller_manager_srvs.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,9 @@ TEST_F(TestControllerManagerSrvs, list_chained_controllers_srv)
269269
ASSERT_EQ(result->controller[0].is_chainable, true);
270270
ASSERT_EQ(result->controller[0].is_chained, false);
271271
ASSERT_EQ(result->controller[0].reference_interfaces.size(), 2u);
272-
;
272+
ASSERT_EQ("joint1/position", result->controller[0].reference_interfaces[0]);
273+
ASSERT_EQ("joint1/velocity", result->controller[0].reference_interfaces[1]);
274+
273275
ASSERT_EQ(result->controller[0].chain_connections.size(), 0u);
274276
// check test controller
275277
ASSERT_EQ(result->controller[1].state, "inactive");
@@ -300,6 +302,7 @@ TEST_F(TestControllerManagerSrvs, list_chained_controllers_srv)
300302
test_chainable_controller::TEST_CONTROLLER_NAME,
301303
result->controller[0].chain_connections[0].name);
302304
ASSERT_EQ(2u, result->controller[0].chain_connections[0].reference_interfaces.size());
305+
ASSERT_EQ("test_chainable_controller_name", result->controller[0].chain_connections[0].name);
303306
ASSERT_EQ("joint1/position", result->controller[0].chain_connections[0].reference_interfaces[0]);
304307
ASSERT_EQ("joint1/velocity", result->controller[0].chain_connections[0].reference_interfaces[1]);
305308
}

0 commit comments

Comments
 (0)