Skip to content

Commit b13dc1c

Browse files
committed
Create ControllerPeerInfo and add the dependency
1 parent f1d6104 commit b13dc1c

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

controller_manager/src/controller_manager.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4304,6 +4304,27 @@ void ControllerManager::build_controllers_topology_info(
43044304
std::for_each(
43054305
controller_chained_state_interfaces_cache_.begin(),
43064306
controller_chained_state_interfaces_cache_.end(), [](auto & pair) { pair.second.clear(); });
4307+
4308+
const auto get_controller_peer_info = [&](const ControllerSpec & controller) -> ControllerPeerInfo
4309+
{
4310+
const auto cmd_itfs = controller.c->command_interface_configuration().names;
4311+
const auto state_itfs = controller.c->state_interface_configuration().names;
4312+
ControllerPeerInfo controller_peer_info;
4313+
controller_peer_info.name = controller.info.name;
4314+
controller_peer_info.command_interfaces =
4315+
std::unordered_set<std::string>(cmd_itfs.begin(), cmd_itfs.end());
4316+
controller_peer_info.state_interfaces =
4317+
std::unordered_set<std::string>(state_itfs.begin(), state_itfs.end());
4318+
controller_peer_info.controller = controller.c;
4319+
if (controller.c->is_chainable())
4320+
{
4321+
const auto ref_interface =
4322+
resource_manager_->get_controller_reference_interface_names(controller.info.name);
4323+
controller_peer_info.reference_interfaces =
4324+
std::unordered_set<std::string>(ref_interface.begin(), ref_interface.end());
4325+
}
4326+
return controller_peer_info;
4327+
};
43074328
for (const auto & controller : controllers)
43084329
{
43094330
if (is_controller_unconfigured(*controller.c))
@@ -4316,11 +4337,15 @@ void ControllerManager::build_controllers_topology_info(
43164337
const auto cmd_itfs = controller.c->command_interface_configuration().names;
43174338
const auto state_itfs = controller.c->state_interface_configuration().names;
43184339

4340+
ControllerPeerInfo controller_peer_info = get_controller_peer_info(controller);
43194341
for (const auto & cmd_itf : cmd_itfs)
43204342
{
43214343
controller_manager::ControllersListIterator ctrl_it;
43224344
if (is_interface_a_chained_interface(cmd_itf, controllers, ctrl_it))
43234345
{
4346+
ControllerPeerInfo succeeding_peer_info = get_controller_peer_info(*ctrl_it);
4347+
controller_chain_dependency_graph_.add_dependency(
4348+
controller_peer_info, succeeding_peer_info);
43244349
ros2_control::add_item(
43254350
controller_chain_spec_[controller.info.name].following_controllers, ctrl_it->info.name);
43264351
ros2_control::add_item(

0 commit comments

Comments
 (0)