Skip to content

Commit e1ff130

Browse files
committed
Create ControllerPeerInfo and add the dependency
1 parent 5f3d162 commit e1ff130

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
@@ -4303,6 +4303,27 @@ void ControllerManager::build_controllers_topology_info(
43034303
std::for_each(
43044304
controller_chained_state_interfaces_cache_.begin(),
43054305
controller_chained_state_interfaces_cache_.end(), [](auto & pair) { pair.second.clear(); });
4306+
4307+
const auto get_controller_peer_info = [&](const ControllerSpec & controller) -> ControllerPeerInfo
4308+
{
4309+
const auto cmd_itfs = controller.c->command_interface_configuration().names;
4310+
const auto state_itfs = controller.c->state_interface_configuration().names;
4311+
ControllerPeerInfo controller_peer_info;
4312+
controller_peer_info.name = controller.info.name;
4313+
controller_peer_info.command_interfaces =
4314+
std::unordered_set<std::string>(cmd_itfs.begin(), cmd_itfs.end());
4315+
controller_peer_info.state_interfaces =
4316+
std::unordered_set<std::string>(state_itfs.begin(), state_itfs.end());
4317+
controller_peer_info.controller = controller.c;
4318+
if (controller.c->is_chainable())
4319+
{
4320+
const auto ref_interface =
4321+
resource_manager_->get_controller_reference_interface_names(controller.info.name);
4322+
controller_peer_info.reference_interfaces =
4323+
std::unordered_set<std::string>(ref_interface.begin(), ref_interface.end());
4324+
}
4325+
return controller_peer_info;
4326+
};
43064327
for (const auto & controller : controllers)
43074328
{
43084329
if (is_controller_unconfigured(*controller.c))
@@ -4315,11 +4336,15 @@ void ControllerManager::build_controllers_topology_info(
43154336
const auto cmd_itfs = controller.c->command_interface_configuration().names;
43164337
const auto state_itfs = controller.c->state_interface_configuration().names;
43174338

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

0 commit comments

Comments
 (0)