@@ -1257,17 +1257,17 @@ void ControllerManager::deactivate_controllers()
12571257 std::vector<ControllerSpec> & rt_controller_list =
12581258 rt_controllers_wrapper_.update_and_get_used_by_rt_list ();
12591259 // stop controllers
1260- for (const auto & request : deactivate_request_)
1260+ for (const auto & controller_name : deactivate_request_)
12611261 {
12621262 auto found_it = std::find_if (
12631263 rt_controller_list.begin (), rt_controller_list.end (),
1264- std::bind (controller_name_compare, std::placeholders::_1, request ));
1264+ std::bind (controller_name_compare, std::placeholders::_1, controller_name ));
12651265 if (found_it == rt_controller_list.end ())
12661266 {
12671267 RCLCPP_ERROR (
12681268 get_logger (),
12691269 " Got request to stop controller '%s' but it is not in the realtime controller list" ,
1270- request .c_str ());
1270+ controller_name .c_str ());
12711271 continue ;
12721272 }
12731273 auto controller = found_it->c ;
@@ -1279,7 +1279,7 @@ void ControllerManager::deactivate_controllers()
12791279 {
12801280 RCLCPP_ERROR (
12811281 get_logger (), " After deactivating, controller '%s' is in state '%s', expected Inactive" ,
1282- request .c_str (), new_state.label ().c_str ());
1282+ controller_name .c_str (), new_state.label ().c_str ());
12831283 }
12841284 }
12851285 }
@@ -1291,18 +1291,18 @@ void ControllerManager::switch_chained_mode(
12911291 std::vector<ControllerSpec> & rt_controller_list =
12921292 rt_controllers_wrapper_.update_and_get_used_by_rt_list ();
12931293
1294- for (const auto & request : chained_mode_switch_list)
1294+ for (const auto & controller_name : chained_mode_switch_list)
12951295 {
12961296 auto found_it = std::find_if (
12971297 rt_controller_list.begin (), rt_controller_list.end (),
1298- std::bind (controller_name_compare, std::placeholders::_1, request ));
1298+ std::bind (controller_name_compare, std::placeholders::_1, controller_name ));
12991299 if (found_it == rt_controller_list.end ())
13001300 {
13011301 RCLCPP_FATAL (
13021302 get_logger (),
13031303 " Got request to turn %s chained mode for controller '%s', but controller is not in the "
13041304 " realtime controller list. (This should never happen!)" ,
1305- (to_chained_mode ? " ON" : " OFF" ), request .c_str ());
1305+ (to_chained_mode ? " ON" : " OFF" ), controller_name .c_str ());
13061306 continue ;
13071307 }
13081308 auto controller = found_it->c ;
@@ -1312,11 +1312,11 @@ void ControllerManager::switch_chained_mode(
13121312 {
13131313 if (to_chained_mode)
13141314 {
1315- resource_manager_->make_controller_reference_interfaces_available (request );
1315+ resource_manager_->make_controller_reference_interfaces_available (controller_name );
13161316 }
13171317 else
13181318 {
1319- resource_manager_->make_controller_reference_interfaces_unavailable (request );
1319+ resource_manager_->make_controller_reference_interfaces_unavailable (controller_name );
13201320 }
13211321 }
13221322 else
@@ -1327,7 +1327,7 @@ void ControllerManager::switch_chained_mode(
13271327 " it! The control will probably not work as expected. Try to restart all controllers. "
13281328 " If "
13291329 " the error persist check controllers' individual configuration." ,
1330- (to_chained_mode ? " ON" : " OFF" ), request .c_str ());
1330+ (to_chained_mode ? " ON" : " OFF" ), controller_name .c_str ());
13311331 }
13321332 }
13331333 else
@@ -1336,7 +1336,7 @@ void ControllerManager::switch_chained_mode(
13361336 get_logger (),
13371337 " Got request to turn %s chained mode for controller '%s', but this can not happen if "
13381338 " controller is in '%s' state. (This should never happen!)" ,
1339- (to_chained_mode ? " ON" : " OFF" ), request .c_str (),
1339+ (to_chained_mode ? " ON" : " OFF" ), controller_name .c_str (),
13401340 hardware_interface::lifecycle_state_names::ACTIVE);
13411341 }
13421342 }
@@ -1346,17 +1346,17 @@ void ControllerManager::activate_controllers()
13461346{
13471347 std::vector<ControllerSpec> & rt_controller_list =
13481348 rt_controllers_wrapper_.update_and_get_used_by_rt_list ();
1349- for (const auto & request : activate_request_)
1349+ for (const auto & controller_name : activate_request_)
13501350 {
13511351 auto found_it = std::find_if (
13521352 rt_controller_list.begin (), rt_controller_list.end (),
1353- std::bind (controller_name_compare, std::placeholders::_1, request ));
1353+ std::bind (controller_name_compare, std::placeholders::_1, controller_name ));
13541354 if (found_it == rt_controller_list.end ())
13551355 {
13561356 RCLCPP_ERROR (
13571357 get_logger (),
13581358 " Got request to activate controller '%s' but it is not in the realtime controller list" ,
1359- request .c_str ());
1359+ controller_name .c_str ());
13601360 continue ;
13611361 }
13621362 auto controller = found_it->c ;
@@ -1385,7 +1385,7 @@ void ControllerManager::activate_controllers()
13851385 RCLCPP_ERROR (
13861386 get_logger (),
13871387 " Resource conflict for controller '%s'. Command interface '%s' is already claimed." ,
1388- request .c_str (), command_interface.c_str ());
1388+ controller_name .c_str (), command_interface.c_str ());
13891389 assignment_successful = false ;
13901390 break ;
13911391 }
@@ -1395,7 +1395,8 @@ void ControllerManager::activate_controllers()
13951395 }
13961396 catch (const std::exception & e)
13971397 {
1398- RCLCPP_ERROR (get_logger (), " Can't activate controller '%s': %s" , request.c_str (), e.what ());
1398+ RCLCPP_ERROR (
1399+ get_logger (), " Can't activate controller '%s': %s" , controller_name.c_str (), e.what ());
13991400 assignment_successful = false ;
14001401 break ;
14011402 }
@@ -1429,7 +1430,8 @@ void ControllerManager::activate_controllers()
14291430 }
14301431 catch (const std::exception & e)
14311432 {
1432- RCLCPP_ERROR (get_logger (), " Can't activate controller '%s': %s" , request.c_str (), e.what ());
1433+ RCLCPP_ERROR (
1434+ get_logger (), " Can't activate controller '%s': %s" , controller_name.c_str (), e.what ());
14331435 assignment_successful = false ;
14341436 break ;
14351437 }
@@ -1451,6 +1453,12 @@ void ControllerManager::activate_controllers()
14511453 hardware_interface::lifecycle_state_names::ACTIVE,
14521454 lifecycle_msgs::msg::State::PRIMARY_STATE_ACTIVE);
14531455 }
1456+
1457+ // if it is a chainable controller, make the reference interfaces available on activation
1458+ if (controller->is_chainable ())
1459+ {
1460+ resource_manager_->make_controller_reference_interfaces_available (controller_name);
1461+ }
14541462 }
14551463 // All controllers activated, switching done
14561464 switch_params_.do_switch = false ;
0 commit comments