case TARGET_ERROR: FSM_SIGNAL(MAIN, EV_MOTION_DONE, NULL); printf("Target error\n"); break;
}
break;
+ case EV_OBSTACLE_BEHIND:
+ FSM_TRANSITION(wait_and_try_again);
+ break;
case EV_TRAJECTORY_LOST:
FSM_TRANSITION(lost);
break;
FSM_SIGNAL(MAIN, EV_MOTION_DONE, NULL);
FSM_TRANSITION(wait_for_command);
break;
+ case EV_OBSTACLE_BEHIND:
+ FSM_TRANSITION(wait_and_try_again);
+ break;
case EV_TRAJECTORY_LOST:
case EV_TIMER:
FSM_TRANSITION(lost);
break;
case EV_EXIT:
break;
+ case EV_OBSTACLE_BEHIND:
case EV_TRAJECTORY_DONE:
case EV_NEW_TARGET:
case EV_TRAJECTORY_DONE_AND_CLOSE:
case EV_MOVE_STOP:
FSM_TRANSITION(wait_for_command);
break;
+ case EV_OBSTACLE_BEHIND:
+ break;
case EV_NEW_TARGET:
case EV_TRAJECTORY_LOST:
case EV_RETURN:
"EV_TRAJECTORY_DONE" : "Reference position is at the end of the previously submitted trajectory",
"EV_TRAJECTORY_DONE_AND_CLOSE" : "::EV_TRAJECTORY_DONE + distance of actual position to the target is less than XXX",
"EV_OBSTACLE" : "An obstacle is detected on actual trajectory - we must avoid it.",
+ "EV_OBSTACLE_BEHIND" : "",
#"EV_FOUND_AFTER_RESET" : "MCL estimated position after reset",
#"EV_RECALCULATION_FAILED" : "Trajectory recalculation caused by a detected obstcale has failed (error or target not reachable)",
},
static bool previous_switch_status;
switch (info->status) {
case NEW_DATA: {
- if (robot.orte.puck_inside.status == 1 && previous_switch_status != 1)
- FSM_SIGNAL(ACT, EV_PUCK_INSIDE, NULL);
+ if (robot.orte.puck_inside.status == 1 && previous_switch_status != 1) {
+ //FSM_SIGNAL(ACT, EV_PUCK_INSIDE, NULL);
+ FSM_SIGNAL(MOTION, EV_OBSTACLE_BEHIND, NULL);
+ }
previous_switch_status = robot.orte.puck_inside.status;
robot.hw_status[STATUS_CHE]=HW_STATUS_OK;
}