@@ -76,7 +76,7 @@ void RobotControlServiceImpl::DeclareROSParameter(
7676 p.value_to_string ().c_str ());
7777}
7878
79- bool RobotControlServiceImpl::switchControllers (
79+ bool RobotControlServiceImpl::SwitchControllers (
8080 const std::vector<std::string>& activate,
8181 const std::vector<std::string>& deactivate) {
8282 auto req = std::make_shared<controller_manager_msgs::srv::SwitchController::Request>();
@@ -85,15 +85,16 @@ bool RobotControlServiceImpl::switchControllers(
8585 req->deactivate_controllers = deactivate;
8686 req->strictness = controller_manager_msgs::srv::SwitchController::Request::STRICT;
8787
88- if (!switch_controller_client_->wait_for_service (2s )) {
88+ if (!switch_controller_client_->wait_for_service (action_timeout_ )) {
8989 RCLCPP_WARN (get_logger (), " Switch controller service not available" );
9090 return false ;
9191 }
9292
9393 auto future = switch_controller_client_->async_send_request (req);
94+ auto status = future.wait_for (action_timeout_);
9495
95- if (rclcpp::spin_until_future_complete (node_, future) != rclcpp::FutureReturnCode::SUCCESS ) {
96- RCLCPP_WARN (get_logger (), " Switch controller call failed" );
96+ if (status != std::future_status::ready || !future. valid () ) {
97+ RCLCPP_WARN (get_logger (), " Switch controller call failed or timed out. " );
9798 return false ;
9899 }
99100
@@ -107,11 +108,13 @@ grpc::Status RobotControlServiceImpl::ServoEnable(
107108{
108109 response->set_success (false );
109110
110- if (!switchControllers (
111+ if (!SwitchControllers (
111112 {" forward_position_controller" },
112113 {" scaled_joint_trajectory_controller" })) {
113- response->set_msg (" Failed to switch controllers" );
114- return grpc::Status (grpc::StatusCode::INTERNAL, " Controller switch failed" );
114+ std::string err = " Controller switch failed." ;
115+ RCLCPP_WARN (get_logger (), " [RobotControlService][ServoEnable] %s" , err.c_str ());
116+ response->set_msg (err);
117+ return grpc::Status (grpc::StatusCode::INTERNAL, err);
115118 }
116119
117120 {
@@ -131,11 +134,14 @@ grpc::Status RobotControlServiceImpl::ServoDisable(
131134{
132135 response->set_success (false );
133136
134- if (!switchControllers (
137+ if (!SwitchControllers (
135138 {" scaled_joint_trajectory_controller" },
136139 {" forward_position_controller" })) {
137- response->set_msg (" Failed to switch controllers" );
138- return grpc::Status (grpc::StatusCode::INTERNAL, " Controller switch failed" );
140+
141+ std::string err = " Controller switch failed." ;
142+ RCLCPP_WARN (get_logger (), " [RobotControlService][ServoDisable] %s" , err.c_str ());
143+ response->set_msg (err);
144+ return grpc::Status (grpc::StatusCode::INTERNAL, err);
139145 }
140146
141147 {
@@ -146,6 +152,7 @@ grpc::Status RobotControlServiceImpl::ServoDisable(
146152
147153 response->set_success (true );
148154 response->set_msg (" " );
155+ RCLCPP_WARN (get_logger (), " [RobotControlService][ServoDisable] RETURN" );
149156 return grpc::Status::OK;
150157}
151158
0 commit comments