@@ -277,21 +277,26 @@ void IOGripperController::handle_gripper_state_transition(
277277 break ;
278278
279279 case IOGripperState::HALTED:
280- // do nothing
280+ gripper_state_buffer_. writeFromNonRT (IOGripperState::IDLE);
281281 RCLCPP_ERROR (
282282 get_node ()->get_logger (), " %s - HALTED: Gripper is in HALTED state" ,
283283 transition_name.c_str ());
284+ transition_time_updated_.store (false );
284285 break ;
285286
286287 case IOGripperState::SET_BEFORE_COMMAND:
287288
288- last_transition_time_ = current_time;
289+ if (!transition_time_updated_.load ())
290+ {
291+ last_transition_time_ = current_time;
292+ transition_time_updated_.store (true );
293+ }
289294 if (set_commands (ios.set_before_command_ios , transition_name + " - SET_BEFORE_COMMAND" ))
290295 {
291296 // TODO(destogl): check to use other Realtime sync object to have write from RT
292297 gripper_state_buffer_.writeFromNonRT (IOGripperState::CHECK_BEFORE_COMMAND);
293298 }
294- if ((current_time - last_transition_time_).seconds () > params_.timeout )
299+ else if ((current_time - last_transition_time_).seconds () > params_.timeout )
295300 {
296301 RCLCPP_ERROR (
297302 get_node ()->get_logger (),
@@ -314,7 +319,6 @@ void IOGripperController::handle_gripper_state_transition(
314319 transition_name.c_str (), params_.timeout );
315320 gripper_state_buffer_.writeFromNonRT (IOGripperState::HALTED);
316321 }
317- last_transition_time_ = current_time;
318322 break ;
319323 case IOGripperState::SET_COMMAND:
320324 RCLCPP_INFO (
@@ -326,11 +330,7 @@ void IOGripperController::handle_gripper_state_transition(
326330 // TODO(destogl): check to use other Realtime sync object to have write from RT
327331 gripper_state_buffer_.writeFromNonRT (IOGripperState::CHECK_COMMAND);
328332 }
329- else
330- {
331- RCLCPP_ERROR (get_node ()->get_logger (), " failed" );
332- }
333- if ((current_time - last_transition_time_).seconds () > params_.timeout )
333+ else if ((current_time - last_transition_time_).seconds () > params_.timeout )
334334 {
335335 RCLCPP_ERROR (
336336 get_node ()->get_logger (),
@@ -341,7 +341,7 @@ void IOGripperController::handle_gripper_state_transition(
341341 break ;
342342 case IOGripperState::CHECK_COMMAND:
343343 // check the state of the gripper
344- check_state_ios = true ;
344+ check_gripper_state_ios_. store ( true ) ;
345345 if (ios.has_multiple_end_states )
346346 {
347347 for (const auto & possible_end_state : ios.possible_states )
@@ -350,25 +350,26 @@ void IOGripperController::handle_gripper_state_transition(
350350 ios.multiple_states_ios .at (possible_end_state),
351351 transition_name + " - CHECK_COMMAND" ))
352352 {
353- check_state_ios = true ;
353+ check_gripper_state_ios_. store ( true ) ;
354354 after_joint_states_ =
355355 params_.close .state .possible_closed_states_map .at (possible_end_state).joint_states ;
356356 // TODO(Sachin): store possible_end_state in a variable to publish on status topic
357357 break ;
358358 }
359359 else
360360 {
361- check_state_ios = false ;
361+ check_gripper_state_ios_. store ( false ) ;
362362 }
363363 }
364364 }
365365 else // only single end state
366366 {
367367 after_joint_states_ = params_.open .joint_states ;
368- check_state_ios = check_states (ios.state_ios , transition_name + " - CHECK_COMMAND" );
368+ check_gripper_state_ios_.store (
369+ check_states (ios.state_ios , transition_name + " - CHECK_COMMAND" ));
369370 }
370371
371- if (check_state_ios )
372+ if (check_gripper_state_ios_. load () )
372373 {
373374 gripper_state_buffer_.writeFromNonRT (IOGripperState::SET_AFTER_COMMAND);
374375 }
@@ -411,6 +412,7 @@ void IOGripperController::handle_gripper_state_transition(
411412 RCLCPP_INFO (
412413 get_node ()->get_logger (), " %s - CHECK_AFTER_COMMAND: Gripper reached target state" ,
413414 transition_name.c_str ());
415+ transition_time_updated_.store (false ); // resetting the flag
414416 }
415417 else if ((current_time - last_transition_time_).seconds () > params_.timeout )
416418 {
0 commit comments